More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 457 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Emergency Withdr... | 15703833 | 781 days ago | IN | 0 ETH | 0.00044797 | ||||
Deposit | 15550080 | 803 days ago | IN | 0 ETH | 0.00038127 | ||||
Emergency Withdr... | 15310541 | 841 days ago | IN | 0 ETH | 0.00105042 | ||||
Emergency Withdr... | 15302827 | 842 days ago | IN | 0 ETH | 0.00187225 | ||||
Emergency Withdr... | 15302819 | 842 days ago | IN | 0 ETH | 0.00285374 | ||||
Emergency Withdr... | 15302814 | 842 days ago | IN | 0 ETH | 0.00236563 | ||||
Deposit | 15272815 | 847 days ago | IN | 0 ETH | 0.00098454 | ||||
Emergency Withdr... | 15239370 | 852 days ago | IN | 0 ETH | 0.00064194 | ||||
Emergency Withdr... | 15211438 | 856 days ago | IN | 0 ETH | 0.0002985 | ||||
Emergency Withdr... | 15197288 | 858 days ago | IN | 0 ETH | 0.00029663 | ||||
Emergency Withdr... | 15162537 | 864 days ago | IN | 0 ETH | 0.00095466 | ||||
Emergency Withdr... | 15108566 | 872 days ago | IN | 0 ETH | 0.00042694 | ||||
Emergency Withdr... | 15108565 | 872 days ago | IN | 0 ETH | 0.00039304 | ||||
Emergency Withdr... | 15095583 | 874 days ago | IN | 0 ETH | 0.00156377 | ||||
Emergency Withdr... | 15095564 | 874 days ago | IN | 0 ETH | 0.00087434 | ||||
Emergency Withdr... | 15095554 | 874 days ago | IN | 0 ETH | 0.00094506 | ||||
Emergency Withdr... | 15086824 | 876 days ago | IN | 0 ETH | 0.00137602 | ||||
Emergency Withdr... | 15085764 | 876 days ago | IN | 0 ETH | 0.00445238 | ||||
Emergency Withdr... | 15072697 | 878 days ago | IN | 0 ETH | 0.00059428 | ||||
Emergency Withdr... | 15059675 | 880 days ago | IN | 0 ETH | 0.00108715 | ||||
Emergency Withdr... | 15054519 | 880 days ago | IN | 0 ETH | 0.00090084 | ||||
Emergency Withdr... | 15048688 | 881 days ago | IN | 0 ETH | 0.00156176 | ||||
Emergency Withdr... | 15043460 | 882 days ago | IN | 0 ETH | 0.00167566 | ||||
Emergency Withdr... | 15042085 | 883 days ago | IN | 0 ETH | 0.00179047 | ||||
Emergency Withdr... | 15039612 | 883 days ago | IN | 0 ETH | 0.00173247 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
CHIZchefV2
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-30 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(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; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ 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; } } 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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); 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); } } } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } // MasterChef is the master of Chiz. He can make Chiz and he is a fair guy. // Note that it's ownable and the owner wields tremendous power. The ownership // will be transferred to a governance smart contract once Chiz is sufficiently // distributed and the community can show to govern itself. // // Have fun reading it. Hopefully it's bug-free. God bless. // European boys play fair, don't worry. contract CHIZchefV2 is Ownable, ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; // Info of each user. struct UserInfo { uint256 amount; // How many LP tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. // // We do some fancy math here. Basically, any point in time, the amount of CHIZ // entitled to a user but is pending to be distributed is: // // pending reward = (user.amount * pool.accChizPerShare) - user.rewardDebt // // Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens: // 1. The pool's `accChizPerShare` (and `lastRewardBlock`) gets updated. // 2. User receives the pending reward sent to his/her address. // 3. User's `amount` gets updated. // 4. User's `rewardDebt` gets updated. } // Info of each pool. struct PoolInfo { IERC20 lpToken; // Address of LP token contract. uint256 allocPoint; // How many allocation points assigned to this pool. CHIZes to distribute per block. uint256 lastRewardBlock; // Last block number that CHIZes distribution occurs. uint256 accChizPerShare; // Accumulated CHIZes per share, times 1e36. See below. uint16 depositFeeBP; // Deposit fee in basis points uint256 lpSupply; bool isPoolPrivileged; } // The CHIZ TOKEN! IERC20 public chizToken; IERC721 public nftPrivilegeContractOne; IERC721 public nftPrivilegeContractTwo; address public devAddress; address public feeAddress; uint256 constant max_chiz_reward_amount = 30000000 ether; // CHIZ tokens created per block. uint256 public chizPerBlock = 20 ether; // CHIZ tokens distributed so far uint256 public chizDistributedAmount = 0; // Info of each pool. PoolInfo[] public poolInfo; // Info of each user that stakes LP tokens. mapping(uint256 => mapping(address => UserInfo)) public userInfo; // Total allocation points. Must be the sum of all allocation points in all pools. uint256 public totalAllocPoint = 0; // The block number when CHIZ mining starts. uint256 public startBlock; // The block number when farming ends. uint256 public endBlock; uint256 public constant MAXIMUM_EMISSION_RATE = 300 ether; event Deposit(address indexed user, uint256 indexed pid, uint256 amount); event Withdraw(address indexed user, uint256 indexed pid, uint256 amount); event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount); event SetFeeAddress(address indexed user, address indexed newAddress); event SetDevAddress(address indexed user, address indexed newAddress); event UpdateEmissionRate(address indexed user, uint256 chizPerBlock); event PoolAdd(address indexed user, IERC20 lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint16 depositFeeBP); event PoolSet(address indexed user, IERC20 lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint16 depositFeeBP); event UpdateStartBlock(address indexed user, uint256 startBlock); constructor( IERC721 _nftPrivilegeContractOne, IERC721 _nftPrivilegeContractTwo, IERC20 _chizToken, uint256 _startBlock, address _devAddress, address _feeAddress ) public { nftPrivilegeContractOne = _nftPrivilegeContractOne; nftPrivilegeContractTwo = _nftPrivilegeContractTwo; chizToken = _chizToken; startBlock = _startBlock; devAddress = _devAddress; feeAddress = _feeAddress; endBlock = _startBlock; } function poolLength() external view returns (uint256) { return poolInfo.length; } mapping(IERC20 => bool) public poolExistence; modifier nonDuplicated(IERC20 _lpToken) { require(poolExistence[_lpToken] == false, "nonDuplicated: duplicated"); _; } // Add a new lp to the pool. Can only be called by the owner. function add(uint256 _allocPoint, IERC20 _lpToken, uint16 _depositFeeBP, bool _isPoolPrivileged) external onlyOwner { _lpToken.balanceOf(address(this)); require(_depositFeeBP <= 500, "add: invalid deposit fee basis points"); uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock; totalAllocPoint = totalAllocPoint.add(_allocPoint); poolExistence[_lpToken] = true; poolInfo.push(PoolInfo({ lpToken: _lpToken, allocPoint: _allocPoint, lastRewardBlock: lastRewardBlock, accChizPerShare: 0, depositFeeBP: _depositFeeBP, lpSupply: 0, isPoolPrivileged: _isPoolPrivileged })); emit PoolAdd(msg.sender, _lpToken, _allocPoint,lastRewardBlock,_depositFeeBP); } // Update the given pool's CHIZ allocation point and deposit fee. Can only be called by the owner. function set(uint256 _pid, uint256 _allocPoint, uint16 _depositFeeBP) external onlyOwner { require(_depositFeeBP <= 500, "set: invalid deposit fee basis points"); totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint); poolInfo[_pid].allocPoint = _allocPoint; poolInfo[_pid].depositFeeBP = _depositFeeBP; emit PoolSet(msg.sender, poolInfo[_pid].lpToken, _allocPoint,poolInfo[_pid].lastRewardBlock,_depositFeeBP); } // Return reward multiplier over the given _from to _to block. function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) { if (chizDistributedAmount >= max_chiz_reward_amount) return 0; return _to.sub(_from); } // View function to see pending CHIZes on frontend. function pendingChiz(uint256 _pid, address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accChizPerShare = pool.accChizPerShare; if (block.number > pool.lastRewardBlock && pool.lpSupply != 0 && totalAllocPoint > 0) { uint256 lastBlock = block.number < endBlock ? block.number : endBlock; uint256 multiplier = getMultiplier(pool.lastRewardBlock, lastBlock); uint256 chizReward = multiplier.mul(chizPerBlock).mul(pool.allocPoint).div(totalAllocPoint); accChizPerShare = accChizPerShare.add(chizReward.mul(1e36).div(pool.lpSupply)); } return user.amount.mul(accChizPerShare).div(1e36).sub(user.rewardDebt); } // Update reward variables for all pools. Be careful of gas spending! function massUpdatePools() public { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { updatePool(pid); } } // Update reward variables of the given pool to be up-to-date. function updatePool(uint256 _pid) public { PoolInfo storage pool = poolInfo[_pid]; uint256 lastBlock = block.number < endBlock ? block.number : endBlock; if (lastBlock <= pool.lastRewardBlock) { return; } if (pool.lpSupply == 0 || pool.allocPoint == 0) { pool.lastRewardBlock = lastBlock; return; } uint256 multiplier = getMultiplier(pool.lastRewardBlock, lastBlock); uint256 chizReward = multiplier.mul(chizPerBlock).mul(pool.allocPoint).div(totalAllocPoint); if(chizDistributedAmount.add(chizReward.mul(102).div(100)) <= max_chiz_reward_amount){ chizToken.safeTransfer(devAddress, chizReward.div(50)); } pool.accChizPerShare = pool.accChizPerShare.add(chizReward.mul(1e36).div(pool.lpSupply)); pool.lastRewardBlock = block.number; } // Deposit LP tokens to MasterChef for CHIZ allocation. function deposit(uint256 _pid, uint256 _amount) nonReentrant external { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; if(pool.isPoolPrivileged){ // Privileged Pool NFT Check require(nftPrivilegeContractOne.balanceOf(msg.sender) > 0 && nftPrivilegeContractTwo.balanceOf(msg.sender) > 0, "NFTs are required for deposit"); } updatePool(_pid); if (user.amount > 0) { uint256 pending = user.amount.mul(pool.accChizPerShare).div(1e36).sub(user.rewardDebt); if (pending > 0) { safeChizTransfer(msg.sender, pending); } } if (_amount > 0) { uint256 balanceBefore = pool.lpToken.balanceOf(address(this)); pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount); _amount = pool.lpToken.balanceOf(address(this)).sub(balanceBefore); require(_amount > 0, "we dont accept deposits of 0"); if (pool.depositFeeBP > 0) { uint256 depositFee = _amount.mul(pool.depositFeeBP).div(10000); pool.lpToken.safeTransfer(feeAddress, depositFee); user.amount = user.amount.add(_amount).sub(depositFee); pool.lpSupply = pool.lpSupply.add(_amount).sub(depositFee); } else { user.amount = user.amount.add(_amount); pool.lpSupply = pool.lpSupply.add(_amount); } } user.rewardDebt = user.amount.mul(pool.accChizPerShare).div(1e36); emit Deposit(msg.sender, _pid, _amount); } // Withdraw LP tokens from MasterChef. function withdraw(uint256 _pid, uint256 _amount) nonReentrant external { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; require(user.amount >= _amount, "withdraw: not good"); updatePool(_pid); uint256 pending = user.amount.mul(pool.accChizPerShare).div(1e36).sub(user.rewardDebt); if (pending > 0) { safeChizTransfer(msg.sender, pending); } if (_amount > 0) { user.amount = user.amount.sub(_amount); pool.lpToken.safeTransfer(address(msg.sender), _amount); pool.lpSupply = pool.lpSupply.sub(_amount); } user.rewardDebt = user.amount.mul(pool.accChizPerShare).div(1e36); emit Withdraw(msg.sender, _pid, _amount); } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw(uint256 _pid) nonReentrant external{ PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; uint256 amount = user.amount; pool.lpSupply = pool.lpSupply.sub(user.amount); user.amount = 0; user.rewardDebt = 0; pool.lpToken.safeTransfer(address(msg.sender), amount); emit EmergencyWithdraw(msg.sender, _pid, amount); } // Safe chiz transfer function, just in case if rounding error causes pool to not have enough CHIZ. function safeChizTransfer(address _to, uint256 _amount) internal { uint256 chizBal = chizToken.balanceOf(address(this)); bool transferSuccess = false; if (_amount > chizBal) { transferSuccess = chizToken.transfer(_to, chizBal); chizDistributedAmount = chizDistributedAmount.add(chizBal); } else { transferSuccess = chizToken.transfer(_to, _amount); chizDistributedAmount = chizDistributedAmount.add(_amount); } require(transferSuccess, "safeChizTransfer: Transfer failed"); } // Update dev address by the previous dev. function setDevAddress(address _devAddress) external onlyOwner { require(_devAddress != address(0), "!nonzero"); devAddress = _devAddress; emit SetDevAddress(msg.sender, _devAddress); } function setFeeAddress(address _feeAddress) external onlyOwner { require(_feeAddress != address(0), "!nonzero"); feeAddress = _feeAddress; emit SetFeeAddress(msg.sender, _feeAddress); } function updateEmissionRate(uint256 _chizPerBlock) external onlyOwner { require(_chizPerBlock <= MAXIMUM_EMISSION_RATE, "Too High"); massUpdatePools(); chizPerBlock = _chizPerBlock; emit UpdateEmissionRate(msg.sender, _chizPerBlock); } // Only update before start of farm function updateStartBlock(uint256 _startBlock) onlyOwner external{ require(startBlock > block.number, "Farm already started"); uint256 length = poolInfo.length; for(uint256 pid = 0; pid < length; ++pid){ PoolInfo storage pool = poolInfo[pid]; pool.lastRewardBlock = _startBlock; } startBlock = _startBlock; emit UpdateStartBlock(msg.sender, _startBlock); } // Fund the farm, increase the end block function fund(uint256 _amount) public onlyOwner { require(block.number < endBlock, "fund: too late, the farm is closed"); chizToken.transferFrom(address(msg.sender), address(this), _amount); endBlock += _amount.div(chizPerBlock); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC721","name":"_nftPrivilegeContractOne","type":"address"},{"internalType":"contract IERC721","name":"_nftPrivilegeContractTwo","type":"address"},{"internalType":"contract IERC20","name":"_chizToken","type":"address"},{"internalType":"uint256","name":"_startBlock","type":"uint256"},{"internalType":"address","name":"_devAddress","type":"address"},{"internalType":"address","name":"_feeAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"contract IERC20","name":"lpToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"indexed":false,"internalType":"uint16","name":"depositFeeBP","type":"uint16"}],"name":"PoolAdd","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"contract IERC20","name":"lpToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"indexed":false,"internalType":"uint16","name":"depositFeeBP","type":"uint16"}],"name":"PoolSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetDevAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetFeeAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"chizPerBlock","type":"uint256"}],"name":"UpdateEmissionRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"startBlock","type":"uint256"}],"name":"UpdateStartBlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"MAXIMUM_EMISSION_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"bool","name":"_isPoolPrivileged","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"chizDistributedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chizPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chizToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"fund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nftPrivilegeContractOne","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPrivilegeContractTwo","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingChiz","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"name":"poolExistence","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accChizPerShare","type":"uint256"},{"internalType":"uint16","name":"depositFeeBP","type":"uint16"},{"internalType":"uint256","name":"lpSupply","type":"uint256"},{"internalType":"bool","name":"isPoolPrivileged","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeAddress","type":"address"}],"name":"setFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","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":[{"internalType":"uint256","name":"_chizPerBlock","type":"uint256"}],"name":"updateEmissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"name":"updateStartBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526801158e460913d0000060075560006008556000600b553480156200002857600080fd5b5060405162002598380380620025988339810160408190526200004b91620000fa565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060018055600380546001600160a01b03199081166001600160a01b03988916179091556004805482169688169690961790955560028054861694871694909417909355600c8290556005805485169186169190911790556006805490931691909316179055600d556200019b565b60008060008060008060c087890312156200011457600080fd5b8651620001218162000182565b6020880151909650620001348162000182565b6040880151909550620001478162000182565b606088015160808901519195509350620001618162000182565b60a0880151909250620001748162000182565b809150509295509295509295565b6001600160a01b03811681146200019857600080fd5b50565b6123ed80620001ab6000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c8063715018a61161010f578063cbd258b5116100a2578063e2bbb15811610071578063e2bbb1581461047d578063f2fde38b14610490578063fac2b9ba146104a3578063fb0a31db146104b657600080fd5b8063cbd258b514610411578063d0d41fe114610444578063d4efe8e414610457578063e217bdd31461046a57600080fd5b80638dbb1e3a116100de5780638dbb1e3a1461039157806393f1a40b146103a4578063b836c00b146103eb578063ca1d209d146103fe57600080fd5b8063715018a61461035257806384e82a331461035a5780638705fcd41461036d5780638da5cb5b1461038057600080fd5b80633ad10ef61161018757806351eb05a61161015657806351eb05a6146103145780635312ea8e14610327578063630b5ba11461033a5780636eed6a2c1461034257600080fd5b80633ad10ef6146102ba57806341275358146102e5578063441a3e70146102f857806348cd4cb11461030b57600080fd5b806317caf6f1116101c357806317caf6f1146102825780631c1ef98c1461028b57806324bcb38c1461029e57806338a67722146102b157600080fd5b8063081e3eda146101f5578063083c63231461020c5780630ba84cd2146102155780631526fe271461022a575b600080fd5b6009545b6040519081526020015b60405180910390f35b6101f9600d5481565b6102286102233660046120e9565b6104bf565b005b61023d6102383660046120e9565b61057b565b604080516001600160a01b039098168852602088019690965294860193909352606085019190915261ffff16608084015260a0830152151560c082015260e001610203565b6101f9600b5481565b6101f961029936600461211b565b6105db565b6102286102ac3660046121be565b61072b565b6101f960085481565b6005546102cd906001600160a01b031681565b6040516001600160a01b039091168152602001610203565b6006546102cd906001600160a01b031681565b61022861030636600461219c565b61092b565b6101f9600c5481565b6102286103223660046120e9565b610ad5565b6102286103353660046120e9565b610c1b565b610228610cfd565b6101f9681043561a882930000081565b610228610d28565b61022861036836600461214b565b610d9c565b61022861037b3660046120af565b6110ee565b6000546001600160a01b03166102cd565b6101f961039f36600461219c565b6111a5565b6103d66103b236600461211b565b600a6020908152600092835260408084209091529082529020805460019091015482565b60408051928352602083019190915201610203565b6004546102cd906001600160a01b031681565b61022861040c3660046120e9565b6111d4565b61043461041f3660046120af565b600e6020526000908152604090205460ff1681565b6040519015158152602001610203565b6102286104523660046120af565b61130c565b6003546102cd906001600160a01b031681565b6002546102cd906001600160a01b031681565b61022861048b36600461219c565b6113c3565b61022861049e3660046120af565b611857565b6102286104b13660046120e9565b611941565b6101f960075481565b6000546001600160a01b031633146104f25760405162461bcd60e51b81526004016104e990612242565b60405180910390fd5b681043561a88293000008111156105365760405162461bcd60e51b81526020600482015260086024820152670a8dede4090d2ced60c31b60448201526064016104e9565b61053e610cfd565b600781905560405181815233907fe2492e003bbe8afa53088b406f0c1cb5d9e280370fc72a74cf116ffd343c40539060200160405180910390a250565b6009818154811061058b57600080fd5b600091825260209091206007909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b03909516965092949193909261ffff16919060ff1687565b600080600984815481106105f1576105f161237b565b60009182526020808320878452600a825260408085206001600160a01b038916865290925292206003600790920290920190810154600282015491935090431180156106405750600583015415155b801561064e57506000600b54115b156106e8576000600d54431061066657600d54610668565b435b9050600061067a8560020154836111a5565b905060006106ad600b546106a788600101546106a160075487611a3c90919063ffffffff16565b90611a3c565b90611abb565b90506106e26106db87600501546106a76a0c097ce7bc90715b34b9f160241b85611a3c90919063ffffffff16565b8590611afd565b93505050505b61071f82600101546107196a0c097ce7bc90715b34b9f160241b6106a7858760000154611a3c90919063ffffffff16565b90611b5c565b93505050505b92915050565b6000546001600160a01b031633146107555760405162461bcd60e51b81526004016104e990612242565b6101f48161ffff1611156107b95760405162461bcd60e51b815260206004820152602560248201527f7365743a20696e76616c6964206465706f7369742066656520626173697320706044820152646f696e747360d81b60648201526084016104e9565b6107fc826107f6600986815481106107d3576107d361237b565b906000526020600020906007020160010154600b54611b5c90919063ffffffff16565b90611afd565b600b8190555081600984815481106108165761081661237b565b906000526020600020906007020160010181905550806009848154811061083f5761083f61237b565b906000526020600020906007020160040160006101000a81548161ffff021916908361ffff160217905550336001600160a01b03167f6b15d9ccfec36c187bb7ca9613a8be7a7367d3fc401d1efdea721d6c4567395e600985815481106108a8576108a861237b565b906000526020600020906007020160000160009054906101000a90046001600160a01b031684600987815481106108e1576108e161237b565b600091825260209182902060026007909202010154604080516001600160a01b0390951685529184019290925282015261ffff8416606082015260800160405180910390a2505050565b6002600154141561094e5760405162461bcd60e51b81526004016104e990612277565b600260018190555060006009838154811061096b5761096b61237b565b60009182526020808320868452600a8252604080852033865290925292208054600790920290920192508311156109d95760405162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b60448201526064016104e9565b6109e284610ad5565b6000610a1982600101546107196a0c097ce7bc90715b34b9f160241b6106a787600301548760000154611a3c90919063ffffffff16565b90508015610a2b57610a2b3382611b9e565b8315610a6a578154610a3d9085611b5c565b82558254610a55906001600160a01b03163386611dbb565b6005830154610a649085611b5c565b60058401555b60038301548254610a8e916a0c097ce7bc90715b34b9f160241b916106a791611a3c565b6001830155604051848152859033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689060200160405180910390a3505060018055505050565b600060098281548110610aea57610aea61237b565b906000526020600020906007020190506000600d544310610b0d57600d54610b0f565b435b905081600201548111610b2157505050565b60058201541580610b3457506001820154155b15610b425760029091015550565b6000610b528360020154836111a5565b90506000610b79600b546106a786600101546106a160075487611a3c90919063ffffffff16565b90506a18d0bf423c03d8de000000610ba3610b9a60646106a7856066611a3c565b60085490611afd565b11610bd657600554610bd6906001600160a01b0316610bc3836032611abb565b6002546001600160a01b03169190611dbb565b6005840154610c0690610bfb906106a7846a0c097ce7bc90715b34b9f160241b611a3c565b600386015490611afd565b60038501555050436002909201919091555050565b60026001541415610c3e5760405162461bcd60e51b81526004016104e990612277565b6002600181905550600060098281548110610c5b57610c5b61237b565b60009182526020808320858452600a82526040808520338652909252922080546007929092029092016005810154909350610c969082611b5c565b6005840155600080835560018301558254610cbb906001600160a01b03163383611dbb565b604051818152849033907fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae0595906020015b60405180910390a35050600180555050565b60095460005b81811015610d2457610d1481610ad5565b610d1d8161234a565b9050610d03565b5050565b6000546001600160a01b03163314610d525760405162461bcd60e51b81526004016104e990612242565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610dc65760405162461bcd60e51b81526004016104e990612242565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a082319060240160206040518083038186803b158015610e0557600080fd5b505afa158015610e19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3d9190612102565b506101f48261ffff161115610ea25760405162461bcd60e51b815260206004820152602560248201527f6164643a20696e76616c6964206465706f7369742066656520626173697320706044820152646f696e747360d81b60648201526084016104e9565b6000600c544311610eb557600c54610eb7565b435b600b54909150610ec79086611afd565b600b556001600160a01b038085166000818152600e60209081526040808320805460ff199081166001908117909255825160e0810184529586529285018b81528583018881526060870186815261ffff808d1660808a0190815260a08a018981528d151560c08c01908152600980549889018155909a52995160079096027f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af8101805497909c166001600160a01b031990971696909617909a5592517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b085015590517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b1840155517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b283015595517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b3820180549190971661ffff199091161790955592517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b485015590517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b5909301805493151593909116929092179091555133907fa2c51573880fb2ac3b22bb2584e1c8972b7baf3928d9abbf230c500de25e84fa906110df9087908990869089906001600160a01b039490941684526020840192909252604083015261ffff16606082015260800190565b60405180910390a25050505050565b6000546001600160a01b031633146111185760405162461bcd60e51b81526004016104e990612242565b6001600160a01b0381166111595760405162461bcd60e51b8152602060048201526008602482015267216e6f6e7a65726f60c01b60448201526064016104e9565b600680546001600160a01b0319166001600160a01b03831690811790915560405133907fd44190acf9d04bdb5d3a1aafff7e6dee8b40b93dfb8c5d3f0eea4b9f4539c3f790600090a350565b60006a18d0bf423c03d8de000000600854106111c357506000610725565b6111cd8284611b5c565b9392505050565b6000546001600160a01b031633146111fe5760405162461bcd60e51b81526004016104e990612242565b600d54431061125a5760405162461bcd60e51b815260206004820152602260248201527f66756e643a20746f6f206c6174652c20746865206661726d20697320636c6f73604482015261195960f21b60648201526084016104e9565b6002546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b1580156112ac57600080fd5b505af11580156112c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e491906120cc565b506007546112f3908290611abb565b600d600082825461130491906122ae565b909155505050565b6000546001600160a01b031633146113365760405162461bcd60e51b81526004016104e990612242565b6001600160a01b0381166113775760405162461bcd60e51b8152602060048201526008602482015267216e6f6e7a65726f60c01b60448201526064016104e9565b600580546001600160a01b0319166001600160a01b03831690811790915560405133907f618c54559e94f1499a808aad71ee8729f8e74e8c48e979616328ce493a1a52e790600090a350565b600260015414156113e65760405162461bcd60e51b81526004016104e990612277565b60026001819055506000600983815481106114035761140361237b565b60009182526020808320868452600a825260408085203386529092529220600660079092029092019081015490925060ff161561158d576003546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561147e57600080fd5b505afa158015611492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b69190612102565b1180156115415750600480546040516370a0823160e01b815233928101929092526000916001600160a01b03909116906370a082319060240160206040518083038186803b15801561150757600080fd5b505afa15801561151b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153f9190612102565b115b61158d5760405162461bcd60e51b815260206004820152601d60248201527f4e4654732061726520726571756972656420666f72206465706f73697400000060448201526064016104e9565b61159684610ad5565b8054156115e85760006115d482600101546107196a0c097ce7bc90715b34b9f160241b6106a787600301548760000154611a3c90919063ffffffff16565b905080156115e6576115e63382611b9e565b505b82156117fa5781546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561163157600080fd5b505afa158015611645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116699190612102565b8354909150611683906001600160a01b0316333087611e23565b82546040516370a0823160e01b81523060048201526117039183916001600160a01b03909116906370a082319060240160206040518083038186803b1580156116cb57600080fd5b505afa1580156116df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107199190612102565b9350600084116117555760405162461bcd60e51b815260206004820152601c60248201527f776520646f6e7420616363657074206465706f73697473206f6620300000000060448201526064016104e9565b600483015461ffff16156117d557600483015460009061178290612710906106a790889061ffff16611a3c565b60065485549192506117a1916001600160a01b03908116911683611dbb565b82546117b39082906107199088611afd565b835560058401546117ca9082906107199088611afd565b6005850155506117f8565b81546117e19085611afd565b825560058301546117f29085611afd565b60058401555b505b6003820154815461181e916a0c097ce7bc90715b34b9f160241b916106a791611a3c565b6001820155604051838152849033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1590602001610ceb565b6000546001600160a01b031633146118815760405162461bcd60e51b81526004016104e990612242565b6001600160a01b0381166118e65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104e9565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461196b5760405162461bcd60e51b81526004016104e990612242565b43600c54116119b35760405162461bcd60e51b815260206004820152601460248201527311985c9b48185b1c9958591e481cdd185c9d195960621b60448201526064016104e9565b60095460005b818110156119fd576000600982815481106119d6576119d661237b565b60009182526020909120600260079092020101849055506119f68161234a565b90506119b9565b50600c82905560405182815233907f3eb4ecd5fe1c1fb419227f1ed2015b7c67d3867f237683c50a2192b6ceabe0169060200160405180910390a25050565b600082611a4b57506000610725565b6000611a5783856122e8565b905082611a6485836122c6565b146111cd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016104e9565b60006111cd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e5b565b600080611b0a83856122ae565b9050838110156111cd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016104e9565b60006111cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e92565b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b158015611be257600080fd5b505afa158015611bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1a9190612102565b9050600081831115611cc45760025460405163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b158015611c7457600080fd5b505af1158015611c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cac91906120cc565b600854909150611cbc9083611afd565b600855611d5e565b60025460405163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529091169063a9059cbb90604401602060405180830381600087803b158015611d1257600080fd5b505af1158015611d26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4a91906120cc565b600854909150611d5a9084611afd565b6008555b80611db55760405162461bcd60e51b815260206004820152602160248201527f736166654368697a5472616e736665723a205472616e73666572206661696c656044820152601960fa1b60648201526084016104e9565b50505050565b6040516001600160a01b038316602482015260448101829052611e1e90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611ec3565b505050565b6040516001600160a01b0380851660248301528316604482015260648101829052611db59085906323b872dd60e01b90608401611de7565b60008183611e7c5760405162461bcd60e51b81526004016104e9919061220f565b506000611e8984866122c6565b95945050505050565b60008184841115611eb65760405162461bcd60e51b81526004016104e9919061220f565b506000611e898486612307565b6000611f18826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611f959092919063ffffffff16565b805190915015611e1e5780806020019051810190611f3691906120cc565b611e1e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104e9565b6060611fa48484600085611fac565b949350505050565b6060843b611ffc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104e9565b600080866001600160a01b0316858760405161201891906121f3565b60006040518083038185875af1925050503d8060008114612055576040519150601f19603f3d011682016040523d82523d6000602084013e61205a565b606091505b5091509150811561206e579150611fa49050565b80511561207e5780518082602001fd5b8360405162461bcd60e51b81526004016104e9919061220f565b803561ffff811681146120aa57600080fd5b919050565b6000602082840312156120c157600080fd5b81356111cd81612391565b6000602082840312156120de57600080fd5b81516111cd816123a9565b6000602082840312156120fb57600080fd5b5035919050565b60006020828403121561211457600080fd5b5051919050565b6000806040838503121561212e57600080fd5b82359150602083013561214081612391565b809150509250929050565b6000806000806080858703121561216157600080fd5b84359350602085013561217381612391565b925061218160408601612098565b91506060850135612191816123a9565b939692955090935050565b600080604083850312156121af57600080fd5b50508035926020909101359150565b6000806000606084860312156121d357600080fd5b83359250602084013591506121ea60408501612098565b90509250925092565b6000825161220581846020870161231e565b9190910192915050565b602081526000825180602084015261222e81604085016020870161231e565b601f01601f19169190910160400192915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600082198211156122c1576122c1612365565b500190565b6000826122e357634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561230257612302612365565b500290565b60008282101561231957612319612365565b500390565b60005b83811015612339578181015183820152602001612321565b83811115611db55750506000910152565b600060001982141561235e5761235e612365565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146123a657600080fd5b50565b80151581146123a657600080fdfea2646970667358221220f91a23f01a1f83ea1ec3bccd99372f1aaf2e58290afac550abe86cd80ed29f6d64736f6c63430008060033000000000000000000000000d21a23606d2746f086f6528cd6873bad3307b903000000000000000000000000b796485fe35c926328914cd4cd9447d095d41f7f0000000000000000000000005c761c1a21637362374204000e383204d347064c0000000000000000000000000000000000000000000000000000000000cb5a9700000000000000000000000025ec62e26f38e70fe6a77732cadb274761089b6000000000000000000000000025ec62e26f38e70fe6a77732cadb274761089b60
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101f05760003560e01c8063715018a61161010f578063cbd258b5116100a2578063e2bbb15811610071578063e2bbb1581461047d578063f2fde38b14610490578063fac2b9ba146104a3578063fb0a31db146104b657600080fd5b8063cbd258b514610411578063d0d41fe114610444578063d4efe8e414610457578063e217bdd31461046a57600080fd5b80638dbb1e3a116100de5780638dbb1e3a1461039157806393f1a40b146103a4578063b836c00b146103eb578063ca1d209d146103fe57600080fd5b8063715018a61461035257806384e82a331461035a5780638705fcd41461036d5780638da5cb5b1461038057600080fd5b80633ad10ef61161018757806351eb05a61161015657806351eb05a6146103145780635312ea8e14610327578063630b5ba11461033a5780636eed6a2c1461034257600080fd5b80633ad10ef6146102ba57806341275358146102e5578063441a3e70146102f857806348cd4cb11461030b57600080fd5b806317caf6f1116101c357806317caf6f1146102825780631c1ef98c1461028b57806324bcb38c1461029e57806338a67722146102b157600080fd5b8063081e3eda146101f5578063083c63231461020c5780630ba84cd2146102155780631526fe271461022a575b600080fd5b6009545b6040519081526020015b60405180910390f35b6101f9600d5481565b6102286102233660046120e9565b6104bf565b005b61023d6102383660046120e9565b61057b565b604080516001600160a01b039098168852602088019690965294860193909352606085019190915261ffff16608084015260a0830152151560c082015260e001610203565b6101f9600b5481565b6101f961029936600461211b565b6105db565b6102286102ac3660046121be565b61072b565b6101f960085481565b6005546102cd906001600160a01b031681565b6040516001600160a01b039091168152602001610203565b6006546102cd906001600160a01b031681565b61022861030636600461219c565b61092b565b6101f9600c5481565b6102286103223660046120e9565b610ad5565b6102286103353660046120e9565b610c1b565b610228610cfd565b6101f9681043561a882930000081565b610228610d28565b61022861036836600461214b565b610d9c565b61022861037b3660046120af565b6110ee565b6000546001600160a01b03166102cd565b6101f961039f36600461219c565b6111a5565b6103d66103b236600461211b565b600a6020908152600092835260408084209091529082529020805460019091015482565b60408051928352602083019190915201610203565b6004546102cd906001600160a01b031681565b61022861040c3660046120e9565b6111d4565b61043461041f3660046120af565b600e6020526000908152604090205460ff1681565b6040519015158152602001610203565b6102286104523660046120af565b61130c565b6003546102cd906001600160a01b031681565b6002546102cd906001600160a01b031681565b61022861048b36600461219c565b6113c3565b61022861049e3660046120af565b611857565b6102286104b13660046120e9565b611941565b6101f960075481565b6000546001600160a01b031633146104f25760405162461bcd60e51b81526004016104e990612242565b60405180910390fd5b681043561a88293000008111156105365760405162461bcd60e51b81526020600482015260086024820152670a8dede4090d2ced60c31b60448201526064016104e9565b61053e610cfd565b600781905560405181815233907fe2492e003bbe8afa53088b406f0c1cb5d9e280370fc72a74cf116ffd343c40539060200160405180910390a250565b6009818154811061058b57600080fd5b600091825260209091206007909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b03909516965092949193909261ffff16919060ff1687565b600080600984815481106105f1576105f161237b565b60009182526020808320878452600a825260408085206001600160a01b038916865290925292206003600790920290920190810154600282015491935090431180156106405750600583015415155b801561064e57506000600b54115b156106e8576000600d54431061066657600d54610668565b435b9050600061067a8560020154836111a5565b905060006106ad600b546106a788600101546106a160075487611a3c90919063ffffffff16565b90611a3c565b90611abb565b90506106e26106db87600501546106a76a0c097ce7bc90715b34b9f160241b85611a3c90919063ffffffff16565b8590611afd565b93505050505b61071f82600101546107196a0c097ce7bc90715b34b9f160241b6106a7858760000154611a3c90919063ffffffff16565b90611b5c565b93505050505b92915050565b6000546001600160a01b031633146107555760405162461bcd60e51b81526004016104e990612242565b6101f48161ffff1611156107b95760405162461bcd60e51b815260206004820152602560248201527f7365743a20696e76616c6964206465706f7369742066656520626173697320706044820152646f696e747360d81b60648201526084016104e9565b6107fc826107f6600986815481106107d3576107d361237b565b906000526020600020906007020160010154600b54611b5c90919063ffffffff16565b90611afd565b600b8190555081600984815481106108165761081661237b565b906000526020600020906007020160010181905550806009848154811061083f5761083f61237b565b906000526020600020906007020160040160006101000a81548161ffff021916908361ffff160217905550336001600160a01b03167f6b15d9ccfec36c187bb7ca9613a8be7a7367d3fc401d1efdea721d6c4567395e600985815481106108a8576108a861237b565b906000526020600020906007020160000160009054906101000a90046001600160a01b031684600987815481106108e1576108e161237b565b600091825260209182902060026007909202010154604080516001600160a01b0390951685529184019290925282015261ffff8416606082015260800160405180910390a2505050565b6002600154141561094e5760405162461bcd60e51b81526004016104e990612277565b600260018190555060006009838154811061096b5761096b61237b565b60009182526020808320868452600a8252604080852033865290925292208054600790920290920192508311156109d95760405162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b60448201526064016104e9565b6109e284610ad5565b6000610a1982600101546107196a0c097ce7bc90715b34b9f160241b6106a787600301548760000154611a3c90919063ffffffff16565b90508015610a2b57610a2b3382611b9e565b8315610a6a578154610a3d9085611b5c565b82558254610a55906001600160a01b03163386611dbb565b6005830154610a649085611b5c565b60058401555b60038301548254610a8e916a0c097ce7bc90715b34b9f160241b916106a791611a3c565b6001830155604051848152859033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689060200160405180910390a3505060018055505050565b600060098281548110610aea57610aea61237b565b906000526020600020906007020190506000600d544310610b0d57600d54610b0f565b435b905081600201548111610b2157505050565b60058201541580610b3457506001820154155b15610b425760029091015550565b6000610b528360020154836111a5565b90506000610b79600b546106a786600101546106a160075487611a3c90919063ffffffff16565b90506a18d0bf423c03d8de000000610ba3610b9a60646106a7856066611a3c565b60085490611afd565b11610bd657600554610bd6906001600160a01b0316610bc3836032611abb565b6002546001600160a01b03169190611dbb565b6005840154610c0690610bfb906106a7846a0c097ce7bc90715b34b9f160241b611a3c565b600386015490611afd565b60038501555050436002909201919091555050565b60026001541415610c3e5760405162461bcd60e51b81526004016104e990612277565b6002600181905550600060098281548110610c5b57610c5b61237b565b60009182526020808320858452600a82526040808520338652909252922080546007929092029092016005810154909350610c969082611b5c565b6005840155600080835560018301558254610cbb906001600160a01b03163383611dbb565b604051818152849033907fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae0595906020015b60405180910390a35050600180555050565b60095460005b81811015610d2457610d1481610ad5565b610d1d8161234a565b9050610d03565b5050565b6000546001600160a01b03163314610d525760405162461bcd60e51b81526004016104e990612242565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610dc65760405162461bcd60e51b81526004016104e990612242565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a082319060240160206040518083038186803b158015610e0557600080fd5b505afa158015610e19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3d9190612102565b506101f48261ffff161115610ea25760405162461bcd60e51b815260206004820152602560248201527f6164643a20696e76616c6964206465706f7369742066656520626173697320706044820152646f696e747360d81b60648201526084016104e9565b6000600c544311610eb557600c54610eb7565b435b600b54909150610ec79086611afd565b600b556001600160a01b038085166000818152600e60209081526040808320805460ff199081166001908117909255825160e0810184529586529285018b81528583018881526060870186815261ffff808d1660808a0190815260a08a018981528d151560c08c01908152600980549889018155909a52995160079096027f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af8101805497909c166001600160a01b031990971696909617909a5592517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b085015590517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b1840155517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b283015595517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b3820180549190971661ffff199091161790955592517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b485015590517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b5909301805493151593909116929092179091555133907fa2c51573880fb2ac3b22bb2584e1c8972b7baf3928d9abbf230c500de25e84fa906110df9087908990869089906001600160a01b039490941684526020840192909252604083015261ffff16606082015260800190565b60405180910390a25050505050565b6000546001600160a01b031633146111185760405162461bcd60e51b81526004016104e990612242565b6001600160a01b0381166111595760405162461bcd60e51b8152602060048201526008602482015267216e6f6e7a65726f60c01b60448201526064016104e9565b600680546001600160a01b0319166001600160a01b03831690811790915560405133907fd44190acf9d04bdb5d3a1aafff7e6dee8b40b93dfb8c5d3f0eea4b9f4539c3f790600090a350565b60006a18d0bf423c03d8de000000600854106111c357506000610725565b6111cd8284611b5c565b9392505050565b6000546001600160a01b031633146111fe5760405162461bcd60e51b81526004016104e990612242565b600d54431061125a5760405162461bcd60e51b815260206004820152602260248201527f66756e643a20746f6f206c6174652c20746865206661726d20697320636c6f73604482015261195960f21b60648201526084016104e9565b6002546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b1580156112ac57600080fd5b505af11580156112c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e491906120cc565b506007546112f3908290611abb565b600d600082825461130491906122ae565b909155505050565b6000546001600160a01b031633146113365760405162461bcd60e51b81526004016104e990612242565b6001600160a01b0381166113775760405162461bcd60e51b8152602060048201526008602482015267216e6f6e7a65726f60c01b60448201526064016104e9565b600580546001600160a01b0319166001600160a01b03831690811790915560405133907f618c54559e94f1499a808aad71ee8729f8e74e8c48e979616328ce493a1a52e790600090a350565b600260015414156113e65760405162461bcd60e51b81526004016104e990612277565b60026001819055506000600983815481106114035761140361237b565b60009182526020808320868452600a825260408085203386529092529220600660079092029092019081015490925060ff161561158d576003546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561147e57600080fd5b505afa158015611492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b69190612102565b1180156115415750600480546040516370a0823160e01b815233928101929092526000916001600160a01b03909116906370a082319060240160206040518083038186803b15801561150757600080fd5b505afa15801561151b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153f9190612102565b115b61158d5760405162461bcd60e51b815260206004820152601d60248201527f4e4654732061726520726571756972656420666f72206465706f73697400000060448201526064016104e9565b61159684610ad5565b8054156115e85760006115d482600101546107196a0c097ce7bc90715b34b9f160241b6106a787600301548760000154611a3c90919063ffffffff16565b905080156115e6576115e63382611b9e565b505b82156117fa5781546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561163157600080fd5b505afa158015611645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116699190612102565b8354909150611683906001600160a01b0316333087611e23565b82546040516370a0823160e01b81523060048201526117039183916001600160a01b03909116906370a082319060240160206040518083038186803b1580156116cb57600080fd5b505afa1580156116df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107199190612102565b9350600084116117555760405162461bcd60e51b815260206004820152601c60248201527f776520646f6e7420616363657074206465706f73697473206f6620300000000060448201526064016104e9565b600483015461ffff16156117d557600483015460009061178290612710906106a790889061ffff16611a3c565b60065485549192506117a1916001600160a01b03908116911683611dbb565b82546117b39082906107199088611afd565b835560058401546117ca9082906107199088611afd565b6005850155506117f8565b81546117e19085611afd565b825560058301546117f29085611afd565b60058401555b505b6003820154815461181e916a0c097ce7bc90715b34b9f160241b916106a791611a3c565b6001820155604051838152849033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1590602001610ceb565b6000546001600160a01b031633146118815760405162461bcd60e51b81526004016104e990612242565b6001600160a01b0381166118e65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104e9565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461196b5760405162461bcd60e51b81526004016104e990612242565b43600c54116119b35760405162461bcd60e51b815260206004820152601460248201527311985c9b48185b1c9958591e481cdd185c9d195960621b60448201526064016104e9565b60095460005b818110156119fd576000600982815481106119d6576119d661237b565b60009182526020909120600260079092020101849055506119f68161234a565b90506119b9565b50600c82905560405182815233907f3eb4ecd5fe1c1fb419227f1ed2015b7c67d3867f237683c50a2192b6ceabe0169060200160405180910390a25050565b600082611a4b57506000610725565b6000611a5783856122e8565b905082611a6485836122c6565b146111cd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016104e9565b60006111cd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e5b565b600080611b0a83856122ae565b9050838110156111cd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016104e9565b60006111cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e92565b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b158015611be257600080fd5b505afa158015611bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1a9190612102565b9050600081831115611cc45760025460405163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b158015611c7457600080fd5b505af1158015611c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cac91906120cc565b600854909150611cbc9083611afd565b600855611d5e565b60025460405163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529091169063a9059cbb90604401602060405180830381600087803b158015611d1257600080fd5b505af1158015611d26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4a91906120cc565b600854909150611d5a9084611afd565b6008555b80611db55760405162461bcd60e51b815260206004820152602160248201527f736166654368697a5472616e736665723a205472616e73666572206661696c656044820152601960fa1b60648201526084016104e9565b50505050565b6040516001600160a01b038316602482015260448101829052611e1e90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611ec3565b505050565b6040516001600160a01b0380851660248301528316604482015260648101829052611db59085906323b872dd60e01b90608401611de7565b60008183611e7c5760405162461bcd60e51b81526004016104e9919061220f565b506000611e8984866122c6565b95945050505050565b60008184841115611eb65760405162461bcd60e51b81526004016104e9919061220f565b506000611e898486612307565b6000611f18826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611f959092919063ffffffff16565b805190915015611e1e5780806020019051810190611f3691906120cc565b611e1e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104e9565b6060611fa48484600085611fac565b949350505050565b6060843b611ffc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104e9565b600080866001600160a01b0316858760405161201891906121f3565b60006040518083038185875af1925050503d8060008114612055576040519150601f19603f3d011682016040523d82523d6000602084013e61205a565b606091505b5091509150811561206e579150611fa49050565b80511561207e5780518082602001fd5b8360405162461bcd60e51b81526004016104e9919061220f565b803561ffff811681146120aa57600080fd5b919050565b6000602082840312156120c157600080fd5b81356111cd81612391565b6000602082840312156120de57600080fd5b81516111cd816123a9565b6000602082840312156120fb57600080fd5b5035919050565b60006020828403121561211457600080fd5b5051919050565b6000806040838503121561212e57600080fd5b82359150602083013561214081612391565b809150509250929050565b6000806000806080858703121561216157600080fd5b84359350602085013561217381612391565b925061218160408601612098565b91506060850135612191816123a9565b939692955090935050565b600080604083850312156121af57600080fd5b50508035926020909101359150565b6000806000606084860312156121d357600080fd5b83359250602084013591506121ea60408501612098565b90509250925092565b6000825161220581846020870161231e565b9190910192915050565b602081526000825180602084015261222e81604085016020870161231e565b601f01601f19169190910160400192915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600082198211156122c1576122c1612365565b500190565b6000826122e357634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561230257612302612365565b500290565b60008282101561231957612319612365565b500390565b60005b83811015612339578181015183820152602001612321565b83811115611db55750506000910152565b600060001982141561235e5761235e612365565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146123a657600080fd5b50565b80151581146123a657600080fdfea2646970667358221220f91a23f01a1f83ea1ec3bccd99372f1aaf2e58290afac550abe86cd80ed29f6d64736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d21a23606d2746f086f6528cd6873bad3307b903000000000000000000000000b796485fe35c926328914cd4cd9447d095d41f7f0000000000000000000000005c761c1a21637362374204000e383204d347064c0000000000000000000000000000000000000000000000000000000000cb5a9700000000000000000000000025ec62e26f38e70fe6a77732cadb274761089b6000000000000000000000000025ec62e26f38e70fe6a77732cadb274761089b60
-----Decoded View---------------
Arg [0] : _nftPrivilegeContractOne (address): 0xd21a23606D2746f086f6528Cd6873bAD3307b903
Arg [1] : _nftPrivilegeContractTwo (address): 0xB796485fE35C926328914cD4CD9447D095d41F7f
Arg [2] : _chizToken (address): 0x5c761c1a21637362374204000e383204d347064C
Arg [3] : _startBlock (uint256): 13326999
Arg [4] : _devAddress (address): 0x25eC62E26f38e70FE6A77732CADB274761089b60
Arg [5] : _feeAddress (address): 0x25eC62E26f38e70FE6A77732CADB274761089b60
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000d21a23606d2746f086f6528cd6873bad3307b903
Arg [1] : 000000000000000000000000b796485fe35c926328914cd4cd9447d095d41f7f
Arg [2] : 0000000000000000000000005c761c1a21637362374204000e383204d347064c
Arg [3] : 0000000000000000000000000000000000000000000000000000000000cb5a97
Arg [4] : 00000000000000000000000025ec62e26f38e70fe6a77732cadb274761089b60
Arg [5] : 00000000000000000000000025ec62e26f38e70fe6a77732cadb274761089b60
Deployed Bytecode Sourcemap
28087:13445:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31929:95;32001:8;:15;31929:95;;;12552:25:1;;;12540:2;12525:18;31929:95:0;;;;;;;;30478:23;;;;;;40441:276;;;;;;:::i;:::-;;:::i;:::-;;30070:26;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;5106:32:1;;;5088:51;;5170:2;5155:18;;5148:34;;;;5198:18;;;5191:34;;;;5256:2;5241:18;;5234:34;;;;5317:6;5305:19;5299:3;5284:19;;5277:48;5126:3;5341:19;;5334:35;5413:14;5406:22;5400:3;5385:19;;5378:51;5075:3;5060:19;30070:26:0;5042:393:1;30311:34:0;;;;;;34073:808;;;;;;:::i;:::-;;:::i;33248:488::-;;;;;;:::i;:::-;;:::i;29994:40::-;;;;;;29742:25;;;;;-1:-1:-1;;;;;29742:25:0;;;;;;-1:-1:-1;;;;;3203:32:1;;;3185:51;;3173:2;3158:18;29742:25:0;3140:102:1;29774:25:0;;;;;-1:-1:-1;;;;;29774:25:0;;;37915:811;;;;;;:::i;:::-;;:::i;30402:25::-;;;;;;35220:903;;;;;;:::i;:::-;;:::i;38797:453::-;;;;;;:::i;:::-;;:::i;34964:180::-;;;:::i;30510:57::-;;30558:9;30510:57;;4455:148;;;:::i;32299:837::-;;;;;;:::i;:::-;;:::i;40223:210::-;;;;;;:::i;:::-;;:::i;3813:79::-;3851:7;3878:6;-1:-1:-1;;;;;3878:6:0;3813:79;;33812:196;;;;;;:::i;:::-;;:::i;30152:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12762:25:1;;;12818:2;12803:18;;12796:34;;;;12735:18;30152:64:0;12717:119:1;29697:38:0;;;;;-1:-1:-1;;;;;29697:38:0;;;41264:265;;;;;;:::i;:::-;;:::i;32032:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4071:14:1;;4064:22;4046:41;;4034:2;4019:18;32032:44:0;4001:92:1;40005:210:0;;;;;;:::i;:::-;;:::i;29652:38::-;;;;;-1:-1:-1;;;;;29652:38:0;;;29622:23;;;;;-1:-1:-1;;;;;29622:23:0;;;36192:1671;;;;;;:::i;:::-;;:::i;4758:244::-;;;;;;:::i;:::-;;:::i;40766:445::-;;;;;;:::i;:::-;;:::i;29910:38::-;;;;;;40441:276;4025:6;;-1:-1:-1;;;;;4025:6:0;2544:10;4025:22;4017:67;;;;-1:-1:-1;;;4017:67:0;;;;;;;:::i;:::-;;;;;;;;;30558:9:::1;40530:13;:38;;40522:59;;;::::0;-1:-1:-1;;;40522:59:0;;8866:2:1;40522:59:0::1;::::0;::::1;8848:21:1::0;8905:1;8885:18;;;8878:29;-1:-1:-1;;;8923:18:1;;;8916:38;8971:18;;40522:59:0::1;8838:157:1::0;40522:59:0::1;40592:17;:15;:17::i;:::-;40620:12;:28:::0;;;40664:45:::1;::::0;12552:25:1;;;40683:10:0::1;::::0;40664:45:::1;::::0;12540:2:1;12525:18;40664:45:0::1;;;;;;;40441:276:::0;:::o;30070:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30070:26:0;;;;-1:-1:-1;30070:26:0;;;;;;;;;;;;;:::o;34073:808::-;34146:7;34166:21;34190:8;34199:4;34190:14;;;;;;;;:::i;:::-;;;;;;;;;34239;;;:8;:14;;;;;;-1:-1:-1;;;;;34239:21:0;;;;;;;;;34297:20;34190:14;;;;;;;34297:20;;;;34349;;;;34190:14;;-1:-1:-1;34297:20:0;34334:12;:35;:57;;;;-1:-1:-1;34373:13:0;;;;:18;;34334:57;:80;;;;;34413:1;34395:15;;:19;34334:80;34330:463;;;34431:17;34466:8;;34451:12;:23;:49;;34492:8;;34451:49;;;34477:12;34451:49;34431:69;;34515:18;34536:46;34550:4;:20;;;34572:9;34536:13;:46::i;:::-;34515:67;;34597:18;34618:70;34672:15;;34618:49;34651:4;:15;;;34618:28;34633:12;;34618:10;:14;;:28;;;;:::i;:::-;:32;;:49::i;:::-;:53;;:70::i;:::-;34597:91;;34721:60;34741:39;34766:4;:13;;;34741:20;-1:-1:-1;;;34741:10:0;:14;;:20;;;;:::i;:39::-;34721:15;;:19;:60::i;:::-;34703:78;;34416:377;;;34330:463;34810:63;34857:4;:15;;;34810:42;-1:-1:-1;;;34810:32:0;34826:15;34810:4;:11;;;:15;;:32;;;;:::i;:42::-;:46;;:63::i;:::-;34803:70;;;;;34073:808;;;;;:::o;33248:488::-;4025:6;;-1:-1:-1;;;;;4025:6:0;2544:10;4025:22;4017:67;;;;-1:-1:-1;;;4017:67:0;;;;;;;:::i;:::-;33373:3:::1;33356:13;:20;;;;33348:70;;;::::0;-1:-1:-1;;;33348:70:0;;9604:2:1;33348:70:0::1;::::0;::::1;9586:21:1::0;9643:2;9623:18;;;9616:30;9682:34;9662:18;;;9655:62;-1:-1:-1;;;9733:18:1;;;9726:35;9778:19;;33348:70:0::1;9576:227:1::0;33348:70:0::1;33447:63;33498:11;33447:46;33467:8;33476:4;33467:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;;33447:15;;:19;;:46;;;;:::i;:::-;:50:::0;::::1;:63::i;:::-;33429:15;:81;;;;33549:11;33521:8;33530:4;33521:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;:39;;;;33601:13;33571:8;33580:4;33571:14;;;;;;;;:::i;:::-;;;;;;;;;;;:27;;;:43;;;;;;;;;;;;;;;;;;33635:10;-1:-1:-1::0;;;;;33627:101:0::1;;33647:8;33656:4;33647:14;;;;;;;;:::i;:::-;;;;;;;;;;;:22;;;;;;;;;;-1:-1:-1::0;;;;;33647:22:0::1;33671:11;33683:8;33692:4;33683:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;:30:::1;:14;::::0;;::::1;;:30;::::0;33627:101:::1;::::0;;-1:-1:-1;;;;;4581:32:1;;;4563:51;;4630:18;;;4623:34;;;;4673:18;;4666:34;4748:6;4736:19;;4731:2;4716:18;;4709:47;4550:3;4535:19;33627:101:0::1;;;;;;;33248:488:::0;;;:::o;37915:811::-;948:1;1554:7;;:19;;1546:63;;;;-1:-1:-1;;;1546:63:0;;;;;;;:::i;:::-;948:1;1687:7;:18;;;;37997:21:::1;38021:8;38030:4;38021:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;38070;;;:8:::1;:14:::0;;;;;;38085:10:::1;38070:26:::0;;;;;;;38115:11;;38021:14:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;38115:22:0;-1:-1:-1;38115:22:0::1;38107:53;;;::::0;-1:-1:-1;;;38107:53:0;;11490:2:1;38107:53:0::1;::::0;::::1;11472:21:1::0;11529:2;11509:18;;;11502:30;-1:-1:-1;;;11548:18:1;;;11541:48;11606:18;;38107:53:0::1;11462:168:1::0;38107:53:0::1;38171:16;38182:4;38171:10;:16::i;:::-;38198:15;38216:68;38268:4;:15;;;38216:47;-1:-1:-1::0;;;38216:37:0::1;38232:4;:20;;;38216:4;:11;;;:15;;:37;;;;:::i;:68::-;38198:86:::0;-1:-1:-1;38299:11:0;;38295:81:::1;;38327:37;38344:10;38356:7;38327:16;:37::i;:::-;38390:11:::0;;38386:206:::1;;38432:11:::0;;:24:::1;::::0;38448:7;38432:15:::1;:24::i;:::-;38418:38:::0;;38471:12;;:55:::1;::::0;-1:-1:-1;;;;;38471:12:0::1;38505:10;38518:7:::0;38471:25:::1;:55::i;:::-;38554:13;::::0;::::1;::::0;:26:::1;::::0;38572:7;38554:17:::1;:26::i;:::-;38538:13;::::0;::::1;:42:::0;38386:206:::1;38636:20;::::0;::::1;::::0;38620:11;;:47:::1;::::0;-1:-1:-1;;;38662:4:0;38620:37:::1;::::0;:15:::1;:37::i;:47::-;38602:15;::::0;::::1;:65:::0;38683:35:::1;::::0;12552:25:1;;;38704:4:0;;38692:10:::1;::::0;38683:35:::1;::::0;12540:2:1;12525:18;38683:35:0::1;;;;;;;-1:-1:-1::0;;904:1:0;1866:22;;-1:-1:-1;;;37915:811:0:o;35220:903::-;35272:21;35296:8;35305:4;35296:14;;;;;;;;:::i;:::-;;;;;;;;;;;35272:38;;35321:17;35356:8;;35341:12;:23;:49;;35382:8;;35341:49;;;35367:12;35341:49;35321:69;;35418:4;:20;;;35405:9;:33;35401:72;;35455:7;;35220:903;:::o;35401:72::-;35487:13;;;;:18;;:42;;-1:-1:-1;35509:15:0;;;;:20;35487:42;35483:128;;;35546:20;;;;:32;-1:-1:-1;35220:903:0:o;35483:128::-;35621:18;35642:46;35656:4;:20;;;35678:9;35642:13;:46::i;:::-;35621:67;;35699:18;35720:70;35774:15;;35720:49;35753:4;:15;;;35720:28;35735:12;;35720:10;:14;;:28;;;;:::i;:70::-;35699:91;-1:-1:-1;29848:14:0;35806:55;35832:28;35856:3;35832:19;35699:91;35847:3;35832:14;:19::i;:28::-;35806:21;;;:25;:55::i;:::-;:81;35803:166;;35926:10;;35903:54;;-1:-1:-1;;;;;35926:10:0;35938:18;:10;35953:2;35938:14;:18::i;:::-;35903:9;;-1:-1:-1;;;;;35903:9:0;;:54;:22;:54::i;:::-;36054:13;;;;36004:65;;36029:39;;:20;:10;-1:-1:-1;;;36029:14:0;:20::i;:39::-;36004:20;;;;;:24;:65::i;:::-;35981:20;;;:88;-1:-1:-1;;36103:12:0;36080:20;;;;:35;;;;-1:-1:-1;;35220:903:0:o;38797:453::-;948:1;1554:7;;:19;;1546:63;;;;-1:-1:-1;;;1546:63:0;;;;;;;:::i;:::-;948:1;1687:7;:18;;;;38870:21:::1;38894:8;38903:4;38894:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;38943;;;:8:::1;:14:::0;;;;;;38958:10:::1;38943:26:::0;;;;;;;38997:11;;38894:14:::1;::::0;;;::::1;::::0;;::::1;39032:13;::::0;::::1;::::0;38894:14;;-1:-1:-1;39032:30:0::1;::::0;38997:11;39032:17:::1;:30::i;:::-;39016:13;::::0;::::1;:46:::0;39087:1:::1;39073:15:::0;;;39099::::1;::::0;::::1;:19:::0;39129:12;;:54:::1;::::0;-1:-1:-1;;;;;39129:12:0::1;39163:10;39176:6:::0;39129:25:::1;:54::i;:::-;39199:43;::::0;12552:25:1;;;39229:4:0;;39217:10:::1;::::0;39199:43:::1;::::0;12540:2:1;12525:18;39199:43:0::1;;;;;;;;-1:-1:-1::0;;904:1:0;1866:22;;-1:-1:-1;;38797:453:0:o;34964:180::-;35026:8;:15;35009:14;35052:85;35080:6;35074:3;:12;35052:85;;;35110:15;35121:3;35110:10;:15::i;:::-;35088:5;;;:::i;:::-;;;35052:85;;;;34998:146;34964:180::o;4455:148::-;4025:6;;-1:-1:-1;;;;;4025:6:0;2544:10;4025:22;4017:67;;;;-1:-1:-1;;;4017:67:0;;;;;;;:::i;:::-;4562:1:::1;4546:6:::0;;4525:40:::1;::::0;-1:-1:-1;;;;;4546:6:0;;::::1;::::0;4525:40:::1;::::0;4562:1;;4525:40:::1;4593:1;4576:19:::0;;-1:-1:-1;;;;;;4576:19:0::1;::::0;;4455:148::o;32299:837::-;4025:6;;-1:-1:-1;;;;;4025:6:0;2544:10;4025:22;4017:67;;;;-1:-1:-1;;;4017:67:0;;;;;;;:::i;:::-;32423:33:::1;::::0;-1:-1:-1;;;32423:33:0;;32450:4:::1;32423:33;::::0;::::1;3185:51:1::0;-1:-1:-1;;;;;32423:18:0;::::1;::::0;::::1;::::0;3158::1;;32423:33:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32492:3;32475:13;:20;;;;32467:70;;;::::0;-1:-1:-1;;;32467:70:0;;6253:2:1;32467:70:0::1;::::0;::::1;6235:21:1::0;6292:2;6272:18;;;6265:30;6331:34;6311:18;;;6304:62;-1:-1:-1;;;6382:18:1;;;6375:35;6427:19;;32467:70:0::1;6225:227:1::0;32467:70:0::1;32550:23;32591:10;;32576:12;:25;:53;;32619:10;;32576:53;;;32604:12;32576:53;32658:15;::::0;32550:79;;-1:-1:-1;32658:32:0::1;::::0;32678:11;32658:19:::1;:32::i;:::-;32640:15;:50:::0;-1:-1:-1;;;;;32701:23:0;;::::1;;::::0;;;:13:::1;:23;::::0;;;;;;;:30;;-1:-1:-1;;32701:30:0;;::::1;32727:4;32701:30:::0;;::::1;::::0;;;32756:286;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;::::1;;::::0;;;;;;32742:8:::1;:301:::0;;;;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;::::1;-1:-1:-1::0;;;;;;32742:301:0;;::::1;::::0;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;-1:-1:-1::0;;32742:301:0;;::::1;;::::0;;;;;;;;;;;;;;;;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;33056:72;33064:10:::1;::::0;33056:72:::1;::::0;::::1;::::0;32715:8;;32824:11;;32867:15;;32944:13;;-1:-1:-1;;;;;4581:32:1;;;;4563:51;;4645:2;4630:18;;4623:34;;;;4688:2;4673:18;;4666:34;4748:6;4736:19;4731:2;4716:18;;4709:47;4550:3;4535:19;;4517:245;33056:72:0::1;;;;;;;;32415:721;32299:837:::0;;;;:::o;40223:210::-;4025:6;;-1:-1:-1;;;;;4025:6:0;2544:10;4025:22;4017:67;;;;-1:-1:-1;;;4017:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40298:25:0;::::1;40290:46;;;::::0;-1:-1:-1;;;40290:46:0;;8530:2:1;40290:46:0::1;::::0;::::1;8512:21:1::0;8569:1;8549:18;;;8542:29;-1:-1:-1;;;8587:18:1;;;8580:38;8635:18;;40290:46:0::1;8502:157:1::0;40290:46:0::1;40347:10;:24:::0;;-1:-1:-1;;;;;;40347:24:0::1;-1:-1:-1::0;;;;;40347:24:0;::::1;::::0;;::::1;::::0;;;40387:38:::1;::::0;40401:10:::1;::::0;40387:38:::1;::::0;-1:-1:-1;;40387:38:0::1;40223:210:::0;:::o;33812:196::-;33884:7;29848:14;33908:21;;:47;33904:61;;-1:-1:-1;33964:1:0;33957:8;;33904:61;33986:14;:3;33994:5;33986:7;:14::i;:::-;33979:21;33812:196;-1:-1:-1;;;33812:196:0:o;41264:265::-;4025:6;;-1:-1:-1;;;;;4025:6:0;2544:10;4025:22;4017:67;;;;-1:-1:-1;;;4017:67:0;;;;;;;:::i;:::-;41346:8:::1;;41331:12;:23;41323:70;;;::::0;-1:-1:-1;;;41323:70:0;;10729:2:1;41323:70:0::1;::::0;::::1;10711:21:1::0;10768:2;10748:18;;;10741:30;10807:34;10787:18;;;10780:62;-1:-1:-1;;;10858:18:1;;;10851:32;10900:19;;41323:70:0::1;10701:224:1::0;41323:70:0::1;41406:9;::::0;:67:::1;::::0;-1:-1:-1;;;41406:67:0;;41437:10:::1;41406:67;::::0;::::1;3487:34:1::0;41458:4:0::1;3537:18:1::0;;;3530:43;3589:18;;;3582:34;;;-1:-1:-1;;;;;41406:9:0;;::::1;::::0;:22:::1;::::0;3422:18:1;;41406:67:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;41508:12:0::1;::::0;41496:25:::1;::::0;:7;;:11:::1;:25::i;:::-;41484:8;;:37;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;41264:265:0:o;40005:210::-;4025:6;;-1:-1:-1;;;;;4025:6:0;2544:10;4025:22;4017:67;;;;-1:-1:-1;;;4017:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40080:25:0;::::1;40072:46;;;::::0;-1:-1:-1;;;40072:46:0;;8530:2:1;40072:46:0::1;::::0;::::1;8512:21:1::0;8569:1;8549:18;;;8542:29;-1:-1:-1;;;8587:18:1;;;8580:38;8635:18;;40072:46:0::1;8502:157:1::0;40072:46:0::1;40129:10;:24:::0;;-1:-1:-1;;;;;;40129:24:0::1;-1:-1:-1::0;;;;;40129:24:0;::::1;::::0;;::::1;::::0;;;40169:38:::1;::::0;40183:10:::1;::::0;40169:38:::1;::::0;-1:-1:-1;;40169:38:0::1;40005:210:::0;:::o;36192:1671::-;948:1;1554:7;;:19;;1546:63;;;;-1:-1:-1;;;1546:63:0;;;;;;;:::i;:::-;948:1;1687:7;:18;;;;36273:21:::1;36297:8;36306:4;36297:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;36346;;;:8:::1;:14:::0;;;;;;36361:10:::1;36346:26:::0;;;;;;;36386:21:::1;36297:14;::::0;;::::1;::::0;;::::1;36386:21:::0;;::::1;::::0;36297:14;;-1:-1:-1;36386:21:0::1;;36383:240;;;36473:23;::::0;:45:::1;::::0;-1:-1:-1;;;36473:45:0;;36507:10:::1;36473:45;::::0;::::1;3185:51:1::0;36521:1:0::1;::::0;-1:-1:-1;;;;;36473:23:0::1;::::0;:33:::1;::::0;3158:18:1;;36473:45:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;:102;;;;-1:-1:-1::0;36526:23:0::1;::::0;;:45:::1;::::0;-1:-1:-1;;;36526:45:0;;36560:10:::1;36526:45:::0;;::::1;3185:51:1::0;;;;36574:1:0::1;::::0;-1:-1:-1;;;;;36526:23:0;;::::1;::::0;:33:::1;::::0;3158:18:1;;36526:45:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;36473:102;36465:144;;;::::0;-1:-1:-1;;;36465:144:0;;10010:2:1;36465:144:0::1;::::0;::::1;9992:21:1::0;10049:2;10029:18;;;10022:30;10088:31;10068:18;;;10061:59;10137:18;;36465:144:0::1;9982:179:1::0;36465:144:0::1;36633:16;36644:4;36633:10;:16::i;:::-;36664:11:::0;;:15;36660:237:::1;;36696:15;36714:68;36766:4;:15;;;36714:47;-1:-1:-1::0;;;36714:37:0::1;36730:4;:20;;;36714:4;:11;;;:15;;:37;;;;:::i;:68::-;36696:86:::0;-1:-1:-1;36801:11:0;;36797:89:::1;;36833:37;36850:10;36862:7;36833:16;:37::i;:::-;36681:216;36660:237;36911:11:::0;;36907:823:::1;;36960:12:::0;;:37:::1;::::0;-1:-1:-1;;;36960:37:0;;36991:4:::1;36960:37;::::0;::::1;3185:51:1::0;36936:21:0::1;::::0;-1:-1:-1;;;;;36960:12:0::1;::::0;:22:::1;::::0;3158:18:1;;36960:37:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37012:12:::0;;36936:61;;-1:-1:-1;37012:74:0::1;::::0;-1:-1:-1;;;;;37012:12:0::1;37050:10;37071:4;37078:7:::0;37012:29:::1;:74::i;:::-;37111:12:::0;;:37:::1;::::0;-1:-1:-1;;;37111:37:0;;37142:4:::1;37111:37;::::0;::::1;3185:51:1::0;37111:56:0::1;::::0;37153:13;;-1:-1:-1;;;;;37111:12:0;;::::1;::::0;:22:::1;::::0;3158:18:1;;37111:37:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:56::-;37101:66;;37200:1;37190:7;:11;37182:52;;;::::0;-1:-1:-1;;;37182:52:0;;7422:2:1;37182:52:0::1;::::0;::::1;7404:21:1::0;7461:2;7441:18;;;7434:30;7500;7480:18;;;7473:58;7548:18;;37182:52:0::1;7394:178:1::0;37182:52:0::1;37253:17;::::0;::::1;::::0;::::1;;:21:::0;37249:470:::1;;37328:17;::::0;::::1;::::0;37295:18:::1;::::0;37316:41:::1;::::0;37351:5:::1;::::0;37316:30:::1;::::0;:7;;37328:17:::1;;37316:11;:30::i;:41::-;37402:10;::::0;37376:12;;37295:62;;-1:-1:-1;37376:49:0::1;::::0;-1:-1:-1;;;;;37376:12:0;;::::1;::::0;37402:10:::1;37295:62:::0;37376:25:::1;:49::i;:::-;37458:11:::0;;:40:::1;::::0;37487:10;;37458:24:::1;::::0;37474:7;37458:15:::1;:24::i;:40::-;37444:54:::0;;37527:13:::1;::::0;::::1;::::0;:42:::1;::::0;37558:10;;37527:26:::1;::::0;37545:7;37527:17:::1;:26::i;:42::-;37511:13;::::0;::::1;:58:::0;-1:-1:-1;37249:470:0::1;;;37624:11:::0;;:24:::1;::::0;37640:7;37624:15:::1;:24::i;:::-;37610:38:::0;;37677:13:::1;::::0;::::1;::::0;:26:::1;::::0;37695:7;37677:17:::1;:26::i;:::-;37661:13;::::0;::::1;:42:::0;37249:470:::1;36924:806;36907:823;37774:20;::::0;::::1;::::0;37758:11;;:47:::1;::::0;-1:-1:-1;;;37800:4:0;37758:37:::1;::::0;:15:::1;:37::i;:47::-;37740:15;::::0;::::1;:65:::0;37821:34:::1;::::0;12552:25:1;;;37841:4:0;;37829:10:::1;::::0;37821:34:::1;::::0;12540:2:1;12525:18;37821:34:0::1;12507:76:1::0;4758:244:0;4025:6;;-1:-1:-1;;;;;4025:6:0;2544:10;4025:22;4017:67;;;;-1:-1:-1;;;4017:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4847:22:0;::::1;4839:73;;;::::0;-1:-1:-1;;;4839:73:0;;6659:2:1;4839:73:0::1;::::0;::::1;6641:21:1::0;6698:2;6678:18;;;6671:30;6737:34;6717:18;;;6710:62;-1:-1:-1;;;6788:18:1;;;6781:36;6834:19;;4839:73:0::1;6631:228:1::0;4839:73:0::1;4949:6;::::0;;4928:38:::1;::::0;-1:-1:-1;;;;;4928:38:0;;::::1;::::0;4949:6;::::1;::::0;4928:38:::1;::::0;::::1;4977:6;:17:::0;;-1:-1:-1;;;;;;4977:17:0::1;-1:-1:-1::0;;;;;4977:17:0;;;::::1;::::0;;;::::1;::::0;;4758:244::o;40766:445::-;4025:6;;-1:-1:-1;;;;;4025:6:0;2544:10;4025:22;4017:67;;;;-1:-1:-1;;;4017:67:0;;;;;;;:::i;:::-;40863:12:::1;40850:10;;:25;40842:58;;;::::0;-1:-1:-1;;;40842:58:0;;8181:2:1;40842:58:0::1;::::0;::::1;8163:21:1::0;8220:2;8200:18;;;8193:30;-1:-1:-1;;;8239:18:1;;;8232:50;8299:18;;40842:58:0::1;8153:170:1::0;40842:58:0::1;40928:8;:15:::0;40911:14:::1;40954:154;40981:6;40975:3;:12;40954:154;;;41010:21;41034:8;41043:3;41034:13;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;41062:20:::1;41034:13;::::0;;::::1;;41062:20;:34:::0;;;-1:-1:-1;40989:5:0::1;::::0;::::1;:::i;:::-;;;40954:154;;;-1:-1:-1::0;41122:10:0::1;:24:::0;;;41162:41:::1;::::0;12552:25:1;;;41179:10:0::1;::::0;41162:41:::1;::::0;12540:2:1;12525:18;41162:41:0::1;;;;;;;40831:380;40766:445:::0;:::o;7205:471::-;7263:7;7508:6;7504:47;;-1:-1:-1;7538:1:0;7531:8;;7504:47;7563:9;7575:5;7579:1;7575;:5;:::i;:::-;7563:17;-1:-1:-1;7608:1:0;7599:5;7603:1;7563:17;7599:5;:::i;:::-;:10;7591:56;;;;-1:-1:-1;;;7591:56:0;;9202:2:1;7591:56:0;;;9184:21:1;9241:2;9221:18;;;9214:30;9280:34;9260:18;;;9253:62;-1:-1:-1;;;9331:18:1;;;9324:31;9372:19;;7591:56:0;9174:223:1;8152:132:0;8210:7;8237:39;8241:1;8244;8237:39;;;;;;;;;;;;;;;;;:3;:39::i;5851:181::-;5909:7;;5941:5;5945:1;5941;:5;:::i;:::-;5929:17;;5970:1;5965;:6;;5957:46;;;;-1:-1:-1;;;5957:46:0;;7066:2:1;5957:46:0;;;7048:21:1;7105:2;7085:18;;;7078:30;7144:29;7124:18;;;7117:57;7191:18;;5957:46:0;7038:177:1;6315:136:0;6373:7;6400:43;6404:1;6407;6400:43;;;;;;;;;;;;;;;;;:3;:43::i;39363:586::-;39457:9;;:34;;-1:-1:-1;;;39457:34:0;;39485:4;39457:34;;;3185:51:1;39439:15:0;;-1:-1:-1;;;;;39457:9:0;;:19;;3158:18:1;;39457:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39439:52;;39502:20;39555:7;39545;:17;39541:329;;;39597:9;;:32;;-1:-1:-1;;;39597:32:0;;-1:-1:-1;;;;;3819:32:1;;;39597::0;;;3801:51:1;3868:18;;;3861:34;;;39597:9:0;;;;:18;;3774::1;;39597:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39668:21;;39579:50;;-1:-1:-1;39668:34:0;;39694:7;39668:25;:34::i;:::-;39644:21;:58;39541:329;;;39753:9;;:32;;-1:-1:-1;;;39753:32:0;;-1:-1:-1;;;;;3819:32:1;;;39753::0;;;3801:51:1;3868:18;;;3861:34;;;39753:9:0;;;;:18;;3774::1;;39753:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39824:21;;39735:50;;-1:-1:-1;39824:34:0;;39850:7;39824:25;:34::i;:::-;39800:21;:58;39541:329;39888:15;39880:61;;;;-1:-1:-1;;;39880:61:0;;7779:2:1;39880:61:0;;;7761:21:1;7818:2;7798:18;;;7791:30;7857:34;7837:18;;;7830:62;-1:-1:-1;;;7908:18:1;;;7901:31;7949:19;;39880:61:0;7751:223:1;39880:61:0;39428:521;;39363:586;;:::o;19472:177::-;19582:58;;-1:-1:-1;;;;;3819:32:1;;19582:58:0;;;3801:51:1;3868:18;;;3861:34;;;19555:86:0;;19575:5;;-1:-1:-1;;;19605:23:0;3774:18:1;;19582:58:0;;;;-1:-1:-1;;19582:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;19582:58:0;-1:-1:-1;;;;;;19582:58:0;;;;;;;;;;19555:19;:86::i;:::-;19472:177;;;:::o;19657:205::-;19785:68;;-1:-1:-1;;;;;3505:15:1;;;19785:68:0;;;3487:34:1;3557:15;;3537:18;;;3530:43;3589:18;;;3582:34;;;19758:96:0;;19778:5;;-1:-1:-1;;;19808:27:0;3422:18:1;;19785:68:0;3404:218:1;8780:278:0;8866:7;8901:12;8894:5;8886:28;;;;-1:-1:-1;;;8886:28:0;;;;;;;;:::i;:::-;-1:-1:-1;8925:9:0;8937:5;8941:1;8937;:5;:::i;:::-;8925:17;8780:278;-1:-1:-1;;;;;8780:278:0:o;6754:192::-;6840:7;6876:12;6868:6;;;;6860:29;;;;-1:-1:-1;;;6860:29:0;;;;;;;;:::i;:::-;-1:-1:-1;6900:9:0;6912:5;6916:1;6912;:5;:::i;21777:761::-;22201:23;22227:69;22255:4;22227:69;;;;;;;;;;;;;;;;;22235:5;-1:-1:-1;;;;;22227:27:0;;;:69;;;;;:::i;:::-;22311:17;;22201:95;;-1:-1:-1;22311:21:0;22307:224;;22453:10;22442:30;;;;;;;;;;;;:::i;:::-;22434:85;;;;-1:-1:-1;;;22434:85:0;;11837:2:1;22434:85:0;;;11819:21:1;11876:2;11856:18;;;11849:30;11915:34;11895:18;;;11888:62;-1:-1:-1;;;11966:18:1;;;11959:40;12016:19;;22434:85:0;11809:232:1;13839:196:0;13942:12;13974:53;13997:6;14005:4;14011:1;14014:12;13974:22;:53::i;:::-;13967:60;13839:196;-1:-1:-1;;;;13839:196:0:o;15216:979::-;15346:12;11288:20;;15371:60;;;;-1:-1:-1;;;15371:60:0;;11132:2:1;15371:60:0;;;11114:21:1;11171:2;11151:18;;;11144:30;11210:31;11190:18;;;11183:59;11259:18;;15371:60:0;11104:179:1;15371:60:0;15505:12;15519:23;15546:6;-1:-1:-1;;;;;15546:11:0;15566:8;15577:4;15546:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15504:78;;;;15597:7;15593:595;;;15628:10;-1:-1:-1;15621:17:0;;-1:-1:-1;15621:17:0;15593:595;15742:17;;:21;15738:439;;16005:10;15999:17;16066:15;16053:10;16049:2;16045:19;16038:44;15738:439;16148:12;16141:20;;-1:-1:-1;;;16141:20:0;;;;;;;;:::i;14:159:1:-;81:20;;141:6;130:18;;120:29;;110:2;;163:1;160;153:12;110:2;62:111;;;:::o;178:247::-;237:6;290:2;278:9;269:7;265:23;261:32;258:2;;;306:1;303;296:12;258:2;345:9;332:23;364:31;389:5;364:31;:::i;430:245::-;497:6;550:2;538:9;529:7;525:23;521:32;518:2;;;566:1;563;556:12;518:2;598:9;592:16;617:28;639:5;617:28;:::i;946:180::-;1005:6;1058:2;1046:9;1037:7;1033:23;1029:32;1026:2;;;1074:1;1071;1064:12;1026:2;-1:-1:-1;1097:23:1;;1016:110;-1:-1:-1;1016:110:1:o;1131:184::-;1201:6;1254:2;1242:9;1233:7;1229:23;1225:32;1222:2;;;1270:1;1267;1260:12;1222:2;-1:-1:-1;1293:16:1;;1212:103;-1:-1:-1;1212:103:1:o;1320:315::-;1388:6;1396;1449:2;1437:9;1428:7;1424:23;1420:32;1417:2;;;1465:1;1462;1455:12;1417:2;1501:9;1488:23;1478:33;;1561:2;1550:9;1546:18;1533:32;1574:31;1599:5;1574:31;:::i;:::-;1624:5;1614:15;;;1407:228;;;;;:::o;1640:537::-;1736:6;1744;1752;1760;1813:3;1801:9;1792:7;1788:23;1784:33;1781:2;;;1830:1;1827;1820:12;1781:2;1866:9;1853:23;1843:33;;1926:2;1915:9;1911:18;1898:32;1939:31;1964:5;1939:31;:::i;:::-;1989:5;-1:-1:-1;2013:37:1;2046:2;2031:18;;2013:37;:::i;:::-;2003:47;;2102:2;2091:9;2087:18;2074:32;2115:30;2137:7;2115:30;:::i;:::-;1771:406;;;;-1:-1:-1;1771:406:1;;-1:-1:-1;;1771:406:1:o;2182:248::-;2250:6;2258;2311:2;2299:9;2290:7;2286:23;2282:32;2279:2;;;2327:1;2324;2317:12;2279:2;-1:-1:-1;;2350:23:1;;;2420:2;2405:18;;;2392:32;;-1:-1:-1;2269:161:1:o;2435:320::-;2511:6;2519;2527;2580:2;2568:9;2559:7;2555:23;2551:32;2548:2;;;2596:1;2593;2586:12;2548:2;2632:9;2619:23;2609:33;;2689:2;2678:9;2674:18;2661:32;2651:42;;2712:37;2745:2;2734:9;2730:18;2712:37;:::i;:::-;2702:47;;2538:217;;;;;:::o;2760:274::-;2889:3;2927:6;2921:13;2943:53;2989:6;2984:3;2977:4;2969:6;2965:17;2943:53;:::i;:::-;3012:16;;;;;2897:137;-1:-1:-1;;2897:137:1:o;5663:383::-;5812:2;5801:9;5794:21;5775:4;5844:6;5838:13;5887:6;5882:2;5871:9;5867:18;5860:34;5903:66;5962:6;5957:2;5946:9;5942:18;5937:2;5929:6;5925:15;5903:66;:::i;:::-;6030:2;6009:15;-1:-1:-1;;6005:29:1;5990:45;;;;6037:2;5986:54;;5784:262;-1:-1:-1;;5784:262:1:o;10166:356::-;10368:2;10350:21;;;10387:18;;;10380:30;10446:34;10441:2;10426:18;;10419:62;10513:2;10498:18;;10340:182::o;12046:355::-;12248:2;12230:21;;;12287:2;12267:18;;;12260:30;12326:33;12321:2;12306:18;;12299:61;12392:2;12377:18;;12220:181::o;12841:128::-;12881:3;12912:1;12908:6;12905:1;12902:13;12899:2;;;12918:18;;:::i;:::-;-1:-1:-1;12954:9:1;;12889:80::o;12974:217::-;13014:1;13040;13030:2;;13084:10;13079:3;13075:20;13072:1;13065:31;13119:4;13116:1;13109:15;13147:4;13144:1;13137:15;13030:2;-1:-1:-1;13176:9:1;;13020:171::o;13196:168::-;13236:7;13302:1;13298;13294:6;13290:14;13287:1;13284:21;13279:1;13272:9;13265:17;13261:45;13258:2;;;13309:18;;:::i;:::-;-1:-1:-1;13349:9:1;;13248:116::o;13369:125::-;13409:4;13437:1;13434;13431:8;13428:2;;;13442:18;;:::i;:::-;-1:-1:-1;13479:9:1;;13418:76::o;13499:258::-;13571:1;13581:113;13595:6;13592:1;13589:13;13581:113;;;13671:11;;;13665:18;13652:11;;;13645:39;13617:2;13610:10;13581:113;;;13712:6;13709:1;13706:13;13703:2;;;-1:-1:-1;;13747:1:1;13729:16;;13722:27;13552:205::o;13762:135::-;13801:3;-1:-1:-1;;13822:17:1;;13819:2;;;13842:18;;:::i;:::-;-1:-1:-1;13889:1:1;13878:13;;13809:88::o;13902:127::-;13963:10;13958:3;13954:20;13951:1;13944:31;13994:4;13991:1;13984:15;14018:4;14015:1;14008:15;14034:127;14095:10;14090:3;14086:20;14083:1;14076:31;14126:4;14123:1;14116:15;14150:4;14147:1;14140:15;14166:131;-1:-1:-1;;;;;14241:31:1;;14231:42;;14221:2;;14287:1;14284;14277:12;14221:2;14211:86;:::o;14302:118::-;14388:5;14381:13;14374:21;14367:5;14364:32;14354:2;;14410:1;14407;14400:12
Swarm Source
ipfs://f91a23f01a1f83ea1ec3bccd99372f1aaf2e58290afac550abe86cd80ed29f6d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.