More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,151 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 20234679 | 35 days ago | IN | 0 ETH | 0.00084409 | ||||
Withdraw | 18845291 | 230 days ago | IN | 0 ETH | 0.00172142 | ||||
Withdraw | 18492780 | 279 days ago | IN | 0 ETH | 0.00257268 | ||||
Withdraw | 18468750 | 283 days ago | IN | 0 ETH | 0.00106758 | ||||
Withdraw | 18428087 | 288 days ago | IN | 0 ETH | 0.00361747 | ||||
Withdraw | 17936391 | 357 days ago | IN | 0 ETH | 0.00240412 | ||||
Withdraw | 17921472 | 359 days ago | IN | 0 ETH | 0.00268979 | ||||
Withdraw | 17914178 | 360 days ago | IN | 0 ETH | 0.00390111 | ||||
Withdraw | 17530302 | 414 days ago | IN | 0 ETH | 0.0019169 | ||||
Withdraw | 17028805 | 485 days ago | IN | 0 ETH | 0.00196437 | ||||
Withdraw | 16515097 | 557 days ago | IN | 0 ETH | 0.00171132 | ||||
Withdraw | 16237621 | 596 days ago | IN | 0 ETH | 0.00094128 | ||||
Withdraw | 16148909 | 608 days ago | IN | 0 ETH | 0.00205039 | ||||
Withdraw | 16148887 | 608 days ago | IN | 0 ETH | 0.00261768 | ||||
Withdraw | 16134597 | 610 days ago | IN | 0 ETH | 0.00337306 | ||||
Withdraw | 16007079 | 628 days ago | IN | 0 ETH | 0.00107127 | ||||
Create Card | 15988755 | 631 days ago | IN | 0 ETH | 0.00162517 | ||||
Withdraw | 15971936 | 633 days ago | IN | 0 ETH | 0.00118866 | ||||
Create Card | 15866468 | 648 days ago | IN | 0 ETH | 0.00081168 | ||||
Withdraw | 15849100 | 650 days ago | IN | 0 ETH | 0.00158652 | ||||
Withdraw | 15678957 | 674 days ago | IN | 0 ETH | 0.00067834 | ||||
Withdraw | 15598784 | 685 days ago | IN | 0 ETH | 0.00059959 | ||||
Withdraw | 15594413 | 686 days ago | IN | 0 ETH | 0.00042082 | ||||
Withdraw | 15594384 | 686 days ago | IN | 0 ETH | 0.00064395 | ||||
Withdraw | 15594367 | 686 days ago | IN | 0 ETH | 0.00057222 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
EddaNftStake
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-03-26 */ pragma solidity ^0.6.6; // SPDX-License-Identifier: MIT /* * @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 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; } } // SPDX-License-Identifier: MIT /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // SPDX-License-Identifier: MIT /** * @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; } } // SPDX-License-Identifier: MIT /** * @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); } // SPDX-License-Identifier: MIT interface IERC1155 { event TransferSingle( address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount ); event TransferBatch( address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts ); event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); event URI(string _amount, uint256 indexed _id); function mint( address _to, uint256 _id, uint256 _quantity, bytes calldata _data ) external; function create( uint256 _maxSupply, uint256 _initialSupply, string calldata _uri, bytes calldata _data ) external returns (uint256 tokenId); function safeTransferFrom( address _from, address _to, uint256 _id, uint256 _amount, bytes calldata _data ) external; function safeBatchTransferFrom( address _from, address _to, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data ) external; function balanceOf(address _owner, uint256 _id) external view returns (uint256); function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory); function setApprovalForAll(address _operator, bool _approved) external; function isApprovedForAll(address _owner, address _operator) external view returns (bool isOperator); } // SPDX-License-Identifier: MIT /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping(address => bool) bearer; } /** * @dev Give an account access to this role. */ function add(Role storage role, address account) internal { require(!has(role, account), "Roles: account already has role"); role.bearer[account] = true; } /** * @dev Remove an account's access to this role. */ function remove(Role storage role, address account) internal { require(has(role, account), "Roles: account does not have role"); role.bearer[account] = false; } /** * @dev Check if an account has this role. * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0), "Roles: account is the zero address"); return role.bearer[account]; } } // SPDX-License-Identifier: MIT contract PauserRole is Context { using Roles for Roles.Role; event PauserAdded(address indexed account); event PauserRemoved(address indexed account); Roles.Role private _pausers; constructor() internal { _addPauser(_msgSender()); } modifier onlyPauser() { require(isPauser(_msgSender()), "PauserRole: caller does not have the Pauser role"); _; } function isPauser(address account) public view returns (bool) { return _pausers.has(account); } function addPauser(address account) public onlyPauser { _addPauser(account); } function renouncePauser() public { _removePauser(_msgSender()); } function _addPauser(address account) internal { _pausers.add(account); emit PauserAdded(account); } function _removePauser(address account) internal { _pausers.remove(account); emit PauserRemoved(account); } } // SPDX-License-Identifier: MIT /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ contract Pausable is Context, PauserRole { /** * @dev Emitted when the pause is triggered by a pauser (`account`). */ event Paused(address account); /** * @dev Emitted when the pause is lifted by a pauser (`account`). */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. Assigns the Pauser role * to the deployer. */ constructor() internal { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } /** * @dev Called by a pauser to pause, triggers stopped state. */ function pause() public onlyPauser whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Called by a pauser to unpause, returns to normal state. */ function unpause() public onlyPauser whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // SPDX-License-Identifier: MIT /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // SPDX-License-Identifier: MIT /** * @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"); } } } // SPDX-License-Identifier: MIT contract PoolTokenWrapper { using SafeMath for uint256; using SafeERC20 for IERC20; IERC20 public token; constructor(IERC20 _erc20Address) public { token = IERC20(_erc20Address); } uint256 private _totalSupply; // Objects balances [id][address] => balance mapping(uint256 => mapping(address => uint256)) internal _balances; mapping(address => uint256) private _accountBalances; mapping(uint256 => uint256) private _poolBalances; function totalSupply() public view returns (uint256) { return _totalSupply; } function balanceOfAccount(address account) public view returns (uint256) { return _accountBalances[account]; } function balanceOfPool(uint256 id) public view returns (uint256) { return _poolBalances[id]; } function balanceOf(address account, uint256 id) public view returns (uint256) { return _balances[id][account]; } function stake(uint256 id, uint256 amount) public virtual { _totalSupply = _totalSupply.add(amount); _poolBalances[id] = _poolBalances[id].add(amount); _accountBalances[msg.sender] = _accountBalances[msg.sender].add(amount); _balances[id][msg.sender] = _balances[id][msg.sender].add(amount); token.safeTransferFrom(msg.sender, address(this), amount); } function withdraw(uint256 id, uint256 amount) public virtual { _totalSupply = _totalSupply.sub(amount); _poolBalances[id] = _poolBalances[id].sub(amount); _accountBalances[msg.sender] = _accountBalances[msg.sender].sub(amount); _balances[id][msg.sender] = _balances[id][msg.sender].sub(amount); token.safeTransfer(msg.sender, amount); } function transfer( uint256 fromId, uint256 toId, uint256 amount ) public virtual { _poolBalances[fromId] = _poolBalances[fromId].sub(amount); _balances[fromId][msg.sender] = _balances[fromId][msg.sender].sub(amount); _poolBalances[toId] = _poolBalances[toId].add(amount); _balances[toId][msg.sender] = _balances[toId][msg.sender].add(amount); } function _rescuePoints(address account, uint256 id) internal { uint256 amount = _balances[id][account]; _totalSupply = _totalSupply.sub(amount); _poolBalances[id] = _poolBalances[id].sub(amount); _accountBalances[msg.sender] = _accountBalances[msg.sender].sub(amount); _balances[id][account] = _balances[id][account].sub(amount); token.safeTransfer(account, amount); } } // SPDX-License-Identifier: MIT /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. * * _Since v2.5.0:_ this module is now much more gas efficient, given net gas * metering changes introduced in the Istanbul hardfork. */ contract ReentrancyGuard { bool private _notEntered; constructor() internal { // Storing an initial 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 percetange 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. _notEntered = true; } /** * @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(_notEntered, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _notEntered = false; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _notEntered = true; } } // SPDX-License-Identifier: MIT contract NftStake is PoolTokenWrapper, Ownable, Pausable, ReentrancyGuard { using SafeMath for uint256; IERC1155 public nfts; struct Card { uint256 points; uint256 releaseTime; uint256 mintFee; } struct Pool { uint256 periodStart; uint256 maxStake; uint256 rewardRate; // 11574074074000, 1 point per day per staked token uint256 feesCollected; uint256 spentPoints; uint256 controllerShare; address artist; mapping(address => uint256) lastUpdateTime; mapping(address => uint256) points; mapping(uint256 => Card) cards; } uint256 public constant MAX_CONTROLLER_SHARE = 1000; uint256 public constant MIN_CARD_POINTS = 1e17; address public controller; address public rescuer; mapping(address => uint256) public pendingWithdrawals; mapping(uint256 => Pool) public pools; event UpdatedArtist(uint256 poolId, address artist); event PoolAdded(uint256 poolId, address artist, uint256 periodStart, uint256 rewardRate, uint256 maxStake); event CardAdded(uint256 poolId, uint256 cardId, uint256 points, uint256 mintFee, uint256 releaseTime); event Staked(address indexed user, uint256 poolId, uint256 amount); event Withdrawn(address indexed user, uint256 poolId, uint256 amount); event Transferred(address indexed user, uint256 fromPoolId, uint256 toPoolId, uint256 amount); event Redeemed(address indexed user, uint256 poolId, uint256 amount); event CardPointsUpdated(uint256 poolId, uint256 cardId, uint256 points); modifier updateReward(address account, uint256 id) { if (account != address(0)) { pools[id].points[account] = earned(account, id); pools[id].lastUpdateTime[account] = block.timestamp; } _; } modifier poolExists(uint256 id) { require(pools[id].rewardRate > 0, "pool does not exists"); _; } modifier cardExists(uint256 pool, uint256 card) { require(pools[pool].cards[card].points > 0, "card does not exists"); _; } constructor( address _controller, IERC1155 _nftsAddress, IERC20 _tokenAddress ) public PoolTokenWrapper(_tokenAddress) { require(_controller != address(0), "Invalid controller"); controller = _controller; nfts = _nftsAddress; } function cardMintFee(uint256 pool, uint256 card) public view returns (uint256) { return pools[pool].cards[card].mintFee; } function cardReleaseTime(uint256 pool, uint256 card) public view returns (uint256) { return pools[pool].cards[card].releaseTime; } function cardPoints(uint256 pool, uint256 card) public view returns (uint256) { return pools[pool].cards[card].points; } function earned(address account, uint256 pool) public view returns (uint256) { Pool storage p = pools[pool]; uint256 blockTime = block.timestamp; return balanceOf(account, pool).mul(blockTime.sub(p.lastUpdateTime[account]).mul(p.rewardRate)).div(1e18).add( p.points[account] ); } // override PoolTokenWrapper's stake() function function stake(uint256 pool, uint256 amount) public override poolExists(pool) updateReward(msg.sender, pool) whenNotPaused() nonReentrant { Pool memory p = pools[pool]; require(block.timestamp >= p.periodStart, "pool not open"); require(amount.add(balanceOf(msg.sender, pool)) <= p.maxStake, "stake exceeds max"); super.stake(pool, amount); emit Staked(msg.sender, pool, amount); } // override PoolTokenWrapper's withdraw() function function withdraw(uint256 pool, uint256 amount) public override poolExists(pool) updateReward(msg.sender, pool) nonReentrant { require(amount > 0, "cannot withdraw 0"); super.withdraw(pool, amount); emit Withdrawn(msg.sender, pool, amount); } // override PoolTokenWrapper's transfer() function function transfer( uint256 fromPool, uint256 toPool, uint256 amount ) public override poolExists(fromPool) poolExists(toPool) updateReward(msg.sender, fromPool) updateReward(msg.sender, toPool) whenNotPaused() nonReentrant { Pool memory toP = pools[toPool]; require(block.timestamp >= toP.periodStart, "pool not open"); require(amount.add(balanceOf(msg.sender, toPool)) <= toP.maxStake, "stake exceeds max"); super.transfer(fromPool, toPool, amount); emit Transferred(msg.sender, fromPool, toPool, amount); } function transferAll(uint256 fromPool, uint256 toPool) external nonReentrant { transfer(fromPool, toPool, balanceOf(msg.sender, fromPool)); } function exit(uint256 pool) external { withdraw(pool, balanceOf(msg.sender, pool)); } function redeem(uint256 pool, uint256 card) public payable poolExists(pool) cardExists(pool, card) updateReward(msg.sender, pool) nonReentrant { Pool storage p = pools[pool]; Card memory c = p.cards[card]; require(block.timestamp >= c.releaseTime, "card not released"); require(p.points[msg.sender] >= c.points, "not enough points"); require(msg.value == c.mintFee, "support our artists, send eth"); if (c.mintFee > 0) { uint256 _controllerShare = msg.value.mul(p.controllerShare).div(MAX_CONTROLLER_SHARE); uint256 _artistRoyalty = msg.value.sub(_controllerShare); require(_artistRoyalty.add(_controllerShare) == msg.value, "problem with fee"); p.feesCollected = p.feesCollected.add(c.mintFee); pendingWithdrawals[controller] = pendingWithdrawals[controller].add(_controllerShare); pendingWithdrawals[p.artist] = pendingWithdrawals[p.artist].add(_artistRoyalty); } p.points[msg.sender] = p.points[msg.sender].sub(c.points); p.spentPoints = p.spentPoints.add(c.points); nfts.mint(msg.sender, card, 1, ""); emit Redeemed(msg.sender, pool, c.points); } function rescuePoints(address account, uint256 pool) public poolExists(pool) updateReward(account, pool) nonReentrant returns (uint256) { require(msg.sender == rescuer, "!rescuer"); Pool storage p = pools[pool]; uint256 earnedPoints = p.points[account]; p.spentPoints = p.spentPoints.add(earnedPoints); p.points[account] = 0; // transfer remaining tokens to the account if (balanceOf(account, pool) > 0) { _rescuePoints(account, pool); } emit Redeemed(account, pool, earnedPoints); return earnedPoints; } function setArtist(uint256 pool_, address artist_) public onlyOwner poolExists(pool_) nonReentrant { require(artist_ != address(0), "Invalid artist"); address oldArtist = pools[pool_].artist; pendingWithdrawals[artist_] = pendingWithdrawals[artist_].add(pendingWithdrawals[oldArtist]); pendingWithdrawals[oldArtist] = 0; pools[pool_].artist = artist_; emit UpdatedArtist(pool_, artist_); } function setController(address _controller) public onlyOwner nonReentrant { require(_controller != address(0), "Invalid controller"); pendingWithdrawals[_controller] = pendingWithdrawals[_controller].add(pendingWithdrawals[controller]); pendingWithdrawals[controller] = 0; controller = _controller; } function setRescuer(address _rescuer) public onlyOwner nonReentrant { rescuer = _rescuer; } function setControllerShare(uint256 pool, uint256 _controllerShare) public onlyOwner poolExists(pool) nonReentrant { require(_controllerShare <= MAX_CONTROLLER_SHARE, "Incorrect controller share"); pools[pool].controllerShare = _controllerShare; } function addCard( uint256 pool, uint256 id, uint256 points, uint256 mintFee, uint256 releaseTime ) public onlyOwner poolExists(pool) nonReentrant { require(points >= MIN_CARD_POINTS, "Points too small"); Card storage c = pools[pool].cards[id]; c.points = points; c.releaseTime = releaseTime; c.mintFee = mintFee; emit CardAdded(pool, id, points, mintFee, releaseTime); } function createCard( uint256 pool, uint256 supply, uint256 points, uint256 mintFee, uint256 releaseTime ) public onlyOwner poolExists(pool) nonReentrant returns (uint256) { require(points >= MIN_CARD_POINTS, "Points too small"); uint256 tokenId = nfts.create(supply, 0, "", ""); require(tokenId > 0, "ERC1155 create did not succeed"); Card storage c = pools[pool].cards[tokenId]; c.points = points; c.releaseTime = releaseTime; c.mintFee = mintFee; emit CardAdded(pool, tokenId, points, mintFee, releaseTime); return tokenId; } function createPool( uint256 id, uint256 periodStart, uint256 maxStake, uint256 rewardRate, uint256 controllerShare, address artist ) public onlyOwner nonReentrant returns (uint256) { require(rewardRate > 0, "Invalid rewardRate"); require(pools[id].rewardRate == 0, "pool exists"); require(artist != address(0), "Invalid artist"); require(controllerShare <= MAX_CONTROLLER_SHARE, "Incorrect controller share"); Pool storage p = pools[id]; p.periodStart = periodStart; p.maxStake = maxStake; p.rewardRate = rewardRate; p.controllerShare = controllerShare; p.artist = artist; emit PoolAdded(id, artist, periodStart, rewardRate, maxStake); } function withdrawFee() public nonReentrant { uint256 amount = pendingWithdrawals[msg.sender]; require(amount > 0, "nothing to withdraw"); pendingWithdrawals[msg.sender] = 0; msg.sender.transfer(amount); } // For development and QA function assignPointsTo( uint256 pool_, address tester_, uint256 points_ ) public onlyOwner poolExists(pool_) nonReentrant returns (uint256) { Pool storage p = pools[pool_]; p.points[tester_] = points_; // rescue continues return p.points[tester_]; } /** * @dev Updates card points * @param poolId_ uint256 ID of the pool * @param cardId_ uint256 ID of the card to update * @param points_ uint256 new "points" value */ function updateCardPoints( uint256 poolId_, uint256 cardId_, uint256 points_ ) public onlyOwner poolExists(poolId_) cardExists(poolId_, cardId_) nonReentrant { require(points_ >= MIN_CARD_POINTS, "Points too small"); Card storage c = pools[poolId_].cards[cardId_]; c.points = points_; emit CardPointsUpdated(poolId_, cardId_, points_); } } // SPDX-License-Identifier: MIT contract EddaNftStake is NftStake { constructor( address _controller, IERC1155 _nftsAddress, IERC20 _tokenAddress ) public NftStake(_controller, _nftsAddress, _tokenAddress) {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_controller","type":"address"},{"internalType":"contract IERC1155","name":"_nftsAddress","type":"address"},{"internalType":"contract IERC20","name":"_tokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cardId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"points","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"releaseTime","type":"uint256"}],"name":"CardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cardId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"points","type":"uint256"}],"name":"CardPointsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"PauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"PauserRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"address","name":"artist","type":"address"},{"indexed":false,"internalType":"uint256","name":"periodStart","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxStake","type":"uint256"}],"name":"PoolAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Redeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromPoolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toPoolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"address","name":"artist","type":"address"}],"name":"UpdatedArtist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"MAX_CONTROLLER_SHARE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_CARD_POINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pool","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"uint256","name":"mintFee","type":"uint256"},{"internalType":"uint256","name":"releaseTime","type":"uint256"}],"name":"addCard","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addPauser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pool_","type":"uint256"},{"internalType":"address","name":"tester_","type":"address"},{"internalType":"uint256","name":"points_","type":"uint256"}],"name":"assignPointsTo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOfAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOfPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pool","type":"uint256"},{"internalType":"uint256","name":"card","type":"uint256"}],"name":"cardMintFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pool","type":"uint256"},{"internalType":"uint256","name":"card","type":"uint256"}],"name":"cardPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pool","type":"uint256"},{"internalType":"uint256","name":"card","type":"uint256"}],"name":"cardReleaseTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pool","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"uint256","name":"mintFee","type":"uint256"},{"internalType":"uint256","name":"releaseTime","type":"uint256"}],"name":"createCard","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"periodStart","type":"uint256"},{"internalType":"uint256","name":"maxStake","type":"uint256"},{"internalType":"uint256","name":"rewardRate","type":"uint256"},{"internalType":"uint256","name":"controllerShare","type":"uint256"},{"internalType":"address","name":"artist","type":"address"}],"name":"createPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"pool","type":"uint256"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pool","type":"uint256"}],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isPauser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nfts","outputs":[{"internalType":"contract IERC1155","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pendingWithdrawals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pools","outputs":[{"internalType":"uint256","name":"periodStart","type":"uint256"},{"internalType":"uint256","name":"maxStake","type":"uint256"},{"internalType":"uint256","name":"rewardRate","type":"uint256"},{"internalType":"uint256","name":"feesCollected","type":"uint256"},{"internalType":"uint256","name":"spentPoints","type":"uint256"},{"internalType":"uint256","name":"controllerShare","type":"uint256"},{"internalType":"address","name":"artist","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pool","type":"uint256"},{"internalType":"uint256","name":"card","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renouncePauser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"pool","type":"uint256"}],"name":"rescuePoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescuer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pool_","type":"uint256"},{"internalType":"address","name":"artist_","type":"address"}],"name":"setArtist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pool","type":"uint256"},{"internalType":"uint256","name":"_controllerShare","type":"uint256"}],"name":"setControllerShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rescuer","type":"address"}],"name":"setRescuer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pool","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"fromPool","type":"uint256"},{"internalType":"uint256","name":"toPool","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fromPool","type":"uint256"},{"internalType":"uint256","name":"toPool","type":"uint256"}],"name":"transferAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId_","type":"uint256"},{"internalType":"uint256","name":"cardId_","type":"uint256"},{"internalType":"uint256","name":"points_","type":"uint256"}],"name":"updateCardPoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pool","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFee","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200409a3803806200409a833981810160405260608110156200003757600080fd5b5080516020820151604090920151600080546001600160a01b0319166001600160a01b038316178155919291839083908390620000736200018e565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620000e7620000d86001600160e01b036200018e16565b6001600160e01b036200019216565b6007805461ffff19166101001790556001600160a01b03831662000147576040805162461bcd60e51b815260206004820152601260248201527124b73b30b634b21031b7b73a3937b63632b960711b604482015290519081900360640190fd5b50600880546001600160a01b039384166001600160a01b03199091161790556007805491909216620100000262010000600160b01b031990911617905550620002da915050565b3390565b620001ad816006620001e460201b620038761790919060201c565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b620001f982826001600160e01b036200027116565b156200024c576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b038216620002ba5760405162461bcd60e51b8152600401808060200182810382526022815260200180620040786022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b613d8e80620002ea6000396000f3fe6080604052600436106102505760003560e01c806392eefe9b11610139578063e1039f48116100b6578063f2fde38b1161007a578063f2fde38b146108ca578063f3f43703146108fd578063f4dcb1eb14610930578063f77c479114610960578063fb23373314610975578063fc0c546a146109a557610250565b8063e1039f48146107fe578063e3d6e69f1461082e578063e851ef2d1461085e578063e941fa7814610873578063ecef6c3b1461088857610250565b8063be109c65116100fd578063be109c65146106ed578063c07bf52a1461071d578063c237d3921461075f578063cd5cecf814610792578063d76a386a146107c557610250565b806392eefe9b146105cb57806397dbe004146105fe578063a6c985be14610634578063ac4afa3814610649578063ae6346c3146106b457610250565b8063480d42bd116101d25780637cbc2373116101965780637cbc2373146104eb5780637f8661a11461050e57806382dc1ec4146105385780638456cb591461056b5780638da5cb5b1461058057806390dd26271461059557610250565b8063480d42bd1461042b5780635c975abb1461047c5780636ef8d66d14610491578063715018a6146104a65780637b0472f0146104bb57610250565b806338a631831161021957806338a631831461034f5780633e491d47146103645780633f4ba83a1461039d578063441a3e70146103b457806346fbf68e146103e457610250565b8062fdd58e146102555780630d749cec146102a05780631714f2e0146102ca57806318160ddd146102fb5780633417cfce14610310575b600080fd5b34801561026157600080fd5b5061028e6004803603604081101561027857600080fd5b506001600160a01b0381351690602001356109ba565b60408051918252519081900360200190f35b3480156102ac57600080fd5b5061028e600480360360208110156102c357600080fd5b50356109e4565b3480156102d657600080fd5b506102df6109f6565b604080516001600160a01b039092168252519081900360200190f35b34801561030757600080fd5b5061028e610a0b565b34801561031c57600080fd5b5061028e6004803603606081101561033357600080fd5b508035906001600160a01b036020820135169060400135610a11565b34801561035b57600080fd5b506102df610b55565b34801561037057600080fd5b5061028e6004803603604081101561038757600080fd5b506001600160a01b038135169060200135610b64565b3480156103a957600080fd5b506103b2610c04565b005b3480156103c057600080fd5b506103b2600480360360408110156103d757600080fd5b5080359060200135610ced565b3480156103f057600080fd5b506104176004803603602081101561040757600080fd5b50356001600160a01b0316610e7d565b604080519115158252519081900360200190f35b34801561043757600080fd5b5061028e600480360360c081101561044e57600080fd5b5080359060208101359060408101359060608101359060808101359060a001356001600160a01b0316610e90565b34801561048857600080fd5b50610417611129565b34801561049d57600080fd5b506103b2611132565b3480156104b257600080fd5b506103b2611144565b3480156104c757600080fd5b506103b2600480360360408110156104de57600080fd5b50803590602001356111e6565b6103b26004803603604081101561050157600080fd5b5080359060200135611496565b34801561051a57600080fd5b506103b26004803603602081101561053157600080fd5b50356119a4565b34801561054457600080fd5b506103b26004803603602081101561055b57600080fd5b50356001600160a01b03166119ba565b34801561057757600080fd5b506103b2611a09565b34801561058c57600080fd5b506102df611ad0565b3480156105a157600080fd5b506103b2600480360360608110156105b857600080fd5b5080359060208101359060400135611adf565b3480156105d757600080fd5b506103b2600480360360208110156105ee57600080fd5b50356001600160a01b0316611e38565b34801561060a57600080fd5b506103b26004803603606081101561062157600080fd5b5080359060208101359060400135611fb8565b34801561064057600080fd5b5061028e6121e6565b34801561065557600080fd5b506106736004803603602081101561066c57600080fd5b50356121ec565b604080519788526020880196909652868601949094526060860192909252608085015260a08401526001600160a01b031660c0830152519081900360e00190f35b3480156106c057600080fd5b5061028e600480360360408110156106d757600080fd5b506001600160a01b038135169060200135612232565b3480156106f957600080fd5b5061028e6004803603604081101561071057600080fd5b508035906020013561244c565b34801561072957600080fd5b5061028e600480360360a081101561074057600080fd5b508035906020810135906040810135906060810135906080013561246d565b34801561076b57600080fd5b5061028e6004803603602081101561078257600080fd5b50356001600160a01b031661274d565b34801561079e57600080fd5b506103b2600480360360208110156107b557600080fd5b50356001600160a01b0316612768565b3480156107d157600080fd5b506103b2600480360360408110156107e857600080fd5b50803590602001356001600160a01b031661283f565b34801561080a57600080fd5b506103b26004803603604081101561082157600080fd5b5080359060200135612a64565b34801561083a57600080fd5b5061028e6004803603604081101561085157600080fd5b5080359060200135612be0565b34801561086a57600080fd5b5061028e612c04565b34801561087f57600080fd5b506103b2612c10565b34801561089457600080fd5b506103b2600480360360a08110156108ab57600080fd5b5080359060208101359060408101359060608101359060800135612d0b565b3480156108d657600080fd5b506103b2600480360360208110156108ed57600080fd5b50356001600160a01b0316612eec565b34801561090957600080fd5b5061028e6004803603602081101561092057600080fd5b50356001600160a01b0316612fe5565b34801561093c57600080fd5b506103b26004803603604081101561095357600080fd5b5080359060200135612ff7565b34801561096c57600080fd5b506102df613060565b34801561098157600080fd5b5061028e6004803603604081101561099857600080fd5b508035906020013561306f565b3480156109b157600080fd5b506102df613093565b60008181526002602090815260408083206001600160a01b03861684529091529020545b92915050565b60009081526004602052604090205490565b6007546201000090046001600160a01b031681565b60015490565b6000610a1b6130a2565b6005546001600160a01b03908116911614610a6b576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b6000848152600b60205260409020600201548490610abe576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b600754610100900460ff16610b08576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff00191690556000858152600b602090815260408083206001600160a01b03881684526008019091529020839055829150506007805461ff0019166101001790559392505050565b6009546001600160a01b031681565b6000818152600b602090815260408083206001600160a01b0386168452600881018352818420546002820154600783019094529184205490924292610bfb929091610bef91670de0b6b3a764000091610be391610bd99190610bcd90899063ffffffff6130a616565b9063ffffffff6130ef16565b610bcd8b8b6109ba565b9063ffffffff61314816565b9063ffffffff61318a16565b95945050505050565b610c14610c0f6130a2565b610e7d565b610c4f5760405162461bcd60e51b8152600401808060200182810382526030815260200180613c0f6030913960400191505060405180910390fd5b60075460ff16610c9d576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6007805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610cd06130a2565b604080516001600160a01b039092168252519081900360200190a1565b6000828152600b60205260409020600201548290610d40576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b33838115610d8857610d528282610b64565b6000828152600b602090815260408083206001600160a01b03871684526008810183528184209490945560079093019052204290555b600754610100900460ff16610dd2576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff001916905583610e23576040805162461bcd60e51b8152602060048201526011602482015270063616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b610e2d85856131e4565b6040805186815260208101869052815133927f92ccf450a286a957af52509bc1c9939d1a6a481783e142e41e2499f0bb66ebc6928290030190a250506007805461ff001916610100179055505050565b60006109de60068363ffffffff6132b816565b6000610e9a6130a2565b6005546001600160a01b03908116911614610eea576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b600754610100900460ff16610f34576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff001916905583610f86576040805162461bcd60e51b8152602060048201526012602482015271496e76616c6964207265776172645261746560701b604482015290519081900360640190fd5b6000878152600b602052604090206002015415610fd8576040805162461bcd60e51b815260206004820152600b60248201526a706f6f6c2065786973747360a81b604482015290519081900360640190fd5b6001600160a01b038216611024576040805162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185c9d1a5cdd60921b604482015290519081900360640190fd5b6103e883111561107b576040805162461bcd60e51b815260206004820152601a60248201527f496e636f727265637420636f6e74726f6c6c6572207368617265000000000000604482015290519081900360640190fd5b6000878152600b60209081526040918290208881556001810188905560028101879055600581018690556006810180546001600160a01b0387166001600160a01b0319909116811790915583518b815292830152818301899052606082018790526080820188905291517fdcad60f82308d160bd8a3814cf84788a2c98294718485b86d238d14cbf166dab9181900360a00190a1506007805461ff0019166101001790559695505050505050565b60075460ff1690565b61114261113d6130a2565b61331f565b565b61114c6130a2565b6005546001600160a01b0390811691161461119c576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6000828152600b60205260409020600201548290611239576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b338381156112815761124b8282610b64565b6000828152600b602090815260408083206001600160a01b03871684526008810183528184209490945560079093019052204290555b60075460ff16156112cc576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600754610100900460ff16611316576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff0019169055611329613b87565b506000858152600b6020908152604091829020825160e08101845281548082526001830154938201939093526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600601546001600160a01b031660c08301524210156113d5576040805162461bcd60e51b815260206004820152600d60248201526c3837b7b6103737ba1037b832b760991b604482015290519081900360640190fd5b80602001516113f46113e733896109ba565b879063ffffffff61318a16565b111561143b576040805162461bcd60e51b81526020600482015260116024820152700e6e8c2d6ca40caf0c6cacac8e640dac2f607b1b604482015290519081900360640190fd5b6114458686613367565b6040805187815260208101879052815133927f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee90928290030190a250506007805461ff00191661010017905550505050565b6000828152600b602052604090206002015482906114e9576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b6000838152600b6020908152604080832085845260090190915290205483908390611552576040805162461bcd60e51b81526020600482015260146024820152736361726420646f6573206e6f742065786973747360601b604482015290519081900360640190fd5b3385811561159a576115648282610b64565b6000828152600b602090815260408083206001600160a01b03871684526008810183528184209490945560079093019052204290555b600754610100900460ff166115e4576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff00191690556000878152600b60205260409020611605613bcd565b506000878152600982016020908152604091829020825160608101845281548152600182015492810183905260029091015492810192909252421015611686576040805162461bcd60e51b815260206004820152601160248201527018d85c99081b9bdd081c995b19585cd959607a1b604482015290519081900360640190fd5b805133600090815260088401602052604090205410156116e1576040805162461bcd60e51b81526020600482015260116024820152706e6f7420656e6f75676820706f696e747360781b604482015290519081900360640190fd5b80604001513414611739576040805162461bcd60e51b815260206004820152601d60248201527f737570706f7274206f757220617274697374732c2073656e6420657468000000604482015290519081900360640190fd5b6040810151156118745760006117626103e8610be38560050154346130ef90919063ffffffff16565b90506000611776348363ffffffff6130a616565b905034611789828463ffffffff61318a16565b146117ce576040805162461bcd60e51b815260206004820152601060248201526f70726f626c656d20776974682066656560801b604482015290519081900360640190fd5b604083015160038501546117e79163ffffffff61318a16565b60038501556008546001600160a01b03166000908152600a6020526040902054611817908363ffffffff61318a16565b6008546001600160a01b039081166000908152600a602052604080822093909355600687015490911681522054611854908263ffffffff61318a16565b60068501546001600160a01b03166000908152600a602052604090205550505b80513360009081526008840160205260409020546118979163ffffffff6130a616565b336000908152600884016020526040902055805160048301546118bf9163ffffffff61318a16565b6004838101919091556007546040805163731133e960e01b81523393810193909352602483018b905260016044840152608060648401526000608484018190529051620100009092046001600160a01b03169263731133e99260c4808301939282900301818387803b15801561193457600080fd5b505af1158015611948573d6000803e3d6000fd5b50508251604080518d8152602081019290925280513394507ff3a670cd3af7d64b488926880889d08a8585a138ff455227af6737339a1ec2629350918290030190a250506007805461ff00191661010017905550505050505050565b6119b7816119b233846109ba565b610ced565b50565b6119c5610c0f6130a2565b611a005760405162461bcd60e51b8152600401808060200182810382526030815260200180613c0f6030913960400191505060405180910390fd5b6119b781613438565b611a14610c0f6130a2565b611a4f5760405162461bcd60e51b8152600401808060200182810382526030815260200180613c0f6030913960400191505060405180910390fd5b60075460ff1615611a9a576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6007805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610cd06130a2565b6005546001600160a01b031690565b6000838152600b60205260409020600201548390611b32576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b6000838152600b60205260409020600201548390611b85576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b33858115611bcd57611b978282610b64565b6000828152600b602090815260408083206001600160a01b03871684526008810183528184209490945560079093019052204290555b33868115611c1557611bdf8282610b64565b6000828152600b602090815260408083206001600160a01b03871684526008810183528184209490945560079093019052204290555b60075460ff1615611c60576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600754610100900460ff16611caa576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff0019169055611cbd613b87565b506000888152600b6020908152604091829020825160e08101845281548082526001830154938201939093526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600601546001600160a01b031660c0830152421015611d69576040805162461bcd60e51b815260206004820152600d60248201526c3837b7b6103737ba1037b832b760991b604482015290519081900360640190fd5b8060200151611d88611d7b338c6109ba565b8a9063ffffffff61318a16565b1115611dcf576040805162461bcd60e51b81526020600482015260116024820152700e6e8c2d6ca40caf0c6cacac8e640dac2f607b1b604482015290519081900360640190fd5b611dda8a8a8a613480565b604080518b8152602081018b90528082018a9052905133917f9ee37244ba9f5d4982dfc3452c1cea0d297249501a9ef8040a9e646f336717b4919081900360600190a250506007805461ff0019166101001790555050505050505050565b611e406130a2565b6005546001600160a01b03908116911614611e90576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b600754610100900460ff16611eda576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff00191690556001600160a01b038116611f35576040805162461bcd60e51b815260206004820152601260248201527124b73b30b634b21031b7b73a3937b63632b960711b604482015290519081900360640190fd5b6008546001600160a01b039081166000908152600a6020526040808220549284168252902054611f6a9163ffffffff61318a16565b6001600160a01b039182166000818152600a6020526040808220939093556008805490941681529182209190915581546001600160a01b0319161790556007805461ff001916610100179055565b611fc06130a2565b6005546001600160a01b03908116911614612010576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b6000838152600b60205260409020600201548390612063576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b6000848152600b60209081526040808320868452600901909152902054849084906120cc576040805162461bcd60e51b81526020600482015260146024820152736361726420646f6573206e6f742065786973747360601b604482015290519081900360640190fd5b600754610100900460ff16612116576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff001916905567016345785d8a0000841015612171576040805162461bcd60e51b815260206004820152601060248201526f141bda5b9d1cc81d1bdbc81cdb585b1b60821b604482015290519081900360640190fd5b6000868152600b60209081526040808320888452600901825291829020868155825189815291820188905281830187905291517f7f44217c30270346e29903ca783e4aeea3aaec36a14994e171b6b1bc2fff9a689181900360600190a150506007805461ff0019166101001790555050505050565b6103e881565b600b60205260009081526040902080546001820154600283015460038401546004850154600586015460069096015494959394929391929091906001600160a01b031687565b6000818152600b60205260408120600201548290612285576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b83836001600160a01b038216156122d6576122a08282610b64565b6000828152600b602090815260408083206001600160a01b03871684526008810183528184209490945560079093019052204290555b600754610100900460ff16612320576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff00191690556009546001600160a01b03163314612375576040805162461bcd60e51b815260206004820152600860248201526710b932b9b1bab2b960c11b604482015290519081900360640190fd5b6000858152600b602090815260408083206001600160a01b038a168452600881019092529091205460048201546123b2908263ffffffff61318a16565b60048301556001600160a01b038816600090815260088301602052604081208190556123de89896109ba565b11156123ee576123ee888861355d565b604080518881526020810183905281516001600160a01b038b16927ff3a670cd3af7d64b488926880889d08a8585a138ff455227af6737339a1ec262928290030190a294505050506007805461ff0019166101001790555092915050565b6000918252600b602090815260408084209284526009909201905290205490565b60006124776130a2565b6005546001600160a01b039081169116146124c7576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b6000868152600b6020526040902060020154869061251a576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b600754610100900460ff16612564576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff001916905567016345785d8a00008510156125bf576040805162461bcd60e51b815260206004820152601060248201526f141bda5b9d1cc81d1bdbc81cdb585b1b60821b604482015290519081900360640190fd5b6007546040805163b09ddf7b60e01b815260048101899052600060248201819052608060448301526084820181905260c0606483015260c48201819052915191926201000090046001600160a01b03169163b09ddf7b916101048082019260209290919082900301818787803b15801561263857600080fd5b505af115801561264c573d6000803e3d6000fd5b505050506040513d602081101561266257600080fd5b50519050806126b8576040805162461bcd60e51b815260206004820152601e60248201527f455243313135352063726561746520646964206e6f7420737563636565640000604482015290519081900360640190fd5b6000888152600b60209081526040808320848452600901825291829020888155600181018790556002810188905582518b8152918201849052818301899052606082018890526080820187905291517f91197497bafa5606f6e9834b08c79bc7774902e4207deec0a888032bd796a54d9181900360a00190a1509150506007805461ff00191661010017905595945050505050565b6001600160a01b031660009081526003602052604090205490565b6127706130a2565b6005546001600160a01b039081169116146127c0576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b600754610100900460ff1661280a576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b60078054600980546001600160a01b039094166001600160a01b03199094169390931790925561ff0019909116610100179055565b6128476130a2565b6005546001600160a01b03908116911614612897576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b6000828152600b602052604090206002015482906128ea576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b600754610100900460ff16612934576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff00191690556001600160a01b03821661298b576040805162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185c9d1a5cdd60921b604482015290519081900360640190fd5b6000838152600b60209081526040808320600601546001600160a01b03908116808552600a90935281842054908616845292205490916129d1919063ffffffff61318a16565b6001600160a01b038085166000818152600a60209081526040808320959095559285168152838120819055878152600b835283902060060180546001600160a01b0319168217905582518781529182015281517fcf297069128b7751fcf709170966c4c654bb1d79aea8cb8f23890cda40dac923929181900390910190a150506007805461ff0019166101001790555050565b612a6c6130a2565b6005546001600160a01b03908116911614612abc576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b6000828152600b60205260409020600201548290612b0f576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b600754610100900460ff16612b59576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff00191690556103e8821115612bbb576040805162461bcd60e51b815260206004820152601a60248201527f496e636f727265637420636f6e74726f6c6c6572207368617265000000000000604482015290519081900360640190fd5b506000918252600b6020526040909120600501556007805461ff001916610100179055565b6000918252600b602090815260408084209284526009909201905290206002015490565b67016345785d8a000081565b600754610100900460ff16612c5a576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff0019169055336000908152600a602052604090205480612cbd576040805162461bcd60e51b81526020600482015260136024820152726e6f7468696e6720746f20776974686472617760681b604482015290519081900360640190fd5b336000818152600a60205260408082208290555183156108fc0291849190818181858888f19350505050158015612cf8573d6000803e3d6000fd5b50506007805461ff001916610100179055565b612d136130a2565b6005546001600160a01b03908116911614612d63576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b6000858152600b60205260409020600201548590612db6576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b600754610100900460ff16612e00576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff001916905567016345785d8a0000841015612e5b576040805162461bcd60e51b815260206004820152601060248201526f141bda5b9d1cc81d1bdbc81cdb585b1b60821b604482015290519081900360640190fd5b6000868152600b6020908152604080832088845260090182529182902086815560018101859055600281018690558251898152918201889052818301879052606082018690526080820185905291517f91197497bafa5606f6e9834b08c79bc7774902e4207deec0a888032bd796a54d9181900360a00190a150506007805461ff0019166101001790555050505050565b612ef46130a2565b6005546001600160a01b03908116911614612f44576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b6001600160a01b038116612f895760405162461bcd60e51b8152600401808060200182810382526026815260200180613c3f6026913960400191505060405180910390fd5b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600a6020526000908152604090205481565b600754610100900460ff16613041576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff0019169055612cf8828261305b33836109ba565b611adf565b6008546001600160a01b031681565b6000918252600b602090815260408084209284526009909201905290206001015490565b6000546001600160a01b031681565b3390565b60006130e883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613661565b9392505050565b6000826130fe575060006109de565b8282028284828161310b57fe5b04146130e85760405162461bcd60e51b8152600401808060200182810382526021815260200180613cac6021913960400191505060405180910390fd5b60006130e883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136f8565b6000828201838110156130e8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001546131f7908263ffffffff6130a616565b600155600082815260046020526040902054613219908263ffffffff6130a616565b600083815260046020908152604080832093909355338252600390522054613247908263ffffffff6130a616565b3360008181526003602090815260408083209490945585825260028152838220928252919091522054613280908263ffffffff6130a616565b6000838152600260209081526040808320338085529252822092909255546132b4916001600160a01b03909116908361375d565b5050565b60006001600160a01b0382166132ff5760405162461bcd60e51b8152600401808060200182810382526022815260200180613ced6022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b61333060068263ffffffff6137af16565b6040516001600160a01b038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b60015461337a908263ffffffff61318a16565b60015560008281526004602052604090205461339c908263ffffffff61318a16565b6000838152600460209081526040808320939093553382526003905220546133ca908263ffffffff61318a16565b3360008181526003602090815260408083209490945585825260028152838220928252919091522054613403908263ffffffff61318a16565b6000838152600260209081526040808320338085529252822092909255546132b4916001600160a01b03909116903084613816565b61344960068263ffffffff61387616565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b60008381526004602052604090205461349f908263ffffffff6130a616565b60008481526004602090815260408083209390935560028152828220338352905220546134d2908263ffffffff6130a616565b6000848152600260209081526040808320338452825280832093909355848252600490522054613508908263ffffffff61318a16565b600083815260046020908152604080832093909355600281528282203383529052205461353b908263ffffffff61318a16565b6000928352600260209081526040808520338652909152909220919091555050565b60008181526002602090815260408083206001600160a01b0386168452909152902054600154613593908263ffffffff6130a616565b6001556000828152600460205260409020546135b5908263ffffffff6130a616565b6000838152600460209081526040808320939093553382526003905220546135e3908263ffffffff6130a616565b33600090815260036020908152604080832093909355848252600281528282206001600160a01b038716835290522054613623908263ffffffff6130a616565b60008381526002602090815260408083206001600160a01b03808916855292528220929092555461365c9116848363ffffffff61375d16565b505050565b600081848411156136f05760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156136b557818101518382015260200161369d565b50505050905090810190601f1680156136e25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836137475760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156136b557818101518382015260200161369d565b50600083858161375357fe5b0495945050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261365c9084906138f7565b6137b982826132b8565b6137f45760405162461bcd60e51b8152600401808060200182810382526021815260200180613c8b6021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526138709085906138f7565b50505050565b61388082826132b8565b156138d2576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b606061394c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166139a89092919063ffffffff16565b80519091501561365c5780806020019051602081101561396b57600080fd5b505161365c5760405162461bcd60e51b815260040180806020018281038252602a815260200180613d0f602a913960400191505060405180910390fd5b60606139b784846000856139bf565b949350505050565b606082471015613a005760405162461bcd60e51b8152600401808060200182810382526026815260200180613c656026913960400191505060405180910390fd5b613a0985613b1b565b613a5a576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310613a995780518252601f199092019160209182019101613a7a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613afb576040519150601f19603f3d011682016040523d82523d6000602084013e613b00565b606091505b5091509150613b10828286613b21565b979650505050505050565b3b151590565b60608315613b305750816130e8565b825115613b405782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156136b557818101518382015260200161369d565b6040518060e0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b6040518060600160405280600081526020016000815260200160008152509056fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c00506175736572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652050617573657220726f6c654f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f6c65733a206163636f756e7420697320746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564706f6f6c20646f6573206e6f7420657869737473000000000000000000000000a2646970667358221220b87fdfe23aeeb066fd45eac6a0961364868159a8a9597bd1d55f4ccf750462b064736f6c63430006060033526f6c65733a206163636f756e7420697320746865207a65726f206164647265737300000000000000000000000033e3da186e223acc94bc3484127eceb8b54b670400000000000000000000000097c548ac36d5a218bef504b5d5389b724355c5af000000000000000000000000fbbe9b1142c699512545f47937ee6fae0e4b0aa9
Deployed Bytecode
0x6080604052600436106102505760003560e01c806392eefe9b11610139578063e1039f48116100b6578063f2fde38b1161007a578063f2fde38b146108ca578063f3f43703146108fd578063f4dcb1eb14610930578063f77c479114610960578063fb23373314610975578063fc0c546a146109a557610250565b8063e1039f48146107fe578063e3d6e69f1461082e578063e851ef2d1461085e578063e941fa7814610873578063ecef6c3b1461088857610250565b8063be109c65116100fd578063be109c65146106ed578063c07bf52a1461071d578063c237d3921461075f578063cd5cecf814610792578063d76a386a146107c557610250565b806392eefe9b146105cb57806397dbe004146105fe578063a6c985be14610634578063ac4afa3814610649578063ae6346c3146106b457610250565b8063480d42bd116101d25780637cbc2373116101965780637cbc2373146104eb5780637f8661a11461050e57806382dc1ec4146105385780638456cb591461056b5780638da5cb5b1461058057806390dd26271461059557610250565b8063480d42bd1461042b5780635c975abb1461047c5780636ef8d66d14610491578063715018a6146104a65780637b0472f0146104bb57610250565b806338a631831161021957806338a631831461034f5780633e491d47146103645780633f4ba83a1461039d578063441a3e70146103b457806346fbf68e146103e457610250565b8062fdd58e146102555780630d749cec146102a05780631714f2e0146102ca57806318160ddd146102fb5780633417cfce14610310575b600080fd5b34801561026157600080fd5b5061028e6004803603604081101561027857600080fd5b506001600160a01b0381351690602001356109ba565b60408051918252519081900360200190f35b3480156102ac57600080fd5b5061028e600480360360208110156102c357600080fd5b50356109e4565b3480156102d657600080fd5b506102df6109f6565b604080516001600160a01b039092168252519081900360200190f35b34801561030757600080fd5b5061028e610a0b565b34801561031c57600080fd5b5061028e6004803603606081101561033357600080fd5b508035906001600160a01b036020820135169060400135610a11565b34801561035b57600080fd5b506102df610b55565b34801561037057600080fd5b5061028e6004803603604081101561038757600080fd5b506001600160a01b038135169060200135610b64565b3480156103a957600080fd5b506103b2610c04565b005b3480156103c057600080fd5b506103b2600480360360408110156103d757600080fd5b5080359060200135610ced565b3480156103f057600080fd5b506104176004803603602081101561040757600080fd5b50356001600160a01b0316610e7d565b604080519115158252519081900360200190f35b34801561043757600080fd5b5061028e600480360360c081101561044e57600080fd5b5080359060208101359060408101359060608101359060808101359060a001356001600160a01b0316610e90565b34801561048857600080fd5b50610417611129565b34801561049d57600080fd5b506103b2611132565b3480156104b257600080fd5b506103b2611144565b3480156104c757600080fd5b506103b2600480360360408110156104de57600080fd5b50803590602001356111e6565b6103b26004803603604081101561050157600080fd5b5080359060200135611496565b34801561051a57600080fd5b506103b26004803603602081101561053157600080fd5b50356119a4565b34801561054457600080fd5b506103b26004803603602081101561055b57600080fd5b50356001600160a01b03166119ba565b34801561057757600080fd5b506103b2611a09565b34801561058c57600080fd5b506102df611ad0565b3480156105a157600080fd5b506103b2600480360360608110156105b857600080fd5b5080359060208101359060400135611adf565b3480156105d757600080fd5b506103b2600480360360208110156105ee57600080fd5b50356001600160a01b0316611e38565b34801561060a57600080fd5b506103b26004803603606081101561062157600080fd5b5080359060208101359060400135611fb8565b34801561064057600080fd5b5061028e6121e6565b34801561065557600080fd5b506106736004803603602081101561066c57600080fd5b50356121ec565b604080519788526020880196909652868601949094526060860192909252608085015260a08401526001600160a01b031660c0830152519081900360e00190f35b3480156106c057600080fd5b5061028e600480360360408110156106d757600080fd5b506001600160a01b038135169060200135612232565b3480156106f957600080fd5b5061028e6004803603604081101561071057600080fd5b508035906020013561244c565b34801561072957600080fd5b5061028e600480360360a081101561074057600080fd5b508035906020810135906040810135906060810135906080013561246d565b34801561076b57600080fd5b5061028e6004803603602081101561078257600080fd5b50356001600160a01b031661274d565b34801561079e57600080fd5b506103b2600480360360208110156107b557600080fd5b50356001600160a01b0316612768565b3480156107d157600080fd5b506103b2600480360360408110156107e857600080fd5b50803590602001356001600160a01b031661283f565b34801561080a57600080fd5b506103b26004803603604081101561082157600080fd5b5080359060200135612a64565b34801561083a57600080fd5b5061028e6004803603604081101561085157600080fd5b5080359060200135612be0565b34801561086a57600080fd5b5061028e612c04565b34801561087f57600080fd5b506103b2612c10565b34801561089457600080fd5b506103b2600480360360a08110156108ab57600080fd5b5080359060208101359060408101359060608101359060800135612d0b565b3480156108d657600080fd5b506103b2600480360360208110156108ed57600080fd5b50356001600160a01b0316612eec565b34801561090957600080fd5b5061028e6004803603602081101561092057600080fd5b50356001600160a01b0316612fe5565b34801561093c57600080fd5b506103b26004803603604081101561095357600080fd5b5080359060200135612ff7565b34801561096c57600080fd5b506102df613060565b34801561098157600080fd5b5061028e6004803603604081101561099857600080fd5b508035906020013561306f565b3480156109b157600080fd5b506102df613093565b60008181526002602090815260408083206001600160a01b03861684529091529020545b92915050565b60009081526004602052604090205490565b6007546201000090046001600160a01b031681565b60015490565b6000610a1b6130a2565b6005546001600160a01b03908116911614610a6b576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b6000848152600b60205260409020600201548490610abe576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b600754610100900460ff16610b08576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff00191690556000858152600b602090815260408083206001600160a01b03881684526008019091529020839055829150506007805461ff0019166101001790559392505050565b6009546001600160a01b031681565b6000818152600b602090815260408083206001600160a01b0386168452600881018352818420546002820154600783019094529184205490924292610bfb929091610bef91670de0b6b3a764000091610be391610bd99190610bcd90899063ffffffff6130a616565b9063ffffffff6130ef16565b610bcd8b8b6109ba565b9063ffffffff61314816565b9063ffffffff61318a16565b95945050505050565b610c14610c0f6130a2565b610e7d565b610c4f5760405162461bcd60e51b8152600401808060200182810382526030815260200180613c0f6030913960400191505060405180910390fd5b60075460ff16610c9d576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6007805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610cd06130a2565b604080516001600160a01b039092168252519081900360200190a1565b6000828152600b60205260409020600201548290610d40576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b33838115610d8857610d528282610b64565b6000828152600b602090815260408083206001600160a01b03871684526008810183528184209490945560079093019052204290555b600754610100900460ff16610dd2576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff001916905583610e23576040805162461bcd60e51b8152602060048201526011602482015270063616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b610e2d85856131e4565b6040805186815260208101869052815133927f92ccf450a286a957af52509bc1c9939d1a6a481783e142e41e2499f0bb66ebc6928290030190a250506007805461ff001916610100179055505050565b60006109de60068363ffffffff6132b816565b6000610e9a6130a2565b6005546001600160a01b03908116911614610eea576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b600754610100900460ff16610f34576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff001916905583610f86576040805162461bcd60e51b8152602060048201526012602482015271496e76616c6964207265776172645261746560701b604482015290519081900360640190fd5b6000878152600b602052604090206002015415610fd8576040805162461bcd60e51b815260206004820152600b60248201526a706f6f6c2065786973747360a81b604482015290519081900360640190fd5b6001600160a01b038216611024576040805162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185c9d1a5cdd60921b604482015290519081900360640190fd5b6103e883111561107b576040805162461bcd60e51b815260206004820152601a60248201527f496e636f727265637420636f6e74726f6c6c6572207368617265000000000000604482015290519081900360640190fd5b6000878152600b60209081526040918290208881556001810188905560028101879055600581018690556006810180546001600160a01b0387166001600160a01b0319909116811790915583518b815292830152818301899052606082018790526080820188905291517fdcad60f82308d160bd8a3814cf84788a2c98294718485b86d238d14cbf166dab9181900360a00190a1506007805461ff0019166101001790559695505050505050565b60075460ff1690565b61114261113d6130a2565b61331f565b565b61114c6130a2565b6005546001600160a01b0390811691161461119c576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6000828152600b60205260409020600201548290611239576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b338381156112815761124b8282610b64565b6000828152600b602090815260408083206001600160a01b03871684526008810183528184209490945560079093019052204290555b60075460ff16156112cc576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600754610100900460ff16611316576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff0019169055611329613b87565b506000858152600b6020908152604091829020825160e08101845281548082526001830154938201939093526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600601546001600160a01b031660c08301524210156113d5576040805162461bcd60e51b815260206004820152600d60248201526c3837b7b6103737ba1037b832b760991b604482015290519081900360640190fd5b80602001516113f46113e733896109ba565b879063ffffffff61318a16565b111561143b576040805162461bcd60e51b81526020600482015260116024820152700e6e8c2d6ca40caf0c6cacac8e640dac2f607b1b604482015290519081900360640190fd5b6114458686613367565b6040805187815260208101879052815133927f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee90928290030190a250506007805461ff00191661010017905550505050565b6000828152600b602052604090206002015482906114e9576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b6000838152600b6020908152604080832085845260090190915290205483908390611552576040805162461bcd60e51b81526020600482015260146024820152736361726420646f6573206e6f742065786973747360601b604482015290519081900360640190fd5b3385811561159a576115648282610b64565b6000828152600b602090815260408083206001600160a01b03871684526008810183528184209490945560079093019052204290555b600754610100900460ff166115e4576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff00191690556000878152600b60205260409020611605613bcd565b506000878152600982016020908152604091829020825160608101845281548152600182015492810183905260029091015492810192909252421015611686576040805162461bcd60e51b815260206004820152601160248201527018d85c99081b9bdd081c995b19585cd959607a1b604482015290519081900360640190fd5b805133600090815260088401602052604090205410156116e1576040805162461bcd60e51b81526020600482015260116024820152706e6f7420656e6f75676820706f696e747360781b604482015290519081900360640190fd5b80604001513414611739576040805162461bcd60e51b815260206004820152601d60248201527f737570706f7274206f757220617274697374732c2073656e6420657468000000604482015290519081900360640190fd5b6040810151156118745760006117626103e8610be38560050154346130ef90919063ffffffff16565b90506000611776348363ffffffff6130a616565b905034611789828463ffffffff61318a16565b146117ce576040805162461bcd60e51b815260206004820152601060248201526f70726f626c656d20776974682066656560801b604482015290519081900360640190fd5b604083015160038501546117e79163ffffffff61318a16565b60038501556008546001600160a01b03166000908152600a6020526040902054611817908363ffffffff61318a16565b6008546001600160a01b039081166000908152600a602052604080822093909355600687015490911681522054611854908263ffffffff61318a16565b60068501546001600160a01b03166000908152600a602052604090205550505b80513360009081526008840160205260409020546118979163ffffffff6130a616565b336000908152600884016020526040902055805160048301546118bf9163ffffffff61318a16565b6004838101919091556007546040805163731133e960e01b81523393810193909352602483018b905260016044840152608060648401526000608484018190529051620100009092046001600160a01b03169263731133e99260c4808301939282900301818387803b15801561193457600080fd5b505af1158015611948573d6000803e3d6000fd5b50508251604080518d8152602081019290925280513394507ff3a670cd3af7d64b488926880889d08a8585a138ff455227af6737339a1ec2629350918290030190a250506007805461ff00191661010017905550505050505050565b6119b7816119b233846109ba565b610ced565b50565b6119c5610c0f6130a2565b611a005760405162461bcd60e51b8152600401808060200182810382526030815260200180613c0f6030913960400191505060405180910390fd5b6119b781613438565b611a14610c0f6130a2565b611a4f5760405162461bcd60e51b8152600401808060200182810382526030815260200180613c0f6030913960400191505060405180910390fd5b60075460ff1615611a9a576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6007805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610cd06130a2565b6005546001600160a01b031690565b6000838152600b60205260409020600201548390611b32576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b6000838152600b60205260409020600201548390611b85576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b33858115611bcd57611b978282610b64565b6000828152600b602090815260408083206001600160a01b03871684526008810183528184209490945560079093019052204290555b33868115611c1557611bdf8282610b64565b6000828152600b602090815260408083206001600160a01b03871684526008810183528184209490945560079093019052204290555b60075460ff1615611c60576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600754610100900460ff16611caa576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff0019169055611cbd613b87565b506000888152600b6020908152604091829020825160e08101845281548082526001830154938201939093526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600601546001600160a01b031660c0830152421015611d69576040805162461bcd60e51b815260206004820152600d60248201526c3837b7b6103737ba1037b832b760991b604482015290519081900360640190fd5b8060200151611d88611d7b338c6109ba565b8a9063ffffffff61318a16565b1115611dcf576040805162461bcd60e51b81526020600482015260116024820152700e6e8c2d6ca40caf0c6cacac8e640dac2f607b1b604482015290519081900360640190fd5b611dda8a8a8a613480565b604080518b8152602081018b90528082018a9052905133917f9ee37244ba9f5d4982dfc3452c1cea0d297249501a9ef8040a9e646f336717b4919081900360600190a250506007805461ff0019166101001790555050505050505050565b611e406130a2565b6005546001600160a01b03908116911614611e90576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b600754610100900460ff16611eda576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff00191690556001600160a01b038116611f35576040805162461bcd60e51b815260206004820152601260248201527124b73b30b634b21031b7b73a3937b63632b960711b604482015290519081900360640190fd5b6008546001600160a01b039081166000908152600a6020526040808220549284168252902054611f6a9163ffffffff61318a16565b6001600160a01b039182166000818152600a6020526040808220939093556008805490941681529182209190915581546001600160a01b0319161790556007805461ff001916610100179055565b611fc06130a2565b6005546001600160a01b03908116911614612010576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b6000838152600b60205260409020600201548390612063576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b6000848152600b60209081526040808320868452600901909152902054849084906120cc576040805162461bcd60e51b81526020600482015260146024820152736361726420646f6573206e6f742065786973747360601b604482015290519081900360640190fd5b600754610100900460ff16612116576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff001916905567016345785d8a0000841015612171576040805162461bcd60e51b815260206004820152601060248201526f141bda5b9d1cc81d1bdbc81cdb585b1b60821b604482015290519081900360640190fd5b6000868152600b60209081526040808320888452600901825291829020868155825189815291820188905281830187905291517f7f44217c30270346e29903ca783e4aeea3aaec36a14994e171b6b1bc2fff9a689181900360600190a150506007805461ff0019166101001790555050505050565b6103e881565b600b60205260009081526040902080546001820154600283015460038401546004850154600586015460069096015494959394929391929091906001600160a01b031687565b6000818152600b60205260408120600201548290612285576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b83836001600160a01b038216156122d6576122a08282610b64565b6000828152600b602090815260408083206001600160a01b03871684526008810183528184209490945560079093019052204290555b600754610100900460ff16612320576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff00191690556009546001600160a01b03163314612375576040805162461bcd60e51b815260206004820152600860248201526710b932b9b1bab2b960c11b604482015290519081900360640190fd5b6000858152600b602090815260408083206001600160a01b038a168452600881019092529091205460048201546123b2908263ffffffff61318a16565b60048301556001600160a01b038816600090815260088301602052604081208190556123de89896109ba565b11156123ee576123ee888861355d565b604080518881526020810183905281516001600160a01b038b16927ff3a670cd3af7d64b488926880889d08a8585a138ff455227af6737339a1ec262928290030190a294505050506007805461ff0019166101001790555092915050565b6000918252600b602090815260408084209284526009909201905290205490565b60006124776130a2565b6005546001600160a01b039081169116146124c7576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b6000868152600b6020526040902060020154869061251a576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b600754610100900460ff16612564576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff001916905567016345785d8a00008510156125bf576040805162461bcd60e51b815260206004820152601060248201526f141bda5b9d1cc81d1bdbc81cdb585b1b60821b604482015290519081900360640190fd5b6007546040805163b09ddf7b60e01b815260048101899052600060248201819052608060448301526084820181905260c0606483015260c48201819052915191926201000090046001600160a01b03169163b09ddf7b916101048082019260209290919082900301818787803b15801561263857600080fd5b505af115801561264c573d6000803e3d6000fd5b505050506040513d602081101561266257600080fd5b50519050806126b8576040805162461bcd60e51b815260206004820152601e60248201527f455243313135352063726561746520646964206e6f7420737563636565640000604482015290519081900360640190fd5b6000888152600b60209081526040808320848452600901825291829020888155600181018790556002810188905582518b8152918201849052818301899052606082018890526080820187905291517f91197497bafa5606f6e9834b08c79bc7774902e4207deec0a888032bd796a54d9181900360a00190a1509150506007805461ff00191661010017905595945050505050565b6001600160a01b031660009081526003602052604090205490565b6127706130a2565b6005546001600160a01b039081169116146127c0576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b600754610100900460ff1661280a576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b60078054600980546001600160a01b039094166001600160a01b03199094169390931790925561ff0019909116610100179055565b6128476130a2565b6005546001600160a01b03908116911614612897576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b6000828152600b602052604090206002015482906128ea576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b600754610100900460ff16612934576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff00191690556001600160a01b03821661298b576040805162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185c9d1a5cdd60921b604482015290519081900360640190fd5b6000838152600b60209081526040808320600601546001600160a01b03908116808552600a90935281842054908616845292205490916129d1919063ffffffff61318a16565b6001600160a01b038085166000818152600a60209081526040808320959095559285168152838120819055878152600b835283902060060180546001600160a01b0319168217905582518781529182015281517fcf297069128b7751fcf709170966c4c654bb1d79aea8cb8f23890cda40dac923929181900390910190a150506007805461ff0019166101001790555050565b612a6c6130a2565b6005546001600160a01b03908116911614612abc576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b6000828152600b60205260409020600201548290612b0f576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b600754610100900460ff16612b59576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff00191690556103e8821115612bbb576040805162461bcd60e51b815260206004820152601a60248201527f496e636f727265637420636f6e74726f6c6c6572207368617265000000000000604482015290519081900360640190fd5b506000918252600b6020526040909120600501556007805461ff001916610100179055565b6000918252600b602090815260408084209284526009909201905290206002015490565b67016345785d8a000081565b600754610100900460ff16612c5a576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff0019169055336000908152600a602052604090205480612cbd576040805162461bcd60e51b81526020600482015260136024820152726e6f7468696e6720746f20776974686472617760681b604482015290519081900360640190fd5b336000818152600a60205260408082208290555183156108fc0291849190818181858888f19350505050158015612cf8573d6000803e3d6000fd5b50506007805461ff001916610100179055565b612d136130a2565b6005546001600160a01b03908116911614612d63576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b6000858152600b60205260409020600201548590612db6576040805162461bcd60e51b81526020600482015260146024820152600080516020613d39833981519152604482015290519081900360640190fd5b600754610100900460ff16612e00576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff001916905567016345785d8a0000841015612e5b576040805162461bcd60e51b815260206004820152601060248201526f141bda5b9d1cc81d1bdbc81cdb585b1b60821b604482015290519081900360640190fd5b6000868152600b6020908152604080832088845260090182529182902086815560018101859055600281018690558251898152918201889052818301879052606082018690526080820185905291517f91197497bafa5606f6e9834b08c79bc7774902e4207deec0a888032bd796a54d9181900360a00190a150506007805461ff0019166101001790555050505050565b612ef46130a2565b6005546001600160a01b03908116911614612f44576040805162461bcd60e51b81526020600482018190526024820152600080516020613ccd833981519152604482015290519081900360640190fd5b6001600160a01b038116612f895760405162461bcd60e51b8152600401808060200182810382526026815260200180613c3f6026913960400191505060405180910390fd5b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600a6020526000908152604090205481565b600754610100900460ff16613041576040805162461bcd60e51b815260206004820152601f6024820152600080516020613bef833981519152604482015290519081900360640190fd5b6007805461ff0019169055612cf8828261305b33836109ba565b611adf565b6008546001600160a01b031681565b6000918252600b602090815260408084209284526009909201905290206001015490565b6000546001600160a01b031681565b3390565b60006130e883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613661565b9392505050565b6000826130fe575060006109de565b8282028284828161310b57fe5b04146130e85760405162461bcd60e51b8152600401808060200182810382526021815260200180613cac6021913960400191505060405180910390fd5b60006130e883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136f8565b6000828201838110156130e8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001546131f7908263ffffffff6130a616565b600155600082815260046020526040902054613219908263ffffffff6130a616565b600083815260046020908152604080832093909355338252600390522054613247908263ffffffff6130a616565b3360008181526003602090815260408083209490945585825260028152838220928252919091522054613280908263ffffffff6130a616565b6000838152600260209081526040808320338085529252822092909255546132b4916001600160a01b03909116908361375d565b5050565b60006001600160a01b0382166132ff5760405162461bcd60e51b8152600401808060200182810382526022815260200180613ced6022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b61333060068263ffffffff6137af16565b6040516001600160a01b038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b60015461337a908263ffffffff61318a16565b60015560008281526004602052604090205461339c908263ffffffff61318a16565b6000838152600460209081526040808320939093553382526003905220546133ca908263ffffffff61318a16565b3360008181526003602090815260408083209490945585825260028152838220928252919091522054613403908263ffffffff61318a16565b6000838152600260209081526040808320338085529252822092909255546132b4916001600160a01b03909116903084613816565b61344960068263ffffffff61387616565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b60008381526004602052604090205461349f908263ffffffff6130a616565b60008481526004602090815260408083209390935560028152828220338352905220546134d2908263ffffffff6130a616565b6000848152600260209081526040808320338452825280832093909355848252600490522054613508908263ffffffff61318a16565b600083815260046020908152604080832093909355600281528282203383529052205461353b908263ffffffff61318a16565b6000928352600260209081526040808520338652909152909220919091555050565b60008181526002602090815260408083206001600160a01b0386168452909152902054600154613593908263ffffffff6130a616565b6001556000828152600460205260409020546135b5908263ffffffff6130a616565b6000838152600460209081526040808320939093553382526003905220546135e3908263ffffffff6130a616565b33600090815260036020908152604080832093909355848252600281528282206001600160a01b038716835290522054613623908263ffffffff6130a616565b60008381526002602090815260408083206001600160a01b03808916855292528220929092555461365c9116848363ffffffff61375d16565b505050565b600081848411156136f05760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156136b557818101518382015260200161369d565b50505050905090810190601f1680156136e25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836137475760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156136b557818101518382015260200161369d565b50600083858161375357fe5b0495945050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261365c9084906138f7565b6137b982826132b8565b6137f45760405162461bcd60e51b8152600401808060200182810382526021815260200180613c8b6021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526138709085906138f7565b50505050565b61388082826132b8565b156138d2576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b606061394c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166139a89092919063ffffffff16565b80519091501561365c5780806020019051602081101561396b57600080fd5b505161365c5760405162461bcd60e51b815260040180806020018281038252602a815260200180613d0f602a913960400191505060405180910390fd5b60606139b784846000856139bf565b949350505050565b606082471015613a005760405162461bcd60e51b8152600401808060200182810382526026815260200180613c656026913960400191505060405180910390fd5b613a0985613b1b565b613a5a576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310613a995780518252601f199092019160209182019101613a7a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613afb576040519150601f19603f3d011682016040523d82523d6000602084013e613b00565b606091505b5091509150613b10828286613b21565b979650505050505050565b3b151590565b60608315613b305750816130e8565b825115613b405782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156136b557818101518382015260200161369d565b6040518060e0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b6040518060600160405280600081526020016000815260200160008152509056fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c00506175736572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652050617573657220726f6c654f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f6c65733a206163636f756e7420697320746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564706f6f6c20646f6573206e6f7420657869737473000000000000000000000000a2646970667358221220b87fdfe23aeeb066fd45eac6a0961364868159a8a9597bd1d55f4ccf750462b064736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000033e3da186e223acc94bc3484127eceb8b54b670400000000000000000000000097c548ac36d5a218bef504b5d5389b724355c5af000000000000000000000000fbbe9b1142c699512545f47937ee6fae0e4b0aa9
-----Decoded View---------------
Arg [0] : _controller (address): 0x33e3dA186E223aCc94bc3484127eceB8b54B6704
Arg [1] : _nftsAddress (address): 0x97C548AC36D5A218bef504b5d5389b724355C5Af
Arg [2] : _tokenAddress (address): 0xFbbE9b1142C699512545f47937Ee6fae0e4B0aA9
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000033e3da186e223acc94bc3484127eceb8b54b6704
Arg [1] : 00000000000000000000000097c548ac36d5a218bef504b5d5389b724355c5af
Arg [2] : 000000000000000000000000fbbe9b1142c699512545f47937ee6fae0e4b0aa9
Deployed Bytecode Sourcemap
41966:200:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;27316:120:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27316:120:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;27316:120:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27208:102;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27208:102:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27208:102:0;;:::i;31380:20::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31380:20:0;;;:::i;:::-;;;;-1:-1:-1;;;;;31380:20:0;;;;;;;;;;;;;;26993:85;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26993:85:0;;;:::i;41058:293::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41058:293:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;41058:293:0;;;-1:-1:-1;;;;;41058:293:0;;;;;;;;;;:::i;32019:22::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32019:22:0;;;:::i;33984:320::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33984:320:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;33984:320:0;;;;;;;;:::i;16047:110::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16047:110:0;;;:::i;:::-;;34867:290;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34867:290:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34867:290:0;;;;;;;:::i;13740:103::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13740:103:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13740:103:0;-1:-1:-1;;;;;13740:103:0;;:::i;:::-;;;;;;;;;;;;;;;;;;40055:735;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40055:735:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;40055:735:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40055:735:0;;:::i;15322:72::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15322:72:0;;;:::i;13941:73::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13941:73:0;;;:::i;2554:138::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2554:138:0;;;:::i;34361:446::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34361:446:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34361:446:0;;;;;;;:::i;36078:1189::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36078:1189:0;;;;;;;:::i;35979:93::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35979:93:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35979:93:0;;:::i;13849:86::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13849:86:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13849:86:0;-1:-1:-1;;;;;13849:86:0;;:::i;15852:108::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15852:108:0;;;:::i;1952:73::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1952:73:0;;;:::i;35217:601::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35217:601:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35217:601:0;;;;;;;;;;;;:::i;38307:323::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38307:323:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38307:323:0;-1:-1:-1;;;;;38307:323:0;;:::i;41548:378::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41548:378:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;41548:378:0;;;;;;;;;;;;:::i;31882:51::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31882:51:0;;;:::i;32104:37::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32104:37:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32104:37:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32104:37:0;;;;;;;;;;;;;;37273:598;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37273:598:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;37273:598:0;;;;;;;;:::i;33850:128::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33850:128:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33850:128:0;;;;;;;:::i;39444:605::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39444:605:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;39444:605:0;;;;;;;;;;;;;;;;;;;;;;:::i;27084:118::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27084:118:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27084:118:0;-1:-1:-1;;;;;27084:118:0;;:::i;38636:99::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38636:99:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38636:99:0;-1:-1:-1;;;;;38636:99:0;;:::i;37877:424::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37877:424:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;37877:424:0;;;;;;-1:-1:-1;;;;;37877:424:0;;:::i;38741:260::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38741:260:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38741:260:0;;;;;;;:::i;33570:130::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33570:130:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33570:130:0;;;;;;;:::i;31938:46::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31938:46:0;;;:::i;40796:227::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40796:227:0;;;:::i;39007:431::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39007:431:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;39007:431:0;;;;;;;;;;;;;;;;;;;;;;:::i;2837:230::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2837:230:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2837:230:0;-1:-1:-1;;;;;2837:230:0;;:::i;32046:53::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32046:53:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32046:53:0;-1:-1:-1;;;;;32046:53:0;;:::i;35824:149::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35824:149:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35824:149:0;;;;;;;:::i;31989:25::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31989:25:0;;;:::i;33706:138::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33706:138:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33706:138:0;;;;;;;:::i;26613:19::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26613:19:0;;;:::i;27316:120::-;27385:7;27408:13;;;:9;:13;;;;;;;;-1:-1:-1;;;;;27408:22:0;;;;;;;;;;27316:120;;;;;:::o;27208:102::-;27264:7;27287:17;;;:13;:17;;;;;;;27208:102::o;31380:20::-;;;;;;-1:-1:-1;;;;;31380:20:0;;:::o;26993:85::-;27060:12;;26993:85;:::o;41058:293::-;41208:7;2156:12;:10;:12::i;:::-;2146:6;;-1:-1:-1;;;;;2146:6:0;;;:22;;;2138:67;;;;;-1:-1:-1;;;2138:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2138:67:0;;;;;;;;;;;;;;;33113:1:::1;33090:9:::0;;;:5:::1;:9;::::0;;;;:20:::1;;::::0;41179:5;;33082:57:::1;;;::::0;;-1:-1:-1;;;33082:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33082:57:0;;;;;;;;;;;;;::::1;;30925:11:::2;::::0;::::2;::::0;::::2;;;30917:55;;;::::0;;-1:-1:-1;;;30917:55:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;;;;;;;30917:55:0;;;;;;;;;;;;;::::2;;31042:11;:19:::0;;-1:-1:-1;;31042:19:0::2;::::0;;31056:5:::2;41241:12:::0;;;:5:::3;:12;::::0;;;;;;;-1:-1:-1;;;;;41260:17:0;::::3;::::0;;:8:::3;;:17:::0;;;;;:27;;;41280:7;;-1:-1:-1;;31206:11:0::2;:18:::0;;-1:-1:-1;;31206:18:0::2;;;::::0;;41058:293;;-1:-1:-1;;;41058:293:0:o;32019:22::-;;;-1:-1:-1;;;;;32019:22:0;;:::o;33984:320::-;34052:7;34085:11;;;:5;:11;;;;;;;;-1:-1:-1;;;;;34272:17:0;;;;:8;;;:17;;;;;;34233:12;;;;34202:16;;;:25;;;;;;;34085:11;;34123:15;;34159:139;;34272:17;;34159:98;;34252:4;;34159:88;;34188:58;;34233:12;34188:40;;34123:15;;34188:40;:13;:40;:::i;:::-;:44;:58;:44;:58;:::i;:::-;34159:24;34169:7;34178:4;34159:9;:24::i;:88::-;:92;:98;:92;:98;:::i;:::-;:102;:139;:102;:139;:::i;:::-;34145:153;33984:320;-1:-1:-1;;;;;33984:320:0:o;16047:110::-;13645:22;13654:12;:10;:12::i;:::-;13645:8;:22::i;:::-;13637:83;;;;-1:-1:-1;;;13637:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15722:7:::1;::::0;::::1;;15714:40;;;::::0;;-1:-1:-1;;;15714:40:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15714:40:0;;;;;;;;;;;;;::::1;;16102:7:::2;:15:::0;;-1:-1:-1;;16102:15:0::2;::::0;;16129:22:::2;16138:12;:10;:12::i;:::-;16129:22;::::0;;-1:-1:-1;;;;;16129:22:0;;::::2;::::0;;;;;;;::::2;::::0;;::::2;16047:110::o:0;34867:290::-;33113:1;33090:9;;;:5;:9;;;;;:20;;;34957:4;;33082:57;;;;;-1:-1:-1;;;33082:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;33082:57:0;;;;;;;;;;;;;;;34981:10:::1;34993:4:::0;32877:21;;32873:151:::1;;32937:19;32944:7;32953:2;32937:6;:19::i;:::-;32909:9;::::0;;;:5:::1;:9;::::0;;;;;;;-1:-1:-1;;;;;32909:25:0;::::1;::::0;;:16:::1;::::0;::::1;:25:::0;;;;;:47;;;;32965:24:::1;::::0;;::::1;:33:::0;;;33001:15:::1;32965:51:::0;;32873:151:::1;30925:11:::2;::::0;::::2;::::0;::::2;;;30917:55;;;::::0;;-1:-1:-1;;;30917:55:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;;;;;;;30917:55:0;;;;;;;;;;;;;::::2;;31042:11;:19:::0;;-1:-1:-1;;31042:19:0::2;::::0;;35035:10;35027:40:::3;;;::::0;;-1:-1:-1;;;35027:40:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;35027:40:0;;;;;;;;;;;;;::::3;;35076:28;35091:4;35097:6;35076:14;:28::i;:::-;35116:35;::::0;;;;;::::3;::::0;::::3;::::0;;;;;35126:10:::3;::::0;35116:35:::3;::::0;;;;;;::::3;-1:-1:-1::0;;31206:11:0::2;:18:::0;;-1:-1:-1;;31206:18:0::2;;;::::0;;-1:-1:-1;;;34867:290:0:o;13740:103::-;13796:4;13816:21;:8;13829:7;13816:21;:12;:21;:::i;40055:735::-;40261:7;2156:12;:10;:12::i;:::-;2146:6;;-1:-1:-1;;;;;2146:6:0;;;:22;;;2138:67;;;;;-1:-1:-1;;;2138:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2138:67:0;;;;;;;;;;;;;;;30925:11:::1;::::0;::::1;::::0;::::1;;;30917:55;;;::::0;;-1:-1:-1;;;30917:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;30917:55:0;;;;;;;;;;;;;::::1;;31042:11;:19:::0;;-1:-1:-1;;31042:19:0::1;::::0;;40285:14;40277:45:::2;;;::::0;;-1:-1:-1;;;40277:45:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;40277:45:0;;;;;;;;;;;;;::::2;;40337:9;::::0;;;:5:::2;:9;::::0;;;;:20:::2;;::::0;:25;40329:49:::2;;;::::0;;-1:-1:-1;;;40329:49:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;40329:49:0;;;;;;;;;;;;;::::2;;-1:-1:-1::0;;;;;40393:20:0;::::2;40385:47;;;::::0;;-1:-1:-1;;;40385:47:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;40385:47:0;;;;;;;;;;;;;::::2;;31929:4;40447:15;:39;;40439:78;;;::::0;;-1:-1:-1;;;40439:78:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;40526:14;40543:9:::0;;;:5:::2;:9;::::0;;;;;;;;40561:27;;;40595:10:::2;::::0;::::2;:21:::0;;;40623:12:::2;::::0;::::2;:25:::0;;;40655:17:::2;::::0;::::2;:35:::0;;;40697:8:::2;::::0;::::2;:17:::0;;-1:-1:-1;;;;;40697:17:0;::::2;-1:-1:-1::0;;;;;;40697:17:0;;::::2;::::0;::::2;::::0;;;40728:56;;;;;;;::::2;::::0;;;;;;;;;;;;;;;;;;;;;::::2;::::0;;;;;;;::::2;-1:-1:-1::0;31206:11:0::1;:18:::0;;-1:-1:-1;;31206:18:0::1;;;::::0;;40055:735;;-1:-1:-1;;;;;;40055:735:0:o;15322:72::-;15381:7;;;;15322:72;:::o;13941:73::-;13981:27;13995:12;:10;:12::i;:::-;13981:13;:27::i;:::-;13941:73::o;2554:138::-;2156:12;:10;:12::i;:::-;2146:6;;-1:-1:-1;;;;;2146:6:0;;;:22;;;2138:67;;;;;-1:-1:-1;;;2138:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2138:67:0;;;;;;;;;;;;;;;2641:6:::1;::::0;2620:40:::1;::::0;2657:1:::1;::::0;-1:-1:-1;;;;;2641:6:0::1;::::0;2620:40:::1;::::0;2657:1;;2620:40:::1;2667:6;:19:::0;;-1:-1:-1;;;;;;2667:19:0::1;::::0;;2554:138::o;34361:446::-;33113:1;33090:9;;;:5;:9;;;;;:20;;;34448:4;;33082:57;;;;;-1:-1:-1;;;33082:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;33082:57:0;;;;;;;;;;;;;;;34472:10:::1;34484:4:::0;32877:21;;32873:151:::1;;32937:19;32944:7;32953:2;32937:6;:19::i;:::-;32909:9;::::0;;;:5:::1;:9;::::0;;;;;;;-1:-1:-1;;;;;32909:25:0;::::1;::::0;;:16:::1;::::0;::::1;:25:::0;;;;;:47;;;;32965:24:::1;::::0;;::::1;:33:::0;;;33001:15:::1;32965:51:::0;;32873:151:::1;15541:7:::2;::::0;::::2;;15540:8;15532:37;;;::::0;;-1:-1:-1;;;15532:37:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;15532:37:0;;;;;;;;;;;;;::::2;;30925:11:::3;::::0;::::3;::::0;::::3;;;30917:55;;;::::0;;-1:-1:-1;;;30917:55:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;;;;;;;;;30917:55:0;;;;;;;;;;;;;::::3;;31042:11;:19:::0;;-1:-1:-1;;31042:19:0::3;::::0;;34539:13:::4;;:::i;:::-;-1:-1:-1::0;34555:11:0::4;::::0;;;:5:::4;:11;::::0;;;;;;;;34539:27;;::::4;::::0;::::4;::::0;;;;;;;::::4;::::0;::::4;::::0;;;::::4;::::0;;;;::::4;::::0;::::4;::::0;;;;;;;;::::4;::::0;::::4;::::0;;;;;::::4;::::0;::::4;::::0;;;;;::::4;::::0;::::4;::::0;;;;;::::4;;::::0;-1:-1:-1;;;;;34539:27:0::4;::::0;;;;34583:15:::4;:32;;34575:58;;;::::0;;-1:-1:-1;;;34575:58:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;34575:58:0;;;;;;;;;;;;;::::4;;34691:1;:10;;;34648:39;34659:27;34669:10;34681:4;34659:9;:27::i;:::-;34648:6:::0;;:39:::4;:10;:39;:::i;:::-;:53;;34640:83;;;::::0;;-1:-1:-1;;;34640:83:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;34640:83:0;;;;;;;;;;;;;::::4;;34732:25;34744:4;34750:6;34732:11;:25::i;:::-;34769:32;::::0;;;;;::::4;::::0;::::4;::::0;;;;;34776:10:::4;::::0;34769:32:::4;::::0;;;;;;::::4;-1:-1:-1::0;;31206:11:0::3;:18:::0;;-1:-1:-1;;31206:18:0::3;;;::::0;;-1:-1:-1;;;;34361:446:0:o;36078:1189::-;33113:1;33090:9;;;:5;:9;;;;;:20;;;36163:4;;33082:57;;;;;-1:-1:-1;;;33082:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;33082:57:0;;;;;;;;;;;;;;;33255:1:::1;33222:11:::0;;;:5:::1;:11;::::0;;;;;;;:23;;;:17:::1;;:23:::0;;;;;:30;36185:4;;36191;;33214:67:::1;;;::::0;;-1:-1:-1;;;33214:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;33214:67:0;;;;;;;;;;;;;::::1;;36215:10:::2;36227:4:::0;32877:21;;32873:151:::2;;32937:19;32944:7;32953:2;32937:6;:19::i;:::-;32909:9;::::0;;;:5:::2;:9;::::0;;;;;;;-1:-1:-1;;;;;32909:25:0;::::2;::::0;;:16:::2;::::0;::::2;:25:::0;;;;;:47;;;;32965:24:::2;::::0;;::::2;:33:::0;;;33001:15:::2;32965:51:::0;;32873:151:::2;30925:11:::3;::::0;::::3;::::0;::::3;;;30917:55;;;::::0;;-1:-1:-1;;;30917:55:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;;;;;;;;;30917:55:0;;;;;;;;;;;;;::::3;;31042:11;:19:::0;;-1:-1:-1;;31042:19:0::3;::::0;;31056:5:::3;36278:11:::0;;;:5:::4;:11;::::0;;;;36296:13:::4;;:::i;:::-;-1:-1:-1::0;36312:13:0::4;::::0;;;:7:::4;::::0;::::4;:13;::::0;;;;;;;;36296:29;;::::4;::::0;::::4;::::0;;;;;;::::4;::::0;::::4;::::0;;;::::4;::::0;;;::::4;::::0;;::::4;::::0;;;;;;;;36340:15:::4;:32;;36332:62;;;::::0;;-1:-1:-1;;;36332:62:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;36332:62:0;;;;;;;;;;;;;::::4;;36433:8:::0;;36418:10:::4;36433:8;36409:20:::0;;;:8:::4;::::0;::::4;:20;::::0;;;;;:32:::4;;36401:62;;;::::0;;-1:-1:-1;;;36401:62:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;36401:62:0;;;;;;;;;;;;;::::4;;36491:1;:9;;;36478;:22;36470:64;;;::::0;;-1:-1:-1;;;36470:64:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;::::4;::::0;;;;;;;;;;;;;::::4;;36547:9;::::0;::::4;::::0;:13;36543:514:::4;;36571:24;36598:58;31929:4;36598:32;36612:1;:17;;;36598:9;:13;;:32;;;;:::i;:58::-;36571:85:::0;-1:-1:-1;36665:22:0::4;36690:31;:9;36571:85:::0;36690:31:::4;:13;:31;:::i;:::-;36665:56:::0;-1:-1:-1;36778:9:0::4;36738:36;36665:56:::0;36757:16;36738:36:::4;:18;:36;:::i;:::-;:49;36730:78;;;::::0;;-1:-1:-1;;;36730:78:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;36730:78:0;;;;;;;;;;;;;::::4;;36857:9;::::0;::::4;::::0;36837:15:::4;::::0;::::4;::::0;:30:::4;::::0;::::4;:19;:30;:::i;:::-;36819:15;::::0;::::4;:48:::0;36928:10:::4;::::0;-1:-1:-1;;;;;36928:10:0::4;36909:30;::::0;;;:18:::4;:30;::::0;;;;;:52:::4;::::0;36944:16;36909:52:::4;:34;:52;:::i;:::-;36895:10;::::0;-1:-1:-1;;;;;36895:10:0;;::::4;36876:30;::::0;;;:18:::4;:30;::::0;;;;;:85;;;;37020:8:::4;::::0;::::4;::::0;;;::::4;37001:28:::0;;;;:48:::4;::::0;37034:14;37001:48:::4;:32;:48;:::i;:::-;36989:8;::::0;::::4;::::0;-1:-1:-1;;;;;36989:8:0::4;36970:28;::::0;;;:18:::4;:28;::::0;;;;:79;-1:-1:-1;;36543:514:0::4;37113:8:::0;;37097:10:::4;37113:8;37088:20:::0;;;:8:::4;::::0;::::4;:20;::::0;;;;;:34:::4;::::0;::::4;:24;:34;:::i;:::-;37074:10;37065:20;::::0;;;:8:::4;::::0;::::4;:20;::::0;;;;:57;37163:8;;37145:13:::4;::::0;::::4;::::0;:27:::4;::::0;::::4;:17;:27;:::i;:::-;37129:13;::::0;;::::4;:43:::0;;;;37179:4:::4;::::0;:34:::4;::::0;;-1:-1:-1;;;37179:34:0;;37189:10:::4;37179:34:::0;;::::4;::::0;;;;;;;;;;37207:1:::4;37179:34:::0;;;;;;;;;-1:-1:-1;37179:34:0;;;;;;;;:4;;;::::4;-1:-1:-1::0;;;;;37179:4:0::4;::::0;:9:::4;::::0;:34;;;;;-1:-1:-1;37179:34:0;;;;;-1:-1:-1;37179:4:0;:34;::::4;;2:2:-1::0;::::4;;;27:1;24::::0;17:12:::4;2:2;37179:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::4;77:16;74:1;67:27;5:2;-1:-1:::0;;37252:8:0;;37225:36:::4;::::0;;;;;::::4;::::0;::::4;::::0;;;;;;37234:10:::4;::::0;-1:-1:-1;37225:36:0::4;::::0;-1:-1:-1;37225:36:0;;;;;;::::4;-1:-1:-1::0;;31206:11:0::3;:18:::0;;-1:-1:-1;;31206:18:0::3;;;::::0;;-1:-1:-1;;;;;;;36078:1189:0:o;35979:93::-;36023:43;36032:4;36038:27;36048:10;36060:4;36038:9;:27::i;:::-;36023:8;:43::i;:::-;35979:93;:::o;13849:86::-;13645:22;13654:12;:10;:12::i;13645:22::-;13637:83;;;;-1:-1:-1;;;13637:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13910:19:::1;13921:7;13910:10;:19::i;15852:108::-:0;13645:22;13654:12;:10;:12::i;13645:22::-;13637:83;;;;-1:-1:-1;;;13637:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15541:7:::1;::::0;::::1;;15540:8;15532:37;;;::::0;;-1:-1:-1;;;15532:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15532:37:0;;;;;;;;;;;;;::::1;;15908:7:::2;:14:::0;;-1:-1:-1;;15908:14:0::2;15918:4;15908:14;::::0;;15934:20:::2;15941:12;:10;:12::i;1952:73::-:0;2013:6;;-1:-1:-1;;;;;2013:6:0;1952:73;:::o;35217:601::-;33113:1;33090:9;;;:5;:9;;;;;:20;;;35347:8;;33082:57;;;;;-1:-1:-1;;;33082:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;33082:57:0;;;;;;;;;;;;;;;33113:1:::1;33090:9:::0;;;:5:::1;:9;::::0;;;;:20:::1;;::::0;35373:6;;33082:57:::1;;;::::0;;-1:-1:-1;;;33082:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33082:57:0;;;;;;;;;;;;;::::1;;35399:10:::2;35411:8:::0;32877:21;;32873:151:::2;;32937:19;32944:7;32953:2;32937:6;:19::i;:::-;32909:9;::::0;;;:5:::2;:9;::::0;;;;;;;-1:-1:-1;;;;;32909:25:0;::::2;::::0;;:16:::2;::::0;::::2;:25:::0;;;;;:47;;;;32965:24:::2;::::0;;::::2;:33:::0;;;33001:15:::2;32965:51:::0;;32873:151:::2;35439:10:::3;35451:6:::0;32877:21;;32873:151:::3;;32937:19;32944:7;32953:2;32937:6;:19::i;:::-;32909:9;::::0;;;:5:::3;:9;::::0;;;;;;;-1:-1:-1;;;;;32909:25:0;::::3;::::0;;:16:::3;::::0;::::3;:25:::0;;;;;:47;;;;32965:24:::3;::::0;;::::3;:33:::0;;;33001:15:::3;32965:51:::0;;32873:151:::3;15541:7:::4;::::0;::::4;;15540:8;15532:37;;;::::0;;-1:-1:-1;;;15532:37:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;15532:37:0;;;;;;;;;;;;;::::4;;30925:11:::5;::::0;::::5;::::0;::::5;;;30917:55;;;::::0;;-1:-1:-1;;;30917:55:0;;::::5;;::::0;::::5;::::0;::::5;::::0;;;;-1:-1:-1;;;;;;;;;;;30917:55:0;;;;;;;;;;;;;::::5;;31042:11;:19:::0;;-1:-1:-1;;31042:19:0::5;::::0;;35508:15:::6;;:::i;:::-;-1:-1:-1::0;35526:13:0::6;::::0;;;:5:::6;:13;::::0;;;;;;;;35508:31;;::::6;::::0;::::6;::::0;;;;;;;::::6;::::0;::::6;::::0;;;::::6;::::0;;;;::::6;::::0;::::6;::::0;;;;;;;;::::6;::::0;::::6;::::0;;;;;::::6;::::0;::::6;::::0;;;;;::::6;::::0;::::6;::::0;;;;;::::6;;::::0;-1:-1:-1;;;;;35508:31:0::6;::::0;;;;35556:15:::6;:34;;35548:60;;;::::0;;-1:-1:-1;;;35548:60:0;;::::6;;::::0;::::6;::::0;::::6;::::0;;;;-1:-1:-1;;;35548:60:0;;;;;;;;;;;;;::::6;;35668:3;:12;;;35623:41;35634:29;35644:10;35656:6;35634:9;:29::i;:::-;35623:6:::0;;:41:::6;:10;:41;:::i;:::-;:57;;35615:87;;;::::0;;-1:-1:-1;;;35615:87:0;;::::6;;::::0;::::6;::::0;::::6;::::0;;;;-1:-1:-1;;;35615:87:0;;;;;;;;;;;;;::::6;;35711:40;35726:8;35736:6;35744;35711:14;:40::i;:::-;35763:49;::::0;;;;;::::6;::::0;::::6;::::0;;;;;;;;;;;35775:10:::6;::::0;35763:49:::6;::::0;;;;;;;;::::6;-1:-1:-1::0;;31206:11:0::5;:18:::0;;-1:-1:-1;;31206:18:0::5;;;::::0;;-1:-1:-1;;;;;;;;35217:601:0:o;38307:323::-;2156:12;:10;:12::i;:::-;2146:6;;-1:-1:-1;;;;;2146:6:0;;;:22;;;2138:67;;;;;-1:-1:-1;;;2138:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2138:67:0;;;;;;;;;;;;;;;30925:11:::1;::::0;::::1;::::0;::::1;;;30917:55;;;::::0;;-1:-1:-1;;;30917:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;30917:55:0;;;;;;;;;;;;;::::1;;31042:11;:19:::0;;-1:-1:-1;;31042:19:0::1;::::0;;-1:-1:-1;;;;;38396:25:0;::::2;38388:56;;;::::0;;-1:-1:-1;;;38388:56:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;38388:56:0;;;;;;;;;;;;;::::2;;38540:10;::::0;-1:-1:-1;;;;;38540:10:0;;::::2;38521:30;::::0;;;:18:::2;:30;::::0;;;;;;38485:31;;::::2;::::0;;;;;:67:::2;::::0;::::2;:35;:67;:::i;:::-;-1:-1:-1::0;;;;;38451:31:0;;::::2;;::::0;;;:18:::2;:31;::::0;;;;;:101;;;;38578:10:::2;::::0;;;;::::2;38559:30:::0;;;;;:34;;;;38600:24;;-1:-1:-1;;;;;;38600:24:0::2;;::::0;;31206:11:::1;:18:::0;;-1:-1:-1;;31206:18:0::1;38578:10:::2;31206:18:::1;::::0;;38307:323::o;41548:378::-;2156:12;:10;:12::i;:::-;2146:6;;-1:-1:-1;;;;;2146:6:0;;;:22;;;2138:67;;;;;-1:-1:-1;;;2138:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2138:67:0;;;;;;;;;;;;;;;33113:1:::1;33090:9:::0;;;:5:::1;:9;::::0;;;;:20:::1;;::::0;41673:7;;33082:57:::1;;;::::0;;-1:-1:-1;;;33082:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33082:57:0;;;;;;;;;;;;;::::1;;33255:1:::2;33222:11:::0;;;:5:::2;:11;::::0;;;;;;;:23;;;:17:::2;;:23:::0;;;;;:30;41693:7;;41702;;33214:67:::2;;;::::0;;-1:-1:-1;;;33214:67:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;33214:67:0;;;;;;;;;;;;;::::2;;30925:11:::3;::::0;::::3;::::0;::::3;;;30917:55;;;::::0;;-1:-1:-1;;;30917:55:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;;;;;;;;;30917:55:0;;;;;;;;;;;;;::::3;;31042:11;:19:::0;;-1:-1:-1;;31042:19:0::3;::::0;;31980:4:::4;41739:26:::0;::::4;;41731:55;;;::::0;;-1:-1:-1;;;41731:55:0;;::::4;;::::0;::::4;::::0;::::4;::::0;;;;-1:-1:-1;;;41731:55:0;;;;;;;;;;;;;::::4;;41793:14;41810::::0;;;:5:::4;:14;::::0;;;;;;;:29;;;:20:::4;;:29:::0;;;;;;41846:18;;;41876:44;;;;;;;::::4;::::0;;;;;;;;;;;::::4;::::0;;;;;;;::::4;-1:-1:-1::0;;31206:11:0::3;:18:::0;;-1:-1:-1;;31206:18:0::3;;;::::0;;-1:-1:-1;;;;;41548:378:0:o;31882:51::-;31929:4;31882:51;:::o;32104:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32104:37:0;;:::o;37273:598::-;37425:7;33090:9;;;:5;:9;;;;;:20;;;37354:4;;33082:57;;;;;-1:-1:-1;;;33082:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;33082:57:0;;;;;;;;;;;;;;;37378:7;37387:4;-1:-1:-1;;;;;32877:21:0;::::1;::::0;32873:151:::1;;32937:19;32944:7;32953:2;32937:6;:19::i;:::-;32909:9;::::0;;;:5:::1;:9;::::0;;;;;;;-1:-1:-1;;;;;32909:25:0;::::1;::::0;;:16:::1;::::0;::::1;:25:::0;;;;;:47;;;;32965:24:::1;::::0;;::::1;:33:::0;;;33001:15:::1;32965:51:::0;;32873:151:::1;30925:11:::2;::::0;::::2;::::0;::::2;;;30917:55;;;::::0;;-1:-1:-1;;;30917:55:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;;;;;;;30917:55:0;;;;;;;;;;;;;::::2;;31042:11;:19:::0;;-1:-1:-1;;31042:19:0::2;::::0;;37466:7:::3;::::0;-1:-1:-1;;;;;37466:7:0::3;37452:10;:21;37444:42;;;::::0;;-1:-1:-1;;;37444:42:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;37444:42:0;;;;;;;;;;;;;::::3;;37493:14;37510:11:::0;;;:5:::3;:11;::::0;;;;;;;-1:-1:-1;;;;;37553:17:0;::::3;::::0;;:8:::3;::::0;::::3;:17:::0;;;;;;;37593:13:::3;::::0;::::3;::::0;:31:::3;::::0;37553:17;37593:31:::3;:17;:31;:::i;:::-;37577:13;::::0;::::3;:47:::0;-1:-1:-1;;;;;37631:17:0;::::3;37651:1;37631:17:::0;;;:8:::3;::::0;::::3;:17;::::0;;;;:21;;;37714:24:::3;37640:7:::0;37733:4;37714:9:::3;:24::i;:::-;:28;37710:79;;;37753:28;37767:7;37776:4;37753:13;:28::i;:::-;37802:37;::::0;;;;;::::3;::::0;::::3;::::0;;;;;-1:-1:-1;;;;;37802:37:0;::::3;::::0;::::3;::::0;;;;;;::::3;37853:12:::0;-1:-1:-1;;;;31206:11:0::2;:18:::0;;-1:-1:-1;;31206:18:0::2;;;::::0;;-1:-1:-1;37273:598:0;;-1:-1:-1;;37273:598:0:o;33850:128::-;33919:7;33942:11;;;:5;:11;;;;;;;;:23;;;:17;;;;:23;;;;:30;;33850:128::o;39444:605::-;39634:7;2156:12;:10;:12::i;:::-;2146:6;;-1:-1:-1;;;;;2146:6:0;;;:22;;;2138:67;;;;;-1:-1:-1;;;2138:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2138:67:0;;;;;;;;;;;;;;;33113:1:::1;33090:9:::0;;;:5:::1;:9;::::0;;;;:20:::1;;::::0;39606:4;;33082:57:::1;;;::::0;;-1:-1:-1;;;33082:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33082:57:0;;;;;;;;;;;;;::::1;;30925:11:::2;::::0;::::2;::::0;::::2;;;30917:55;;;::::0;;-1:-1:-1;;;30917:55:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;;;;;;;30917:55:0;;;;;;;;;;;;;::::2;;31042:11;:19:::0;;-1:-1:-1;;31042:19:0::2;::::0;;31980:4:::3;39658:25:::0;::::3;;39650:54;;;::::0;;-1:-1:-1;;;39650:54:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;39650:54:0;;;;;;;;;;;;;::::3;;39729:4;::::0;:30:::3;::::0;;-1:-1:-1;;;39729:30:0;;::::3;::::0;::::3;::::0;;;-1:-1:-1;39729:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39729:4:0;;::::3;-1:-1:-1::0;;;;;39729:4:0::3;::::0;:11:::3;::::0;:30;;;;;-1:-1:-1;;39729:30:0;;;;;;;;-1:-1:-1;39729:4:0;:30;::::3;;2:2:-1::0;::::3;;;27:1;24::::0;17:12:::3;2:2;39729:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::3;77:16;74:1;67:27;5:2;39729:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::3;4:2;-1:-1:::0;39729:30:0;;-1:-1:-1;39774:11:0;39766:54:::3;;;::::0;;-1:-1:-1;;;39766:54:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;::::3;::::0;;;;;;;;;;;;;::::3;;39829:14;39846:11:::0;;;:5:::3;:11;::::0;;;;;;;:26;;;:17:::3;;:26:::0;;;;;;39879:17;;;39903:13:::3;::::0;::::3;:27:::0;;;39937:9:::3;::::0;::::3;:19:::0;;;39968:54;;;;;;;::::3;::::0;;;;;;;;;;;;;;;;;;;;;;;::::3;::::0;;;;;;;::::3;-1:-1:-1::0;40036:7:0;-1:-1:-1;;31206:11:0::2;:18:::0;;-1:-1:-1;;31206:18:0::2;;;::::0;;39444:605;;-1:-1:-1;;;;;39444:605:0:o;27084:118::-;-1:-1:-1;;;;;27171:25:0;27148:7;27171:25;;;:16;:25;;;;;;;27084:118::o;38636:99::-;2156:12;:10;:12::i;:::-;2146:6;;-1:-1:-1;;;;;2146:6:0;;;:22;;;2138:67;;;;;-1:-1:-1;;;2138:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2138:67:0;;;;;;;;;;;;;;;30925:11:::1;::::0;::::1;::::0;::::1;;;30917:55;;;::::0;;-1:-1:-1;;;30917:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;30917:55:0;;;;;;;;;;;;;::::1;;31042:11;:19:::0;;38711:7:::2;:18:::0;;-1:-1:-1;;;;;38711:18:0;;::::2;-1:-1:-1::0;;;;;;38711:18:0;;::::2;::::0;;;::::2;::::0;;;-1:-1:-1;;31042:19:0;;::::1;;31206:18;::::0;;38636:99::o;37877:424::-;2156:12;:10;:12::i;:::-;2146:6;;-1:-1:-1;;;;;2146:6:0;;;:22;;;2138:67;;;;;-1:-1:-1;;;2138:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2138:67:0;;;;;;;;;;;;;;;33113:1:::1;33090:9:::0;;;:5:::1;:9;::::0;;;;:20:::1;;::::0;37956:5;;33082:57:::1;;;::::0;;-1:-1:-1;;;33082:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33082:57:0;;;;;;;;;;;;;::::1;;30925:11:::2;::::0;::::2;::::0;::::2;;;30917:55;;;::::0;;-1:-1:-1;;;30917:55:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;;;;;;;30917:55:0;;;;;;;;;;;;;::::2;;31042:11;:19:::0;;-1:-1:-1;;31042:19:0::2;::::0;;-1:-1:-1;;;;;37991:21:0;::::3;37983:48;;;::::0;;-1:-1:-1;;;37983:48:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;37983:48:0;;;;;;;;;;;;;::::3;;38038:17;38058:12:::0;;;:5:::3;:12;::::0;;;;;;;:19:::3;;::::0;-1:-1:-1;;;;;38058:19:0;;::::3;38146:29:::0;;;:18:::3;:29:::0;;;;;;;38114:27;;::::3;::::0;;;;;38058:19;;38114:62:::3;::::0;:27;:62:::3;:31;:62;:::i;:::-;-1:-1:-1::0;;;;;38084:27:0;;::::3;;::::0;;;:18:::3;:27;::::0;;;;;;;:92;;;;38183:29;;::::3;::::0;;;;;:33;;;38223:12;;;:5:::3;:12:::0;;;;;:19:::3;;:29:::0;;-1:-1:-1;;;;;;38223:29:0::3;::::0;::::3;::::0;;38266;;;;;;;::::3;::::0;;;::::3;::::0;;;;;;;;;::::3;-1:-1:-1::0;;31206:11:0::2;:18:::0;;-1:-1:-1;;31206:18:0::2;;;::::0;;-1:-1:-1;;37877:424:0:o;38741:260::-;2156:12;:10;:12::i;:::-;2146:6;;-1:-1:-1;;;;;2146:6:0;;;:22;;;2138:67;;;;;-1:-1:-1;;;2138:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2138:67:0;;;;;;;;;;;;;;;33113:1:::1;33090:9:::0;;;:5:::1;:9;::::0;;;;:20:::1;;::::0;38837:4;;33082:57:::1;;;::::0;;-1:-1:-1;;;33082:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33082:57:0;;;;;;;;;;;;;::::1;;30925:11:::2;::::0;::::2;::::0;::::2;;;30917:55;;;::::0;;-1:-1:-1;;;30917:55:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;;;;;;;30917:55:0;;;;;;;;;;;;;::::2;;31042:11;:19:::0;;-1:-1:-1;;31042:19:0::2;::::0;;31929:4:::3;38871:40:::0;::::3;;38863:79;;;::::0;;-1:-1:-1;;;38863:79:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;::::3;::::0;;;;;;;;;;;;;::::3;;-1:-1:-1::0;38949:11:0::3;::::0;;;:5:::3;:11;::::0;;;;;:27:::3;;:46:::0;31206:11:::2;:18:::0;;-1:-1:-1;;31206:18:0::2;;;::::0;;38741:260::o;33570:130::-;33640:7;33663:11;;;:5;:11;;;;;;;;:23;;;:17;;;;:23;;;;:31;;;;33570:130::o;31938:46::-;31980:4;31938:46;:::o;40796:227::-;30925:11;;;;;;;30917:55;;;;;-1:-1:-1;;;30917:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;30917:55:0;;;;;;;;;;;;;;;31042:11;:19;;-1:-1:-1;;31042:19:0;;;40882:10:::1;31056:5:::0;40863:30;;;:18:::1;:30;::::0;;;;;40908:10;40900:42:::1;;;::::0;;-1:-1:-1;;;40900:42:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;40900:42:0;;;;;;;;;;;;;::::1;;40968:10;40982:1;40949:30:::0;;;:18:::1;:30;::::0;;;;;:34;;;40990:27;;::::1;;;::::0;41010:6;;40990:27;;40982:1;40990:27;41010:6;40968:10;40990:27;::::1;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;31206:11:0;:18;;-1:-1:-1;;31206:18:0;;;;;40796:227::o;39007:431::-;2156:12;:10;:12::i;:::-;2146:6;;-1:-1:-1;;;;;2146:6:0;;;:22;;;2138:67;;;;;-1:-1:-1;;;2138:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2138:67:0;;;;;;;;;;;;;;;33113:1:::1;33090:9:::0;;;:5:::1;:9;::::0;;;;:20:::1;;::::0;39162:4;;33082:57:::1;;;::::0;;-1:-1:-1;;;33082:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33082:57:0;;;;;;;;;;;;;::::1;;30925:11:::2;::::0;::::2;::::0;::::2;;;30917:55;;;::::0;;-1:-1:-1;;;30917:55:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;;;;;;;30917:55:0;;;;;;;;;;;;;::::2;;31042:11;:19:::0;;-1:-1:-1;;31042:19:0::2;::::0;;31980:4:::3;39196:25:::0;::::3;;39188:54;;;::::0;;-1:-1:-1;;;39188:54:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;39188:54:0;;;;;;;;;;;;;::::3;;39249:14;39266:11:::0;;;:5:::3;:11;::::0;;;;;;;:21;;;:17:::3;;:21:::0;;;;;;39294:17;;;39318:13:::3;::::0;::::3;:27:::0;;;39352:9:::3;::::0;::::3;:19:::0;;;39383:49;;;;;;;::::3;::::0;;;;;;;;;;;;;;;;;;;;;;;::::3;::::0;;;;;;;::::3;-1:-1:-1::0;;31206:11:0::2;:18:::0;;-1:-1:-1;;31206:18:0::2;;;::::0;;-1:-1:-1;;;;;39007:431:0:o;2837:230::-;2156:12;:10;:12::i;:::-;2146:6;;-1:-1:-1;;;;;2146:6:0;;;:22;;;2138:67;;;;;-1:-1:-1;;;2138:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2138:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;2922:22:0;::::1;2914:73;;;;-1:-1:-1::0;;;2914:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3020:6;::::0;2999:38:::1;::::0;-1:-1:-1;;;;;2999:38:0;;::::1;::::0;3020:6:::1;::::0;2999:38:::1;::::0;3020:6:::1;::::0;2999:38:::1;3044:6;:17:::0;;-1:-1:-1;;;;;;3044:17:0::1;-1:-1:-1::0;;;;;3044:17:0;;;::::1;::::0;;;::::1;::::0;;2837:230::o;32046:53::-;;;;;;;;;;;;;:::o;35824:149::-;30925:11;;;;;;;30917:55;;;;;-1:-1:-1;;;30917:55:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;30917:55:0;;;;;;;;;;;;;;;31042:11;:19;;-1:-1:-1;;31042:19:0;;;35908:59:::1;35917:8:::0;35927:6;35935:31:::1;35945:10;35917:8:::0;35935:9:::1;:31::i;:::-;35908:8;:59::i;31989:25::-:0;;;-1:-1:-1;;;;;31989:25:0;;:::o;33706:138::-;33780:7;33803:11;;;:5;:11;;;;;;;;:23;;;:17;;;;:23;;;;:35;;;;33706:138::o;26613:19::-;;;-1:-1:-1;;;;;26613:19:0;;:::o;601:100::-;685:10;601:100;:::o;4353:130::-;4411:7;4434:43;4438:1;4441;4434:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4427:50;4353:130;-1:-1:-1;;;4353:130:0:o;5199:431::-;5257:7;5486:6;5482:37;;-1:-1:-1;5510:1:0;5503:8;;5482:37;5539:5;;;5543:1;5539;:5;:1;5559:5;;;;;:10;5551:56;;;;-1:-1:-1;;;5551:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6080:126;6138:7;6161:39;6165:1;6168;6161:39;;;;;;;;;;;;;;;;;:3;:39::i;3925:167::-;3983:7;4011:5;;;4031:6;;;;4023:46;;;;;-1:-1:-1;;;4023:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;27828:364;27911:12;;:24;;27928:6;27911:24;:16;:24;:::i;:::-;27896:12;:39;27962:17;;;;:13;:17;;;;;;:29;;27984:6;27962:29;:21;:29;:::i;:::-;27942:17;;;;:13;:17;;;;;;;;:49;;;;28046:10;28029:28;;:16;:28;;;;:40;;28062:6;28029:40;:32;:40;:::i;:::-;28015:10;27998:28;;;;:16;:28;;;;;;;;:71;;;;28104:13;;;:9;:13;;;;;:25;;;;;;;;;:37;;28134:6;28104:37;:29;:37;:::i;:::-;28076:13;;;;:9;:13;;;;;;;;28090:10;28076:25;;;;;;;:65;;;;28148:5;:38;;-1:-1:-1;;;;;28148:5:0;;;;28179:6;28148:18;:38::i;:::-;27828:364;;:::o;13108:193::-;13180:4;-1:-1:-1;;;;;13201:21:0;;13193:68;;;;-1:-1:-1;;;13193:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13275:20:0;:11;:20;;;;;;;;;;;;;;;13108:193::o;14138:120::-;14194:24;:8;14210:7;14194:24;:15;:24;:::i;:::-;14230:22;;-1:-1:-1;;;;;14230:22:0;;;;;;;;14138:120;:::o;27442:380::-;27522:12;;:24;;27539:6;27522:24;:16;:24;:::i;:::-;27507:12;:39;27573:17;;;;:13;:17;;;;;;:29;;27595:6;27573:29;:21;:29;:::i;:::-;27553:17;;;;:13;:17;;;;;;;;:49;;;;27657:10;27640:28;;:16;:28;;;;:40;;27673:6;27640:40;:32;:40;:::i;:::-;27626:10;27609:28;;;;:16;:28;;;;;;;;:71;;;;27715:13;;;:9;:13;;;;;:25;;;;;;;;;:37;;27745:6;27715:37;:29;:37;:::i;:::-;27687:13;;;;:9;:13;;;;;;;;27701:10;27687:25;;;;;;;:65;;;;27759:5;:57;;-1:-1:-1;;;;;27759:5:0;;;;27802:4;27809:6;27759:22;:57::i;14020:112::-;14073:21;:8;14086:7;14073:21;:12;:21;:::i;:::-;14106:20;;-1:-1:-1;;;;;14106:20:0;;;;;;;;14020:112;:::o;28198:387::-;28328:21;;;;:13;:21;;;;;;:33;;28354:6;28328:33;:25;:33;:::i;:::-;28304:21;;;;:13;:21;;;;;;;;:57;;;;28400:9;:17;;;;;28418:10;28400:29;;;;;;:41;;28434:6;28400:41;:33;:41;:::i;:::-;28368:17;;;;:9;:17;;;;;;;;28386:10;28368:29;;;;;;;:73;;;;28472:19;;;:13;:19;;;;:31;;28496:6;28472:31;:23;:31;:::i;:::-;28450:19;;;;:13;:19;;;;;;;;:53;;;;28540:9;:15;;;;;28556:10;28540:27;;;;;;:39;;28572:6;28540:39;:31;:39;:::i;:::-;28510:15;;;;:9;:15;;;;;;;;28526:10;28510:27;;;;;;;;:69;;;;-1:-1:-1;;28198:387:0:o;28591:403::-;28659:14;28676:13;;;:9;:13;;;;;;;;-1:-1:-1;;;;;28676:22:0;;;;;;;;;;28722:12;;:24;;28676:22;28722:24;:16;:24;:::i;:::-;28707:12;:39;28773:17;;;;:13;:17;;;;;;:29;;28795:6;28773:29;:21;:29;:::i;:::-;28753:17;;;;:13;:17;;;;;;;;:49;;;;28857:10;28840:28;;:16;:28;;;;:40;;28873:6;28840:40;:32;:40;:::i;:::-;28826:10;28809:28;;;;:16;:28;;;;;;;;:71;;;;28912:13;;;:9;:13;;;;;-1:-1:-1;;;;;28912:22:0;;;;;;;;:34;;28939:6;28912:34;:26;:34;:::i;:::-;28887:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;28887:22:0;;;;;;;;;:59;;;;28953:5;:35;;:5;28901:7;28981:6;28953:35;:18;:35;:::i;:::-;28591:403;;;:::o;4764:198::-;4870:7;4902:12;4894:6;;;;4886:29;;;;-1:-1:-1;;;4886:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4886:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4934:5:0;;;4764:198::o;6676:280::-;6782:7;6813:12;6806:5;6798:28;;;;-1:-1:-1;;;6798:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6798:28:0;;6833:9;6849:1;6845;:5;;;;;;;6676:280;-1:-1:-1;;;;;6676:280:0:o;23429:191::-;23555:58;;;-1:-1:-1;;;;;23555:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;23555:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;23528:86:0;;23548:5;;23528:19;:86::i;12850:173::-;12926:18;12930:4;12936:7;12926:3;:18::i;:::-;12918:64;;;;-1:-1:-1;;;12918:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12989:20:0;13012:5;12989:20;;;;;;;;;;;:28;;-1:-1:-1;;12989:28:0;;;12850:173::o;23626:224::-;23775:68;;;-1:-1:-1;;;;;23775:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;23775:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;23748:96:0;;23768:5;;23748:19;:96::i;:::-;23626:224;;;;:::o;12610:168::-;12684:18;12688:4;12694:7;12684:3;:18::i;:::-;12683:19;12675:63;;;;;-1:-1:-1;;;12675:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12745:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;12745:27:0;12768:4;12745:27;;;12610:168::o;25750:730::-;26158:23;26184:69;26212:4;26184:69;;;;;;;;;;;;;;;;;26192:5;-1:-1:-1;;;;;26184:27:0;;;:69;;;;;:::i;:::-;26264:17;;26158:95;;-1:-1:-1;26264:21:0;26260:215;;26401:10;26390:30;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26390:30:0;26382:85;;;;-1:-1:-1;;;26382:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19632:209;19755:12;19783:52;19805:6;19813:4;19819:1;19822:12;19783:21;:52::i;:::-;19776:59;19632:209;-1:-1:-1;;;;19632:209:0:o;20674:531::-;20826:12;20880:5;20855:21;:30;;20847:81;;;;-1:-1:-1;;;20847:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20943:18;20954:6;20943:10;:18::i;:::-;20935:60;;;;;-1:-1:-1;;;20935:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21061:12;21075:23;21102:6;-1:-1:-1;;;;;21102:11:0;21121:5;21128:4;21102:31;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;21102:31:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;21060:73:0;;;;21147:52;21165:7;21174:10;21186:12;21147:17;:52::i;:::-;21140:59;20674:531;-1:-1:-1;;;;;;;20674:531:0:o;16842:404::-;17192:20;17232:8;;;16842:404::o;22177:659::-;22313:12;22338:7;22334:497;;;-1:-1:-1;22363:10:0;22356:17;;22334:497;22461:17;;:21;22457:367;;22690:10;22684:17;22741:15;22728:10;22724:2;22720:19;22713:44;22648:120;22794:20;;-1:-1:-1;;;22794:20:0;;;;;;;;;;;;;;;;;22801:12;;22794:20;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;41966:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41966:200:0;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://b87fdfe23aeeb066fd45eac6a0961364868159a8a9597bd1d55f4ccf750462b0
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $19.03 | 232.6219 | $4,426.8 |
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.