Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 43 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Refund Tickets | 18263455 | 469 days ago | IN | 0 ETH | 0.00069472 | ||||
Cancel Raffle | 18227843 | 474 days ago | IN | 0 ETH | 0.00139938 | ||||
Cancel Raffle | 18195017 | 479 days ago | IN | 0 ETH | 0.00096722 | ||||
Create Raffle | 18187753 | 480 days ago | IN | 0 ETH | 0.0029318 | ||||
Buy Tickets With... | 18163109 | 483 days ago | IN | 0.002 ETH | 0.00235685 | ||||
Buy Tickets With... | 18156309 | 484 days ago | IN | 0.002 ETH | 0.00225653 | ||||
Buy Tickets With... | 18152573 | 485 days ago | IN | 0.001 ETH | 0.00191054 | ||||
Claim Raffle Pri... | 18151133 | 485 days ago | IN | 0 ETH | 0.00158669 | ||||
Select Winner | 18150525 | 485 days ago | IN | 0 ETH | 0.00056918 | ||||
Buy Tickets With... | 18150424 | 485 days ago | IN | 0.005 ETH | 0.00189797 | ||||
Create Raffle | 18149796 | 485 days ago | IN | 0 ETH | 0.00476135 | ||||
Buy Tickets With... | 18149689 | 485 days ago | IN | 0.003 ETH | 0.00319123 | ||||
Buy Tickets With... | 18147773 | 485 days ago | IN | 0.005 ETH | 0.00171964 | ||||
Buy Tickets With... | 18137865 | 487 days ago | IN | 0.002 ETH | 0.00205696 | ||||
Buy Tickets With... | 18136757 | 487 days ago | IN | 0.001 ETH | 0.00490945 | ||||
Buy Tickets With... | 18136620 | 487 days ago | IN | 0.001 ETH | 0.00498665 | ||||
Buy Tickets With... | 18124031 | 489 days ago | IN | 0.001 ETH | 0.0020848 | ||||
Claim Raffle Pri... | 18122316 | 489 days ago | IN | 0 ETH | 0.00335293 | ||||
Create Raffle | 18122056 | 489 days ago | IN | 0 ETH | 0.00887563 | ||||
Buy Tickets With... | 18101977 | 492 days ago | IN | 0.005 ETH | 0.00168876 | ||||
Buy Tickets With... | 18100946 | 492 days ago | IN | 0.005 ETH | 0.00214646 | ||||
Buy Tickets With... | 18100791 | 492 days ago | IN | 0.01 ETH | 0.00333607 | ||||
Create Raffle | 18097125 | 492 days ago | IN | 0 ETH | 0.00362132 | ||||
Select Winner | 18095048 | 493 days ago | IN | 0 ETH | 0.00054818 | ||||
Buy Tickets With... | 18091314 | 493 days ago | IN | 0.001 ETH | 0.00183021 |
Loading...
Loading
Contract Name:
PhenixRaffle
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-01 */ // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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) { return a + b; } /** * @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 a - b; } /** * @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) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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 a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting 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) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: contracts/NestXRaffle.sol pragma solidity ^0.8.0; contract PhenixRaffle is Ownable { using SafeMath for uint256; uint256 public constant MAX_TICKET_COUNT = 100000; mapping(address => bool) public adminMapping; uint256 public adminFeePercentage; uint256 public adminDiscountedFeePercentage; uint256 public adminFeePercentageDenominator; address public discountNFTAddress; address public adminAddress; uint256 public maxRaffleDuration; bool public paused; enum RaffleStatus { OPEN, CLAIMED, REFUNDED } struct Entry { uint256 raffleId; address participant; uint256 numberOfTickets; } struct Pricing { uint256 ethTicketPrice; uint256 tokenTicketPrice; address tokenTicketAddress; } struct TimeFrame { uint256 raffleStartTimestamp; uint256 raffleEndTimestamp; } struct Rewards { uint256 ethReward; address tokenRewardAddress; uint256 tokenReward; address[] erc721Addresses; uint256[] tokenIds; } struct Raffle { uint256 raffleId; Pricing pricing; uint256 totalTickets; uint256 soldTickets; TimeFrame timeFrame; Rewards rewards; address host; address winner; uint256 totalCollectedETH; uint256 totalCollectedTokens; RaffleStatus status; } Raffle[] public raffles; mapping(address => uint256[]) public userRaffles; mapping(address => bool) public allowedTokenAddresses; mapping(uint256 => Entry[]) public raffleEntries; mapping(address => mapping(uint256 => uint256[])) public userRaffleEntries; mapping(uint256 => mapping(address => uint256)) public totalEthSpent; mapping(uint256 => mapping(address => uint256)) public totalTokensSpent; bool public strictCanceling; constructor(address _discountNFTAddress, address _adminAddress) { adminFeePercentage = 50; adminDiscountedFeePercentage = 25; adminFeePercentageDenominator = 1000; discountNFTAddress = _discountNFTAddress; maxRaffleDuration = 2419804; // 4 Weeks adminAddress = _adminAddress; } modifier onlyAdmin() { require( adminMapping[msg.sender] || msg.sender == owner(), "Only admin can call this function." ); _; } modifier canEnterRaffle(uint256 raffleId) { require( raffles[raffleId].status == RaffleStatus.OPEN && raffles[raffleId].timeFrame.raffleEndTimestamp > block.timestamp && raffles[raffleId].winner == address(0), "Cannot Enter Raffle." ); _; } modifier notPaused() { require(!paused, "Paused"); _; } function setMaxRaffleDuration(uint256 _seconds) external onlyOwner { maxRaffleDuration = _seconds; } function setAdminStatus(address _address, bool _status) external onlyOwner { adminMapping[_address] = _status; } function setAllowedTokenAddresses( address[] calldata _addresses, bool status ) external onlyOwner { for (uint256 i = 0; i < _addresses.length; i++) { allowedTokenAddresses[_addresses[i]] = status; } } function setPaused(bool status) external onlyAdmin { paused = status; } function setStrictCancelling(bool status) external onlyAdmin { strictCanceling = status; } function setAdminAddress(address _address) external onlyOwner { adminAddress = _address; } function setAdminFeeSettings( uint256 _adminFeePercentage, uint256 _adminDiscountFeePercentage, uint256 _adminFeePercentageDenominator ) external onlyOwner { require( _adminFeePercentage < _adminFeePercentageDenominator && _adminDiscountFeePercentage < _adminFeePercentageDenominator, "Invalid Params" ); adminFeePercentage = _adminFeePercentage; adminDiscountedFeePercentage = _adminDiscountFeePercentage; adminFeePercentageDenominator = _adminFeePercentageDenominator; } function setDiscountNFTAddress( address _discountNFTAddress ) external onlyOwner { discountNFTAddress = _discountNFTAddress; } function createRaffle( Pricing memory _pricing, uint256 _totalTickets, TimeFrame memory _timeFrame, Rewards memory _rewards ) public payable notPaused { require( _timeFrame.raffleEndTimestamp.sub( _timeFrame.raffleStartTimestamp ) <= maxRaffleDuration, "Duration too long." ); require( (_pricing.tokenTicketAddress == address(0) || allowedTokenAddresses[_pricing.tokenTicketAddress]) && (_rewards.tokenRewardAddress == address(0) || allowedTokenAddresses[_rewards.tokenRewardAddress]), "Token Address not permitted." ); require( _rewards.erc721Addresses.length == _rewards.tokenIds.length, "ERC721 Address and token ID length must match." ); // Transfer ETH reward to the contract if (_rewards.ethReward > 0) { require( msg.value == _rewards.ethReward, "ETH reward amount must match transaction value." ); } // Transfer token reward to the contract if (_rewards.tokenReward > 0) { require( _rewards.tokenRewardAddress != address(0), "Token address must be set." ); require( IERC20(_rewards.tokenRewardAddress).transferFrom( msg.sender, address(this), _rewards.tokenReward ), "Token transfer failed." ); } // Transfer ERC721 rewards to the contract if (_rewards.erc721Addresses.length > 0) { for (uint256 i = 0; i < _rewards.erc721Addresses.length; i++) { require( _rewards.erc721Addresses[i] != address(0), "ERC721 address must be set." ); require( IERC721(_rewards.erc721Addresses[i]).ownerOf( _rewards.tokenIds[i] ) == msg.sender, "ERC721 token not owned by sender." ); IERC721(_rewards.erc721Addresses[i]).transferFrom( msg.sender, address(this), _rewards.tokenIds[i] ); } } uint256 raffleId = raffles.length; userRaffles[msg.sender].push(raffleId); raffles.push( Raffle({ raffleId: raffleId, pricing: _pricing, totalTickets: _totalTickets, soldTickets: 0, timeFrame: _timeFrame, rewards: _rewards, host: msg.sender, winner: address(0), totalCollectedETH: 0, totalCollectedTokens: 0, status: RaffleStatus.OPEN }) ); } function addTicketsToRaffle( uint256 _raffleId, uint256 _numTickets, address _participant ) external onlyAdmin { _addTicketsToRaffle(_raffleId, _numTickets, _participant); } function _addTicketsToRaffle( uint256 _raffleId, uint256 _numTickets, address _participant ) internal { // Check that the raffle is open for entries require(_numTickets > 0, "One or more tickets required."); require( _participant != raffles[_raffleId].host, "Host cannot participate." ); require( block.timestamp <= raffles[_raffleId].timeFrame.raffleEndTimestamp, "Raffle no longer accepting entries." ); require( raffles[_raffleId].totalTickets == 0 || raffles[_raffleId].soldTickets.add(_numTickets) <= raffles[_raffleId].totalTickets, "Not enough tickets available for purchase." ); // Add entry to raffle entries array userRaffleEntries[_participant][_raffleId].push( raffleEntries[_raffleId].length ); raffleEntries[_raffleId].push( Entry({ raffleId: _raffleId, participant: _participant, numberOfTickets: _numTickets }) ); // Update raffle sold tickets raffles[_raffleId].soldTickets = raffles[_raffleId].soldTickets.add( _numTickets ); } function _getAdminFeeNumerator( address _userAddress ) internal view returns (uint256) { if ( discountNFTAddress != address(0) && IERC721(discountNFTAddress).balanceOf(_userAddress) > 0 ) { return adminDiscountedFeePercentage; } return adminFeePercentage; } function buyTicketsWithEth( uint256 _raffleId, uint256 _numTickets ) external payable notPaused canEnterRaffle(_raffleId) { require( raffles[_raffleId].pricing.ethTicketPrice > 0, "ETH ticket price not set for this raffle." ); require( msg.value == raffles[_raffleId].pricing.ethTicketPrice.mul(_numTickets), "Incorrect amount of ETH sent." ); _addTicketsToRaffle(_raffleId, _numTickets, msg.sender); raffles[_raffleId].totalCollectedETH = raffles[_raffleId] .totalCollectedETH .add(msg.value); totalEthSpent[_raffleId][msg.sender] = totalEthSpent[_raffleId][ msg.sender ].add(msg.value); } function buyTicketsWithTokens( uint256 _raffleId, uint256 _numTickets ) external notPaused canEnterRaffle(_raffleId) { require( raffles[_raffleId].pricing.tokenTicketPrice > 0, "Token ticket price not set for this raffle." ); uint256 totalTokens = raffles[_raffleId].pricing.tokenTicketPrice.mul( _numTickets ); // Transfer tokens from participant to contract require( IERC20(raffles[_raffleId].pricing.tokenTicketAddress).transferFrom( msg.sender, address(this), totalTokens ), "Token transfer failed." ); _addTicketsToRaffle(_raffleId, _numTickets, msg.sender); raffles[_raffleId].totalCollectedTokens = raffles[_raffleId] .totalCollectedTokens .add(totalTokens); totalTokensSpent[_raffleId][msg.sender] = totalTokensSpent[_raffleId][ msg.sender ].add(totalTokens); } function _distributeFees(uint256 _raffleId) internal { uint256 _adminFeePercentage = _getAdminFeeNumerator(msg.sender); // Distribute ETH fees if ( _adminFeePercentage > 0 && raffles[_raffleId].totalCollectedETH > 0 ) { uint256 adminFeeETH = raffles[_raffleId] .totalCollectedETH .mul(_adminFeePercentage) .div(adminFeePercentageDenominator); (bool sent, ) = payable(adminAddress).call{value: adminFeeETH}(""); require(sent, "Failed to send ETH admin fee."); (bool sentHost, ) = payable(raffles[_raffleId].host).call{ value: raffles[_raffleId].totalCollectedETH.sub(adminFeeETH) }(""); require(sentHost, "Failed to send ETH to host."); } // Distribute token fees if ( _adminFeePercentage > 0 && raffles[_raffleId].totalCollectedTokens > 0 ) { uint256 adminFeeTokens = raffles[_raffleId] .totalCollectedTokens .mul(_adminFeePercentage) .div(adminFeePercentageDenominator); require( IERC20(raffles[_raffleId].pricing.tokenTicketAddress).transfer( adminAddress, adminFeeTokens ), "Failed to send token admin fee." ); require( IERC20(raffles[_raffleId].pricing.tokenTicketAddress).transfer( raffles[_raffleId].host, raffles[_raffleId].totalCollectedTokens.sub(adminFeeTokens) ), "Failed to send tokens to host." ); } } function selectWinner( uint256 _raffleId, address _winner ) external onlyAdmin { // Check that the raffle is closed or all tickets are sold require( raffles[_raffleId].soldTickets > 0 && (block.timestamp > raffles[_raffleId].timeFrame.raffleEndTimestamp || raffles[_raffleId].totalTickets == raffles[_raffleId].soldTickets), "Raffle is not yet closed or no tickets sold." ); require( raffles[_raffleId].winner == address(0), "Winner has been selected." ); // Set the winner raffles[_raffleId].winner = _winner; } function claimRafflePrize(uint256 _raffleId) external notPaused { // Check that the winner has been selected and that the raffle is claimed require( raffles[_raffleId].winner != address(0), "Winner has not been selected." ); require( raffles[_raffleId].status == RaffleStatus.OPEN, "Prize has already been claimed." ); raffles[_raffleId].status = RaffleStatus.CLAIMED; _distributeFees(_raffleId); _distributePrizes(_raffleId, raffles[_raffleId].winner); } function cancelRaffle(uint256 _raffleId) external { require( (msg.sender == raffles[_raffleId].host || adminMapping[msg.sender] || msg.sender == owner()) && raffles[_raffleId].status == RaffleStatus.OPEN && (!strictCanceling || raffles[_raffleId].soldTickets == 0), "Cannot Cancel Raffle" ); raffles[_raffleId].status = RaffleStatus.REFUNDED; _distributePrizes(_raffleId, raffles[_raffleId].host); } function refundTickets(uint256 _raffleId) external { require( raffles[_raffleId].status == RaffleStatus.REFUNDED, "Raffle must be cancelled." ); uint256 ethRefundAmount = totalEthSpent[_raffleId][msg.sender]; uint256 tokenRefundAmount = totalTokensSpent[_raffleId][msg.sender]; // Check if there is any ETH to refund if (ethRefundAmount > 0) { // Update the mapping totalEthSpent[_raffleId][msg.sender] = 0; // Send the ETH back to the user (bool sent, ) = payable(msg.sender).call{value: ethRefundAmount}( "" ); require(sent, "Failed to send ETH refund."); } // Check if there are any tokens to refund if (tokenRefundAmount > 0) { // Update the mapping totalTokensSpent[_raffleId][msg.sender] = 0; // Send the tokens back to the user require( IERC20(raffles[_raffleId].pricing.tokenTicketAddress).transfer( msg.sender, tokenRefundAmount ), "Failed to send token refund." ); } } function _distributePrizes(uint256 _raffleId, address _recipient) internal { // Send ETH reward if (raffles[_raffleId].rewards.ethReward > 0) { (bool sent, ) = payable(_recipient).call{ value: raffles[_raffleId].rewards.ethReward }(""); require(sent, "Failed to send ETH reward."); } // Send token reward if (raffles[_raffleId].rewards.tokenReward > 0) { require( IERC20(raffles[_raffleId].rewards.tokenRewardAddress).transfer( _recipient, raffles[_raffleId].rewards.tokenReward ), "Failed to send token reward." ); } // Send ERC721 rewards for ( uint256 i = 0; i < raffles[_raffleId].rewards.erc721Addresses.length; i++ ) { IERC721(raffles[_raffleId].rewards.erc721Addresses[i]).transferFrom( address(this), _recipient, raffles[_raffleId].rewards.tokenIds[i] ); } } function getRaffles( uint256 _startingIndex, uint256 _lastIndex ) external view returns (Raffle[] memory) { if (_startingIndex == 0 && _lastIndex == 0) { return raffles; } uint256 resultLength = _lastIndex - _startingIndex + 1; Raffle[] memory result = new Raffle[](resultLength); uint256 resultIndex = 0; for ( uint256 i = _startingIndex; i <= _lastIndex && i < raffles.length; i++ ) { result[resultIndex] = raffles[i]; resultIndex++; } return result; } function getUserRaffles( address _address, uint256 _startingIndex, uint256 _lastIndex ) external view returns (Raffle[] memory) { uint256 resultLength = 0; if (_startingIndex == 0 && _lastIndex == 0) { resultLength = userRaffles[_address].length; _lastIndex = resultLength; } else { resultLength = _lastIndex - _startingIndex + 1; } Raffle[] memory result = new Raffle[](resultLength); uint256 resultIndex = 0; for ( uint256 i = _startingIndex; i <= _lastIndex && i < userRaffles[_address].length; i++ ) { result[resultIndex] = raffles[userRaffles[_address][i]]; resultIndex++; } return result; } function getRaffleEntries( uint256 _raffleId, uint256 _startingIndex, uint256 _lastIndex ) external view returns (Entry[] memory) { if (_startingIndex == 0 && _lastIndex == 0) { return raffleEntries[_raffleId]; } uint256 resultLength = _lastIndex - _startingIndex + 1; Entry[] memory result = new Entry[](resultLength); uint256 resultIndex = 0; Entry[] storage entries = raffleEntries[_raffleId]; for ( uint256 i = _startingIndex; i <= _lastIndex && i < entries.length; i++ ) { result[resultIndex] = entries[i]; resultIndex++; } return result; } function getUserRaffleEntries( address _address, uint256 _raffleId, uint256 _startingIndex, uint256 _lastIndex ) external view returns (Entry[] memory) { uint256 resultLength = 0; if (_startingIndex == 0 && _lastIndex == 0) { resultLength = userRaffleEntries[_address][_raffleId].length; _lastIndex = resultLength; } else { resultLength = _lastIndex - _startingIndex + 1; } Entry[] memory result = new Entry[](resultLength); uint256 resultIndex = 0; for ( uint256 i = _startingIndex; i <= _lastIndex && i < raffles.length; i++ ) { result[resultIndex] = raffleEntries[_raffleId][ userRaffleEntries[_address][_raffleId][i] ]; resultIndex++; } return result; } function getRafflesCount() external view returns (uint256) { return raffles.length; } function getRaffleEntryCount( uint256 _raffleId ) external view returns (uint256) { return raffleEntries[_raffleId].length; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_discountNFTAddress","type":"address"},{"internalType":"address","name":"_adminAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"MAX_TICKET_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_raffleId","type":"uint256"},{"internalType":"uint256","name":"_numTickets","type":"uint256"},{"internalType":"address","name":"_participant","type":"address"}],"name":"addTicketsToRaffle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"adminAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminDiscountedFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminFeePercentageDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"adminMapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedTokenAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_raffleId","type":"uint256"},{"internalType":"uint256","name":"_numTickets","type":"uint256"}],"name":"buyTicketsWithEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_raffleId","type":"uint256"},{"internalType":"uint256","name":"_numTickets","type":"uint256"}],"name":"buyTicketsWithTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_raffleId","type":"uint256"}],"name":"cancelRaffle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_raffleId","type":"uint256"}],"name":"claimRafflePrize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"ethTicketPrice","type":"uint256"},{"internalType":"uint256","name":"tokenTicketPrice","type":"uint256"},{"internalType":"address","name":"tokenTicketAddress","type":"address"}],"internalType":"struct PhenixRaffle.Pricing","name":"_pricing","type":"tuple"},{"internalType":"uint256","name":"_totalTickets","type":"uint256"},{"components":[{"internalType":"uint256","name":"raffleStartTimestamp","type":"uint256"},{"internalType":"uint256","name":"raffleEndTimestamp","type":"uint256"}],"internalType":"struct PhenixRaffle.TimeFrame","name":"_timeFrame","type":"tuple"},{"components":[{"internalType":"uint256","name":"ethReward","type":"uint256"},{"internalType":"address","name":"tokenRewardAddress","type":"address"},{"internalType":"uint256","name":"tokenReward","type":"uint256"},{"internalType":"address[]","name":"erc721Addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"internalType":"struct PhenixRaffle.Rewards","name":"_rewards","type":"tuple"}],"name":"createRaffle","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"discountNFTAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_raffleId","type":"uint256"},{"internalType":"uint256","name":"_startingIndex","type":"uint256"},{"internalType":"uint256","name":"_lastIndex","type":"uint256"}],"name":"getRaffleEntries","outputs":[{"components":[{"internalType":"uint256","name":"raffleId","type":"uint256"},{"internalType":"address","name":"participant","type":"address"},{"internalType":"uint256","name":"numberOfTickets","type":"uint256"}],"internalType":"struct PhenixRaffle.Entry[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_raffleId","type":"uint256"}],"name":"getRaffleEntryCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startingIndex","type":"uint256"},{"internalType":"uint256","name":"_lastIndex","type":"uint256"}],"name":"getRaffles","outputs":[{"components":[{"internalType":"uint256","name":"raffleId","type":"uint256"},{"components":[{"internalType":"uint256","name":"ethTicketPrice","type":"uint256"},{"internalType":"uint256","name":"tokenTicketPrice","type":"uint256"},{"internalType":"address","name":"tokenTicketAddress","type":"address"}],"internalType":"struct PhenixRaffle.Pricing","name":"pricing","type":"tuple"},{"internalType":"uint256","name":"totalTickets","type":"uint256"},{"internalType":"uint256","name":"soldTickets","type":"uint256"},{"components":[{"internalType":"uint256","name":"raffleStartTimestamp","type":"uint256"},{"internalType":"uint256","name":"raffleEndTimestamp","type":"uint256"}],"internalType":"struct PhenixRaffle.TimeFrame","name":"timeFrame","type":"tuple"},{"components":[{"internalType":"uint256","name":"ethReward","type":"uint256"},{"internalType":"address","name":"tokenRewardAddress","type":"address"},{"internalType":"uint256","name":"tokenReward","type":"uint256"},{"internalType":"address[]","name":"erc721Addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"internalType":"struct PhenixRaffle.Rewards","name":"rewards","type":"tuple"},{"internalType":"address","name":"host","type":"address"},{"internalType":"address","name":"winner","type":"address"},{"internalType":"uint256","name":"totalCollectedETH","type":"uint256"},{"internalType":"uint256","name":"totalCollectedTokens","type":"uint256"},{"internalType":"enum PhenixRaffle.RaffleStatus","name":"status","type":"uint8"}],"internalType":"struct PhenixRaffle.Raffle[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRafflesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_raffleId","type":"uint256"},{"internalType":"uint256","name":"_startingIndex","type":"uint256"},{"internalType":"uint256","name":"_lastIndex","type":"uint256"}],"name":"getUserRaffleEntries","outputs":[{"components":[{"internalType":"uint256","name":"raffleId","type":"uint256"},{"internalType":"address","name":"participant","type":"address"},{"internalType":"uint256","name":"numberOfTickets","type":"uint256"}],"internalType":"struct PhenixRaffle.Entry[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_startingIndex","type":"uint256"},{"internalType":"uint256","name":"_lastIndex","type":"uint256"}],"name":"getUserRaffles","outputs":[{"components":[{"internalType":"uint256","name":"raffleId","type":"uint256"},{"components":[{"internalType":"uint256","name":"ethTicketPrice","type":"uint256"},{"internalType":"uint256","name":"tokenTicketPrice","type":"uint256"},{"internalType":"address","name":"tokenTicketAddress","type":"address"}],"internalType":"struct PhenixRaffle.Pricing","name":"pricing","type":"tuple"},{"internalType":"uint256","name":"totalTickets","type":"uint256"},{"internalType":"uint256","name":"soldTickets","type":"uint256"},{"components":[{"internalType":"uint256","name":"raffleStartTimestamp","type":"uint256"},{"internalType":"uint256","name":"raffleEndTimestamp","type":"uint256"}],"internalType":"struct PhenixRaffle.TimeFrame","name":"timeFrame","type":"tuple"},{"components":[{"internalType":"uint256","name":"ethReward","type":"uint256"},{"internalType":"address","name":"tokenRewardAddress","type":"address"},{"internalType":"uint256","name":"tokenReward","type":"uint256"},{"internalType":"address[]","name":"erc721Addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"internalType":"struct PhenixRaffle.Rewards","name":"rewards","type":"tuple"},{"internalType":"address","name":"host","type":"address"},{"internalType":"address","name":"winner","type":"address"},{"internalType":"uint256","name":"totalCollectedETH","type":"uint256"},{"internalType":"uint256","name":"totalCollectedTokens","type":"uint256"},{"internalType":"enum PhenixRaffle.RaffleStatus","name":"status","type":"uint8"}],"internalType":"struct PhenixRaffle.Raffle[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxRaffleDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"raffleEntries","outputs":[{"internalType":"uint256","name":"raffleId","type":"uint256"},{"internalType":"address","name":"participant","type":"address"},{"internalType":"uint256","name":"numberOfTickets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"raffles","outputs":[{"internalType":"uint256","name":"raffleId","type":"uint256"},{"components":[{"internalType":"uint256","name":"ethTicketPrice","type":"uint256"},{"internalType":"uint256","name":"tokenTicketPrice","type":"uint256"},{"internalType":"address","name":"tokenTicketAddress","type":"address"}],"internalType":"struct PhenixRaffle.Pricing","name":"pricing","type":"tuple"},{"internalType":"uint256","name":"totalTickets","type":"uint256"},{"internalType":"uint256","name":"soldTickets","type":"uint256"},{"components":[{"internalType":"uint256","name":"raffleStartTimestamp","type":"uint256"},{"internalType":"uint256","name":"raffleEndTimestamp","type":"uint256"}],"internalType":"struct PhenixRaffle.TimeFrame","name":"timeFrame","type":"tuple"},{"components":[{"internalType":"uint256","name":"ethReward","type":"uint256"},{"internalType":"address","name":"tokenRewardAddress","type":"address"},{"internalType":"uint256","name":"tokenReward","type":"uint256"},{"internalType":"address[]","name":"erc721Addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"internalType":"struct PhenixRaffle.Rewards","name":"rewards","type":"tuple"},{"internalType":"address","name":"host","type":"address"},{"internalType":"address","name":"winner","type":"address"},{"internalType":"uint256","name":"totalCollectedETH","type":"uint256"},{"internalType":"uint256","name":"totalCollectedTokens","type":"uint256"},{"internalType":"enum PhenixRaffle.RaffleStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_raffleId","type":"uint256"}],"name":"refundTickets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_raffleId","type":"uint256"},{"internalType":"address","name":"_winner","type":"address"}],"name":"selectWinner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setAdminAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_adminFeePercentage","type":"uint256"},{"internalType":"uint256","name":"_adminDiscountFeePercentage","type":"uint256"},{"internalType":"uint256","name":"_adminFeePercentageDenominator","type":"uint256"}],"name":"setAdminFeeSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAdminStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setAllowedTokenAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_discountNFTAddress","type":"address"}],"name":"setDiscountNFTAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seconds","type":"uint256"}],"name":"setMaxRaffleDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setStrictCancelling","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"strictCanceling","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"totalEthSpent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"totalTokensSpent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userRaffleEntries","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userRaffles","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162004aef38038062004aef8339810160408190526200003491620000f5565b6200003f3362000088565b603260025560196003556103e8600455600580546001600160a01b039384166001600160a01b0319918216179091556224ec5c600755600680549290931691161790556200012d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000f057600080fd5b919050565b600080604083850312156200010957600080fd5b6200011483620000d8565b91506200012460208401620000d8565b90509250929050565b6149b2806200013d6000396000f3fe6080604052600436106102515760003560e01c8063831490f911610139578063cd6a5c75116100b6578063e9fdbd791161007a578063e9fdbd7914610731578063ea7a251714610751578063ed2b77e614610781578063f2fde38b146107b1578063f5bfe883146107d1578063fc6f9468146107f157600080fd5b8063cd6a5c7514610684578063d51075c1146106a4578063deeca808146106c4578063df17fddb146106e4578063e96e25eb1461070457600080fd5b80639c2ad30b116100fd5780639c2ad30b146105ba578063ab4de606146105f2578063b83b37d014610612578063c2c34fc21461064a578063c676a3eb1461066a57600080fd5b8063831490f9146105065780638ada7b461461051c5780638c8bf668146105325780638da5cb5b146105455780638e36b5131461057757600080fd5b80635148a29a116101d25780635fba3171116101965780635fba3171146104515780636270e1c4146104715780636b51d89a14610491578063715018a6146104b1578063773dd66c146104c65780637acadb13146104e657600080fd5b80635148a29a1461038c57806357dbdc62146103ac578063589a7f69146103d95780635c975abb146103f05780635d4bc0ce1461041a57600080fd5b806332bd6d681161021957806332bd6d68146102f657806339fce39c1461030957806340898f6c146103295780634a17b2431461033f5780634f5bee441461036c57600080fd5b806301b71a261461025657806316c38b3c1461027f5780631ffe7c21146102a1578063252598d4146102c15780632c1e816d146102d6575b600080fd5b34801561026257600080fd5b5061026c60075481565b6040519081526020015b60405180910390f35b34801561028b57600080fd5b5061029f61029a366004613f41565b610811565b005b3480156102ad57600080fd5b5061029f6102bc366004613f5e565b610871565b3480156102cd57600080fd5b5060095461026c565b3480156102e257600080fd5b5061029f6102f1366004613f95565b610bdc565b61029f610304366004613f5e565b610c06565b34801561031557600080fd5b5061029f610324366004613f41565b610ed8565b34801561033557600080fd5b5061026c60045481565b34801561034b57600080fd5b5061035f61035a366004613f5e565b610f2f565b60405161027691906140b8565b34801561037857600080fd5b5061029f610387366004614203565b611417565b34801561039857600080fd5b5061029f6103a736600461423c565b61144a565b3480156103b857600080fd5b506103cc6103c73660046142c2565b6114c9565b60405161027691906142ee565b3480156103e557600080fd5b5061026c620186a081565b3480156103fc57600080fd5b5060085461040a9060ff1681565b6040519015158152602001610276565b34801561042657600080fd5b5061043a610435366004614350565b6116c5565b6040516102769b9a99989796959493929190614369565b34801561045d57600080fd5b5061029f61046c366004614350565b611857565b34801561047d57600080fd5b506103cc61048c36600461441c565b611a01565b34801561049d57600080fd5b5061029f6104ac366004614350565b611bdb565b3480156104bd57600080fd5b5061029f611be8565b3480156104d257600080fd5b5061029f6104e1366004614350565b611bfc565b3480156104f257600080fd5b5061026c610501366004614457565b611e76565b34801561051257600080fd5b5061026c60025481565b34801561052857600080fd5b5061026c60035481565b61029f6105403660046146c6565b611eb4565b34801561055157600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610276565b34801561058357600080fd5b50610597610592366004613f5e565b612794565b604080519384526001600160a01b03909216602084015290820152606001610276565b3480156105c657600080fd5b5061026c6105d5366004614780565b600f60209081526000928352604080842090915290825290205481565b3480156105fe57600080fd5b5061029f61060d366004614780565b6127e0565b34801561061e57600080fd5b5061026c61062d366004614780565b600e60209081526000928352604080842090915290825290205481565b34801561065657600080fd5b5061035f610665366004614457565b612a05565b34801561067657600080fd5b5060105461040a9060ff1681565b34801561069057600080fd5b5061029f61069f366004613f95565b612d43565b3480156106b057600080fd5b5061026c6106bf3660046147a5565b612d6d565b3480156106d057600080fd5b5061029f6106df366004614350565b612d9e565b3480156106f057600080fd5b5061029f6106ff3660046147d1565b612f5c565b34801561071057600080fd5b5061026c61071f366004614350565b6000908152600c602052604090205490565b34801561073d57600080fd5b5061029f61074c3660046142c2565b612fab565b34801561075d57600080fd5b5061040a61076c366004613f95565b600b6020526000908152604090205460ff1681565b34801561078d57600080fd5b5061040a61079c366004613f95565b60016020526000908152604090205460ff1681565b3480156107bd57600080fd5b5061029f6107cc366004613f95565b61300c565b3480156107dd57600080fd5b5060055461055f906001600160a01b031681565b3480156107fd57600080fd5b5060065461055f906001600160a01b031681565b3360009081526001602052604090205460ff168061083957506000546001600160a01b031633145b61085e5760405162461bcd60e51b8152600401610855906147ff565b60405180910390fd5b6008805460ff1916911515919091179055565b60085460ff16156108945760405162461bcd60e51b815260040161085590614841565b816000600982815481106108aa576108aa614861565b600091825260209091206011601290920201015460ff1660028111156108d2576108d2614080565b148015610905575042600982815481106108ee576108ee614861565b906000526020600020906012020160060160010154115b8015610949575060006001600160a01b03166009828154811061092a5761092a614861565b60009182526020909120600e60129092020101546001600160a01b0316145b61098c5760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba1022b73a32b9102930b33336329760611b6044820152606401610855565b6000600984815481106109a1576109a1614861565b90600052602060002090601202016001016001015411610a175760405162461bcd60e51b815260206004820152602b60248201527f546f6b656e207469636b6574207072696365206e6f742073657420666f72207460448201526a3434b9903930b33336329760a91b6064820152608401610855565b6000610a4a8360098681548110610a3057610a30614861565b600091825260209091206002601290920201015490613082565b905060098481548110610a5f57610a5f614861565b60009182526020909120600360129092020101546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90610aa490339030908690600401614877565b6020604051808303816000875af1158015610ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae7919061489b565b610b2c5760405162461bcd60e51b81526020600482015260166024820152752a37b5b2b7103a3930b739b332b9103330b4b632b21760511b6044820152606401610855565b610b3784843361308e565b610b6e8160098681548110610b4e57610b4e614861565b9060005260206000209060120201601001546133a990919063ffffffff16565b60098581548110610b8157610b81614861565b6000918252602080832060106012909302019190910192909255858152600f825260408082203383529092522054610bb990826133a9565b6000948552600f6020908152604080872033885290915290942093909355505050565b610be46133b5565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60085460ff1615610c295760405162461bcd60e51b815260040161085590614841565b81600060098281548110610c3f57610c3f614861565b600091825260209091206011601290920201015460ff166002811115610c6757610c67614080565b148015610c9a57504260098281548110610c8357610c83614861565b906000526020600020906012020160060160010154115b8015610cde575060006001600160a01b031660098281548110610cbf57610cbf614861565b60009182526020909120600e60129092020101546001600160a01b0316145b610d215760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba1022b73a32b9102930b33336329760611b6044820152606401610855565b600060098481548110610d3657610d36614861565b90600052602060002090601202016001016000015411610daa5760405162461bcd60e51b815260206004820152602960248201527f455448207469636b6574207072696365206e6f742073657420666f722074686960448201526839903930b33336329760b91b6064820152608401610855565b610ddb8260098581548110610dc157610dc1614861565b600091825260209091206001601290920201015490613082565b3414610e295760405162461bcd60e51b815260206004820152601d60248201527f496e636f727265637420616d6f756e74206f66204554482073656e742e0000006044820152606401610855565b610e3483833361308e565b610e6b3460098581548110610e4b57610e4b614861565b9060005260206000209060120201600f01546133a990919063ffffffff16565b60098481548110610e7e57610e7e614861565b60009182526020808320600f6012909302019190910192909255848152600e825260408082203383529092522054610eb690346133a9565b6000938452600e60209081526040808620338752909152909320929092555050565b3360009081526001602052604090205460ff1680610f0057506000546001600160a01b031633145b610f1c5760405162461bcd60e51b8152600401610855906147ff565b6010805460ff1916911515919091179055565b606082158015610f3d575081155b1561115a576009805480602002602001604051908101604052809291908181526020016000905b8282101561114f576000848152602090819020604080516101608101825260128602909201805483528151606080820184526001830154825260028301548287015260038301546001600160a01b03908116838601528587019290925260048301548585015260058301548186015283518085018552600684015481526007840154818801526080860152835160a081810186526008850180548352600986015490941682890152600a85015482870152600b850180548751818b0281018b01909852808852979895979189019692959386019390919083018282801561107457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611056575b50505050508152602001600482018054806020026020016040519081016040528092919081815260200182805480156110cc57602002820191906000526020600020905b8154815260200190600101908083116110b8575b505050919092525050508152600d8201546001600160a01b039081166020830152600e830154166040820152600f820154606082015260108201546080820152601182015460a09091019060ff16600281111561112b5761112b614080565b600281111561113c5761113c614080565b8152505081526020019060010190610f64565b505050509050611411565b600061116684846148ce565b6111719060016148e1565b905060008167ffffffffffffffff81111561118e5761118e61448c565b6040519080825280602002602001820160405280156111c757816020015b6111b4613da5565b8152602001906001900390816111ac5790505b5090506000855b8581111580156111df575060095481105b1561140a57600981815481106111f7576111f7614861565b600091825260209182902060408051610160810182526012909302909101805483528151606080820184526001830154825260028301548287015260038301546001600160a01b03908116838601528587019290925260048301548585015260058301548186015283518085018552600684015481526007840154818801526080860152835160a081810186526008850180548352600986015490941682890152600a85015482870152600b850180548751818b0281018b01909852808852979895979189019692959386019390919083018282801561130057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112e2575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561135857602002820191906000526020600020905b815481526020019060010190808311611344575b505050919092525050508152600d8201546001600160a01b039081166020830152600e830154166040820152600f820154606082015260108201546080820152601182015460a09091019060ff1660028111156113b7576113b7614080565b60028111156113c8576113c8614080565b815250508383815181106113de576113de614861565b602002602001018190525081806113f4906148f4565b9250508080611402906148f4565b9150506111ce565b5090925050505b92915050565b61141f6133b5565b6001600160a01b03919091166000908152600160205260409020805460ff1916911515919091179055565b6114526133b5565b60005b828110156114c35781600b600086868581811061147457611474614861565b90506020020160208101906114899190613f95565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806114bb816148f4565b915050611455565b50505050565b6060821580156114d7575081155b15611565576000848152600c6020908152604080832080548251818502810185019093528083529193909284015b8282101561155a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b031684860152600290910154918301919091529083529092019101611505565b5050505090506116be565b600061157184846148ce565b61157c9060016148e1565b905060008167ffffffffffffffff8111156115995761159961448c565b6040519080825280602002602001820160405280156115f757816020015b6115e460405180606001604052806000815260200160006001600160a01b03168152602001600081525090565b8152602001906001900390816115b75790505b506000878152600c6020526040812091925090865b86811115801561161c5750815481105b156116b65781818154811061163357611633614861565b60009182526020918290206040805160608101825260039093029091018054835260018101546001600160a01b03169383019390935260029092015491810191909152845185908590811061168a5761168a614861565b602002602001018190525082806116a0906148f4565b93505080806116ae906148f4565b91505061160c565b509193505050505b9392505050565b600981815481106116d557600080fd5b6000918252602091829020601290910201805460408051606080820183526001850154825260028501548287015260038501546001600160a01b03908116838501526004860154600587015485518087018752600689015481526007890154818b0152865160a08101885260088a018054825260098b0154909516818c0152600a8a015481890152600b8a0180548951818e0281018e01909a52808a52999c50969a939992989197929690958601939091908301828280156117c057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117a2575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561181857602002820191906000526020600020905b815481526020019060010190808311611804575b50505091909252505050600d820154600e830154600f840154601085015460119095015493946001600160a01b03938416949290931692909160ff168b565b6009818154811061186a5761186a614861565b60009182526020909120601290910201600d01546001600160a01b03163314806118a357503360009081526001602052604090205460ff165b806118b857506000546001600160a01b031633145b80156118fe57506000600982815481106118d4576118d4614861565b600091825260209091206011601290920201015460ff1660028111156118fc576118fc614080565b145b801561193b575060105460ff16158061193b57506009818154811061192557611925614861565b9060005260206000209060120201600501546000145b61197e5760405162461bcd60e51b815260206004820152601460248201527343616e6e6f742043616e63656c20526166666c6560601b6044820152606401610855565b60026009828154811061199357611993614861565b60009182526020909120601160129092020101805460ff191660018360028111156119c0576119c0614080565b02179055506119fe81600983815481106119dc576119dc614861565b60009182526020909120600d60129092020101546001600160a01b031661340f565b50565b6060600083158015611a11575082155b15611a4357506001600160a01b0385166000908152600d60209081526040808320878452909152902054915081611a5b565b611a4d84846148ce565b611a589060016148e1565b90505b60008167ffffffffffffffff811115611a7657611a7661448c565b604051908082528060200260200182016040528015611ad457816020015b611ac160405180606001604052806000815260200160006001600160a01b03168152602001600081525090565b815260200190600190039081611a945790505b5090506000855b858111158015611aec575060095481105b15611bce576000888152600c602090815260408083206001600160a01b038d168452600d83528184208c8552909252909120805483908110611b3057611b30614861565b906000526020600020015481548110611b4b57611b4b614861565b60009182526020918290206040805160608101825260039093029091018054835260018101546001600160a01b031693830193909352600290920154918101919091528351849084908110611ba257611ba2614861565b60200260200101819052508180611bb8906148f4565b9250508080611bc6906148f4565b915050611adb565b5090979650505050505050565b611be36133b5565b600755565b611bf06133b5565b611bfa6000613790565b565b600260098281548110611c1157611c11614861565b600091825260209091206011601290920201015460ff166002811115611c3957611c39614080565b14611c865760405162461bcd60e51b815260206004820152601960248201527f526166666c65206d7573742062652063616e63656c6c65642e000000000000006044820152606401610855565b6000818152600e602090815260408083203380855290835281842054858552600f84528285209185529252909120548115611d6b576000838152600e602090815260408083203380855292528083208390555184908381818185875af1925050503d8060008114611d13576040519150601f19603f3d011682016040523d82523d6000602084013e611d18565b606091505b5050905080611d695760405162461bcd60e51b815260206004820152601a60248201527f4661696c656420746f2073656e642045544820726566756e642e0000000000006044820152606401610855565b505b8015611e71576000838152600f602090815260408083203384529091528120556009805484908110611d9f57611d9f614861565b600091825260209091206012909102016003015460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015611e01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e25919061489b565b611e715760405162461bcd60e51b815260206004820152601c60248201527f4661696c656420746f2073656e6420746f6b656e20726566756e642e000000006044820152606401610855565b505050565b600d6020528260005260406000206020528160005260406000208181548110611e9e57600080fd5b9060005260206000200160009250925050505481565b60085460ff1615611ed75760405162461bcd60e51b815260040161085590614841565b60075482516020840151611eea916137e0565b1115611f2d5760405162461bcd60e51b8152602060048201526012602482015271223ab930ba34b7b7103a37b7903637b7339760711b6044820152606401610855565b60408401516001600160a01b03161580611f6157506040808501516001600160a01b03166000908152600b602052205460ff165b8015611f9f575060208101516001600160a01b03161580611f9f57506020808201516001600160a01b03166000908152600b909152604090205460ff165b611feb5760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e2041646472657373206e6f74207065726d69747465642e000000006044820152606401610855565b8060800151518160600151511461205b5760405162461bcd60e51b815260206004820152602e60248201527f455243373231204164647265737320616e6420746f6b656e204944206c656e6760448201526d3a341036bab9ba1036b0ba31b41760911b6064820152608401610855565b8051156120ca57805134146120ca5760405162461bcd60e51b815260206004820152602f60248201527f4554482072657761726420616d6f756e74206d757374206d617463682074726160448201526e3739b0b1ba34b7b7103b30b63ab29760891b6064820152608401610855565b6040810151156121ee5760208101516001600160a01b031661212e5760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e2061646472657373206d757374206265207365742e0000000000006044820152606401610855565b80602001516001600160a01b03166323b872dd333084604001516040518463ffffffff1660e01b815260040161216693929190614877565b6020604051808303816000875af1158015612185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a9919061489b565b6121ee5760405162461bcd60e51b81526020600482015260166024820152752a37b5b2b7103a3930b739b332b9103330b4b632b21760511b6044820152606401610855565b6060810151511561244c5760005b81606001515181101561244a5760006001600160a01b03168260600151828151811061222a5761222a614861565b60200260200101516001600160a01b0316036122885760405162461bcd60e51b815260206004820152601b60248201527f4552433732312061646472657373206d757374206265207365742e00000000006044820152606401610855565b336001600160a01b0316826060015182815181106122a8576122a8614861565b60200260200101516001600160a01b0316636352211e846080015184815181106122d4576122d4614861565b60200260200101516040518263ffffffff1660e01b81526004016122fa91815260200190565b602060405180830381865afa158015612317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233b919061490d565b6001600160a01b03161461239b5760405162461bcd60e51b815260206004820152602160248201527f45524337323120746f6b656e206e6f74206f776e65642062792073656e6465726044820152601760f91b6064820152608401610855565b816060015181815181106123b1576123b1614861565b60200260200101516001600160a01b03166323b872dd3330856080015185815181106123df576123df614861565b60200260200101516040518463ffffffff1660e01b815260040161240593929190614877565b600060405180830381600087803b15801561241f57600080fd5b505af1158015612433573d6000803e3d6000fd5b505050508080612442906148f4565b9150506121fc565b505b60098054336000818152600a60209081526040808320805460018082018355918552838520018690558151610160810183528681528084018c81528184018c81526060808401888152608085018e815260a086018e815260c087019b909b5260e086018a905261010086018a905261012086018a905261014086018a90528c549687018d559b909852835160129095027f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af8101958655925180517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b0850155808801517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b18501558601517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b2840180546001600160a01b039283166001600160a01b03199182161790915592517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b385015597517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b4840155995180517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b58401558601517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b6830155965180517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b78301908155818701517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b88401805491909916991698909817909655928501517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b98401559684015180519697969195936126f3937f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7ba0192910190613e7e565b506080820151805161270f916004840191602090910190613ee3565b50505060c0820151600d820180546001600160a01b039283166001600160a01b03199182161790915560e0840151600e84018054919093169116179055610100820151600f820155610120820151601082015561014082015160118201805460ff1916600183600281111561278657612786614080565b021790555050505050505050565b600c60205281600052604060002081815481106127b057600080fd5b60009182526020909120600390910201805460018201546002909201549093506001600160a01b03909116915083565b3360009081526001602052604090205460ff168061280857506000546001600160a01b031633145b6128245760405162461bcd60e51b8152600401610855906147ff565b60006009838154811061283957612839614861565b9060005260206000209060120201600501541180156128cf57506009828154811061286657612866614861565b9060005260206000209060120201600601600101544211806128cf57506009828154811061289657612896614861565b906000526020600020906012020160050154600983815481106128bb576128bb614861565b906000526020600020906012020160040154145b6129305760405162461bcd60e51b815260206004820152602c60248201527f526166666c65206973206e6f742079657420636c6f736564206f72206e6f207460448201526b34b1b5b2ba399039b7b6321760a11b6064820152608401610855565b60006001600160a01b03166009838154811061294e5761294e614861565b60009182526020909120600e60129092020101546001600160a01b0316146129b85760405162461bcd60e51b815260206004820152601960248201527f57696e6e657220686173206265656e2073656c65637465642e000000000000006044820152606401610855565b80600983815481106129cc576129cc614861565b9060005260206000209060120201600e0160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505050565b6060600083158015612a15575082155b15612a3c57506001600160a01b0384166000908152600a6020526040902054915081612a54565b612a4684846148ce565b612a519060016148e1565b90505b60008167ffffffffffffffff811115612a6f57612a6f61448c565b604051908082528060200260200182016040528015612aa857816020015b612a95613da5565b815260200190600190039081612a8d5790505b5090506000855b858111158015612ad657506001600160a01b0388166000908152600a602052604090205481105b15612d37576001600160a01b0388166000908152600a6020526040902080546009919083908110612b0957612b09614861565b906000526020600020015481548110612b2457612b24614861565b600091825260209182902060408051610160810182526012909302909101805483528151606080820184526001830154825260028301548287015260038301546001600160a01b03908116838601528587019290925260048301548585015260058301548186015283518085018552600684015481526007840154818801526080860152835160a081810186526008850180548352600986015490941682890152600a85015482870152600b850180548751818b0281018b019098528088529798959791890196929593860193909190830182828015612c2d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612c0f575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015612c8557602002820191906000526020600020905b815481526020019060010190808311612c71575b505050919092525050508152600d8201546001600160a01b039081166020830152600e830154166040820152600f820154606082015260108201546080820152601182015460a09091019060ff166002811115612ce457612ce4614080565b6002811115612cf557612cf5614080565b81525050838381518110612d0b57612d0b614861565b60200260200101819052508180612d21906148f4565b9250508080612d2f906148f4565b915050612aaf565b50909695505050505050565b612d4b6133b5565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b600a6020528160005260406000208181548110612d8957600080fd5b90600052602060002001600091509150505481565b60085460ff1615612dc15760405162461bcd60e51b815260040161085590614841565b60006001600160a01b031660098281548110612ddf57612ddf614861565b60009182526020909120600e60129092020101546001600160a01b031603612e495760405162461bcd60e51b815260206004820152601d60248201527f57696e6e657220686173206e6f74206265656e2073656c65637465642e0000006044820152606401610855565b600060098281548110612e5e57612e5e614861565b600091825260209091206011601290920201015460ff166002811115612e8657612e86614080565b14612ed35760405162461bcd60e51b815260206004820152601f60248201527f5072697a652068617320616c7265616479206265656e20636c61696d65642e006044820152606401610855565b600160098281548110612ee857612ee8614861565b60009182526020909120601160129092020101805460ff19166001836002811115612f1557612f15614080565b0217905550612f23816137ec565b6119fe8160098381548110612f3a57612f3a614861565b60009182526020909120600e60129092020101546001600160a01b031661340f565b3360009081526001602052604090205460ff1680612f8457506000546001600160a01b031633145b612fa05760405162461bcd60e51b8152600401610855906147ff565b611e7183838361308e565b612fb36133b5565b8083108015612fc157508082105b612ffe5760405162461bcd60e51b815260206004820152600e60248201526d496e76616c696420506172616d7360901b6044820152606401610855565b600292909255600355600455565b6130146133b5565b6001600160a01b0381166130795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610855565b6119fe81613790565b60006116be828461492a565b600082116130de5760405162461bcd60e51b815260206004820152601d60248201527f4f6e65206f72206d6f7265207469636b6574732072657175697265642e0000006044820152606401610855565b600983815481106130f1576130f1614861565b60009182526020909120600d60129092020101546001600160a01b03908116908216036131605760405162461bcd60e51b815260206004820152601860248201527f486f73742063616e6e6f742070617274696369706174652e00000000000000006044820152606401610855565b6009838154811061317357613173614861565b9060005260206000209060120201600601600101544211156131e35760405162461bcd60e51b815260206004820152602360248201527f526166666c65206e6f206c6f6e67657220616363657074696e6720656e74726960448201526232b99760e91b6064820152608401610855565b600983815481106131f6576131f6614861565b9060005260206000209060120201600401546000148061327057506009838154811061322457613224614861565b90600052602060002090601202016004015461326d836009868154811061324d5761324d614861565b9060005260206000209060120201600501546133a990919063ffffffff16565b11155b6132cf5760405162461bcd60e51b815260206004820152602a60248201527f4e6f7420656e6f756768207469636b65747320617661696c61626c6520666f7260448201526910383ab931b430b9b29760b11b6064820152608401610855565b6001600160a01b038181166000818152600d602090815260408083208884528252808320600c83528184208054825460018082018555938752858720015582516060810184528a8152808501968752928301898152815480840183559186529390942091516003909402909101928355925192820180546001600160a01b0319169390941692909217909255516002909101556009805461337c9184918690811061324d5761324d614861565b6009848154811061338f5761338f614861565b906000526020600020906012020160050181905550505050565b60006116be82846148e1565b6000546001600160a01b03163314611bfa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610855565b60006009838154811061342457613424614861565b9060005260206000209060120201600801600001541115613505576000816001600160a01b03166009848154811061345e5761345e614861565b60009182526020822060086012909202010154604051909181818185875af1925050503d80600081146134ad576040519150601f19603f3d011682016040523d82523d6000602084013e6134b2565b606091505b50509050806135035760405162461bcd60e51b815260206004820152601a60248201527f4661696c656420746f2073656e6420455448207265776172642e0000000000006044820152606401610855565b505b60006009838154811061351a5761351a614861565b9060005260206000209060120201600801600201541115613653576009828154811061354857613548614861565b60009182526020909120600960129092020181015481546001600160a01b039091169163a9059cbb918491908690811061358457613584614861565b60009182526020909120600a60129092020101546040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156135e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613607919061489b565b6136535760405162461bcd60e51b815260206004820152601c60248201527f4661696c656420746f2073656e6420746f6b656e207265776172642e000000006044820152606401610855565b60005b6009838154811061366957613669614861565b60009182526020909120600b6012909202010154811015611e71576009838154811061369757613697614861565b906000526020600020906012020160080160030181815481106136bc576136bc614861565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166323b872dd3084600987815481106136fd576136fd614861565b9060005260206000209060120201600801600401858154811061372257613722614861565b90600052602060002001546040518463ffffffff1660e01b815260040161374b93929190614877565b600060405180830381600087803b15801561376557600080fd5b505af1158015613779573d6000803e3d6000fd5b505050508080613788906148f4565b915050613656565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006116be82846148ce565b60006137f733613cfb565b905060008111801561382d575060006009838154811061381957613819614861565b9060005260206000209060120201600f0154115b15613a2f576000613877600454613871846009878154811061385157613851614861565b9060005260206000209060120201600f015461308290919063ffffffff16565b90613d99565b6006546040519192506000916001600160a01b039091169083908381818185875af1925050503d80600081146138c9576040519150601f19603f3d011682016040523d82523d6000602084013e6138ce565b606091505b505090508061391f5760405162461bcd60e51b815260206004820152601d60248201527f4661696c656420746f2073656e64204554482061646d696e206665652e0000006044820152606401610855565b60006009858154811061393457613934614861565b9060005260206000209060120201600d0160009054906101000a90046001600160a01b03166001600160a01b0316613999846009888154811061397957613979614861565b9060005260206000209060120201600f01546137e090919063ffffffff16565b604051600081818185875af1925050503d80600081146139d5576040519150601f19603f3d011682016040523d82523d6000602084013e6139da565b606091505b5050905080613a2b5760405162461bcd60e51b815260206004820152601b60248201527f4661696c656420746f2073656e642045544820746f20686f73742e00000000006044820152606401610855565b5050505b600081118015613a635750600060098381548110613a4f57613a4f614861565b906000526020600020906012020160100154115b15613cf7576000613aa76004546138718460098781548110613a8757613a87614861565b90600052602060002090601202016010015461308290919063ffffffff16565b905060098381548110613abc57613abc614861565b600091825260209091206012909102016003015460065460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303816000875af1158015613b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b46919061489b565b613b925760405162461bcd60e51b815260206004820152601f60248201527f4661696c656420746f2073656e6420746f6b656e2061646d696e206665652e006044820152606401610855565b60098381548110613ba557613ba5614861565b6000918252602090912060036012909202010154600980546001600160a01b039092169163a9059cbb919086908110613be057613be0614861565b9060005260206000209060120201600d0160009054906101000a90046001600160a01b0316613c3c8460098881548110613c1c57613c1c614861565b9060005260206000209060120201601001546137e090919063ffffffff16565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015613c87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cab919061489b565b611e715760405162461bcd60e51b815260206004820152601e60248201527f4661696c656420746f2073656e6420746f6b656e7320746f20686f73742e00006044820152606401610855565b5050565b6005546000906001600160a01b031615801590613d8457506005546040516370a0823160e01b81526001600160a01b03848116600483015260009216906370a0823190602401602060405180830381865afa158015613d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d829190614941565b115b15613d9157505060035490565b505060025490565b60006116be828461495a565b60405180610160016040528060008152602001613de56040518060600160405280600081526020016000815260200160006001600160a01b031681525090565b81526020016000815260200160008152602001613e15604051806040016040528060008152602001600081525090565b8152602001613e556040518060a001604052806000815260200160006001600160a01b031681526020016000815260200160608152602001606081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b828054828255906000526020600020908101928215613ed3579160200282015b82811115613ed357825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613e9e565b50613edf929150613f1e565b5090565b828054828255906000526020600020908101928215613ed3579160200282015b82811115613ed3578251825591602001919060010190613f03565b5b80821115613edf5760008155600101613f1f565b80151581146119fe57600080fd5b600060208284031215613f5357600080fd5b81356116be81613f33565b60008060408385031215613f7157600080fd5b50508035926020909101359150565b6001600160a01b03811681146119fe57600080fd5b600060208284031215613fa757600080fd5b81356116be81613f80565b600081518084526020808501945080840160005b83811015613fe257815187529582019590820190600101613fc6565b509495945050505050565b805182526020808201516001600160a01b03908116828501526040808401519085015260608084015160a0918601829052805191860182905260009390810192909184919060c08801905b8084101561405a57855183168252948401946001939093019290840190614038565b506080870151945087810360808901526140748186613fb2565b98975050505050505050565b634e487b7160e01b600052602160045260246000fd5b600381106140b457634e487b7160e01b600052602160045260246000fd5b9052565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156141f557603f1989840301855281516101c081518552888201516141268a87018280518252602080820151908301526040908101516001600160a01b0316910152565b5087820151608081818801526060840151915060a0828189015281850151925060c091506141608289018480518252602090810151910152565b80850151925050610100838189015261417b84890184613fed565b9350818501519250610120915061419c828901846001600160a01b03169052565b60e085015192506101406141ba818a01856001600160a01b03169052565b90850151610160890152908401516101808801529092015191506141e26101a0860183614096565b95880195935050908601906001016140df565b509098975050505050505050565b6000806040838503121561421657600080fd5b823561422181613f80565b9150602083013561423181613f33565b809150509250929050565b60008060006040848603121561425157600080fd5b833567ffffffffffffffff8082111561426957600080fd5b818601915086601f83011261427d57600080fd5b81358181111561428c57600080fd5b8760208260051b85010111156142a157600080fd5b602092830195509350508401356142b781613f33565b809150509250925092565b6000806000606084860312156142d757600080fd5b505081359360208301359350604090920135919050565b602080825282518282018190526000919060409081850190868401855b8281101561434357815180518552868101516001600160a01b031687860152850151858501526060909301929085019060010161430b565b5091979650505050505050565b60006020828403121561436257600080fd5b5035919050565b60006101c08d835261439b602084018e80518252602080820151908301526040908101516001600160a01b0316910152565b8b60808401528a60a08401526143be60c084018b80518252602090810151910152565b806101008401526143d18184018a613fed565b6001600160a01b03898116610120860152881661014085015261016084018790526101808401869052915061440c90506101a0830184614096565b9c9b505050505050505050505050565b6000806000806080858703121561443257600080fd5b843561443d81613f80565b966020860135965060408601359560600135945092505050565b60008060006060848603121561446c57600080fd5b833561447781613f80565b95602085013595506040909401359392505050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156144c5576144c561448c565b60405290565b6040516060810167ffffffffffffffff811182821017156144c5576144c561448c565b6040805190810167ffffffffffffffff811182821017156144c5576144c561448c565b604051601f8201601f1916810167ffffffffffffffff8111828210171561453a5761453a61448c565b604052919050565b600067ffffffffffffffff82111561455c5761455c61448c565b5060051b60200190565b600082601f83011261457757600080fd5b8135602061458c61458783614542565b614511565b82815260059290921b840181019181810190868411156145ab57600080fd5b8286015b848110156145c657803583529183019183016145af565b509695505050505050565b600060a082840312156145e357600080fd5b6145eb6144a2565b90508135815260208083013561460081613f80565b8282015260408381013590830152606083013567ffffffffffffffff8082111561462957600080fd5b818501915085601f83011261463d57600080fd5b813561464b61458782614542565b81815260059190911b8301840190848101908883111561466a57600080fd5b938501935b8285101561469157843561468281613f80565b8252938501939085019061466f565b6060870152505060808501359250808311156146ac57600080fd5b50506146ba84828501614566565b60808301525092915050565b60008060008084860360e08112156146dd57600080fd5b60608112156146eb57600080fd5b6146f36144cb565b8635815260208701356020820152604087013561470f81613f80565b60408281019190915290955060608701359450607f198201121561473257600080fd5b5061473b6144ee565b6080860135815260a08601356020820152915060c085013567ffffffffffffffff81111561476857600080fd5b614774878288016145d1565b91505092959194509250565b6000806040838503121561479357600080fd5b82359150602083013561423181613f80565b600080604083850312156147b857600080fd5b82356147c381613f80565b946020939093013593505050565b6000806000606084860312156147e657600080fd5b833592506020840135915060408401356142b781613f80565b60208082526022908201527f4f6e6c792061646d696e2063616e2063616c6c20746869732066756e6374696f604082015261371760f11b606082015260800190565b60208082526006908201526514185d5cd95960d21b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b6000602082840312156148ad57600080fd5b81516116be81613f33565b634e487b7160e01b600052601160045260246000fd5b81810381811115611411576114116148b8565b80820180821115611411576114116148b8565b600060018201614906576149066148b8565b5060010190565b60006020828403121561491f57600080fd5b81516116be81613f80565b8082028115828204841417611411576114116148b8565b60006020828403121561495357600080fd5b5051919050565b60008261497757634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220554ce4e8c03c1039f56427a637bf001f30b935285c1cdb94407cad77edd3d67e64736f6c634300081200330000000000000000000000004885f58756e170de137474fc540c1268146730dc000000000000000000000000713dd8c16bc922dfb1cf15e2255704a3e20c6794
Deployed Bytecode
0x6080604052600436106102515760003560e01c8063831490f911610139578063cd6a5c75116100b6578063e9fdbd791161007a578063e9fdbd7914610731578063ea7a251714610751578063ed2b77e614610781578063f2fde38b146107b1578063f5bfe883146107d1578063fc6f9468146107f157600080fd5b8063cd6a5c7514610684578063d51075c1146106a4578063deeca808146106c4578063df17fddb146106e4578063e96e25eb1461070457600080fd5b80639c2ad30b116100fd5780639c2ad30b146105ba578063ab4de606146105f2578063b83b37d014610612578063c2c34fc21461064a578063c676a3eb1461066a57600080fd5b8063831490f9146105065780638ada7b461461051c5780638c8bf668146105325780638da5cb5b146105455780638e36b5131461057757600080fd5b80635148a29a116101d25780635fba3171116101965780635fba3171146104515780636270e1c4146104715780636b51d89a14610491578063715018a6146104b1578063773dd66c146104c65780637acadb13146104e657600080fd5b80635148a29a1461038c57806357dbdc62146103ac578063589a7f69146103d95780635c975abb146103f05780635d4bc0ce1461041a57600080fd5b806332bd6d681161021957806332bd6d68146102f657806339fce39c1461030957806340898f6c146103295780634a17b2431461033f5780634f5bee441461036c57600080fd5b806301b71a261461025657806316c38b3c1461027f5780631ffe7c21146102a1578063252598d4146102c15780632c1e816d146102d6575b600080fd5b34801561026257600080fd5b5061026c60075481565b6040519081526020015b60405180910390f35b34801561028b57600080fd5b5061029f61029a366004613f41565b610811565b005b3480156102ad57600080fd5b5061029f6102bc366004613f5e565b610871565b3480156102cd57600080fd5b5060095461026c565b3480156102e257600080fd5b5061029f6102f1366004613f95565b610bdc565b61029f610304366004613f5e565b610c06565b34801561031557600080fd5b5061029f610324366004613f41565b610ed8565b34801561033557600080fd5b5061026c60045481565b34801561034b57600080fd5b5061035f61035a366004613f5e565b610f2f565b60405161027691906140b8565b34801561037857600080fd5b5061029f610387366004614203565b611417565b34801561039857600080fd5b5061029f6103a736600461423c565b61144a565b3480156103b857600080fd5b506103cc6103c73660046142c2565b6114c9565b60405161027691906142ee565b3480156103e557600080fd5b5061026c620186a081565b3480156103fc57600080fd5b5060085461040a9060ff1681565b6040519015158152602001610276565b34801561042657600080fd5b5061043a610435366004614350565b6116c5565b6040516102769b9a99989796959493929190614369565b34801561045d57600080fd5b5061029f61046c366004614350565b611857565b34801561047d57600080fd5b506103cc61048c36600461441c565b611a01565b34801561049d57600080fd5b5061029f6104ac366004614350565b611bdb565b3480156104bd57600080fd5b5061029f611be8565b3480156104d257600080fd5b5061029f6104e1366004614350565b611bfc565b3480156104f257600080fd5b5061026c610501366004614457565b611e76565b34801561051257600080fd5b5061026c60025481565b34801561052857600080fd5b5061026c60035481565b61029f6105403660046146c6565b611eb4565b34801561055157600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610276565b34801561058357600080fd5b50610597610592366004613f5e565b612794565b604080519384526001600160a01b03909216602084015290820152606001610276565b3480156105c657600080fd5b5061026c6105d5366004614780565b600f60209081526000928352604080842090915290825290205481565b3480156105fe57600080fd5b5061029f61060d366004614780565b6127e0565b34801561061e57600080fd5b5061026c61062d366004614780565b600e60209081526000928352604080842090915290825290205481565b34801561065657600080fd5b5061035f610665366004614457565b612a05565b34801561067657600080fd5b5060105461040a9060ff1681565b34801561069057600080fd5b5061029f61069f366004613f95565b612d43565b3480156106b057600080fd5b5061026c6106bf3660046147a5565b612d6d565b3480156106d057600080fd5b5061029f6106df366004614350565b612d9e565b3480156106f057600080fd5b5061029f6106ff3660046147d1565b612f5c565b34801561071057600080fd5b5061026c61071f366004614350565b6000908152600c602052604090205490565b34801561073d57600080fd5b5061029f61074c3660046142c2565b612fab565b34801561075d57600080fd5b5061040a61076c366004613f95565b600b6020526000908152604090205460ff1681565b34801561078d57600080fd5b5061040a61079c366004613f95565b60016020526000908152604090205460ff1681565b3480156107bd57600080fd5b5061029f6107cc366004613f95565b61300c565b3480156107dd57600080fd5b5060055461055f906001600160a01b031681565b3480156107fd57600080fd5b5060065461055f906001600160a01b031681565b3360009081526001602052604090205460ff168061083957506000546001600160a01b031633145b61085e5760405162461bcd60e51b8152600401610855906147ff565b60405180910390fd5b6008805460ff1916911515919091179055565b60085460ff16156108945760405162461bcd60e51b815260040161085590614841565b816000600982815481106108aa576108aa614861565b600091825260209091206011601290920201015460ff1660028111156108d2576108d2614080565b148015610905575042600982815481106108ee576108ee614861565b906000526020600020906012020160060160010154115b8015610949575060006001600160a01b03166009828154811061092a5761092a614861565b60009182526020909120600e60129092020101546001600160a01b0316145b61098c5760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba1022b73a32b9102930b33336329760611b6044820152606401610855565b6000600984815481106109a1576109a1614861565b90600052602060002090601202016001016001015411610a175760405162461bcd60e51b815260206004820152602b60248201527f546f6b656e207469636b6574207072696365206e6f742073657420666f72207460448201526a3434b9903930b33336329760a91b6064820152608401610855565b6000610a4a8360098681548110610a3057610a30614861565b600091825260209091206002601290920201015490613082565b905060098481548110610a5f57610a5f614861565b60009182526020909120600360129092020101546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90610aa490339030908690600401614877565b6020604051808303816000875af1158015610ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae7919061489b565b610b2c5760405162461bcd60e51b81526020600482015260166024820152752a37b5b2b7103a3930b739b332b9103330b4b632b21760511b6044820152606401610855565b610b3784843361308e565b610b6e8160098681548110610b4e57610b4e614861565b9060005260206000209060120201601001546133a990919063ffffffff16565b60098581548110610b8157610b81614861565b6000918252602080832060106012909302019190910192909255858152600f825260408082203383529092522054610bb990826133a9565b6000948552600f6020908152604080872033885290915290942093909355505050565b610be46133b5565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60085460ff1615610c295760405162461bcd60e51b815260040161085590614841565b81600060098281548110610c3f57610c3f614861565b600091825260209091206011601290920201015460ff166002811115610c6757610c67614080565b148015610c9a57504260098281548110610c8357610c83614861565b906000526020600020906012020160060160010154115b8015610cde575060006001600160a01b031660098281548110610cbf57610cbf614861565b60009182526020909120600e60129092020101546001600160a01b0316145b610d215760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba1022b73a32b9102930b33336329760611b6044820152606401610855565b600060098481548110610d3657610d36614861565b90600052602060002090601202016001016000015411610daa5760405162461bcd60e51b815260206004820152602960248201527f455448207469636b6574207072696365206e6f742073657420666f722074686960448201526839903930b33336329760b91b6064820152608401610855565b610ddb8260098581548110610dc157610dc1614861565b600091825260209091206001601290920201015490613082565b3414610e295760405162461bcd60e51b815260206004820152601d60248201527f496e636f727265637420616d6f756e74206f66204554482073656e742e0000006044820152606401610855565b610e3483833361308e565b610e6b3460098581548110610e4b57610e4b614861565b9060005260206000209060120201600f01546133a990919063ffffffff16565b60098481548110610e7e57610e7e614861565b60009182526020808320600f6012909302019190910192909255848152600e825260408082203383529092522054610eb690346133a9565b6000938452600e60209081526040808620338752909152909320929092555050565b3360009081526001602052604090205460ff1680610f0057506000546001600160a01b031633145b610f1c5760405162461bcd60e51b8152600401610855906147ff565b6010805460ff1916911515919091179055565b606082158015610f3d575081155b1561115a576009805480602002602001604051908101604052809291908181526020016000905b8282101561114f576000848152602090819020604080516101608101825260128602909201805483528151606080820184526001830154825260028301548287015260038301546001600160a01b03908116838601528587019290925260048301548585015260058301548186015283518085018552600684015481526007840154818801526080860152835160a081810186526008850180548352600986015490941682890152600a85015482870152600b850180548751818b0281018b01909852808852979895979189019692959386019390919083018282801561107457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611056575b50505050508152602001600482018054806020026020016040519081016040528092919081815260200182805480156110cc57602002820191906000526020600020905b8154815260200190600101908083116110b8575b505050919092525050508152600d8201546001600160a01b039081166020830152600e830154166040820152600f820154606082015260108201546080820152601182015460a09091019060ff16600281111561112b5761112b614080565b600281111561113c5761113c614080565b8152505081526020019060010190610f64565b505050509050611411565b600061116684846148ce565b6111719060016148e1565b905060008167ffffffffffffffff81111561118e5761118e61448c565b6040519080825280602002602001820160405280156111c757816020015b6111b4613da5565b8152602001906001900390816111ac5790505b5090506000855b8581111580156111df575060095481105b1561140a57600981815481106111f7576111f7614861565b600091825260209182902060408051610160810182526012909302909101805483528151606080820184526001830154825260028301548287015260038301546001600160a01b03908116838601528587019290925260048301548585015260058301548186015283518085018552600684015481526007840154818801526080860152835160a081810186526008850180548352600986015490941682890152600a85015482870152600b850180548751818b0281018b01909852808852979895979189019692959386019390919083018282801561130057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112e2575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561135857602002820191906000526020600020905b815481526020019060010190808311611344575b505050919092525050508152600d8201546001600160a01b039081166020830152600e830154166040820152600f820154606082015260108201546080820152601182015460a09091019060ff1660028111156113b7576113b7614080565b60028111156113c8576113c8614080565b815250508383815181106113de576113de614861565b602002602001018190525081806113f4906148f4565b9250508080611402906148f4565b9150506111ce565b5090925050505b92915050565b61141f6133b5565b6001600160a01b03919091166000908152600160205260409020805460ff1916911515919091179055565b6114526133b5565b60005b828110156114c35781600b600086868581811061147457611474614861565b90506020020160208101906114899190613f95565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806114bb816148f4565b915050611455565b50505050565b6060821580156114d7575081155b15611565576000848152600c6020908152604080832080548251818502810185019093528083529193909284015b8282101561155a5760008481526020908190206040805160608101825260038602909201805483526001808201546001600160a01b031684860152600290910154918301919091529083529092019101611505565b5050505090506116be565b600061157184846148ce565b61157c9060016148e1565b905060008167ffffffffffffffff8111156115995761159961448c565b6040519080825280602002602001820160405280156115f757816020015b6115e460405180606001604052806000815260200160006001600160a01b03168152602001600081525090565b8152602001906001900390816115b75790505b506000878152600c6020526040812091925090865b86811115801561161c5750815481105b156116b65781818154811061163357611633614861565b60009182526020918290206040805160608101825260039093029091018054835260018101546001600160a01b03169383019390935260029092015491810191909152845185908590811061168a5761168a614861565b602002602001018190525082806116a0906148f4565b93505080806116ae906148f4565b91505061160c565b509193505050505b9392505050565b600981815481106116d557600080fd5b6000918252602091829020601290910201805460408051606080820183526001850154825260028501548287015260038501546001600160a01b03908116838501526004860154600587015485518087018752600689015481526007890154818b0152865160a08101885260088a018054825260098b0154909516818c0152600a8a015481890152600b8a0180548951818e0281018e01909a52808a52999c50969a939992989197929690958601939091908301828280156117c057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117a2575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561181857602002820191906000526020600020905b815481526020019060010190808311611804575b50505091909252505050600d820154600e830154600f840154601085015460119095015493946001600160a01b03938416949290931692909160ff168b565b6009818154811061186a5761186a614861565b60009182526020909120601290910201600d01546001600160a01b03163314806118a357503360009081526001602052604090205460ff165b806118b857506000546001600160a01b031633145b80156118fe57506000600982815481106118d4576118d4614861565b600091825260209091206011601290920201015460ff1660028111156118fc576118fc614080565b145b801561193b575060105460ff16158061193b57506009818154811061192557611925614861565b9060005260206000209060120201600501546000145b61197e5760405162461bcd60e51b815260206004820152601460248201527343616e6e6f742043616e63656c20526166666c6560601b6044820152606401610855565b60026009828154811061199357611993614861565b60009182526020909120601160129092020101805460ff191660018360028111156119c0576119c0614080565b02179055506119fe81600983815481106119dc576119dc614861565b60009182526020909120600d60129092020101546001600160a01b031661340f565b50565b6060600083158015611a11575082155b15611a4357506001600160a01b0385166000908152600d60209081526040808320878452909152902054915081611a5b565b611a4d84846148ce565b611a589060016148e1565b90505b60008167ffffffffffffffff811115611a7657611a7661448c565b604051908082528060200260200182016040528015611ad457816020015b611ac160405180606001604052806000815260200160006001600160a01b03168152602001600081525090565b815260200190600190039081611a945790505b5090506000855b858111158015611aec575060095481105b15611bce576000888152600c602090815260408083206001600160a01b038d168452600d83528184208c8552909252909120805483908110611b3057611b30614861565b906000526020600020015481548110611b4b57611b4b614861565b60009182526020918290206040805160608101825260039093029091018054835260018101546001600160a01b031693830193909352600290920154918101919091528351849084908110611ba257611ba2614861565b60200260200101819052508180611bb8906148f4565b9250508080611bc6906148f4565b915050611adb565b5090979650505050505050565b611be36133b5565b600755565b611bf06133b5565b611bfa6000613790565b565b600260098281548110611c1157611c11614861565b600091825260209091206011601290920201015460ff166002811115611c3957611c39614080565b14611c865760405162461bcd60e51b815260206004820152601960248201527f526166666c65206d7573742062652063616e63656c6c65642e000000000000006044820152606401610855565b6000818152600e602090815260408083203380855290835281842054858552600f84528285209185529252909120548115611d6b576000838152600e602090815260408083203380855292528083208390555184908381818185875af1925050503d8060008114611d13576040519150601f19603f3d011682016040523d82523d6000602084013e611d18565b606091505b5050905080611d695760405162461bcd60e51b815260206004820152601a60248201527f4661696c656420746f2073656e642045544820726566756e642e0000000000006044820152606401610855565b505b8015611e71576000838152600f602090815260408083203384529091528120556009805484908110611d9f57611d9f614861565b600091825260209091206012909102016003015460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015611e01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e25919061489b565b611e715760405162461bcd60e51b815260206004820152601c60248201527f4661696c656420746f2073656e6420746f6b656e20726566756e642e000000006044820152606401610855565b505050565b600d6020528260005260406000206020528160005260406000208181548110611e9e57600080fd5b9060005260206000200160009250925050505481565b60085460ff1615611ed75760405162461bcd60e51b815260040161085590614841565b60075482516020840151611eea916137e0565b1115611f2d5760405162461bcd60e51b8152602060048201526012602482015271223ab930ba34b7b7103a37b7903637b7339760711b6044820152606401610855565b60408401516001600160a01b03161580611f6157506040808501516001600160a01b03166000908152600b602052205460ff165b8015611f9f575060208101516001600160a01b03161580611f9f57506020808201516001600160a01b03166000908152600b909152604090205460ff165b611feb5760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e2041646472657373206e6f74207065726d69747465642e000000006044820152606401610855565b8060800151518160600151511461205b5760405162461bcd60e51b815260206004820152602e60248201527f455243373231204164647265737320616e6420746f6b656e204944206c656e6760448201526d3a341036bab9ba1036b0ba31b41760911b6064820152608401610855565b8051156120ca57805134146120ca5760405162461bcd60e51b815260206004820152602f60248201527f4554482072657761726420616d6f756e74206d757374206d617463682074726160448201526e3739b0b1ba34b7b7103b30b63ab29760891b6064820152608401610855565b6040810151156121ee5760208101516001600160a01b031661212e5760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e2061646472657373206d757374206265207365742e0000000000006044820152606401610855565b80602001516001600160a01b03166323b872dd333084604001516040518463ffffffff1660e01b815260040161216693929190614877565b6020604051808303816000875af1158015612185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a9919061489b565b6121ee5760405162461bcd60e51b81526020600482015260166024820152752a37b5b2b7103a3930b739b332b9103330b4b632b21760511b6044820152606401610855565b6060810151511561244c5760005b81606001515181101561244a5760006001600160a01b03168260600151828151811061222a5761222a614861565b60200260200101516001600160a01b0316036122885760405162461bcd60e51b815260206004820152601b60248201527f4552433732312061646472657373206d757374206265207365742e00000000006044820152606401610855565b336001600160a01b0316826060015182815181106122a8576122a8614861565b60200260200101516001600160a01b0316636352211e846080015184815181106122d4576122d4614861565b60200260200101516040518263ffffffff1660e01b81526004016122fa91815260200190565b602060405180830381865afa158015612317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233b919061490d565b6001600160a01b03161461239b5760405162461bcd60e51b815260206004820152602160248201527f45524337323120746f6b656e206e6f74206f776e65642062792073656e6465726044820152601760f91b6064820152608401610855565b816060015181815181106123b1576123b1614861565b60200260200101516001600160a01b03166323b872dd3330856080015185815181106123df576123df614861565b60200260200101516040518463ffffffff1660e01b815260040161240593929190614877565b600060405180830381600087803b15801561241f57600080fd5b505af1158015612433573d6000803e3d6000fd5b505050508080612442906148f4565b9150506121fc565b505b60098054336000818152600a60209081526040808320805460018082018355918552838520018690558151610160810183528681528084018c81528184018c81526060808401888152608085018e815260a086018e815260c087019b909b5260e086018a905261010086018a905261012086018a905261014086018a90528c549687018d559b909852835160129095027f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af8101958655925180517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b0850155808801517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b18501558601517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b2840180546001600160a01b039283166001600160a01b03199182161790915592517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b385015597517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b4840155995180517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b58401558601517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b6830155965180517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b78301908155818701517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b88401805491909916991698909817909655928501517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b98401559684015180519697969195936126f3937f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7ba0192910190613e7e565b506080820151805161270f916004840191602090910190613ee3565b50505060c0820151600d820180546001600160a01b039283166001600160a01b03199182161790915560e0840151600e84018054919093169116179055610100820151600f820155610120820151601082015561014082015160118201805460ff1916600183600281111561278657612786614080565b021790555050505050505050565b600c60205281600052604060002081815481106127b057600080fd5b60009182526020909120600390910201805460018201546002909201549093506001600160a01b03909116915083565b3360009081526001602052604090205460ff168061280857506000546001600160a01b031633145b6128245760405162461bcd60e51b8152600401610855906147ff565b60006009838154811061283957612839614861565b9060005260206000209060120201600501541180156128cf57506009828154811061286657612866614861565b9060005260206000209060120201600601600101544211806128cf57506009828154811061289657612896614861565b906000526020600020906012020160050154600983815481106128bb576128bb614861565b906000526020600020906012020160040154145b6129305760405162461bcd60e51b815260206004820152602c60248201527f526166666c65206973206e6f742079657420636c6f736564206f72206e6f207460448201526b34b1b5b2ba399039b7b6321760a11b6064820152608401610855565b60006001600160a01b03166009838154811061294e5761294e614861565b60009182526020909120600e60129092020101546001600160a01b0316146129b85760405162461bcd60e51b815260206004820152601960248201527f57696e6e657220686173206265656e2073656c65637465642e000000000000006044820152606401610855565b80600983815481106129cc576129cc614861565b9060005260206000209060120201600e0160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505050565b6060600083158015612a15575082155b15612a3c57506001600160a01b0384166000908152600a6020526040902054915081612a54565b612a4684846148ce565b612a519060016148e1565b90505b60008167ffffffffffffffff811115612a6f57612a6f61448c565b604051908082528060200260200182016040528015612aa857816020015b612a95613da5565b815260200190600190039081612a8d5790505b5090506000855b858111158015612ad657506001600160a01b0388166000908152600a602052604090205481105b15612d37576001600160a01b0388166000908152600a6020526040902080546009919083908110612b0957612b09614861565b906000526020600020015481548110612b2457612b24614861565b600091825260209182902060408051610160810182526012909302909101805483528151606080820184526001830154825260028301548287015260038301546001600160a01b03908116838601528587019290925260048301548585015260058301548186015283518085018552600684015481526007840154818801526080860152835160a081810186526008850180548352600986015490941682890152600a85015482870152600b850180548751818b0281018b019098528088529798959791890196929593860193909190830182828015612c2d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612c0f575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015612c8557602002820191906000526020600020905b815481526020019060010190808311612c71575b505050919092525050508152600d8201546001600160a01b039081166020830152600e830154166040820152600f820154606082015260108201546080820152601182015460a09091019060ff166002811115612ce457612ce4614080565b6002811115612cf557612cf5614080565b81525050838381518110612d0b57612d0b614861565b60200260200101819052508180612d21906148f4565b9250508080612d2f906148f4565b915050612aaf565b50909695505050505050565b612d4b6133b5565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b600a6020528160005260406000208181548110612d8957600080fd5b90600052602060002001600091509150505481565b60085460ff1615612dc15760405162461bcd60e51b815260040161085590614841565b60006001600160a01b031660098281548110612ddf57612ddf614861565b60009182526020909120600e60129092020101546001600160a01b031603612e495760405162461bcd60e51b815260206004820152601d60248201527f57696e6e657220686173206e6f74206265656e2073656c65637465642e0000006044820152606401610855565b600060098281548110612e5e57612e5e614861565b600091825260209091206011601290920201015460ff166002811115612e8657612e86614080565b14612ed35760405162461bcd60e51b815260206004820152601f60248201527f5072697a652068617320616c7265616479206265656e20636c61696d65642e006044820152606401610855565b600160098281548110612ee857612ee8614861565b60009182526020909120601160129092020101805460ff19166001836002811115612f1557612f15614080565b0217905550612f23816137ec565b6119fe8160098381548110612f3a57612f3a614861565b60009182526020909120600e60129092020101546001600160a01b031661340f565b3360009081526001602052604090205460ff1680612f8457506000546001600160a01b031633145b612fa05760405162461bcd60e51b8152600401610855906147ff565b611e7183838361308e565b612fb36133b5565b8083108015612fc157508082105b612ffe5760405162461bcd60e51b815260206004820152600e60248201526d496e76616c696420506172616d7360901b6044820152606401610855565b600292909255600355600455565b6130146133b5565b6001600160a01b0381166130795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610855565b6119fe81613790565b60006116be828461492a565b600082116130de5760405162461bcd60e51b815260206004820152601d60248201527f4f6e65206f72206d6f7265207469636b6574732072657175697265642e0000006044820152606401610855565b600983815481106130f1576130f1614861565b60009182526020909120600d60129092020101546001600160a01b03908116908216036131605760405162461bcd60e51b815260206004820152601860248201527f486f73742063616e6e6f742070617274696369706174652e00000000000000006044820152606401610855565b6009838154811061317357613173614861565b9060005260206000209060120201600601600101544211156131e35760405162461bcd60e51b815260206004820152602360248201527f526166666c65206e6f206c6f6e67657220616363657074696e6720656e74726960448201526232b99760e91b6064820152608401610855565b600983815481106131f6576131f6614861565b9060005260206000209060120201600401546000148061327057506009838154811061322457613224614861565b90600052602060002090601202016004015461326d836009868154811061324d5761324d614861565b9060005260206000209060120201600501546133a990919063ffffffff16565b11155b6132cf5760405162461bcd60e51b815260206004820152602a60248201527f4e6f7420656e6f756768207469636b65747320617661696c61626c6520666f7260448201526910383ab931b430b9b29760b11b6064820152608401610855565b6001600160a01b038181166000818152600d602090815260408083208884528252808320600c83528184208054825460018082018555938752858720015582516060810184528a8152808501968752928301898152815480840183559186529390942091516003909402909101928355925192820180546001600160a01b0319169390941692909217909255516002909101556009805461337c9184918690811061324d5761324d614861565b6009848154811061338f5761338f614861565b906000526020600020906012020160050181905550505050565b60006116be82846148e1565b6000546001600160a01b03163314611bfa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610855565b60006009838154811061342457613424614861565b9060005260206000209060120201600801600001541115613505576000816001600160a01b03166009848154811061345e5761345e614861565b60009182526020822060086012909202010154604051909181818185875af1925050503d80600081146134ad576040519150601f19603f3d011682016040523d82523d6000602084013e6134b2565b606091505b50509050806135035760405162461bcd60e51b815260206004820152601a60248201527f4661696c656420746f2073656e6420455448207265776172642e0000000000006044820152606401610855565b505b60006009838154811061351a5761351a614861565b9060005260206000209060120201600801600201541115613653576009828154811061354857613548614861565b60009182526020909120600960129092020181015481546001600160a01b039091169163a9059cbb918491908690811061358457613584614861565b60009182526020909120600a60129092020101546040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156135e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613607919061489b565b6136535760405162461bcd60e51b815260206004820152601c60248201527f4661696c656420746f2073656e6420746f6b656e207265776172642e000000006044820152606401610855565b60005b6009838154811061366957613669614861565b60009182526020909120600b6012909202010154811015611e71576009838154811061369757613697614861565b906000526020600020906012020160080160030181815481106136bc576136bc614861565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166323b872dd3084600987815481106136fd576136fd614861565b9060005260206000209060120201600801600401858154811061372257613722614861565b90600052602060002001546040518463ffffffff1660e01b815260040161374b93929190614877565b600060405180830381600087803b15801561376557600080fd5b505af1158015613779573d6000803e3d6000fd5b505050508080613788906148f4565b915050613656565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006116be82846148ce565b60006137f733613cfb565b905060008111801561382d575060006009838154811061381957613819614861565b9060005260206000209060120201600f0154115b15613a2f576000613877600454613871846009878154811061385157613851614861565b9060005260206000209060120201600f015461308290919063ffffffff16565b90613d99565b6006546040519192506000916001600160a01b039091169083908381818185875af1925050503d80600081146138c9576040519150601f19603f3d011682016040523d82523d6000602084013e6138ce565b606091505b505090508061391f5760405162461bcd60e51b815260206004820152601d60248201527f4661696c656420746f2073656e64204554482061646d696e206665652e0000006044820152606401610855565b60006009858154811061393457613934614861565b9060005260206000209060120201600d0160009054906101000a90046001600160a01b03166001600160a01b0316613999846009888154811061397957613979614861565b9060005260206000209060120201600f01546137e090919063ffffffff16565b604051600081818185875af1925050503d80600081146139d5576040519150601f19603f3d011682016040523d82523d6000602084013e6139da565b606091505b5050905080613a2b5760405162461bcd60e51b815260206004820152601b60248201527f4661696c656420746f2073656e642045544820746f20686f73742e00000000006044820152606401610855565b5050505b600081118015613a635750600060098381548110613a4f57613a4f614861565b906000526020600020906012020160100154115b15613cf7576000613aa76004546138718460098781548110613a8757613a87614861565b90600052602060002090601202016010015461308290919063ffffffff16565b905060098381548110613abc57613abc614861565b600091825260209091206012909102016003015460065460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303816000875af1158015613b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b46919061489b565b613b925760405162461bcd60e51b815260206004820152601f60248201527f4661696c656420746f2073656e6420746f6b656e2061646d696e206665652e006044820152606401610855565b60098381548110613ba557613ba5614861565b6000918252602090912060036012909202010154600980546001600160a01b039092169163a9059cbb919086908110613be057613be0614861565b9060005260206000209060120201600d0160009054906101000a90046001600160a01b0316613c3c8460098881548110613c1c57613c1c614861565b9060005260206000209060120201601001546137e090919063ffffffff16565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015613c87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cab919061489b565b611e715760405162461bcd60e51b815260206004820152601e60248201527f4661696c656420746f2073656e6420746f6b656e7320746f20686f73742e00006044820152606401610855565b5050565b6005546000906001600160a01b031615801590613d8457506005546040516370a0823160e01b81526001600160a01b03848116600483015260009216906370a0823190602401602060405180830381865afa158015613d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d829190614941565b115b15613d9157505060035490565b505060025490565b60006116be828461495a565b60405180610160016040528060008152602001613de56040518060600160405280600081526020016000815260200160006001600160a01b031681525090565b81526020016000815260200160008152602001613e15604051806040016040528060008152602001600081525090565b8152602001613e556040518060a001604052806000815260200160006001600160a01b031681526020016000815260200160608152602001606081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b828054828255906000526020600020908101928215613ed3579160200282015b82811115613ed357825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613e9e565b50613edf929150613f1e565b5090565b828054828255906000526020600020908101928215613ed3579160200282015b82811115613ed3578251825591602001919060010190613f03565b5b80821115613edf5760008155600101613f1f565b80151581146119fe57600080fd5b600060208284031215613f5357600080fd5b81356116be81613f33565b60008060408385031215613f7157600080fd5b50508035926020909101359150565b6001600160a01b03811681146119fe57600080fd5b600060208284031215613fa757600080fd5b81356116be81613f80565b600081518084526020808501945080840160005b83811015613fe257815187529582019590820190600101613fc6565b509495945050505050565b805182526020808201516001600160a01b03908116828501526040808401519085015260608084015160a0918601829052805191860182905260009390810192909184919060c08801905b8084101561405a57855183168252948401946001939093019290840190614038565b506080870151945087810360808901526140748186613fb2565b98975050505050505050565b634e487b7160e01b600052602160045260246000fd5b600381106140b457634e487b7160e01b600052602160045260246000fd5b9052565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156141f557603f1989840301855281516101c081518552888201516141268a87018280518252602080820151908301526040908101516001600160a01b0316910152565b5087820151608081818801526060840151915060a0828189015281850151925060c091506141608289018480518252602090810151910152565b80850151925050610100838189015261417b84890184613fed565b9350818501519250610120915061419c828901846001600160a01b03169052565b60e085015192506101406141ba818a01856001600160a01b03169052565b90850151610160890152908401516101808801529092015191506141e26101a0860183614096565b95880195935050908601906001016140df565b509098975050505050505050565b6000806040838503121561421657600080fd5b823561422181613f80565b9150602083013561423181613f33565b809150509250929050565b60008060006040848603121561425157600080fd5b833567ffffffffffffffff8082111561426957600080fd5b818601915086601f83011261427d57600080fd5b81358181111561428c57600080fd5b8760208260051b85010111156142a157600080fd5b602092830195509350508401356142b781613f33565b809150509250925092565b6000806000606084860312156142d757600080fd5b505081359360208301359350604090920135919050565b602080825282518282018190526000919060409081850190868401855b8281101561434357815180518552868101516001600160a01b031687860152850151858501526060909301929085019060010161430b565b5091979650505050505050565b60006020828403121561436257600080fd5b5035919050565b60006101c08d835261439b602084018e80518252602080820151908301526040908101516001600160a01b0316910152565b8b60808401528a60a08401526143be60c084018b80518252602090810151910152565b806101008401526143d18184018a613fed565b6001600160a01b03898116610120860152881661014085015261016084018790526101808401869052915061440c90506101a0830184614096565b9c9b505050505050505050505050565b6000806000806080858703121561443257600080fd5b843561443d81613f80565b966020860135965060408601359560600135945092505050565b60008060006060848603121561446c57600080fd5b833561447781613f80565b95602085013595506040909401359392505050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156144c5576144c561448c565b60405290565b6040516060810167ffffffffffffffff811182821017156144c5576144c561448c565b6040805190810167ffffffffffffffff811182821017156144c5576144c561448c565b604051601f8201601f1916810167ffffffffffffffff8111828210171561453a5761453a61448c565b604052919050565b600067ffffffffffffffff82111561455c5761455c61448c565b5060051b60200190565b600082601f83011261457757600080fd5b8135602061458c61458783614542565b614511565b82815260059290921b840181019181810190868411156145ab57600080fd5b8286015b848110156145c657803583529183019183016145af565b509695505050505050565b600060a082840312156145e357600080fd5b6145eb6144a2565b90508135815260208083013561460081613f80565b8282015260408381013590830152606083013567ffffffffffffffff8082111561462957600080fd5b818501915085601f83011261463d57600080fd5b813561464b61458782614542565b81815260059190911b8301840190848101908883111561466a57600080fd5b938501935b8285101561469157843561468281613f80565b8252938501939085019061466f565b6060870152505060808501359250808311156146ac57600080fd5b50506146ba84828501614566565b60808301525092915050565b60008060008084860360e08112156146dd57600080fd5b60608112156146eb57600080fd5b6146f36144cb565b8635815260208701356020820152604087013561470f81613f80565b60408281019190915290955060608701359450607f198201121561473257600080fd5b5061473b6144ee565b6080860135815260a08601356020820152915060c085013567ffffffffffffffff81111561476857600080fd5b614774878288016145d1565b91505092959194509250565b6000806040838503121561479357600080fd5b82359150602083013561423181613f80565b600080604083850312156147b857600080fd5b82356147c381613f80565b946020939093013593505050565b6000806000606084860312156147e657600080fd5b833592506020840135915060408401356142b781613f80565b60208082526022908201527f4f6e6c792061646d696e2063616e2063616c6c20746869732066756e6374696f604082015261371760f11b606082015260800190565b60208082526006908201526514185d5cd95960d21b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b6000602082840312156148ad57600080fd5b81516116be81613f33565b634e487b7160e01b600052601160045260246000fd5b81810381811115611411576114116148b8565b80820180821115611411576114116148b8565b600060018201614906576149066148b8565b5060010190565b60006020828403121561491f57600080fd5b81516116be81613f80565b8082028115828204841417611411576114116148b8565b60006020828403121561495357600080fd5b5051919050565b60008261497757634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220554ce4e8c03c1039f56427a637bf001f30b935285c1cdb94407cad77edd3d67e64736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004885f58756e170de137474fc540c1268146730dc000000000000000000000000713dd8c16bc922dfb1cf15e2255704a3e20c6794
-----Decoded View---------------
Arg [0] : _discountNFTAddress (address): 0x4885F58756E170dE137474fC540c1268146730Dc
Arg [1] : _adminAddress (address): 0x713Dd8c16bc922dFb1Cf15e2255704A3E20C6794
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000004885f58756e170de137474fc540c1268146730dc
Arg [1] : 000000000000000000000000713dd8c16bc922dfb1cf15e2255704a3e20c6794
Deployed Bytecode Sourcemap
19354:21074:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19753:32;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;19753:32:0;;;;;;;;22787:85;;;;;;;;;;-1:-1:-1;22787:85:0;;;;;:::i;:::-;;:::i;:::-;;29740:1074;;;;;;;;;;-1:-1:-1;29740:1074:0;;;;;:::i;:::-;;:::i;40165:99::-;;;;;;;;;;-1:-1:-1;40242:7:0;:14;40165:99;;22992:104;;;;;;;;;;-1:-1:-1;22992:104:0;;;;;:::i;:::-;;:::i;28928:804::-;;;;;;:::i;:::-;;:::i;22880:104::-;;;;;;;;;;-1:-1:-1;22880:104:0;;;;;:::i;:::-;;:::i;19628:44::-;;;;;;;;;;;;;;;;36958:647;;;;;;;;;;-1:-1:-1;36958:647:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22385:126::-;;;;;;;;;;-1:-1:-1;22385:126:0;;;;;:::i;:::-;;:::i;22519:260::-;;;;;;;;;;-1:-1:-1;22519:260:0;;;;;:::i;:::-;;:::i;38456:756::-;;;;;;;;;;-1:-1:-1;38456:756:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19429:49::-;;;;;;;;;;;;19472:6;19429:49;;19792:18;;;;;;;;;;-1:-1:-1;19792:18:0;;;;;;;;;;;8200:14:1;;8193:22;8175:41;;8163:2;8148:18;19792::0;8035:187:1;20813:23:0;;;;;;;;;;-1:-1:-1;20813:23:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;33964:536::-;;;;;;;;;;-1:-1:-1;33964:536:0;;;;;:::i;:::-;;:::i;39220:937::-;;;;;;;;;;-1:-1:-1;39220:937:0;;;;;:::i;:::-;;:::i;22263:114::-;;;;;;;;;;-1:-1:-1;22263:114:0;;;;;:::i;:::-;;:::i;9708:103::-;;;;;;;;;;;;;:::i;34508:1262::-;;;;;;;;;;-1:-1:-1;34508:1262:0;;;;;:::i;:::-;;:::i;21013:74::-;;;;;;;;;;-1:-1:-1;21013:74:0;;;;;:::i;:::-;;:::i;19538:33::-;;;;;;;;;;;;;;;;19578:43;;;;;;;;;;;;;;;;23873:3102;;;;;;:::i;:::-;;:::i;9067:87::-;;;;;;;;;;-1:-1:-1;9113:7:0;9140:6;-1:-1:-1;;;;;9140:6:0;9067:87;;;-1:-1:-1;;;;;15311:32:1;;;15293:51;;15281:2;15266:18;9067:87:0;15147:203:1;20958:48:0;;;;;;;;;;-1:-1:-1;20958:48:0;;;;;:::i;:::-;;:::i;:::-;;;;15557:25:1;;;-1:-1:-1;;;;;15618:32:1;;;15613:2;15598:18;;15591:60;15667:18;;;15660:34;15545:2;15530:18;20958:48:0;15355:345:1;21169:71:0;;;;;;;;;;-1:-1:-1;21169:71:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;32621:739;;;;;;;;;;-1:-1:-1;32621:739:0;;;;;:::i;:::-;;:::i;21094:68::-;;;;;;;;;;-1:-1:-1;21094:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;37613:835;;;;;;;;;;-1:-1:-1;37613:835:0;;;;;:::i;:::-;;:::i;21247:27::-;;;;;;;;;;-1:-1:-1;21247:27:0;;;;;;;;23711:154;;;;;;;;;;-1:-1:-1;23711:154:0;;;;;:::i;:::-;;:::i;20843:48::-;;;;;;;;;;-1:-1:-1;20843:48:0;;;;;:::i;:::-;;:::i;33368:588::-;;;;;;;;;;-1:-1:-1;33368:588:0;;;;;:::i;:::-;;:::i;26983:219::-;;;;;;;;;;-1:-1:-1;26983:219:0;;;;;:::i;:::-;;:::i;40272:153::-;;;;;;;;;;-1:-1:-1;40272:153:0;;;;;:::i;:::-;40359:7;40386:24;;;:13;:24;;;;;:31;;40272:153;23104:599;;;;;;;;;;-1:-1:-1;23104:599:0;;;;;:::i;:::-;;:::i;20898:53::-;;;;;;;;;;-1:-1:-1;20898:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19487:44;;;;;;;;;;-1:-1:-1;19487:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9966:201;;;;;;;;;;-1:-1:-1;9966:201:0;;;;;:::i;:::-;;:::i;19679:33::-;;;;;;;;;;-1:-1:-1;19679:33:0;;;;-1:-1:-1;;;;;19679:33:0;;;19719:27;;;;;;;;;;-1:-1:-1;19719:27:0;;;;-1:-1:-1;;;;;19719:27:0;;;22787:85;21694:10;21681:24;;;;:12;:24;;;;;;;;;:49;;-1:-1:-1;9113:7:0;9140:6;-1:-1:-1;;;;;9140:6:0;21709:10;:21;21681:49;21659:133;;;;-1:-1:-1;;;21659:133:0;;;;;;;:::i;:::-;;;;;;;;;22849:6:::1;:15:::0;;-1:-1:-1;;22849:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22787:85::o;29740:1074::-;22218:6;;;;22217:7;22209:26;;;;-1:-1:-1;;;22209:26:0;;;;;;;:::i;:::-;29869:9;21923:17:::1;21895:7;21903:8;21895:17;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:24:::1;:17;::::0;;::::1;;:24;::::0;::::1;;:45;::::0;::::1;;;;;;:::i;:::-;;:147;;;;;22027:15;21961:7;21969:8;21961:17;;;;;;;;:::i;:::-;;;;;;;;;;;:27;;:46;;;:81;21895:147;:206;;;;;22099:1;-1:-1:-1::0;;;;;22063:38:0::1;:7;22071:8;22063:17;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:24:::1;:17;::::0;;::::1;;:24;::::0;-1:-1:-1;;;;;22063:24:0::1;:38;21895:206;21873:276;;;::::0;-1:-1:-1;;;21873:276:0;;17804:2:1;21873:276:0::1;::::0;::::1;17786:21:1::0;17843:2;17823:18;;;17816:30;-1:-1:-1;;;17862:18:1;;;17855:50;17922:18;;21873:276:0::1;17602:344:1::0;21873:276:0::1;29959:1:::2;29913:7;29921:9;29913:18;;;;;;;;:::i;:::-;;;;;;;;;;;:26;;:43;;;:47;29891:140;;;::::0;-1:-1:-1;;;29891:140:0;;18153:2:1;29891:140:0::2;::::0;::::2;18135:21:1::0;18192:2;18172:18;;;18165:30;18231:34;18211:18;;;18204:62;-1:-1:-1;;;18282:18:1;;;18275:41;18333:19;;29891:140:0::2;17951:407:1::0;29891:140:0::2;30044:19;30066:84;30128:11;30066:7;30074:9;30066:18;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;:43;:18:::2;::::0;;::::2;;:43:::0;;;:47:::2;:84::i;:::-;30044:106;;30249:7;30257:9;30249:18;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;:45;:18:::2;::::0;;::::2;;:45:::0;;30242:172:::2;::::0;-1:-1:-1;;;30242:172:0;;-1:-1:-1;;;;;30249:45:0;;::::2;::::0;30242:66:::2;::::0;:172:::2;::::0;30327:10:::2;::::0;30364:4:::2;::::0;30388:11;;30242:172:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30220:244;;;::::0;-1:-1:-1;;;30220:244:0;;19195:2:1;30220:244:0::2;::::0;::::2;19177:21:1::0;19234:2;19214:18;;;19207:30;-1:-1:-1;;;19253:18:1;;;19246:52;19315:18;;30220:244:0::2;18993:346:1::0;30220:244:0::2;30477:55;30497:9;30508:11;30521:10;30477:19;:55::i;:::-;30587:84;30659:11;30587:7;30595:9;30587:18;;;;;;;;:::i;:::-;;;;;;;;;;;:53;;;:71;;:84;;;;:::i;:::-;30545:7;30553:9;30545:18;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;:39:::2;:18;::::0;;::::2;;:39:::0;;;::::2;:126:::0;;;;30726:27;;;:16:::2;:27:::0;;;;;;30768:10:::2;30726:63:::0;;;;;;;:80:::2;::::0;30794:11;30726:67:::2;:80::i;:::-;30684:27;::::0;;;:16:::2;:27;::::0;;;;;;;30712:10:::2;30684:39:::0;;;;;;;;:122;;;;-1:-1:-1;;;29740:1074:0:o;22992:104::-;8953:13;:11;:13::i;:::-;23065:12:::1;:23:::0;;-1:-1:-1;;;;;;23065:23:0::1;-1:-1:-1::0;;;;;23065:23:0;;;::::1;::::0;;;::::1;::::0;;22992:104::o;28928:804::-;22218:6;;;;22217:7;22209:26;;;;-1:-1:-1;;;22209:26:0;;;;;;;:::i;:::-;29062:9;21923:17:::1;21895:7;21903:8;21895:17;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:24:::1;:17;::::0;;::::1;;:24;::::0;::::1;;:45;::::0;::::1;;;;;;:::i;:::-;;:147;;;;;22027:15;21961:7;21969:8;21961:17;;;;;;;;:::i;:::-;;;;;;;;;;;:27;;:46;;;:81;21895:147;:206;;;;;22099:1;-1:-1:-1::0;;;;;22063:38:0::1;:7;22071:8;22063:17;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:24:::1;:17;::::0;;::::1;;:24;::::0;-1:-1:-1;;;;;22063:24:0::1;:38;21895:206;21873:276;;;::::0;-1:-1:-1;;;21873:276:0;;17804:2:1;21873:276:0::1;::::0;::::1;17786:21:1::0;17843:2;17823:18;;;17816:30;-1:-1:-1;;;17862:18:1;;;17855:50;17922:18;;21873:276:0::1;17602:344:1::0;21873:276:0::1;29150:1:::2;29106:7;29114:9;29106:18;;;;;;;;:::i;:::-;;;;;;;;;;;:26;;:41;;;:45;29084:136;;;::::0;-1:-1:-1;;;29084:136:0;;19546:2:1;29084:136:0::2;::::0;::::2;19528:21:1::0;19585:2;19565:18;;;19558:30;19624:34;19604:18;;;19597:62;-1:-1:-1;;;19675:18:1;;;19668:39;19724:19;;29084:136:0::2;19344:405:1::0;29084:136:0::2;29283:58;29329:11;29283:7;29291:9;29283:18;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;:26:::2;:18;::::0;;::::2;;:26;:41:::0;;:45:::2;:58::i;:::-;29253:9;:88;29231:167;;;::::0;-1:-1:-1;;;29231:167:0;;19956:2:1;29231:167:0::2;::::0;::::2;19938:21:1::0;19995:2;19975:18;;;19968:30;20034:31;20014:18;;;20007:59;20083:18;;29231:167:0::2;19754:353:1::0;29231:167:0::2;29411:55;29431:9;29442:11;29455:10;29411:19;:55::i;:::-;29518:79;29587:9;29518:7;29526:9;29518:18;;;;;;;;:::i;:::-;;;;;;;;;;;:50;;;:68;;:79;;;;:::i;:::-;29479:7;29487:9;29479:18;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;:36:::2;:18;::::0;;::::2;;:36:::0;;;::::2;:118:::0;;;;29649:24;;;:13:::2;:24:::0;;;;;;29688:10:::2;29649:60:::0;;;;;;;:75:::2;::::0;29714:9:::2;29649:64;:75::i;:::-;29610:24;::::0;;;:13:::2;:24;::::0;;;;;;;29635:10:::2;29610:36:::0;;;;;;;;:114;;;;-1:-1:-1;;28928:804:0:o;22880:104::-;21694:10;21681:24;;;;:12;:24;;;;;;;;;:49;;-1:-1:-1;9113:7:0;9140:6;-1:-1:-1;;;;;9140:6:0;21709:10;:21;21681:49;21659:133;;;;-1:-1:-1;;;21659:133:0;;;;;;;:::i;:::-;22952:15:::1;:24:::0;;-1:-1:-1;;22952:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22880:104::o;36958:647::-;37070:15;37102:19;;:38;;;;-1:-1:-1;37125:15:0;;37102:38;37098:85;;;37164:7;37157:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37157:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37157:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37157:14:0;;;;-1:-1:-1;;;37157:14:0;;;;;;-1:-1:-1;;;;;37157:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;37098:85;37195:20;37218:27;37231:14;37218:10;:27;:::i;:::-;:31;;37248:1;37218:31;:::i;:::-;37195:54;;37260:22;37298:12;37285:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;37260:51:0;-1:-1:-1;37324:19:0;37389:14;37358:214;37423:10;37418:1;:15;;:37;;;;-1:-1:-1;37441:7:0;:14;37437:18;;37418:37;37358:214;;;37522:7;37530:1;37522:10;;;;;;;;:::i;:::-;;;;;;;;;;37500:32;;;;;;;;37522:10;;;;;;;37500:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37500:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37522:10;;37500:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37500:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37500:32:0;;;;-1:-1:-1;;;37500:32:0;;;;;;-1:-1:-1;;;;;37500:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;:6;37507:11;37500:19;;;;;;;;:::i;:::-;;;;;;:32;;;;37547:13;;;;;:::i;:::-;;;;37470:3;;;;;:::i;:::-;;;;37358:214;;;-1:-1:-1;37591:6:0;;-1:-1:-1;;;36958:647:0;;;;;:::o;22385:126::-;8953:13;:11;:13::i;:::-;-1:-1:-1;;;;;22471:22:0;;;::::1;;::::0;;;:12:::1;:22;::::0;;;;:32;;-1:-1:-1;;22471:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22385:126::o;22519:260::-;8953:13;:11;:13::i;:::-;22657:9:::1;22652:120;22672:21:::0;;::::1;22652:120;;;22754:6;22715:21;:36;22737:10;;22748:1;22737:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22715:36:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;22715:36:0;:45;;-1:-1:-1;;22715:45:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22695:3;::::1;::::0;::::1;:::i;:::-;;;;22652:120;;;;22519:260:::0;;;:::o;38456:756::-;38602:14;38633:19;;:38;;;;-1:-1:-1;38656:15:0;;38633:38;38629:102;;;38695:24;;;;:13;:24;;;;;;;;38688:31;;;;;;;;;;;;;;;;;;;38695:24;;38688:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38688:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38629:102;38743:20;38766:27;38779:14;38766:10;:27;:::i;:::-;:31;;38796:1;38766:31;:::i;:::-;38743:54;;38808:21;38844:12;38832:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38832:25:0;;;;;;;;;;;;;;;;-1:-1:-1;38870:19:0;38930:24;;;:13;:24;;;;;38808:49;;-1:-1:-1;38870:19:0;38996:14;38965:214;39030:10;39025:1;:15;;:37;;;;-1:-1:-1;39048:14:0;;39044:18;;39025:37;38965:214;;;39129:7;39137:1;39129:10;;;;;;;;:::i;:::-;;;;;;;;;;39107:32;;;;;;;;39129:10;;;;;;;39107:32;;;;;;;;-1:-1:-1;;;;;39107:32:0;;;;;;;;;;;;;;;;;;;;:19;;:6;;39114:11;;39107:19;;;;;;:::i;:::-;;;;;;:32;;;;39154:13;;;;;:::i;:::-;;;;39077:3;;;;;:::i;:::-;;;;38965:214;;;-1:-1:-1;39198:6:0;;-1:-1:-1;;;;38456:756:0;;;;;;:::o;20813:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20813:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20813:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20813:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20813:23:0;;;;-1:-1:-1;;;20813:23:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20813:23:0;;;;;;;;;;;;;;:::o;33964:536::-;34062:7;34070:9;34062:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:23;;;-1:-1:-1;;;;;34062:23:0;34048:10;:37;;:82;;-1:-1:-1;34119:10:0;34106:24;;;;:12;:24;;;;;;;;34048:82;:124;;;-1:-1:-1;9113:7:0;9140:6;-1:-1:-1;;;;;9140:6:0;34151:10;:21;34048:124;34047:193;;;;-1:-1:-1;34223:17:0;34194:7;34202:9;34194:18;;;;;;;;:::i;:::-;;;;;;;;;:25;:18;;;;;:25;;;;:46;;;;;;;;:::i;:::-;;34047:193;:271;;;;-1:-1:-1;34263:15:0;;;;34262:16;;:55;;;34282:7;34290:9;34282:18;;;;;;;;:::i;:::-;;;;;;;;;;;:30;;;34316:1;34282:35;34262:55;34025:341;;;;-1:-1:-1;;;34025:341:0;;20849:2:1;34025:341:0;;;20831:21:1;20888:2;20868:18;;;20861:30;-1:-1:-1;;;20907:18:1;;;20900:50;20967:18;;34025:341:0;20647:344:1;34025:341:0;34407:21;34379:7;34387:9;34379:18;;;;;;;;:::i;:::-;;;;;;;;;:25;:18;;;;;:25;:49;;-1:-1:-1;;34379:49:0;;;;;;;;;;;:::i;:::-;;;;;;34439:53;34457:9;34468:7;34476:9;34468:18;;;;;;;;:::i;:::-;;;;;;;;;:23;:18;;;;;:23;;-1:-1:-1;;;;;34468:23:0;34439:17;:53::i;:::-;33964:536;:::o;39220:937::-;39397:14;39424:20;39465:19;;:38;;;;-1:-1:-1;39488:15:0;;39465:38;39461:250;;;-1:-1:-1;;;;;;39535:27:0;;;;;;:17;:27;;;;;;;;:38;;;;;;;;:45;;-1:-1:-1;39535:45:0;39461:250;;;39668:27;39681:14;39668:10;:27;:::i;:::-;:31;;39698:1;39668:31;:::i;:::-;39653:46;;39461:250;39723:21;39759:12;39747:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39747:25:0;;;;;;;;;;;;;;;;-1:-1:-1;39723:49:0;-1:-1:-1;39785:19:0;39850:14;39819:305;39884:10;39879:1;:15;;:37;;;;-1:-1:-1;39902:7:0;:14;39898:18;;39879:37;39819:305;;;39983:24;;;;:13;:24;;;;;;;;-1:-1:-1;;;;;40026:27:0;;;;:17;:27;;;;;:38;;;;;;;;;:41;;40065:1;;40026:41;;;;;;:::i;:::-;;;;;;;;;39983:99;;;;;;;;:::i;:::-;;;;;;;;;;39961:121;;;;;;;;39983:99;;;;;;;39961:121;;;;;;;;-1:-1:-1;;;;;39961:121:0;;;;;;;;;;;;;;;;;;;;:19;;:6;;39968:11;;39961:19;;;;;;:::i;:::-;;;;;;:121;;;;40099:13;;;;;:::i;:::-;;;;39931:3;;;;;:::i;:::-;;;;39819:305;;;-1:-1:-1;40143:6:0;;39220:937;-1:-1:-1;;;;;;;39220:937:0:o;22263:114::-;8953:13;:11;:13::i;:::-;22341:17:::1;:28:::0;22263:114::o;9708:103::-;8953:13;:11;:13::i;:::-;9773:30:::1;9800:1;9773:18;:30::i;:::-;9708:103::o:0;34508:1262::-;34621:21;34592:7;34600:9;34592:18;;;;;;;;:::i;:::-;;;;;;;;;:25;:18;;;;;:25;;;;:50;;;;;;;;:::i;:::-;;34570:125;;;;-1:-1:-1;;;34570:125:0;;21198:2:1;34570:125:0;;;21180:21:1;21237:2;21217:18;;;21210:30;21276:27;21256:18;;;21249:55;21321:18;;34570:125:0;20996:349:1;34570:125:0;34708:23;34734:24;;;:13;:24;;;;;;;;34759:10;34734:36;;;;;;;;;;34809:27;;;:16;:27;;;;;:39;;;;;;;;;34913:19;;34909:348;;35023:1;34984:24;;;:13;:24;;;;;;;;35009:10;34984:36;;;;;;;;:40;;;35103:84;35135:15;;35023:1;35103:84;35023:1;35103:84;35135:15;35009:10;35103:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35087:100;;;35210:4;35202:43;;;;-1:-1:-1;;;35202:43:0;;21762:2:1;35202:43:0;;;21744:21:1;21801:2;21781:18;;;21774:30;21840:28;21820:18;;;21813:56;21886:18;;35202:43:0;21560:350:1;35202:43:0;34934:323;34909:348;35325:21;;35321:442;;35440:1;35398:27;;;:16;:27;;;;;;;;35426:10;35398:39;;;;;;;:43;35540:7;:18;;35415:9;;35540:18;;;;;;:::i;:::-;;;;;;;;;;;;;;:45;;;35533:154;;-1:-1:-1;;;35533:154:0;;35618:10;35533:154;;;22089:51:1;22156:18;;;22149:34;;;-1:-1:-1;;;;;35540:45:0;;;;35533:62;;22062:18:1;;35533:154:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35507:244;;;;-1:-1:-1;;;35507:244:0;;22396:2:1;35507:244:0;;;22378:21:1;22435:2;22415:18;;;22408:30;22474;22454:18;;;22447:58;22522:18;;35507:244:0;22194:352:1;35507:244:0;34559:1211;;34508:1262;:::o;21013:74::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23873:3102::-;22218:6;;;;22217:7;22209:26;;;;-1:-1:-1;;;22209:26:0;;;;;;;:::i;:::-;24200:17:::1;::::0;24150:31;;24098:29:::1;::::0;::::1;::::0;:98:::1;::::0;:33:::1;:98::i;:::-;:119;;24076:187;;;::::0;-1:-1:-1;;;24076:187:0;;22753:2:1;24076:187:0::1;::::0;::::1;22735:21:1::0;22792:2;22772:18;;;22765:30;-1:-1:-1;;;22811:18:1;;;22804:48;22869:18;;24076:187:0::1;22551:342:1::0;24076:187:0::1;24297:27;::::0;::::1;::::0;-1:-1:-1;;;;;24297:41:0::1;::::0;;:112:::1;;-1:-1:-1::0;24381:27:0::1;::::0;;::::1;::::0;-1:-1:-1;;;;;24359:50:0::1;;::::0;;;:21:::1;:50;::::0;;;::::1;;24297:112;24296:253;;;;-1:-1:-1::0;24432:27:0::1;::::0;::::1;::::0;-1:-1:-1;;;;;24432:41:0::1;::::0;;:116:::1;;-1:-1:-1::0;24520:27:0::1;::::0;;::::1;::::0;-1:-1:-1;;;;;24498:50:0::1;;::::0;;;:21:::1;:50:::0;;;;;;;::::1;;24432:116;24274:331;;;::::0;-1:-1:-1;;;24274:331:0;;23100:2:1;24274:331:0::1;::::0;::::1;23082:21:1::0;23139:2;23119:18;;;23112:30;23178;23158:18;;;23151:58;23226:18;;24274:331:0::1;22898:352:1::0;24274:331:0::1;24673:8;:17;;;:24;24638:8;:24;;;:31;:59;24616:155;;;::::0;-1:-1:-1;;;24616:155:0;;23457:2:1;24616:155:0::1;::::0;::::1;23439:21:1::0;23496:2;23476:18;;;23469:30;23535:34;23515:18;;;23508:62;-1:-1:-1;;;23586:18:1;;;23579:44;23640:19;;24616:155:0::1;23255:410:1::0;24616:155:0::1;24836:18:::0;;:22;24832:195:::1;;24914:18:::0;;24901:9:::1;:31;24875:140;;;::::0;-1:-1:-1;;;24875:140:0;;23872:2:1;24875:140:0::1;::::0;::::1;23854:21:1::0;23911:2;23891:18;;;23884:30;23950:34;23930:18;;;23923:62;-1:-1:-1;;;24001:18:1;;;23994:45;24056:19;;24875:140:0::1;23670:411:1::0;24875:140:0::1;25093:20;::::0;::::1;::::0;:24;25089:464:::1;;25160:27;::::0;::::1;::::0;-1:-1:-1;;;;;25160:41:0::1;25134:129;;;::::0;-1:-1:-1;;;25134:129:0;;24288:2:1;25134:129:0::1;::::0;::::1;24270:21:1::0;24327:2;24307:18;;;24300:30;24366:28;24346:18;;;24339:56;24412:18;;25134:129:0::1;24086:350:1::0;25134:129:0::1;25311:8;:27;;;-1:-1:-1::0;;;;;25304:48:0::1;;25375:10;25416:4;25444:8;:20;;;25304:179;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25278:263;;;::::0;-1:-1:-1;;;25278:263:0;;19195:2:1;25278:263:0::1;::::0;::::1;19177:21:1::0;19234:2;19214:18;;;19207:30;-1:-1:-1;;;19253:18:1;;;19246:52;19315:18;;25278:263:0::1;18993:346:1::0;25278:263:0::1;25621:24;::::0;::::1;::::0;:31;:35;25617:759:::1;;25678:9;25673:692;25697:8;:24;;;:31;25693:1;:35;25673:692;;;25823:1;-1:-1:-1::0;;;;;25784:41:0::1;:8;:24;;;25809:1;25784:27;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;25784:41:0::1;::::0;25754:142:::1;;;::::0;-1:-1:-1;;;25754:142:0;;24643:2:1;25754:142:0::1;::::0;::::1;24625:21:1::0;24682:2;24662:18;;;24655:30;24721:29;24701:18;;;24694:57;24768:18;;25754:142:0::1;24441:351:1::0;25754:142:0::1;26063:10;-1:-1:-1::0;;;;;25945:128:0::1;25953:8;:24;;;25978:1;25953:27;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;25945:44:0::1;;26016:8;:17;;;26034:1;26016:20;;;;;;;;:::i;:::-;;;;;;;25945:114;;;;;;;;;;;;;160:25:1::0;;148:2;133:18;;14:177;25945:114:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25945:128:0::1;;25915:235;;;::::0;-1:-1:-1;;;25915:235:0;;25255:2:1;25915:235:0::1;::::0;::::1;25237:21:1::0;25294:2;25274:18;;;25267:30;25333:34;25313:18;;;25306:62;-1:-1:-1;;;25384:18:1;;;25377:31;25425:19;;25915:235:0::1;25053:397:1::0;25915:235:0::1;26177:8;:24;;;26202:1;26177:27;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;26169:49:0::1;;26241:10;26282:4;26310:8;:17;;;26328:1;26310:20;;;;;;;;:::i;:::-;;;;;;;26169:180;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25730:3;;;;;:::i;:::-;;;;25673:692;;;;25617:759;26407:7;:14:::0;;26444:10:::1;26388:16;26432:23:::0;;;:11:::1;:23;::::0;;;;;;;:38;;::::1;::::0;;::::1;::::0;;;;;;;;::::1;::::0;;;26508:448;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26481:486;;;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;::::1;::::0;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;;;26481:486:0;;::::1;-1:-1:-1::0;;;;;;26481:486:0;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;;;;::::1;::::0;;;26407:14;;26508:448;26481:486;;;::::1;::::0;;;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;26481:486:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;26481:486:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;26481:486:0;;::::1;-1:-1:-1::0;;;;;;26481:486:0;;::::1;;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;26481:486:0::1;::::0;;::::1;::::0;::::1;;;;;;:::i;:::-;;;;;;;;24065:2910;23873:3102:::0;;;;:::o;20958:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20958:48:0;;;;-1:-1:-1;20958:48:0;:::o;32621:739::-;21694:10;21681:24;;;;:12;:24;;;;;;;;;:49;;-1:-1:-1;9113:7:0;9140:6;-1:-1:-1;;;;;9140:6:0;21709:10;:21;21681:49;21659:133;;;;-1:-1:-1;;;21659:133:0;;;;;;;:::i;:::-;32857:1:::1;32824:7;32832:9;32824:18;;;;;;;;:::i;:::-;;;;;;;;;;;:30;;;:34;:254;;;;;32919:7;32927:9;32919:18;;;;;;;;:::i;:::-;;;;;;;;;;;:28;;:47;;;32880:15;:86;:197;;;;33047:7;33055:9;33047:18;;;;;;;;:::i;:::-;;;;;;;;;;;:30;;;32991:7;32999:9;32991:18;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;;:86;32880:197;32802:348;;;::::0;-1:-1:-1;;;32802:348:0;;25657:2:1;32802:348:0::1;::::0;::::1;25639:21:1::0;25696:2;25676:18;;;25669:30;25735:34;25715:18;;;25708:62;-1:-1:-1;;;25786:18:1;;;25779:42;25838:19;;32802:348:0::1;25455:408:1::0;32802:348:0::1;33222:1;-1:-1:-1::0;;;;;33185:39:0::1;:7;33193:9;33185:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:25:::1;:18;::::0;;::::1;;:25;::::0;-1:-1:-1;;;;;33185:25:0::1;:39;33163:114;;;::::0;-1:-1:-1;;;33163:114:0;;26070:2:1;33163:114:0::1;::::0;::::1;26052:21:1::0;26109:2;26089:18;;;26082:30;26148:27;26128:18;;;26121:55;26193:18;;33163:114:0::1;25868:349:1::0;33163:114:0::1;33345:7;33317;33325:9;33317:18;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;;:35;;;;;-1:-1:-1::0;;;;;33317:35:0::1;;;;;-1:-1:-1::0;;;;;33317:35:0::1;;;;;;32621:739:::0;;:::o;37613:835::-;37756:15;37784:20;37825:19;;:38;;;;-1:-1:-1;37848:15:0;;37825:38;37821:233;;;-1:-1:-1;;;;;;37895:21:0;;;;;;:11;:21;;;;;:28;;-1:-1:-1;37895:28:0;37821:233;;;38011:27;38024:14;38011:10;:27;:::i;:::-;:31;;38041:1;38011:31;:::i;:::-;37996:46;;37821:233;38066:22;38104:12;38091:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;38066:51:0;-1:-1:-1;38130:19:0;38195:14;38164:251;38229:10;38224:1;:15;;:51;;;;-1:-1:-1;;;;;;38247:21:0;;;;;;:11;:21;;;;;:28;38243:32;;38224:51;38164:251;;;-1:-1:-1;;;;;38350:21:0;;;;;;:11;:21;;;;;:24;;38342:7;;38350:21;38372:1;;38350:24;;;;;;:::i;:::-;;;;;;;;;38342:33;;;;;;;;:::i;:::-;;;;;;;;;;38320:55;;;;;;;;38342:33;;;;;;;38320:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38320:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38342:33;;38320:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38320:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38320:55:0;;;;-1:-1:-1;;;38320:55:0;;;;;;-1:-1:-1;;;;;38320:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;:6;38327:11;38320:19;;;;;;;;:::i;:::-;;;;;;:55;;;;38390:13;;;;;:::i;:::-;;;;38290:3;;;;;:::i;:::-;;;;38164:251;;;-1:-1:-1;38434:6:0;;37613:835;-1:-1:-1;;;;;;37613:835:0:o;23711:154::-;8953:13;:11;:13::i;:::-;23817:18:::1;:40:::0;;-1:-1:-1;;;;;;23817:40:0::1;-1:-1:-1::0;;;;;23817:40:0;;;::::1;::::0;;;::::1;::::0;;23711:154::o;20843:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33368:588::-;22218:6;;;;22217:7;22209:26;;;;-1:-1:-1;;;22209:26:0;;;;;;;:::i;:::-;33585:1:::1;-1:-1:-1::0;;;;;33548:39:0::1;:7;33556:9;33548:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:25:::1;:18;::::0;;::::1;;:25;::::0;-1:-1:-1;;;;;33548:25:0::1;:39:::0;33526:118:::1;;;::::0;-1:-1:-1;;;33526:118:0;;26424:2:1;33526:118:0::1;::::0;::::1;26406:21:1::0;26463:2;26443:18;;;26436:30;26502:31;26482:18;;;26475:59;26551:18;;33526:118:0::1;26222:353:1::0;33526:118:0::1;33706:17;33677:7;33685:9;33677:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:25:::1;:18;::::0;;::::1;;:25;::::0;::::1;;:46;::::0;::::1;;;;;;:::i;:::-;;33655:127;;;::::0;-1:-1:-1;;;33655:127:0;;26782:2:1;33655:127:0::1;::::0;::::1;26764:21:1::0;26821:2;26801:18;;;26794:30;26860:33;26840:18;;;26833:61;26911:18;;33655:127:0::1;26580:355:1::0;33655:127:0::1;33823:20;33795:7;33803:9;33795:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:25:::1;:18;::::0;;::::1;;:25;:48:::0;;-1:-1:-1;;33795:48:0::1;::::0;;::::1;::::0;::::1;;;;;;:::i;:::-;;;;;;33856:26;33872:9;33856:15;:26::i;:::-;33893:55;33911:9;33922:7;33930:9;33922:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:25:::1;:18;::::0;;::::1;;:25;::::0;-1:-1:-1;;;;;33922:25:0::1;33893:17;:55::i;26983:219::-:0;21694:10;21681:24;;;;:12;:24;;;;;;;;;:49;;-1:-1:-1;9113:7:0;9140:6;-1:-1:-1;;;;;9140:6:0;21709:10;:21;21681:49;21659:133;;;;-1:-1:-1;;;21659:133:0;;;;;;;:::i;:::-;27137:57:::1;27157:9;27168:11;27181:12;27137:19;:57::i;23104:599::-:0;8953:13;:11;:13::i;:::-;23347:30:::1;23325:19;:52;:133;;;;;23428:30;23398:27;:60;23325:133;23303:197;;;::::0;-1:-1:-1;;;23303:197:0;;27142:2:1;23303:197:0::1;::::0;::::1;27124:21:1::0;27181:2;27161:18;;;27154:30;-1:-1:-1;;;27200:18:1;;;27193:44;27254:18;;23303:197:0::1;26940:338:1::0;23303:197:0::1;23513:18;:40:::0;;;;23564:28:::1;:58:::0;23633:29:::1;:62:::0;23104:599::o;9966:201::-;8953:13;:11;:13::i;:::-;-1:-1:-1;;;;;10055:22:0;::::1;10047:73;;;::::0;-1:-1:-1;;;10047:73:0;;27485:2:1;10047:73:0::1;::::0;::::1;27467:21:1::0;27524:2;27504:18;;;27497:30;27563:34;27543:18;;;27536:62;-1:-1:-1;;;27614:18:1;;;27607:36;27660:19;;10047:73:0::1;27283:402:1::0;10047:73:0::1;10131:28;10150:8;10131:18;:28::i;3614:98::-:0;3672:7;3699:5;3703:1;3699;:5;:::i;27210:1349::-;27431:1;27417:11;:15;27409:57;;;;-1:-1:-1;;;27409:57:0;;28065:2:1;27409:57:0;;;28047:21:1;28104:2;28084:18;;;28077:30;28143:31;28123:18;;;28116:59;28192:18;;27409:57:0;27863:353:1;27409:57:0;27515:7;27523:9;27515:18;;;;;;;;:::i;:::-;;;;;;;;;:23;:18;;;;;:23;;-1:-1:-1;;;;;27515:23:0;;;27499:39;;;;27477:113;;;;-1:-1:-1;;;27477:113:0;;28423:2:1;27477:113:0;;;28405:21:1;28462:2;28442:18;;;28435:30;28501:26;28481:18;;;28474:54;28545:18;;27477:113:0;28221:348:1;27477:113:0;27644:7;27652:9;27644:18;;;;;;;;:::i;:::-;;;;;;;;;;;:28;;:47;;;27625:15;:66;;27603:151;;;;-1:-1:-1;;;27603:151:0;;28776:2:1;27603:151:0;;;28758:21:1;28815:2;28795:18;;;28788:30;28854:34;28834:18;;;28827:62;-1:-1:-1;;;28905:18:1;;;28898:33;28948:19;;27603:151:0;28574:399:1;27603:151:0;27789:7;27797:9;27789:18;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;;27824:1;27789:36;:156;;;;27914:7;27922:9;27914:18;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;;27846:47;27881:11;27846:7;27854:9;27846:18;;;;;;;;:::i;:::-;;;;;;;;;;;:30;;;:34;;:47;;;;:::i;:::-;:99;;27789:156;27767:248;;;;-1:-1:-1;;;27767:248:0;;29180:2:1;27767:248:0;;;29162:21:1;29219:2;29199:18;;;29192:30;29258:34;29238:18;;;29231:62;-1:-1:-1;;;29309:18:1;;;29302:40;29359:19;;27767:248:0;28978:406:1;27767:248:0;-1:-1:-1;;;;;28074:31:0;;;;;;;:17;:31;;;;;;;;:42;;;;;;;;28136:13;:24;;;;;:31;;28074:104;;;;;;;;;;;;;;;;28233:151;;;;;;;;;;;;;;;;;;;;;;28189:206;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28189:206:0;;;;;;;;;;;;;;;;;;28480:7;:18;;:71;;28233:151;;28074:42;;28480:18;;;;;;:::i;:71::-;28447:7;28455:9;28447:18;;;;;;;;:::i;:::-;;;;;;;;;;;:30;;:104;;;;27210:1349;;;:::o;2876:98::-;2934:7;2961:5;2965:1;2961;:5;:::i;9232:132::-;9113:7;9140:6;-1:-1:-1;;;;;9140:6:0;7698:10;9296:23;9288:68;;;;-1:-1:-1;;;9288:68:0;;29591:2:1;9288:68:0;;;29573:21:1;;;29610:18;;;29603:30;29669:34;29649:18;;;29642:62;29721:18;;9288:68:0;29389:356:1;35778:1172:0;35935:1;35896:7;35904:9;35896:18;;;;;;;;:::i;:::-;;;;;;;;;;;:26;;:36;;;:40;35892:252;;;35954:9;35977:10;-1:-1:-1;;;;;35969:24:0;36019:7;36027:9;36019:18;;;;;;;;:::i;:::-;;;;;;;;:26;:18;;;;;:26;:36;35969:105;;36019:36;;35969:105;36019:18;35969:105;36019:36;35969:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35953:121;;;36097:4;36089:43;;;;-1:-1:-1;;;36089:43:0;;29952:2:1;36089:43:0;;;29934:21:1;29991:2;29971:18;;;29964:30;30030:28;30010:18;;;30003:56;30076:18;;36089:43:0;29750:350:1;36089:43:0;35938:206;35892:252;36231:1;36190:7;36198:9;36190:18;;;;;;;;:::i;:::-;;;;;;;;;;;:26;;:38;;;:42;36186:340;;;36282:7;36290:9;36282:18;;;;;;;;:::i;:::-;;;;;;;;;:45;:18;;;;;:45;;;36393:18;;-1:-1:-1;;;;;36282:45:0;;;;36275:62;;36360:10;;36282:45;36401:9;;36393:18;;;;;;:::i;:::-;;;;;;;;;:38;:18;;;;;:38;;36275:175;;-1:-1:-1;;;;;;36275:175:0;;;;;;;-1:-1:-1;;;;;22107:32:1;;;36275:175:0;;;22089:51:1;22156:18;;;22149:34;22062:18;;36275:175:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36249:265;;;;-1:-1:-1;;;36249:265:0;;30307:2:1;36249:265:0;;;30289:21:1;30346:2;30326:18;;;30319:30;30385;30365:18;;;30358:58;30433:18;;36249:265:0;30105:352:1;36249:265:0;36589:9;36570:373;36621:7;36629:9;36621:18;;;;;;;;:::i;:::-;;;;;;;;;:42;:18;;;;;:42;:49;36617:53;;36570:373;;;36723:7;36731:9;36723:18;;;;;;;;:::i;:::-;;;;;;;;;;;:26;;:42;;36766:1;36723:45;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36723:45:0;-1:-1:-1;;;;;36715:67:0;;36813:4;36841:10;36874:7;36882:9;36874:18;;;;;;;;:::i;:::-;;;;;;;;;;;:26;;:35;;36910:1;36874:38;;;;;;;;:::i;:::-;;;;;;;;;36715:216;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36685:3;;;;;:::i;:::-;;;;36570:373;;10327:191;10401:16;10420:6;;-1:-1:-1;;;;;10437:17:0;;;-1:-1:-1;;;;;;10437:17:0;;;;;;10470:40;;10420:6;;;;;;;10470:40;;10401:16;10470:40;10390:128;10327:191;:::o;3257:98::-;3315:7;3342:5;3346:1;3342;:5;:::i;30822:1791::-;30886:27;30916:33;30938:10;30916:21;:33::i;:::-;30886:63;;31034:1;31012:19;:23;:67;;;;;31078:1;31039:7;31047:9;31039:18;;;;;;;;:::i;:::-;;;;;;;;;;;:36;;;:40;31012:67;30994:671;;;31106:19;31128:150;31248:29;;31128:97;31205:19;31128:7;31136:9;31128:18;;;;;;;;:::i;:::-;;;;;;;;;;;:54;;;:76;;:97;;;;:::i;:::-;:119;;:150::i;:::-;31317:12;;31309:50;;31106:172;;-1:-1:-1;31294:9:0;;-1:-1:-1;;;;;31317:12:0;;;;31106:172;;31294:9;31309:50;31294:9;31309:50;31106:172;31317:12;31309:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31293:66;;;31382:4;31374:46;;;;-1:-1:-1;;;31374:46:0;;30664:2:1;31374:46:0;;;30646:21:1;30703:2;30683:18;;;30676:30;30742:31;30722:18;;;30715:59;30791:18;;31374:46:0;30462:353:1;31374:46:0;31436:13;31463:7;31471:9;31463:18;;;;;;;;:::i;:::-;;;;;;;;;;;:23;;;;;;;;;;-1:-1:-1;;;;;31463:23:0;-1:-1:-1;;;;;31455:37:0;31518:53;31559:11;31518:7;31526:9;31518:18;;;;;;;;:::i;:::-;;;;;;;;;;;:36;;;:40;;:53;;;;:::i;:::-;31455:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31435:155;;;31613:8;31605:48;;;;-1:-1:-1;;;31605:48:0;;31022:2:1;31605:48:0;;;31004:21:1;31061:2;31041:18;;;31034:30;31100:29;31080:18;;;31073:57;31147:18;;31605:48:0;30820:351:1;31605:48:0;31091:574;;;30994:671;31751:1;31729:19;:23;:83;;;;;31811:1;31769:7;31777:9;31769:18;;;;;;;;:::i;:::-;;;;;;;;;;;:39;;;:43;31729:83;31711:895;;;31839:22;31864:153;31987:29;;31864:100;31944:19;31864:7;31872:9;31864:18;;;;;;;;:::i;:::-;;;;;;;;;;;:57;;;:79;;:100;;;;:::i;:153::-;31839:178;;32065:7;32073:9;32065:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:45;;;32143:12;;32058:153;;-1:-1:-1;;;32058:153:0;;-1:-1:-1;;;;;32143:12:0;;;32058:153;;;22089:51:1;22156:18;;;22149:34;;;32065:45:0;;;32058:62;;22062:18:1;;32058:153:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32032:246;;;;-1:-1:-1;;;32032:246:0;;31378:2:1;32032:246:0;;;31360:21:1;31417:2;31397:18;;;31390:30;31456:33;31436:18;;;31429:61;31507:18;;32032:246:0;31176:355:1;32032:246:0;32326:7;32334:9;32326:18;;;;;;;;:::i;:::-;;;;;;;;;:45;:18;;;;;:45;;32404:7;:18;;-1:-1:-1;;;;;32326:45:0;;;;32319:62;;32404:7;32412:9;;32404:18;;;;;;:::i;:::-;;;;;;;;;;;:23;;;;;;;;;;-1:-1:-1;;;;;32404:23:0;32450:59;32494:14;32450:7;32458:9;32450:18;;;;;;;;:::i;:::-;;;;;;;;;;;:39;;;:43;;:59;;;;:::i;:::-;32319:209;;-1:-1:-1;;;;;;32319:209:0;;;;;;;-1:-1:-1;;;;;22107:32:1;;;32319:209:0;;;22089:51:1;22156:18;;;22149:34;22062:18;;32319:209:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32293:301;;;;-1:-1:-1;;;32293:301:0;;31738:2:1;32293:301:0;;;31720:21:1;31777:2;31757:18;;;31750:30;31816:32;31796:18;;;31789:60;31866:18;;32293:301:0;31536:354:1;31711:895:0;30875:1738;30822:1791;:::o;28567:353::-;28697:18;;28659:7;;-1:-1:-1;;;;;28697:18:0;:32;;;;:104;;-1:-1:-1;28754:18:0;;28746:51;;-1:-1:-1;;;28746:51:0;;-1:-1:-1;;;;;15311:32:1;;;28746:51:0;;;15293::1;28800:1:0;;28754:18;;28746:37;;15266:18:1;;28746:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;28697:104;28679:196;;;-1:-1:-1;;28835:28:0;;;28567:353::o;28679:196::-;-1:-1:-1;;28894:18:0;;;28567:353::o;4013:98::-;4071:7;4098:5;4102:1;4098;:5;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;196:118:1;282:5;275:13;268:21;261:5;258:32;248:60;;304:1;301;294:12;319:241;375:6;428:2;416:9;407:7;403:23;399:32;396:52;;;444:1;441;434:12;396:52;483:9;470:23;502:28;524:5;502:28;:::i;565:248::-;633:6;641;694:2;682:9;673:7;669:23;665:32;662:52;;;710:1;707;700:12;662:52;-1:-1:-1;;733:23:1;;;803:2;788:18;;;775:32;;-1:-1:-1;565:248:1:o;818:131::-;-1:-1:-1;;;;;893:31:1;;883:42;;873:70;;939:1;936;929:12;954:247;1013:6;1066:2;1054:9;1045:7;1041:23;1037:32;1034:52;;;1082:1;1079;1072:12;1034:52;1121:9;1108:23;1140:31;1165:5;1140:31;:::i;1705:435::-;1758:3;1796:5;1790:12;1823:6;1818:3;1811:19;1849:4;1878:2;1873:3;1869:12;1862:19;;1915:2;1908:5;1904:14;1936:1;1946:169;1960:6;1957:1;1954:13;1946:169;;;2021:13;;2009:26;;2055:12;;;;2090:15;;;;1982:1;1975:9;1946:169;;;-1:-1:-1;2131:3:1;;1705:435;-1:-1:-1;;;;;1705:435:1:o;2145:1001::-;2260:12;;2248:25;;2292:4;2331:14;;;2325:21;-1:-1:-1;;;;;2414:21:1;;;2400:12;;;2393:43;2485:4;2474:16;;;2468:23;2452:14;;;2445:47;2540:4;2529:16;;;2523:23;2234:4;2562:14;;;2555:28;;;2632:21;;2225:14;;;2662:20;;;2195:3;;2736:23;;;;2292:4;;2195:3;;2365:19;2709:3;2700:13;;;2787:184;2801:6;2798:1;2795:13;2787:184;;;2868:13;;2864:22;;2850:37;;2946:15;;;;2823:1;2816:9;;;;;2909:14;;;;2787:184;;;2791:3;3019:4;3012:5;3008:16;3002:23;2980:45;;3068:3;3061:5;3057:15;3050:4;3045:3;3041:14;3034:39;3089:51;3134:5;3118:14;3089:51;:::i;:::-;3082:58;2145:1001;-1:-1:-1;;;;;;;;2145:1001:1:o;3151:127::-;3212:10;3207:3;3203:20;3200:1;3193:31;3243:4;3240:1;3233:15;3267:4;3264:1;3257:15;3283:240;3367:1;3360:5;3357:12;3347:143;;3412:10;3407:3;3403:20;3400:1;3393:31;3447:4;3444:1;3437:15;3475:4;3472:1;3465:15;3347:143;3499:18;;3283:240::o;3528:2171::-;3716:4;3745:2;3785;3774:9;3770:18;3815:2;3804:9;3797:21;3838:6;3873;3867:13;3904:6;3896;3889:22;3930:2;3920:12;;3963:2;3952:9;3948:18;3941:25;;4025:2;4015:6;4012:1;4008:14;3997:9;3993:30;3989:39;4063:2;4055:6;4051:15;4084:1;4094:1576;4108:6;4105:1;4102:13;4094:1576;;;4201:2;4197:7;4185:9;4177:6;4173:22;4169:36;4164:3;4157:49;4235:6;4229:13;4265:6;4305:2;4299:9;4291:6;4284:25;4356:2;4352;4348:11;4342:18;4373:56;4425:2;4417:6;4413:15;4399:12;1388;;1376:25;;1450:4;1439:16;;;1433:23;1417:14;;;1410:47;1510:4;1499:16;;;1493:23;-1:-1:-1;;;;;1489:49:1;1473:14;;1466:73;1315:230;4373:56;;4466:2;4462;4458:11;4452:18;4493:4;4534:2;4529;4521:6;4517:15;4510:27;4574:4;4570:2;4566:13;4560:20;4550:30;;4603:4;4644:2;4639;4631:6;4627:15;4620:27;4696:2;4692;4688:11;4682:18;4660:40;;4723:4;4713:14;;4740:60;4796:2;4788:6;4784:15;4768:14;1625:12;;1613:25;;1687:4;1676:16;;;1670:23;1654:14;;1647:47;1550:150;4740:60;4849:2;4845;4841:11;4835:18;4813:40;;;4877:6;4921:2;4915:3;4907:6;4903:16;4896:28;4951:58;5005:2;4997:6;4993:15;4977:14;4951:58;:::i;:::-;4937:72;;5058:2;5054;5050:11;5044:18;5022:40;;5086:6;5075:17;;5105:52;5152:3;5144:6;5140:16;5124:14;-1:-1:-1;;;;;1272:31:1;1260:44;;1206:104;5105:52;5206:4;5202:2;5198:13;5192:20;5170:42;;5236:6;5255:52;5302:3;5294:6;5290:16;5274:14;-1:-1:-1;;;;;1272:31:1;1260:44;;1206:104;5255:52;5354:12;;;5348:19;5339:6;5327:19;;5320:48;5415:12;;;5409:19;5400:6;5388:19;;5381:48;5470:12;;;5464:19;;-1:-1:-1;5496:65:1;5553:6;5541:19;;5464;5496:65;:::i;:::-;5648:12;;;;5584:6;-1:-1:-1;;5613:15:1;;;;4130:1;4123:9;4094:1576;;;-1:-1:-1;5687:6:1;;3528:2171;-1:-1:-1;;;;;;;;3528:2171:1:o;5704:382::-;5769:6;5777;5830:2;5818:9;5809:7;5805:23;5801:32;5798:52;;;5846:1;5843;5836:12;5798:52;5885:9;5872:23;5904:31;5929:5;5904:31;:::i;:::-;5954:5;-1:-1:-1;6011:2:1;5996:18;;5983:32;6024:30;5983:32;6024:30;:::i;:::-;6073:7;6063:17;;;5704:382;;;;;:::o;6091:750::-;6183:6;6191;6199;6252:2;6240:9;6231:7;6227:23;6223:32;6220:52;;;6268:1;6265;6258:12;6220:52;6308:9;6295:23;6337:18;6378:2;6370:6;6367:14;6364:34;;;6394:1;6391;6384:12;6364:34;6432:6;6421:9;6417:22;6407:32;;6477:7;6470:4;6466:2;6462:13;6458:27;6448:55;;6499:1;6496;6489:12;6448:55;6539:2;6526:16;6565:2;6557:6;6554:14;6551:34;;;6581:1;6578;6571:12;6551:34;6636:7;6629:4;6619:6;6616:1;6612:14;6608:2;6604:23;6600:34;6597:47;6594:67;;;6657:1;6654;6647:12;6594:67;6688:4;6680:13;;;;-1:-1:-1;6712:6:1;-1:-1:-1;;6753:20:1;;6740:34;6783:28;6740:34;6783:28;:::i;:::-;6830:5;6820:15;;;6091:750;;;;;:::o;6846:316::-;6923:6;6931;6939;6992:2;6980:9;6971:7;6967:23;6963:32;6960:52;;;7008:1;7005;6998:12;6960:52;-1:-1:-1;;7031:23:1;;;7101:2;7086:18;;7073:32;;-1:-1:-1;7152:2:1;7137:18;;;7124:32;;6846:316;-1:-1:-1;6846:316:1:o;7167:863::-;7382:2;7434:21;;;7504:13;;7407:18;;;7526:22;;;7353:4;;7382:2;7567;;7585:18;;;;7626:15;;;7353:4;7669:335;7683:6;7680:1;7677:13;7669:335;;;7742:13;;7780:9;;7768:22;;7834:11;;;7828:18;-1:-1:-1;;;;;7824:44:1;7810:12;;;7803:66;7909:11;;7903:18;7889:12;;;7882:40;7951:4;7942:14;;;;7979:15;;;;7865:1;7698:9;7669:335;;;-1:-1:-1;8021:3:1;;7167:863;-1:-1:-1;;;;;;;7167:863:1:o;8227:180::-;8286:6;8339:2;8327:9;8318:7;8314:23;8310:32;8307:52;;;8355:1;8352;8345:12;8307:52;-1:-1:-1;8378:23:1;;8227:180;-1:-1:-1;8227:180:1:o;8412:1231::-;8947:4;8976:3;9006:6;8995:9;8988:25;9022:53;9071:2;9060:9;9056:18;9048:6;1388:12;;1376:25;;1450:4;1439:16;;;1433:23;1417:14;;;1410:47;1510:4;1499:16;;;1493:23;-1:-1:-1;;;;;1489:49:1;1473:14;;1466:73;1315:230;9022:53;9112:6;9106:3;9095:9;9091:19;9084:35;9156:6;9150:3;9139:9;9135:19;9128:35;9172:56;9223:3;9212:9;9208:19;9200:6;1625:12;;1613:25;;1687:4;1676:16;;;1670:23;1654:14;;1647:47;1550:150;9172:56;9265:2;9259:3;9248:9;9244:19;9237:31;9285:53;9334:2;9323:9;9319:18;9311:6;9285:53;:::i;:::-;-1:-1:-1;;;;;9413:15:1;;;9407:3;9392:19;;9385:44;9466:15;;9460:3;9445:19;;9438:44;9513:3;9498:19;;9491:35;;;9557:3;9542:19;;9535:35;;;9277:61;-1:-1:-1;9579:58:1;;-1:-1:-1;9632:3:1;9617:19;;9608:7;9579:58;:::i;:::-;8412:1231;;;;;;;;;;;;;;:::o;9648:452::-;9734:6;9742;9750;9758;9811:3;9799:9;9790:7;9786:23;9782:33;9779:53;;;9828:1;9825;9818:12;9779:53;9867:9;9854:23;9886:31;9911:5;9886:31;:::i;:::-;9936:5;9988:2;9973:18;;9960:32;;-1:-1:-1;10039:2:1;10024:18;;10011:32;;10090:2;10075:18;10062:32;;-1:-1:-1;9648:452:1;-1:-1:-1;;;9648:452:1:o;10105:383::-;10182:6;10190;10198;10251:2;10239:9;10230:7;10226:23;10222:32;10219:52;;;10267:1;10264;10257:12;10219:52;10306:9;10293:23;10325:31;10350:5;10325:31;:::i;:::-;10375:5;10427:2;10412:18;;10399:32;;-1:-1:-1;10478:2:1;10463:18;;;10450:32;;10105:383;-1:-1:-1;;;10105:383:1:o;10493:127::-;10554:10;10549:3;10545:20;10542:1;10535:31;10585:4;10582:1;10575:15;10609:4;10606:1;10599:15;10625:253;10697:2;10691:9;10739:4;10727:17;;10774:18;10759:34;;10795:22;;;10756:62;10753:88;;;10821:18;;:::i;:::-;10857:2;10850:22;10625:253;:::o;10883:::-;10955:2;10949:9;10997:4;10985:17;;11032:18;11017:34;;11053:22;;;11014:62;11011:88;;;11079:18;;:::i;11141:251::-;11213:2;11207:9;;;11243:15;;11288:18;11273:34;;11309:22;;;11270:62;11267:88;;;11335:18;;:::i;11397:275::-;11468:2;11462:9;11533:2;11514:13;;-1:-1:-1;;11510:27:1;11498:40;;11568:18;11553:34;;11589:22;;;11550:62;11547:88;;;11615:18;;:::i;:::-;11651:2;11644:22;11397:275;;-1:-1:-1;11397:275:1:o;11677:183::-;11737:4;11770:18;11762:6;11759:30;11756:56;;;11792:18;;:::i;:::-;-1:-1:-1;11837:1:1;11833:14;11849:4;11829:25;;11677:183::o;11865:662::-;11919:5;11972:3;11965:4;11957:6;11953:17;11949:27;11939:55;;11990:1;11987;11980:12;11939:55;12026:6;12013:20;12052:4;12076:60;12092:43;12132:2;12092:43;:::i;:::-;12076:60;:::i;:::-;12170:15;;;12256:1;12252:10;;;;12240:23;;12236:32;;;12201:12;;;;12280:15;;;12277:35;;;12308:1;12305;12298:12;12277:35;12344:2;12336:6;12332:15;12356:142;12372:6;12367:3;12364:15;12356:142;;;12438:17;;12426:30;;12476:12;;;;12389;;12356:142;;;-1:-1:-1;12516:5:1;11865:662;-1:-1:-1;;;;;;11865:662:1:o;12532:1461::-;12586:5;12634:4;12622:9;12617:3;12613:19;12609:30;12606:50;;;12652:1;12649;12642:12;12606:50;12674:22;;:::i;:::-;12665:31;;12732:9;12719:23;12712:5;12705:38;12762:2;12816;12805:9;12801:18;12788:32;12829:33;12854:7;12829:33;:::i;:::-;12878:14;;;12871:31;12962:2;12947:18;;;12934:32;12918:14;;;12911:56;13018:2;13003:18;;12990:32;13041:18;13071:14;;;13068:34;;;13098:1;13095;13088:12;13068:34;13136:6;13125:9;13121:22;13111:32;;13181:3;13174:4;13170:2;13166:13;13162:23;13152:51;;13199:1;13196;13189:12;13152:51;13235:2;13222:16;13258:60;13274:43;13314:2;13274:43;:::i;13258:60::-;13352:15;;;13434:1;13430:10;;;;13422:19;;13418:28;;;13383:12;;;;13458:15;;;13455:35;;;13486:1;13483;13476:12;13455:35;13510:11;;;;13530:223;13546:6;13541:3;13538:15;13530:223;;;13628:3;13615:17;13645:33;13670:7;13645:33;:::i;:::-;13691:20;;13563:12;;;;13731;;;;13530:223;;;13780:2;13769:14;;13762:29;-1:-1:-1;;13844:3:1;13829:19;;13816:33;;-1:-1:-1;13861:16:1;;;13858:36;;;13890:1;13887;13880:12;13858:36;;;13927:59;13982:3;13971:8;13960:9;13956:24;13927:59;:::i;:::-;13921:3;13914:5;13910:15;13903:84;;12532:1461;;;;:::o;13998:1144::-;14158:6;14166;14174;14182;14226:9;14217:7;14213:23;14256:3;14252:2;14248:12;14245:32;;;14273:1;14270;14263:12;14245:32;14297:4;14293:2;14289:13;14286:33;;;14315:1;14312;14305:12;14286:33;14341:22;;:::i;:::-;14399:9;14386:23;14379:5;14372:38;14470:2;14459:9;14455:18;14442:32;14437:2;14430:5;14426:14;14419:56;14527:2;14516:9;14512:18;14499:32;14540:33;14565:7;14540:33;:::i;:::-;14600:2;14589:14;;;14582:31;;;;14593:5;;-1:-1:-1;14684:4:1;14669:20;;14656:34;;-1:-1:-1;;;14706:17:1;;14702:26;14699:46;;;14741:1;14738;14731:12;14699:46;;14769:22;;:::i;:::-;14844:3;14829:19;;14816:33;14800:50;;14912:3;14897:19;;14884:33;14879:2;14866:16;;14859:59;14807:7;-1:-1:-1;14995:3:1;14980:19;;14967:33;15023:18;15012:30;;15009:50;;;15055:1;15052;15045:12;15009:50;15078:58;15128:7;15119:6;15108:9;15104:22;15078:58;:::i;:::-;15068:68;;;13998:1144;;;;;;;:::o;15705:315::-;15773:6;15781;15834:2;15822:9;15813:7;15809:23;15805:32;15802:52;;;15850:1;15847;15840:12;15802:52;15886:9;15873:23;15863:33;;15946:2;15935:9;15931:18;15918:32;15959:31;15984:5;15959:31;:::i;16025:315::-;16093:6;16101;16154:2;16142:9;16133:7;16129:23;16125:32;16122:52;;;16170:1;16167;16160:12;16122:52;16209:9;16196:23;16228:31;16253:5;16228:31;:::i;:::-;16278:5;16330:2;16315:18;;;;16302:32;;-1:-1:-1;;;16025:315:1:o;16345:383::-;16422:6;16430;16438;16491:2;16479:9;16470:7;16466:23;16462:32;16459:52;;;16507:1;16504;16497:12;16459:52;16543:9;16530:23;16520:33;;16600:2;16589:9;16585:18;16572:32;16562:42;;16654:2;16643:9;16639:18;16626:32;16667:31;16692:5;16667:31;:::i;16733:398::-;16935:2;16917:21;;;16974:2;16954:18;;;16947:30;17013:34;17008:2;16993:18;;16986:62;-1:-1:-1;;;17079:2:1;17064:18;;17057:32;17121:3;17106:19;;16733:398::o;17136:329::-;17338:2;17320:21;;;17377:1;17357:18;;;17350:29;-1:-1:-1;;;17410:2:1;17395:18;;17388:36;17456:2;17441:18;;17136:329::o;17470:127::-;17531:10;17526:3;17522:20;17519:1;17512:31;17562:4;17559:1;17552:15;17586:4;17583:1;17576:15;18363:375;-1:-1:-1;;;;;18621:15:1;;;18603:34;;18673:15;;;;18668:2;18653:18;;18646:43;18720:2;18705:18;;18698:34;;;;18553:2;18538:18;;18363:375::o;18743:245::-;18810:6;18863:2;18851:9;18842:7;18838:23;18834:32;18831:52;;;18879:1;18876;18869:12;18831:52;18911:9;18905:16;18930:28;18952:5;18930:28;:::i;20112:127::-;20173:10;20168:3;20164:20;20161:1;20154:31;20204:4;20201:1;20194:15;20228:4;20225:1;20218:15;20244:128;20311:9;;;20332:11;;;20329:37;;;20346:18;;:::i;20377:125::-;20442:9;;;20463:10;;;20460:36;;;20476:18;;:::i;20507:135::-;20546:3;20567:17;;;20564:43;;20587:18;;:::i;:::-;-1:-1:-1;20634:1:1;20623:13;;20507:135::o;24797:251::-;24867:6;24920:2;24908:9;24899:7;24895:23;24891:32;24888:52;;;24936:1;24933;24926:12;24888:52;24968:9;24962:16;24987:31;25012:5;24987:31;:::i;27690:168::-;27763:9;;;27794;;27811:15;;;27805:22;;27791:37;27781:71;;27832:18;;:::i;31895:184::-;31965:6;32018:2;32006:9;31997:7;31993:23;31989:32;31986:52;;;32034:1;32031;32024:12;31986:52;-1:-1:-1;32057:16:1;;31895:184;-1:-1:-1;31895:184:1:o;32084:217::-;32124:1;32150;32140:132;;32194:10;32189:3;32185:20;32182:1;32175:31;32229:4;32226:1;32219:15;32257:4;32254:1;32247:15;32140:132;-1:-1:-1;32286:9:1;;32084:217::o
Swarm Source
ipfs://554ce4e8c03c1039f56427a637bf001f30b935285c1cdb94407cad77edd3d67e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,159.01 | 0.02 | $63.18 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.