Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 385 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Approval For... | 17682514 | 963 days ago | IN | 0 ETH | 0.00063459 | ||||
| Set Approval For... | 17495200 | 989 days ago | IN | 0 ETH | 0.00037373 | ||||
| Transfer From | 16822606 | 1084 days ago | IN | 0 ETH | 0.00122763 | ||||
| Set Approval For... | 16733850 | 1097 days ago | IN | 0 ETH | 0.00057599 | ||||
| Set Approval For... | 16522767 | 1126 days ago | IN | 0 ETH | 0.00096532 | ||||
| Set Approval For... | 16511425 | 1128 days ago | IN | 0 ETH | 0.00082362 | ||||
| Set Approval For... | 16434357 | 1139 days ago | IN | 0 ETH | 0.00099987 | ||||
| Set Approval For... | 16323151 | 1154 days ago | IN | 0 ETH | 0.0007691 | ||||
| Set Approval For... | 16316401 | 1155 days ago | IN | 0 ETH | 0.00071074 | ||||
| Set Approval For... | 16293472 | 1158 days ago | IN | 0 ETH | 0.00076887 | ||||
| Set Approval For... | 16207178 | 1170 days ago | IN | 0 ETH | 0.00057594 | ||||
| Set Approval For... | 16192504 | 1172 days ago | IN | 0 ETH | 0.00067446 | ||||
| Set Approval For... | 16192498 | 1172 days ago | IN | 0 ETH | 0.00109111 | ||||
| Safe Transfer Fr... | 16190927 | 1173 days ago | IN | 0 ETH | 0.00217805 | ||||
| Withdraw | 16179778 | 1174 days ago | IN | 0 ETH | 0.00044536 | ||||
| Set Approval For... | 16146941 | 1179 days ago | IN | 0 ETH | 0.00080889 | ||||
| Set Approval For... | 16023786 | 1196 days ago | IN | 0 ETH | 0.00054625 | ||||
| Set Approval For... | 15983697 | 1202 days ago | IN | 0 ETH | 0.00108329 | ||||
| Set Approval For... | 15969643 | 1204 days ago | IN | 0 ETH | 0.00080347 | ||||
| Set Approval For... | 15883351 | 1216 days ago | IN | 0 ETH | 0.0006581 | ||||
| Safe Transfer Fr... | 15870340 | 1217 days ago | IN | 0 ETH | 0.00197057 | ||||
| Set Approval For... | 15838751 | 1222 days ago | IN | 0 ETH | 0.00043808 | ||||
| Set Approval For... | 15803287 | 1227 days ago | IN | 0 ETH | 0.00100561 | ||||
| Set Approval For... | 15786309 | 1229 days ago | IN | 0 ETH | 0.00082178 | ||||
| Safe Transfer Fr... | 15705790 | 1240 days ago | IN | 0 ETH | 0.00277248 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
IECWolves
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-07-24
*/
//SPDX-License-Identifier: MIT
pragma solidity 0.8.14;
/**
* @dev These functions deal with verification of Merkle Trees proofs.
*
* The proofs can be generated using the JavaScript library
* https://github.com/miguelmota/merkletreejs[merkletreejs].
* Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
*
* See `test/utils/cryptography/MerkleProof.test.js` for some examples.
*/
library MerkleProof {
/**
* @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
* defined by `root`. For this, a `proof` must be provided, containing
* sibling hashes on the branch from the leaf to the root of the tree. Each
* pair of leaves and each pair of pre-images are assumed to be sorted.
*/
function verify(
bytes32[] memory proof,
bytes32 root,
bytes32 leaf
) internal pure returns (bool) {
return processProof(proof, leaf) == root;
}
/**
* @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
* from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
* hash matches the root of the tree. When processing the proof, the pairs
* of leafs & pre-images are assumed to be sorted.
*
* _Available since v4.4._
*/
function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
bytes32 computedHash = leaf;
for (uint256 i = 0; i < proof.length; i++) {
bytes32 proofElement = proof[i];
if (computedHash <= proofElement) {
// Hash(current computed hash + current element of the proof)
computedHash = _efficientHash(computedHash, proofElement);
} else {
// Hash(current element of the proof + current computed hash)
computedHash = _efficientHash(proofElement, computedHash);
}
}
return computedHash;
}
function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
assembly {
mstore(0x00, a)
mstore(0x20, b)
value := keccak256(0x00, 0x40)
}
}
}
/**
* @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);
}
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != accountHash && codehash != 0x0);
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return _functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
/**
* @dev 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;
}
}
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
interface IERC20 {
function totalSupply() external view returns (uint256);
function symbol() external view returns(string memory);
function name() external view returns(string memory);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Returns the number of decimal places
*/
function decimals() external view returns (uint8);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
contract Ownable {
address private owner;
// event for EVM logging
event OwnerSet(address indexed oldOwner, address indexed newOwner);
// modifier to check if caller is owner
modifier onlyOwner() {
// If the first argument of 'require' evaluates to 'false', execution terminates and all
// changes to the state and to Ether balances are reverted.
// This used to consume all gas in old EVM versions, but not anymore.
// It is often a good idea to use 'require' to check if functions are called correctly.
// As a second argument, you can also provide an explanation about what went wrong.
require(msg.sender == owner, "Caller is not owner");
_;
}
/**
* @dev Set contract deployer as owner
*/
constructor() {
owner = msg.sender; // 'msg.sender' is sender of current call, contract deployer for a constructor
emit OwnerSet(address(0), owner);
}
/**
* @dev Change owner
* @param newOwner address of new owner
*/
function changeOwner(address newOwner) public onlyOwner {
emit OwnerSet(owner, newOwner);
owner = newOwner;
}
/**
* @dev Return owner address
* @return address of owner
*/
function getOwner() external view returns (address) {
return owner;
}
}
contract IECWolves is Context, ERC165, IERC721, IERC721Metadata, Ownable {
using Address for address;
using SafeMath for uint256;
// Token name
string private constant _name = "IEC Wolves";
// Token symbol
string private constant _symbol = "IEC WOLVES";
// total number of NFTs Minted
uint256 public _totalSupply;
// max supply cap
uint256 public MAX_SUPPLY = 10_000;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
// Mapping from tokenID to excluded rewards
mapping(uint256 => uint256) private totalExcluded;
// total dividends percentage denominator
uint256 private constant percentageDenom = 10000;
// total rewards received
uint256 public totalRewards;
// precision factor
uint256 private PRECISION = 10**18;
/**
Mapping From tokenID to Rank
Rank 0 = Bronze
Rank 1 = Silver
Rank 2 = Gold
Rank 3 = Executive
Rank 4 = VIP
*/
mapping ( uint256 => uint256 ) public getRank;
// Ranks
struct Rank {
uint256 total;
uint256 max;
uint256 cost;
uint256 dividends;
uint256 dividendPercentage;
}
mapping ( uint256 => Rank ) public ranks;
// Max rank
uint256 public constant MAX_RANK = 4;
// Payment Recipient
address payable public paymentReceiver;
// max holdings per wallet post mint
uint256 private constant MAX_HOLDINGS = 25;
// Merkle Proof Root For White list
bytes32 public merkleRoot;
// cost for minting NFT
uint256 public cost = 10**18;
// base URI
string private baseURI = "https://opensea.mypinata.cloud/ipfs/Qma54XdskCs7yKRJPwZeAeJsRfC1eKHTkejTE9WFYBGjkr";
string private ending = "";
// Reward Token
IERC20 public token;
// Enable Trading
bool public tradingEnabled = false;
bool public massRankUpgradeEnabled = true;
bool public whitelistEnabled = true;
constructor(address payable paymentReceiver_){
ranks[0] = Rank({
total: 0,
max: 10000,
cost: 0,
dividends: 0,
dividendPercentage: 1250
});
ranks[1] = Rank({
total: 0,
max: 3000,
cost: 10**17,
dividends: 0,
dividendPercentage: 1875
});
ranks[2] = Rank({
total: 0,
max: 1500,
cost: 2 * 10**17,
dividends: 0,
dividendPercentage: 1875
});
ranks[3] = Rank({
total: 0,
max: 1000,
cost: 4 * 10**17,
dividends: 0,
dividendPercentage: 2500
});
ranks[4] = Rank({
total: 0,
max: 500,
cost: 8 * 10**17,
dividends: 0,
dividendPercentage: 2500
});
paymentReceiver = paymentReceiver_;
}
////////////////////////////////////////////////
/////////// RESTRICTED FUNCTIONS ///////////
////////////////////////////////////////////////
function massUpgrade(uint256[] calldata tokenIds, uint256[] calldata newRanks) external onlyOwner {
require(
massRankUpgradeEnabled,
'D'
);
uint length = tokenIds.length;
require(length == newRanks.length, 'M');
for (uint i = 0; i < length;) {
require(
getRank[tokenIds[i]] == 0 && newRanks[i] > 0,
'F'
);
getRank[tokenIds[i]] = newRanks[i];
ranks[newRanks[i]].total++;
ranks[0].total--;
totalExcluded[tokenIds[i]] = getCumulativeDividends(tokenIds[i]);
unchecked { ++i; }
}
}
function setRewardToken(address token_) external onlyOwner {
token = IERC20(token_);
}
function disableMassRankUpgrades() external onlyOwner {
massRankUpgradeEnabled = false;
}
function enableTrading() external onlyOwner {
tradingEnabled = true;
}
function disableTrading() external onlyOwner {
tradingEnabled = false;
}
function disableWhitelist() external onlyOwner {
whitelistEnabled = false;
}
function withdraw() external onlyOwner {
(bool s,) = payable(paymentReceiver).call{value: address(this).balance}("");
require(s);
}
function withdrawToken(address token_) external onlyOwner {
require(token_ != address(token), 'Cannot withdraw IEC Tokens');
IERC20(token_).transfer(msg.sender, IERC20(token_).balanceOf(address(this)));
}
function setCost(uint256 newCost) external onlyOwner {
cost = newCost;
}
function setBaseURI(string calldata newURI) external onlyOwner {
baseURI = newURI;
}
function setURIExtention(string calldata newExtention) external onlyOwner {
ending = newExtention;
}
function setPaymentReceiver(address payable newReceiver) external onlyOwner {
paymentReceiver = newReceiver;
}
function setUpgradeCost(uint256 rank, uint256 newCost) external onlyOwner {
require(
rank < MAX_RANK,
'Max rank'
);
ranks[rank].cost = newCost;
}
function setRewardDistribution(
uint bronzeP,
uint silverP,
uint goldP,
uint execP,
uint vipP
) external onlyOwner {
require(
bronzeP + silverP + goldP + execP + vipP == percentageDenom,
'Invalid Percentages'
);
ranks[0].dividendPercentage = bronzeP;
ranks[1].dividendPercentage = silverP;
ranks[2].dividendPercentage = goldP;
ranks[3].dividendPercentage = execP;
ranks[4].dividendPercentage = vipP;
}
function setMerkleRoot(bytes32 root) external onlyOwner {
merkleRoot = root;
}
function capCollectionAtSupply() external onlyOwner {
MAX_SUPPLY = _totalSupply;
}
////////////////////////////////////////////////
/////////// PUBLIC FUNCTIONS ///////////
////////////////////////////////////////////////
function upgrade(uint256 tokenId, uint256 newRank) external payable {
require(
!massRankUpgradeEnabled,
'Mass Rank Upgrades Are Still Enabled'
);
require(
_isApprovedOrOwner(_msgSender(), tokenId),
"Caller Not Owner Nor Approved"
);
require(
newRank <= MAX_RANK,
'Max Rank Exceeded'
);
// current token rank
uint currentRank = getRank[tokenId];
require(
currentRank < newRank,
'Cannot Rank Backwards'
);
require(
ranks[newRank].total < ranks[newRank].max,
'Max NFTs In Rank'
);
// calculate cost to upgrade
uint costToUpgrade = 0;
for (uint i = currentRank; i < newRank; i++) {
costToUpgrade += ranks[i + 1].cost;
}
require(
msg.value >= costToUpgrade,
'Insufficient Value Sent'
);
// claim pending rewards for token ID
_claimRewards(_msgSender(), tokenId);
// decrement old rank total
ranks[currentRank].total--;
// increment new rank total
ranks[newRank].total++;
// increment tokenId Rank
getRank[tokenId] = newRank;
// reset total excluded for new rank
totalExcluded[tokenId] = getCumulativeDividends(tokenId);
}
/**
* Mints `numberOfMints` NFTs To Caller
*/
function mint(uint256 numberOfMints) external payable {
require(
tradingEnabled,
'Trading Not Enabled'
);
require(
!whitelistEnabled,
'White list is enabled'
);
require(numberOfMints > 0, 'Invalid Input');
require(cost * numberOfMints <= msg.value, 'Incorrect Value Sent');
for (uint i = 0; i < numberOfMints; i++) {
_safeMint(msg.sender, _totalSupply);
}
require(
_balances[msg.sender] <= MAX_HOLDINGS,
'Max Holdings Exceeded'
);
}
/**
* Mints `numberOfMints` NFTs To Caller if Caller is whitelisted
*/
function whitelistMint(uint256 numberOfMints, bytes32[] calldata proof) external payable {
require(
tradingEnabled,
'Trading Not Enabled'
);
require(
whitelistEnabled,
'White list is disabled'
);
require(
MerkleProof.verify(
proof,
merkleRoot,
toBytes32(_msgSender())
) == true,
"User Is Not Whitelisted"
);
require(numberOfMints > 0, 'Invalid Input');
require(cost * numberOfMints <= msg.value, 'Incorrect Value Sent');
for (uint i = 0; i < numberOfMints; i++) {
_safeMint(msg.sender, _totalSupply);
}
require(
_balances[msg.sender] <= MAX_HOLDINGS,
'Max Holdings Exceeded'
);
}
function batchClaim(uint256[] calldata tokenIds) external {
// define length prior to save gas
uint length = tokenIds.length;
require(
length > 0,
'Zero Length'
);
// save gas by declaring early
uint totalPending = 0;
uint currentID = 0;
address sender = _msgSender();
// loop through IDs, accruing pending rewards and resetting pending rewards
for (uint i = 0; i < length;) {
// current ID in list
currentID = tokenIds[i];
// require ID is owned by sender
require(_isApprovedOrOwner(sender, currentID), "caller not owner nor approved");
// add value to total pending
totalPending += pendingRewards(currentID);
// reset total excluded - resetting rewards
totalExcluded[currentID] = getCumulativeDividends(currentID);
// increment loop
unchecked { ++i; }
}
// total available balance
uint bal = token.balanceOf(address(this));
// avoid round off error
if (totalPending > bal) {
totalPending = bal;
}
// return if no rewards
if (totalPending == 0) {
return;
}
// transfer reward to user
require(
token.transfer(sender, totalPending),
'Failure On Token Transfer'
);
}
function claimRewards(uint256 tokenId) external {
require(_isApprovedOrOwner(_msgSender(), tokenId), "caller not owner nor approved");
_claimRewards(_owners[tokenId], tokenId);
}
function giveRewards(uint amount) external {
if (massRankUpgradeEnabled) {
return;
}
// transfer in rewards
uint before = token.balanceOf(address(this));
require(
token.transferFrom(
msg.sender,
address(this),
amount
),
'Failure On Token Transfer'
);
uint After = token.balanceOf(address(this));
// ensure tokens were received
require(
After > before,
'Zero Received'
);
uint received = After - before;
// increment total rewards
totalRewards += received;
// fetch distributions
(uint bp, uint sp, uint gp, uint ep, uint vp) = _fetchDistributionPercentages();
// roll over if zero
if (ranks[4].total == 0) {
bp += vp / 4;
sp += vp / 4;
gp += vp / 4;
ep += vp / 4;
vp = 0;
}
if (ranks[3].total == 0) {
bp += ep / 3;
sp += ep / 3;
gp += ep / 3;
ep = 0;
}
if (ranks[2].total == 0) {
bp += gp / 2;
sp += gp / 2;
gp = 0;
}
if (ranks[1].total == 0) {
bp += sp;
sp = 0;
}
// split up amounts for each sector
uint forBronze = received.mul(bp).div(percentageDenom);
uint forSilver = received.mul(sp).div(percentageDenom);
uint forGold = received.mul(gp).div(percentageDenom);
uint forExec = received.mul(ep).div(percentageDenom);
uint forVIP = received.mul(vp).div(percentageDenom);
// Increment Dividend Rewards
if (ranks[4].total > 0) {
ranks[4].dividends += forVIP.mul(PRECISION).div(ranks[4].total);
}
if (ranks[3].total > 0) {
ranks[3].dividends += forExec.mul(PRECISION).div(ranks[3].total);
}
if (ranks[2].total > 0) {
ranks[2].dividends += forGold.mul(PRECISION).div(ranks[2].total);
}
if (ranks[1].total > 0) {
ranks[1].dividends += forSilver.mul(PRECISION).div(ranks[1].total);
}
if (ranks[0].total > 0) {
ranks[0].dividends += forBronze.mul(PRECISION).div(ranks[0].total);
}
}
function _fetchDistributionPercentages() internal view returns (uint, uint, uint, uint, uint) {
return (
ranks[0].dividendPercentage,
ranks[1].dividendPercentage,
ranks[2].dividendPercentage,
ranks[3].dividendPercentage,
ranks[4].dividendPercentage
);
}
function toBytes32(address addr) pure internal returns (bytes32) {
return bytes32(uint256(uint160(addr)));
}
receive() external payable {}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public override {
address wpowner = ownerOf(tokenId);
require(to != wpowner, "ERC721: approval to current owner");
require(
_msgSender() == wpowner || isApprovedForAll(wpowner, _msgSender()),
"ERC721: not approved or owner"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address _operator, bool approved) public override {
_setApprovalForAll(_msgSender(), _operator, approved);
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "caller not owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "caller not owner nor approved");
_safeTransfer(from, to, tokenId, _data);
}
////////////////////////////////////////////////
/////////// READ FUNCTIONS ///////////
////////////////////////////////////////////////
function totalSupply() external view returns (uint256) {
return _totalSupply;
}
function getIDsByOwner(address owner) external view returns (uint256[] memory) {
uint256[] memory ids = new uint256[](balanceOf(owner));
if (owner == address(0)) { return ids; }
if (balanceOf(owner) == 0) { return ids; }
uint256 count = 0;
for (uint i = 0; i < _totalSupply;) {
if (_owners[i] == owner) {
ids[count] = i;
count++;
}
unchecked { ++i; }
}
return ids;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address wpowner) public view override returns (uint256) {
require(wpowner != address(0), "query for the zero address");
return _balances[wpowner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view override returns (address) {
address wpowner = _owners[tokenId];
require(wpowner != address(0), "query for nonexistent token");
return wpowner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public pure override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public pure override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view override returns (string memory) {
require(_exists(tokenId), "nonexistent token");
string memory fHalf = string.concat(baseURI, uint2str(getRank[tokenId]));
string memory sHalf = string.concat(fHalf, '-');
string memory tHalf = string.concat(sHalf, uint2str(tokenId));
return string.concat(tHalf, ending);
}
/**
Converts A Uint Into a String
*/
function uint2str(uint _i) internal pure returns (string memory _uintAsString) {
if (_i == 0) {
return "0";
}
uint j = _i;
uint len;
while (j != 0) {
len++;
j /= 10;
}
bytes memory bstr = new bytes(len);
uint k = len;
while (_i != 0) {
k = k-1;
uint8 temp = (48 + uint8(_i - _i / 10 * 10));
bytes1 b1 = bytes1(temp);
bstr[k] = b1;
_i /= 10;
}
return string(bstr);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view override returns (address) {
require(_exists(tokenId), "ERC721: query for nonexistent token");
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address wpowner, address _operator) public view override returns (bool) {
return _operatorApprovals[wpowner][_operator];
}
/**
Pending IEC Rewards For `tokenId`
*/
function pendingRewards(uint256 tokenId) public view returns (uint256) {
uint256 tokenIDDividends = getCumulativeDividends(tokenId);
uint256 tokenIDExcluded = totalExcluded[tokenId];
if(tokenIDDividends <= tokenIDExcluded){ return 0; }
return tokenIDDividends - tokenIDExcluded;
}
/**
Cumulative Dividends For A Number Of Tokens
*/
function getCumulativeDividends(uint256 tokenId) internal view returns (uint256) {
return ranks[getRank[tokenId]].dividends.div(PRECISION);
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted
*/
function _exists(uint256 tokenId) internal view returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) {
require(_exists(tokenId), "ERC721: nonexistent token");
address wpowner = ownerOf(tokenId);
return (spender == wpowner || getApproved(tokenId) == spender || isApprovedForAll(wpowner, spender));
}
////////////////////////////////////////////////
/////////// INTERNAL FUNCTIONS ///////////
////////////////////////////////////////////////
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId
) internal {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, ""),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal {
require(!_exists(tokenId), "ERC721: token already minted");
require(_totalSupply < MAX_SUPPLY, 'All NFTs Have Been Minted');
_balances[to] += 1;
_owners[tokenId] = to;
_totalSupply += 1;
ranks[0].total++;
totalExcluded[tokenId] = getCumulativeDividends(tokenId);
emit Transfer(address(0), to, tokenId);
}
/**
* @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.
*
* `_data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory _data
) internal {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: non ERC721Receiver implementer");
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal {
require(ownerOf(tokenId) == from, "Incorrect owner");
require(to != address(0), "zero address");
require(balanceOf(from) > 0, 'Zero Balance');
// Clear approvals from the previous owner
_approve(address(0), tokenId);
// claim rewards for tokenId
_claimRewards(from, tokenId);
// Allocate balances
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
// emit transfer
emit Transfer(from, to, tokenId);
}
/**
Claims IEC Reward For User
*/
function _claimRewards(address owner, uint256 tokenId) internal {
// fetch pending rewards
uint pending = pendingRewards(tokenId);
uint bal = token.balanceOf(address(this));
// avoid round off error
if (pending > bal) {
pending = bal;
}
// return if no rewards
if (pending == 0) {
return;
}
// reset total rewards
totalExcluded[tokenId] = getCumulativeDividends(tokenId);
// transfer reward to user
require(
token.transfer(owner, pending),
'Failure On Token Transfer'
);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal {
_tokenApprovals[tokenId] = to;
emit Approval(ownerOf(tokenId), to, tokenId);
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Emits a {ApprovalForAll} event.
*/
function _setApprovalForAll(
address wpowner,
address _operator,
bool approved
) internal {
require(wpowner != _operator, "ERC721: approve to caller");
_operatorApprovals[wpowner][_operator] = approved;
emit ApprovalForAll(wpowner, _operator, approved);
}
function onReceivedRetval() public pure returns (bytes4) {
return IERC721Receiver.onERC721Received.selector;
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: non ERC721Receiver implementer");
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address payable","name":"paymentReceiver_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_RANK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wpowner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"batchClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"capCollectionAtSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableMassRankUpgrades","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getIDsByOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getRank","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"giveRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wpowner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massRankUpgradeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"newRanks","type":"uint256[]"}],"name":"massUpgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMints","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"onReceivedRetval","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ranks","outputs":[{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"dividends","type":"uint256"},{"internalType":"uint256","name":"dividendPercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newReceiver","type":"address"}],"name":"setPaymentReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bronzeP","type":"uint256"},{"internalType":"uint256","name":"silverP","type":"uint256"},{"internalType":"uint256","name":"goldP","type":"uint256"},{"internalType":"uint256","name":"execP","type":"uint256"},{"internalType":"uint256","name":"vipP","type":"uint256"}],"name":"setRewardDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newExtention","type":"string"}],"name":"setURIExtention","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rank","type":"uint256"},{"internalType":"uint256","name":"newCost","type":"uint256"}],"name":"setUpgradeCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"newRank","type":"uint256"}],"name":"upgrade","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMints","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
612710600255670de0b6b3a76400006009819055600e5561010060405260526080818152906200463560a03980516200004191600f91602090910190620005a2565b506040805160208101918290526000908190526200006291601091620005a2565b506011805462ffffff60a01b191661010160a81b1790553480156200008657600080fd5b506040516200468738038062004687833981016040819052620000a99162000648565b600080546001600160a01b0319163390811782556040519091907f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a735908290a36040805160a080820183526000808352612710602080850191825284860183815260608087018581526104e26080808a01918252878052600b80875299517fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f765595517fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f775592517fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f7855517fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f795590517fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f7a5586518086018852848152610bb881840190815267016345785d8a0000828a0190815282840187815261075384880181815260018a528b885294517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf5592517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d05590517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d155517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d25590517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d355875180870189528581526105dc8185019081526702c68af0bb140000828b01908152828501888152838801948552600289528a875292517fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba916345590517fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba9163555517fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba9163655517fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba9163755517fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba9163855865180860188528481526103e881840190815267058d15e176280000828a019081528284018781526109c484880181815260038a528b885294517f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d33e5592517f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d33f5590517f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d34055517f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d3415590517f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d34255875195860188528486526101f4868401908152670b1a2bc2ec500000988701988952918601858152938601908152600490945294905291517f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c7845591517f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c7855591517f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c7865590517f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c78755517f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c78855600c80546001600160a01b0319166001600160a01b0392909216919091179055620006b6565b828054620005b0906200067a565b90600052602060002090601f016020900481019282620005d457600085556200061f565b82601f10620005ef57805160ff19168380011785556200061f565b828001600101855582156200061f579182015b828111156200061f57825182559160200191906001019062000602565b506200062d92915062000631565b5090565b5b808211156200062d576000815560010162000632565b6000602082840312156200065b57600080fd5b81516001600160a01b03811681146200067357600080fd5b9392505050565b600181811c908216806200068f57607f821691505b602082108103620006b057634e487b7160e01b600052602260045260246000fd5b50919050565b613f6f80620006c66000396000f3fe6080604052600436106103395760003560e01c80637cb64759116101ab578063a6f9dae1116100f7578063d2cab05611610095578063df927bbe1161006f578063df927bbe1461095d578063e863ddaa146109cf578063e985e9c5146109ef578063fc0c546a14610a0f57600080fd5b8063d2cab05614610920578063d6b0f48414610933578063d71c89a91461094857600080fd5b8063bc292782116100d1578063bc292782146108ab578063c87b56dd146108cb578063cb37f3b2146108eb578063cd1aff4f1461090b57600080fd5b8063a6f9dae114610849578063ae9843d614610869578063b88d4fde1461088b57600080fd5b80638a8c523c116101645780639e3bcb8d1161013e5780639e3bcb8d146107d4578063a0712d68146107e9578063a22cb465146107fc578063a5099bae1461081c57600080fd5b80638a8c523c1461076c5780638aee81271461078157806395d89b41146107a157600080fd5b80637cb64759146106ae5780637dcb2abf146106ce57806386262599146106ee57806387c6973a1461070e578063893d20e81461072e578063894760691461074c57600080fd5b80633ccfd60b1161028557806351fb012d116102235780635f7cb336116101fd5780635f7cb3361461062e5780636352211e1461064e57806365ebf99a1461066e57806370a082311461068e57600080fd5b806351fb012d146105c057806355f804b3146105e15780635bf244be1461060157600080fd5b80634408a0461161025f5780634408a0461461054c57806344a0d68a1461056c578063451450ec1461058c5780634ada218b1461059f57600080fd5b80633ccfd60b146105015780633eaaf86b1461051657806342842e0e1461052c57600080fd5b806313faede6116102f257806321b651b2116102cc57806321b651b21461049457806323b872dd146104b55780632eb4a7ab146104d557806332cb6b0c146104eb57600080fd5b806313faede61461045457806317700f011461046a57806318160ddd1461047f57600080fd5b806301ffc9a71461034557806306fdde031461037a578063081812fc146103b6578063095ea7b3146103ee5780630962ef79146104105780630e15561a1461043057600080fd5b3661034057005b600080fd5b34801561035157600080fd5b50610365610360366004613652565b610a2f565b60405190151581526020015b60405180910390f35b34801561038657600080fd5b5060408051808201909152600a81526949454320576f6c76657360b01b60208201525b60405161037191906136c7565b3480156103c257600080fd5b506103d66103d13660046136da565b610a81565b6040516001600160a01b039091168152602001610371565b3480156103fa57600080fd5b5061040e610409366004613708565b610b12565b005b34801561041c57600080fd5b5061040e61042b3660046136da565b610c01565b34801561043c57600080fd5b5061044660085481565b604051908152602001610371565b34801561046057600080fd5b50610446600e5481565b34801561047657600080fd5b5061040e610c4d565b34801561048b57600080fd5b50600154610446565b3480156104a057600080fd5b5060115461036590600160a81b900460ff1681565b3480156104c157600080fd5b5061040e6104d0366004613734565b610c86565b3480156104e157600080fd5b50610446600d5481565b3480156104f757600080fd5b5061044660025481565b34801561050d57600080fd5b5061040e610cb6565b34801561052257600080fd5b5061044660015481565b34801561053857600080fd5b5061040e610547366004613734565b610d40565b34801561055857600080fd5b5061040e610567366004613775565b610d5b565b34801561057857600080fd5b5061040e6105873660046136da565b610d91565b61040e61059a3660046137e7565b610dc0565b3480156105ab57600080fd5b5060115461036590600160a01b900460ff1681565b3480156105cc57600080fd5b5060115461036590600160b01b900460ff1681565b3480156105ed57600080fd5b5061040e6105fc366004613775565b611084565b34801561060d57600080fd5b5061062161061c366004613809565b6110ba565b6040516103719190613826565b34801561063a57600080fd5b5061040e6106493660046138b6565b6111a1565b34801561065a57600080fd5b506103d66106693660046136da565b6113e1565b34801561067a57600080fd5b5061040e610689366004613809565b611446565b34801561069a57600080fd5b506104466106a9366004613809565b611492565b3480156106ba57600080fd5b5061040e6106c93660046136da565b611506565b3480156106da57600080fd5b506104466106e93660046136da565b611535565b3480156106fa57600080fd5b5061040e610709366004613922565b611576565b34801561071a57600080fd5b5061040e6107293660046136da565b6116cd565b34801561073a57600080fd5b506000546001600160a01b03166103d6565b34801561075857600080fd5b5061040e610767366004613809565b611f1c565b34801561077857600080fd5b5061040e612089565b34801561078d57600080fd5b5061040e61079c366004613809565b6120c8565b3480156107ad57600080fd5b5060408051808201909152600a81526949454320574f4c56455360b01b60208201526103a9565b3480156107e057600080fd5b50610446600481565b61040e6107f73660046136da565b612114565b34801561080857600080fd5b5061040e61081736600461396b565b6122cb565b34801561082857600080fd5b506104466108373660046136da565b600a6020526000908152604090205481565b34801561085557600080fd5b5061040e610864366004613809565b6122d6565b34801561087557600080fd5b50604051630a85bd0160e11b8152602001610371565b34801561089757600080fd5b5061040e6108a63660046139ba565b61235b565b3480156108b757600080fd5b5061040e6108c6366004613a9a565b612392565b3480156108d757600080fd5b506103a96108e63660046136da565b61257b565b3480156108f757600080fd5b50600c546103d6906001600160a01b031681565b34801561091757600080fd5b5061040e612692565b61040e61092e366004613adc565b6126c4565b34801561093f57600080fd5b5061040e61290d565b34801561095457600080fd5b5061040e612946565b34801561096957600080fd5b506109a76109783660046136da565b600b60205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a001610371565b3480156109db57600080fd5b5061040e6109ea3660046137e7565b61297f565b3480156109fb57600080fd5b50610365610a0a366004613b28565b6129f9565b348015610a1b57600080fd5b506011546103d6906001600160a01b031681565b60006001600160e01b031982166380ac58cd60e01b1480610a6057506001600160e01b03198216635b5e139f60e01b145b80610a7b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000818152600360205260408120546001600160a01b0316610af65760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000610b1d826113e1565b9050806001600160a01b0316836001600160a01b031603610b8a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610aed565b336001600160a01b0382161480610ba65750610ba681336129f9565b610bf25760405162461bcd60e51b815260206004820152601d60248201527f4552433732313a206e6f7420617070726f766564206f72206f776e65720000006044820152606401610aed565b610bfc8383612a27565b505050565b610c0c335b82612a95565b610c285760405162461bcd60e51b8152600401610aed90613b56565b600081815260036020526040902054610c4a906001600160a01b031682612b4f565b50565b6000546001600160a01b03163314610c775760405162461bcd60e51b8152600401610aed90613b8d565b6011805460ff60a01b19169055565b610c8f33610c06565b610cab5760405162461bcd60e51b8152600401610aed90613b56565b610bfc838383612c97565b6000546001600160a01b03163314610ce05760405162461bcd60e51b8152600401610aed90613b8d565b600c546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610d2d576040519150601f19603f3d011682016040523d82523d6000602084013e610d32565b606091505b5050905080610c4a57600080fd5b610bfc8383836040518060200160405280600081525061235b565b6000546001600160a01b03163314610d855760405162461bcd60e51b8152600401610aed90613b8d565b610bfc601083836135a3565b6000546001600160a01b03163314610dbb5760405162461bcd60e51b8152600401610aed90613b8d565b600e55565b601154600160a81b900460ff1615610e265760405162461bcd60e51b8152602060048201526024808201527f4d6173732052616e6b20557067726164657320417265205374696c6c20456e61604482015263189b195960e21b6064820152608401610aed565b610e31335b83612a95565b610e7d5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c6572204e6f74204f776e6572204e6f7220417070726f7665640000006044820152606401610aed565b6004811115610ec25760405162461bcd60e51b815260206004820152601160248201527013585e0814985b9ac8115e18d959591959607a1b6044820152606401610aed565b6000828152600a6020526040902054818110610f185760405162461bcd60e51b815260206004820152601560248201527443616e6e6f742052616e6b204261636b776172647360581b6044820152606401610aed565b6000828152600b602052604090206001810154905410610f6d5760405162461bcd60e51b815260206004820152601060248201526f4d6178204e46547320496e2052616e6b60801b6044820152606401610aed565b6000815b83811015610fb957600b6000610f88836001613bd0565b81526020019081526020016000206002015482610fa59190613bd0565b915080610fb181613be8565b915050610f71565b508034101561100a5760405162461bcd60e51b815260206004820152601760248201527f496e73756666696369656e742056616c75652053656e740000000000000000006044820152606401610aed565b6110143385612b4f565b6000828152600b6020526040812080549161102e83613c01565b90915550506000838152600b6020526040812080549161104d83613be8565b90915550506000848152600a6020526040902083905561106c84612e4b565b60009485526007602052604090942093909355505050565b6000546001600160a01b031633146110ae5760405162461bcd60e51b8152600401610aed90613b8d565b610bfc600f83836135a3565b606060006110c783611492565b67ffffffffffffffff8111156110df576110df6139a4565b604051908082528060200260200182016040528015611108578160200160208202803683370190505b5090506001600160a01b03831661111f5792915050565b61112883611492565b6000036111355792915050565b6000805b600154811015611198576000818152600360205260409020546001600160a01b03808716911603611190578083838151811061117757611177613c18565b60209081029190910101528161118c81613be8565b9250505b600101611139565b50909392505050565b6000546001600160a01b031633146111cb5760405162461bcd60e51b8152600401610aed90613b8d565b601154600160a81b900460ff166112085760405162461bcd60e51b81526020600482015260016024820152601160fa1b6044820152606401610aed565b8281811461123c5760405162461bcd60e51b81526020600482015260016024820152604d60f81b6044820152606401610aed565b60005b818110156113d957600a600087878481811061125d5761125d613c18565b90506020020135815260200190815260200160002054600014801561129a5750600084848381811061129157611291613c18565b90506020020135115b6112ca5760405162461bcd60e51b81526020600482015260016024820152602360f91b6044820152606401610aed565b8383828181106112dc576112dc613c18565b90506020020135600a60008888858181106112f9576112f9613c18565b90506020020135815260200190815260200160002081905550600b600085858481811061132857611328613c18565b905060200201358152602001908152602001600020600001600081548092919061135190613be8565b90915550506000808052600b602052600080516020613f1a83398151915280549161137b83613c01565b91905055506113a186868381811061139557611395613c18565b90506020020135612e4b565b600760008888858181106113b7576113b7613c18565b602090810292909201358352508101919091526040016000205560010161123f565b505050505050565b6000818152600360205260408120546001600160a01b031680610a7b5760405162461bcd60e51b815260206004820152601b60248201527f717565727920666f72206e6f6e6578697374656e7420746f6b656e00000000006044820152606401610aed565b6000546001600160a01b031633146114705760405162461bcd60e51b8152600401610aed90613b8d565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0382166114ea5760405162461bcd60e51b815260206004820152601a60248201527f717565727920666f7220746865207a65726f20616464726573730000000000006044820152606401610aed565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b031633146115305760405162461bcd60e51b8152600401610aed90613b8d565b600d55565b60008061154183612e4b565b600084815260076020526040902054909150808211611564575060009392505050565b61156e8183613c2e565b949350505050565b6000546001600160a01b031633146115a05760405162461bcd60e51b8152600401610aed90613b8d565b6127108183856115b0888a613bd0565b6115ba9190613bd0565b6115c49190613bd0565b6115ce9190613bd0565b146116115760405162461bcd60e51b8152602060048201526013602482015272496e76616c69642050657263656e746167657360681b6044820152606401610aed565b600b6020527fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f7a949094557f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d3929092557fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba91638557f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d3425560046000527f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c78855565b601154600160a81b900460ff16156116e25750565b6011546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561172b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174f9190613c45565b6011546040516323b872dd60e01b8152336004820152306024820152604481018590529192506001600160a01b0316906323b872dd906064016020604051808303816000875af11580156117a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cb9190613c5e565b6117e75760405162461bcd60e51b8152600401610aed90613c7b565b6011546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118549190613c45565b90508181116118955760405162461bcd60e51b815260206004820152600d60248201526c16995c9bc8149958d95a5d9959609a1b6044820152606401610aed565b60006118a18383613c2e565b905080600860008282546118b59190613bd0565b90915550600090508080808061197f600b6020527fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f7a547f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d3547fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba91638547f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d3425460046000527f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c788549091929394565b60046000908152600b6020527f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c78454959a509398509196509450925003611a20576119ca600482613cb2565b6119d49086613bd0565b94506119e1600482613cb2565b6119eb9085613bd0565b93506119f8600482613cb2565b611a029084613bd0565b9250611a0f600482613cb2565b611a199083613bd0565b9150600090505b60036000908152600b6020527f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d33e549003611a9e57611a5f600383613cb2565b611a699086613bd0565b9450611a76600383613cb2565b611a809085613bd0565b9350611a8d600383613cb2565b611a979084613bd0565b9250600091505b60026000908152600b6020527fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba91634549003611b0557611add600284613cb2565b611ae79086613bd0565b9450611af4600284613cb2565b611afe9085613bd0565b9350600092505b60016000908152600b6020527f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf549003611b4a57611b438486613bd0565b9450600093505b6000611b62612710611b5c8989612e79565b90612f02565b90506000611b76612710611b5c8a89612e79565b90506000611b8a612710611b5c8b89612e79565b90506000611b9e612710611b5c8c89612e79565b90506000611bb2612710611b5c8d89612e79565b6004600052600b6020527f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c7845490915015611c68576004600052600b6020527f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c78454600954611c259190611b5c908490612e79565b60046000908152600b6020527f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c7878054909190611c62908490613bd0565b90915550505b6003600052600b6020527f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d33e5415611d1b576003600052600b6020527f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d33e54600954611cd89190611b5c908590612e79565b60036000908152600b6020527f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d3418054909190611d15908490613bd0565b90915550505b6002600052600b6020527fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba916345415611dce576002600052600b6020527fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba9163454600954611d8b9190611b5c908690612e79565b60026000908152600b6020527fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba916378054909190611dc8908490613bd0565b90915550505b6001600052600b6020527f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf5415611e81576001600052600b6020527f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf54600954611e3e9190611b5c908790612e79565b60016000908152600b6020527f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d28054909190611e7b908490613bd0565b90915550505b60008052600b602052600080516020613f1a8339815191525415611f0c5760008052600b602052600080516020613f1a83398151915254600954611ecb9190611b5c908890612e79565b6000808052600b6020527fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f798054909190611f06908490613bd0565b90915550505b5050505050505050505050505050565b6000546001600160a01b03163314611f465760405162461bcd60e51b8152600401610aed90613b8d565b6011546001600160a01b0390811690821603611fa45760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f742077697468647261772049454320546f6b656e730000000000006044820152606401610aed565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015611ff2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120169190613c45565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120859190613c5e565b5050565b6000546001600160a01b031633146120b35760405162461bcd60e51b8152600401610aed90613b8d565b6011805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146120f25760405162461bcd60e51b8152600401610aed90613b8d565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b601154600160a01b900460ff166121635760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c8139bdd08115b98589b1959606a1b6044820152606401610aed565b601154600160b01b900460ff16156121b55760405162461bcd60e51b815260206004820152601560248201527415da1a5d19481b1a5cdd081a5cc8195b98589b1959605a1b6044820152606401610aed565b600081116121f55760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908125b9c1d5d609a1b6044820152606401610aed565b3481600e546122049190613cd4565b11156122495760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0815985b1d594814d95b9d60621b6044820152606401610aed565b60005b818110156122725761226033600154612f44565b8061226a81613be8565b91505061224c565b503360009081526004602052604090205460191015610c4a5760405162461bcd60e51b815260206004820152601560248201527413585e08121bdb191a5b99dcc8115e18d959591959605a1b6044820152606401610aed565b612085338383612fd1565b6000546001600160a01b031633146123005760405162461bcd60e51b8152600401610aed90613b8d565b600080546040516001600160a01b03808516939216917f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73591a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b61236433610e2b565b6123805760405162461bcd60e51b8152600401610aed90613b56565b61238c8484848461309f565b50505050565b80806123ce5760405162461bcd60e51b815260206004820152600b60248201526a0b4cae4de4098cadccee8d60ab1b6044820152606401610aed565b60008033815b84811015612452578686828181106123ee576123ee613c18565b9050602002013592506124018284612a95565b61241d5760405162461bcd60e51b8152600401610aed90613b56565b61242683611535565b6124309085613bd0565b935061243b83612e4b565b6000848152600760205260409020556001016123d4565b506011546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561249c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c09190613c45565b9050808411156124ce578093505b836000036124df5750505050505050565b60115460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018790529091169063a9059cbb906044016020604051808303816000875af1158015612532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125569190613c5e565b6125725760405162461bcd60e51b8152600401610aed90613c7b565b50505050505050565b6000818152600360205260409020546060906001600160a01b03166125d65760405162461bcd60e51b81526020600482015260116024820152703737b732bc34b9ba32b73a103a37b5b2b760791b6044820152606401610aed565b6000828152600a6020526040812054600f906125f1906130d2565b604051602001612602929190613dc6565b60405160208183030381529060405290506000816040516020016126269190613deb565b6040516020818303038152906040529050600081612643866130d2565b604051602001612654929190613e10565b6040516020818303038152906040529050806010604051602001612679929190613e36565b6040516020818303038152906040529350505050919050565b6000546001600160a01b031633146126bc5760405162461bcd60e51b8152600401610aed90613b8d565b600154600255565b601154600160a01b900460ff166127135760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c8139bdd08115b98589b1959606a1b6044820152606401610aed565b601154600160b01b900460ff166127655760405162461bcd60e51b815260206004820152601660248201527515da1a5d19481b1a5cdd081a5cc8191a5cd8589b195960521b6044820152606401610aed565b6127a682828080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600d5491503390506131fe565b15156001146127f75760405162461bcd60e51b815260206004820152601760248201527f55736572204973204e6f742057686974656c69737465640000000000000000006044820152606401610aed565b600083116128375760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908125b9c1d5d609a1b6044820152606401610aed565b3483600e546128469190613cd4565b111561288b5760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0815985b1d594814d95b9d60621b6044820152606401610aed565b60005b838110156128b4576128a233600154612f44565b806128ac81613be8565b91505061288e565b503360009081526004602052604090205460191015610bfc5760405162461bcd60e51b815260206004820152601560248201527413585e08121bdb191a5b99dcc8115e18d959591959605a1b6044820152606401610aed565b6000546001600160a01b031633146129375760405162461bcd60e51b8152600401610aed90613b8d565b6011805460ff60b01b19169055565b6000546001600160a01b031633146129705760405162461bcd60e51b8152600401610aed90613b8d565b6011805460ff60a81b19169055565b6000546001600160a01b031633146129a95760405162461bcd60e51b8152600401610aed90613b8d565b600482106129e45760405162461bcd60e51b81526020600482015260086024820152674d61782072616e6b60c01b6044820152606401610aed565b6000918252600b602052604090912060020155565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612a5c826113e1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b0316612af95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a206e6f6e6578697374656e7420746f6b656e000000000000006044820152606401610aed565b6000612b04836113e1565b9050806001600160a01b0316846001600160a01b03161480612b3f5750836001600160a01b0316612b3484610a81565b6001600160a01b0316145b8061156e575061156e81856129f9565b6000612b5a82611535565b6011546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612ba8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcc9190613c45565b905080821115612bda578091505b81600003612be85750505050565b612bf183612e4b565b6000848152600760205260409081902091909155601154905163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529091169063a9059cbb906044016020604051808303816000875af1158015612c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7b9190613c5e565b61238c5760405162461bcd60e51b8152600401610aed90613c7b565b826001600160a01b0316612caa826113e1565b6001600160a01b031614612cf25760405162461bcd60e51b815260206004820152600f60248201526e24b731b7b93932b1ba1037bbb732b960891b6044820152606401610aed565b6001600160a01b038216612d375760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610aed565b6000612d4284611492565b11612d7e5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f2042616c616e636560a01b6044820152606401610aed565b612d89600082612a27565b612d938382612b4f565b6001600160a01b0383166000908152600460205260408120805460019290612dbc908490613c2e565b90915550506001600160a01b0382166000908152600460205260408120805460019290612dea908490613bd0565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6009546000828152600a60209081526040808320548352600b9091528120600301549091610a7b9190612f02565b600082600003612e8b57506000610a7b565b6000612e978385613cd4565b905082612ea48583613cb2565b14612efb5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610aed565b9392505050565b6000612efb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613214565b612f4e828261324b565b612f6a60008383604051806020016040528060008152506133ee565b6120855760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610aed565b816001600160a01b0316836001600160a01b0316036130325760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610aed565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6130aa848484612c97565b6130b6848484846133ee565b61238c5760405162461bcd60e51b8152600401610aed90613e54565b6060816000036130f95750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613123578061310d81613be8565b915061311c9050600a83613cb2565b91506130fd565b60008167ffffffffffffffff81111561313e5761313e6139a4565b6040519080825280601f01601f191660200182016040528015613168576020820181803683370190505b509050815b85156131f55761317e600182613c2e565b9050600061318d600a88613cb2565b61319890600a613cd4565b6131a29088613c2e565b6131ad906030613e9a565b905060008160f81b9050808484815181106131ca576131ca613c18565b60200101906001600160f81b031916908160001a9053506131ec600a89613cb2565b9750505061316d565b50949350505050565b60008261320b85846134f6565b14949350505050565b600081836132355760405162461bcd60e51b8152600401610aed91906136c7565b5060006132428486613cb2565b95945050505050565b6000818152600360205260409020546001600160a01b0316156132b05760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610aed565b600254600154106133035760405162461bcd60e51b815260206004820152601960248201527f416c6c204e4654732048617665204265656e204d696e746564000000000000006044820152606401610aed565b6001600160a01b038216600090815260046020526040812080546001929061332c908490613bd0565b9091555050600081815260036020526040812080546001600160a01b0319166001600160a01b038516179055600180549091829161336b908390613bd0565b90915550506000808052600b602052600080516020613f1a83398151915280549161339583613be8565b91905055506133a381612e4b565b60008281526007602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000613402846001600160a01b031661356a565b156134eb57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613439903390899088908890600401613ebf565b6020604051808303816000875af1925050508015613474575060408051601f3d908101601f1916820190925261347191810190613efc565b60015b6134d1573d8080156134a2576040519150601f19603f3d011682016040523d82523d6000602084013e6134a7565b606091505b5080516000036134c95760405162461bcd60e51b8152600401610aed90613e54565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061156e565b506001949350505050565b600081815b845181101561356257600085828151811061351857613518613c18565b6020026020010151905080831161353e576000838152602082905260409020925061354f565b600081815260208490526040902092505b508061355a81613be8565b9150506134fb565b509392505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061156e575050151592915050565b8280546135af90613cf3565b90600052602060002090601f0160209004810192826135d15760008555613617565b82601f106135ea5782800160ff19823516178555613617565b82800160010185558215613617579182015b828111156136175782358255916020019190600101906135fc565b50613623929150613627565b5090565b5b808211156136235760008155600101613628565b6001600160e01b031981168114610c4a57600080fd5b60006020828403121561366457600080fd5b8135612efb8161363c565b60005b8381101561368a578181015183820152602001613672565b8381111561238c5750506000910152565b600081518084526136b381602086016020860161366f565b601f01601f19169290920160200192915050565b602081526000612efb602083018461369b565b6000602082840312156136ec57600080fd5b5035919050565b6001600160a01b0381168114610c4a57600080fd5b6000806040838503121561371b57600080fd5b8235613726816136f3565b946020939093013593505050565b60008060006060848603121561374957600080fd5b8335613754816136f3565b92506020840135613764816136f3565b929592945050506040919091013590565b6000806020838503121561378857600080fd5b823567ffffffffffffffff808211156137a057600080fd5b818501915085601f8301126137b457600080fd5b8135818111156137c357600080fd5b8660208285010111156137d557600080fd5b60209290920196919550909350505050565b600080604083850312156137fa57600080fd5b50508035926020909101359150565b60006020828403121561381b57600080fd5b8135612efb816136f3565b6020808252825182820181905260009190848201906040850190845b8181101561385e57835183529284019291840191600101613842565b50909695505050505050565b60008083601f84011261387c57600080fd5b50813567ffffffffffffffff81111561389457600080fd5b6020830191508360208260051b85010111156138af57600080fd5b9250929050565b600080600080604085870312156138cc57600080fd5b843567ffffffffffffffff808211156138e457600080fd5b6138f08883890161386a565b9096509450602087013591508082111561390957600080fd5b506139168782880161386a565b95989497509550505050565b600080600080600060a0868803121561393a57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b8015158114610c4a57600080fd5b6000806040838503121561397e57600080fd5b8235613989816136f3565b915060208301356139998161395d565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156139d057600080fd5b84356139db816136f3565b935060208501356139eb816136f3565b925060408501359150606085013567ffffffffffffffff80821115613a0f57600080fd5b818701915087601f830112613a2357600080fd5b813581811115613a3557613a356139a4565b604051601f8201601f19908116603f01168101908382118183101715613a5d57613a5d6139a4565b816040528281528a6020848701011115613a7657600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060208385031215613aad57600080fd5b823567ffffffffffffffff811115613ac457600080fd5b613ad08582860161386a565b90969095509350505050565b600080600060408486031215613af157600080fd5b83359250602084013567ffffffffffffffff811115613b0f57600080fd5b613b1b8682870161386a565b9497909650939450505050565b60008060408385031215613b3b57600080fd5b8235613b46816136f3565b91506020830135613999816136f3565b6020808252601d908201527f63616c6c6572206e6f74206f776e6572206e6f7220617070726f766564000000604082015260600190565b60208082526013908201527221b0b63632b91034b9903737ba1037bbb732b960691b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115613be357613be3613bba565b500190565b600060018201613bfa57613bfa613bba565b5060010190565b600081613c1057613c10613bba565b506000190190565b634e487b7160e01b600052603260045260246000fd5b600082821015613c4057613c40613bba565b500390565b600060208284031215613c5757600080fd5b5051919050565b600060208284031215613c7057600080fd5b8151612efb8161395d565b60208082526019908201527f4661696c757265204f6e20546f6b656e205472616e7366657200000000000000604082015260600190565b600082613ccf57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613cee57613cee613bba565b500290565b600181811c90821680613d0757607f821691505b602082108103613d2757634e487b7160e01b600052602260045260246000fd5b50919050565b8054600090600181811c9080831680613d4757607f831692505b60208084108203613d6857634e487b7160e01b600052602260045260246000fd5b818015613d7c5760018114613d8d57613dba565b60ff19861689528489019650613dba565b60008881526020902060005b86811015613db25781548b820152908501908301613d99565b505084890196505b50505050505092915050565b6000613dd28285613d2d565b8351613de281836020880161366f565b01949350505050565b60008251613dfd81846020870161366f565b602d60f81b920191825250600101919050565b60008351613e2281846020880161366f565b835190830190613de281836020880161366f565b60008351613e4881846020880161366f565b61324281840185613d2d565b60208082526026908201527f4552433732313a206e6f6e20455243373231526563656976657220696d706c6560408201526536b2b73a32b960d11b606082015260800190565b600060ff821660ff84168060ff03821115613eb757613eb7613bba565b019392505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613ef29083018461369b565b9695505050505050565b600060208284031215613f0e57600080fd5b8151612efb8161363c56fedf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f76a26469706673582212203a32a27c7ae5f2a6e4ab78ad9f6efbb9a8362240fae7522684e1e7c446e45bde64736f6c634300080e003368747470733a2f2f6f70656e7365612e6d7970696e6174612e636c6f75642f697066732f516d6135345864736b437337794b524a50775a6541654a7352664331654b48546b656a54453957465942476a6b72000000000000000000000000ca155171f67e7bd27f4fde729a28c0ff20b88c1f
Deployed Bytecode
0x6080604052600436106103395760003560e01c80637cb64759116101ab578063a6f9dae1116100f7578063d2cab05611610095578063df927bbe1161006f578063df927bbe1461095d578063e863ddaa146109cf578063e985e9c5146109ef578063fc0c546a14610a0f57600080fd5b8063d2cab05614610920578063d6b0f48414610933578063d71c89a91461094857600080fd5b8063bc292782116100d1578063bc292782146108ab578063c87b56dd146108cb578063cb37f3b2146108eb578063cd1aff4f1461090b57600080fd5b8063a6f9dae114610849578063ae9843d614610869578063b88d4fde1461088b57600080fd5b80638a8c523c116101645780639e3bcb8d1161013e5780639e3bcb8d146107d4578063a0712d68146107e9578063a22cb465146107fc578063a5099bae1461081c57600080fd5b80638a8c523c1461076c5780638aee81271461078157806395d89b41146107a157600080fd5b80637cb64759146106ae5780637dcb2abf146106ce57806386262599146106ee57806387c6973a1461070e578063893d20e81461072e578063894760691461074c57600080fd5b80633ccfd60b1161028557806351fb012d116102235780635f7cb336116101fd5780635f7cb3361461062e5780636352211e1461064e57806365ebf99a1461066e57806370a082311461068e57600080fd5b806351fb012d146105c057806355f804b3146105e15780635bf244be1461060157600080fd5b80634408a0461161025f5780634408a0461461054c57806344a0d68a1461056c578063451450ec1461058c5780634ada218b1461059f57600080fd5b80633ccfd60b146105015780633eaaf86b1461051657806342842e0e1461052c57600080fd5b806313faede6116102f257806321b651b2116102cc57806321b651b21461049457806323b872dd146104b55780632eb4a7ab146104d557806332cb6b0c146104eb57600080fd5b806313faede61461045457806317700f011461046a57806318160ddd1461047f57600080fd5b806301ffc9a71461034557806306fdde031461037a578063081812fc146103b6578063095ea7b3146103ee5780630962ef79146104105780630e15561a1461043057600080fd5b3661034057005b600080fd5b34801561035157600080fd5b50610365610360366004613652565b610a2f565b60405190151581526020015b60405180910390f35b34801561038657600080fd5b5060408051808201909152600a81526949454320576f6c76657360b01b60208201525b60405161037191906136c7565b3480156103c257600080fd5b506103d66103d13660046136da565b610a81565b6040516001600160a01b039091168152602001610371565b3480156103fa57600080fd5b5061040e610409366004613708565b610b12565b005b34801561041c57600080fd5b5061040e61042b3660046136da565b610c01565b34801561043c57600080fd5b5061044660085481565b604051908152602001610371565b34801561046057600080fd5b50610446600e5481565b34801561047657600080fd5b5061040e610c4d565b34801561048b57600080fd5b50600154610446565b3480156104a057600080fd5b5060115461036590600160a81b900460ff1681565b3480156104c157600080fd5b5061040e6104d0366004613734565b610c86565b3480156104e157600080fd5b50610446600d5481565b3480156104f757600080fd5b5061044660025481565b34801561050d57600080fd5b5061040e610cb6565b34801561052257600080fd5b5061044660015481565b34801561053857600080fd5b5061040e610547366004613734565b610d40565b34801561055857600080fd5b5061040e610567366004613775565b610d5b565b34801561057857600080fd5b5061040e6105873660046136da565b610d91565b61040e61059a3660046137e7565b610dc0565b3480156105ab57600080fd5b5060115461036590600160a01b900460ff1681565b3480156105cc57600080fd5b5060115461036590600160b01b900460ff1681565b3480156105ed57600080fd5b5061040e6105fc366004613775565b611084565b34801561060d57600080fd5b5061062161061c366004613809565b6110ba565b6040516103719190613826565b34801561063a57600080fd5b5061040e6106493660046138b6565b6111a1565b34801561065a57600080fd5b506103d66106693660046136da565b6113e1565b34801561067a57600080fd5b5061040e610689366004613809565b611446565b34801561069a57600080fd5b506104466106a9366004613809565b611492565b3480156106ba57600080fd5b5061040e6106c93660046136da565b611506565b3480156106da57600080fd5b506104466106e93660046136da565b611535565b3480156106fa57600080fd5b5061040e610709366004613922565b611576565b34801561071a57600080fd5b5061040e6107293660046136da565b6116cd565b34801561073a57600080fd5b506000546001600160a01b03166103d6565b34801561075857600080fd5b5061040e610767366004613809565b611f1c565b34801561077857600080fd5b5061040e612089565b34801561078d57600080fd5b5061040e61079c366004613809565b6120c8565b3480156107ad57600080fd5b5060408051808201909152600a81526949454320574f4c56455360b01b60208201526103a9565b3480156107e057600080fd5b50610446600481565b61040e6107f73660046136da565b612114565b34801561080857600080fd5b5061040e61081736600461396b565b6122cb565b34801561082857600080fd5b506104466108373660046136da565b600a6020526000908152604090205481565b34801561085557600080fd5b5061040e610864366004613809565b6122d6565b34801561087557600080fd5b50604051630a85bd0160e11b8152602001610371565b34801561089757600080fd5b5061040e6108a63660046139ba565b61235b565b3480156108b757600080fd5b5061040e6108c6366004613a9a565b612392565b3480156108d757600080fd5b506103a96108e63660046136da565b61257b565b3480156108f757600080fd5b50600c546103d6906001600160a01b031681565b34801561091757600080fd5b5061040e612692565b61040e61092e366004613adc565b6126c4565b34801561093f57600080fd5b5061040e61290d565b34801561095457600080fd5b5061040e612946565b34801561096957600080fd5b506109a76109783660046136da565b600b60205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a001610371565b3480156109db57600080fd5b5061040e6109ea3660046137e7565b61297f565b3480156109fb57600080fd5b50610365610a0a366004613b28565b6129f9565b348015610a1b57600080fd5b506011546103d6906001600160a01b031681565b60006001600160e01b031982166380ac58cd60e01b1480610a6057506001600160e01b03198216635b5e139f60e01b145b80610a7b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000818152600360205260408120546001600160a01b0316610af65760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000610b1d826113e1565b9050806001600160a01b0316836001600160a01b031603610b8a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610aed565b336001600160a01b0382161480610ba65750610ba681336129f9565b610bf25760405162461bcd60e51b815260206004820152601d60248201527f4552433732313a206e6f7420617070726f766564206f72206f776e65720000006044820152606401610aed565b610bfc8383612a27565b505050565b610c0c335b82612a95565b610c285760405162461bcd60e51b8152600401610aed90613b56565b600081815260036020526040902054610c4a906001600160a01b031682612b4f565b50565b6000546001600160a01b03163314610c775760405162461bcd60e51b8152600401610aed90613b8d565b6011805460ff60a01b19169055565b610c8f33610c06565b610cab5760405162461bcd60e51b8152600401610aed90613b56565b610bfc838383612c97565b6000546001600160a01b03163314610ce05760405162461bcd60e51b8152600401610aed90613b8d565b600c546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610d2d576040519150601f19603f3d011682016040523d82523d6000602084013e610d32565b606091505b5050905080610c4a57600080fd5b610bfc8383836040518060200160405280600081525061235b565b6000546001600160a01b03163314610d855760405162461bcd60e51b8152600401610aed90613b8d565b610bfc601083836135a3565b6000546001600160a01b03163314610dbb5760405162461bcd60e51b8152600401610aed90613b8d565b600e55565b601154600160a81b900460ff1615610e265760405162461bcd60e51b8152602060048201526024808201527f4d6173732052616e6b20557067726164657320417265205374696c6c20456e61604482015263189b195960e21b6064820152608401610aed565b610e31335b83612a95565b610e7d5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c6572204e6f74204f776e6572204e6f7220417070726f7665640000006044820152606401610aed565b6004811115610ec25760405162461bcd60e51b815260206004820152601160248201527013585e0814985b9ac8115e18d959591959607a1b6044820152606401610aed565b6000828152600a6020526040902054818110610f185760405162461bcd60e51b815260206004820152601560248201527443616e6e6f742052616e6b204261636b776172647360581b6044820152606401610aed565b6000828152600b602052604090206001810154905410610f6d5760405162461bcd60e51b815260206004820152601060248201526f4d6178204e46547320496e2052616e6b60801b6044820152606401610aed565b6000815b83811015610fb957600b6000610f88836001613bd0565b81526020019081526020016000206002015482610fa59190613bd0565b915080610fb181613be8565b915050610f71565b508034101561100a5760405162461bcd60e51b815260206004820152601760248201527f496e73756666696369656e742056616c75652053656e740000000000000000006044820152606401610aed565b6110143385612b4f565b6000828152600b6020526040812080549161102e83613c01565b90915550506000838152600b6020526040812080549161104d83613be8565b90915550506000848152600a6020526040902083905561106c84612e4b565b60009485526007602052604090942093909355505050565b6000546001600160a01b031633146110ae5760405162461bcd60e51b8152600401610aed90613b8d565b610bfc600f83836135a3565b606060006110c783611492565b67ffffffffffffffff8111156110df576110df6139a4565b604051908082528060200260200182016040528015611108578160200160208202803683370190505b5090506001600160a01b03831661111f5792915050565b61112883611492565b6000036111355792915050565b6000805b600154811015611198576000818152600360205260409020546001600160a01b03808716911603611190578083838151811061117757611177613c18565b60209081029190910101528161118c81613be8565b9250505b600101611139565b50909392505050565b6000546001600160a01b031633146111cb5760405162461bcd60e51b8152600401610aed90613b8d565b601154600160a81b900460ff166112085760405162461bcd60e51b81526020600482015260016024820152601160fa1b6044820152606401610aed565b8281811461123c5760405162461bcd60e51b81526020600482015260016024820152604d60f81b6044820152606401610aed565b60005b818110156113d957600a600087878481811061125d5761125d613c18565b90506020020135815260200190815260200160002054600014801561129a5750600084848381811061129157611291613c18565b90506020020135115b6112ca5760405162461bcd60e51b81526020600482015260016024820152602360f91b6044820152606401610aed565b8383828181106112dc576112dc613c18565b90506020020135600a60008888858181106112f9576112f9613c18565b90506020020135815260200190815260200160002081905550600b600085858481811061132857611328613c18565b905060200201358152602001908152602001600020600001600081548092919061135190613be8565b90915550506000808052600b602052600080516020613f1a83398151915280549161137b83613c01565b91905055506113a186868381811061139557611395613c18565b90506020020135612e4b565b600760008888858181106113b7576113b7613c18565b602090810292909201358352508101919091526040016000205560010161123f565b505050505050565b6000818152600360205260408120546001600160a01b031680610a7b5760405162461bcd60e51b815260206004820152601b60248201527f717565727920666f72206e6f6e6578697374656e7420746f6b656e00000000006044820152606401610aed565b6000546001600160a01b031633146114705760405162461bcd60e51b8152600401610aed90613b8d565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0382166114ea5760405162461bcd60e51b815260206004820152601a60248201527f717565727920666f7220746865207a65726f20616464726573730000000000006044820152606401610aed565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b031633146115305760405162461bcd60e51b8152600401610aed90613b8d565b600d55565b60008061154183612e4b565b600084815260076020526040902054909150808211611564575060009392505050565b61156e8183613c2e565b949350505050565b6000546001600160a01b031633146115a05760405162461bcd60e51b8152600401610aed90613b8d565b6127108183856115b0888a613bd0565b6115ba9190613bd0565b6115c49190613bd0565b6115ce9190613bd0565b146116115760405162461bcd60e51b8152602060048201526013602482015272496e76616c69642050657263656e746167657360681b6044820152606401610aed565b600b6020527fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f7a949094557f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d3929092557fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba91638557f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d3425560046000527f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c78855565b601154600160a81b900460ff16156116e25750565b6011546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561172b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174f9190613c45565b6011546040516323b872dd60e01b8152336004820152306024820152604481018590529192506001600160a01b0316906323b872dd906064016020604051808303816000875af11580156117a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cb9190613c5e565b6117e75760405162461bcd60e51b8152600401610aed90613c7b565b6011546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118549190613c45565b90508181116118955760405162461bcd60e51b815260206004820152600d60248201526c16995c9bc8149958d95a5d9959609a1b6044820152606401610aed565b60006118a18383613c2e565b905080600860008282546118b59190613bd0565b90915550600090508080808061197f600b6020527fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f7a547f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d3547fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba91638547f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d3425460046000527f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c788549091929394565b60046000908152600b6020527f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c78454959a509398509196509450925003611a20576119ca600482613cb2565b6119d49086613bd0565b94506119e1600482613cb2565b6119eb9085613bd0565b93506119f8600482613cb2565b611a029084613bd0565b9250611a0f600482613cb2565b611a199083613bd0565b9150600090505b60036000908152600b6020527f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d33e549003611a9e57611a5f600383613cb2565b611a699086613bd0565b9450611a76600383613cb2565b611a809085613bd0565b9350611a8d600383613cb2565b611a979084613bd0565b9250600091505b60026000908152600b6020527fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba91634549003611b0557611add600284613cb2565b611ae79086613bd0565b9450611af4600284613cb2565b611afe9085613bd0565b9350600092505b60016000908152600b6020527f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf549003611b4a57611b438486613bd0565b9450600093505b6000611b62612710611b5c8989612e79565b90612f02565b90506000611b76612710611b5c8a89612e79565b90506000611b8a612710611b5c8b89612e79565b90506000611b9e612710611b5c8c89612e79565b90506000611bb2612710611b5c8d89612e79565b6004600052600b6020527f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c7845490915015611c68576004600052600b6020527f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c78454600954611c259190611b5c908490612e79565b60046000908152600b6020527f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c7878054909190611c62908490613bd0565b90915550505b6003600052600b6020527f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d33e5415611d1b576003600052600b6020527f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d33e54600954611cd89190611b5c908590612e79565b60036000908152600b6020527f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d3418054909190611d15908490613bd0565b90915550505b6002600052600b6020527fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba916345415611dce576002600052600b6020527fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba9163454600954611d8b9190611b5c908690612e79565b60026000908152600b6020527fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba916378054909190611dc8908490613bd0565b90915550505b6001600052600b6020527f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf5415611e81576001600052600b6020527f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf54600954611e3e9190611b5c908790612e79565b60016000908152600b6020527f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d28054909190611e7b908490613bd0565b90915550505b60008052600b602052600080516020613f1a8339815191525415611f0c5760008052600b602052600080516020613f1a83398151915254600954611ecb9190611b5c908890612e79565b6000808052600b6020527fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f798054909190611f06908490613bd0565b90915550505b5050505050505050505050505050565b6000546001600160a01b03163314611f465760405162461bcd60e51b8152600401610aed90613b8d565b6011546001600160a01b0390811690821603611fa45760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f742077697468647261772049454320546f6b656e730000000000006044820152606401610aed565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015611ff2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120169190613c45565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120859190613c5e565b5050565b6000546001600160a01b031633146120b35760405162461bcd60e51b8152600401610aed90613b8d565b6011805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146120f25760405162461bcd60e51b8152600401610aed90613b8d565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b601154600160a01b900460ff166121635760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c8139bdd08115b98589b1959606a1b6044820152606401610aed565b601154600160b01b900460ff16156121b55760405162461bcd60e51b815260206004820152601560248201527415da1a5d19481b1a5cdd081a5cc8195b98589b1959605a1b6044820152606401610aed565b600081116121f55760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908125b9c1d5d609a1b6044820152606401610aed565b3481600e546122049190613cd4565b11156122495760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0815985b1d594814d95b9d60621b6044820152606401610aed565b60005b818110156122725761226033600154612f44565b8061226a81613be8565b91505061224c565b503360009081526004602052604090205460191015610c4a5760405162461bcd60e51b815260206004820152601560248201527413585e08121bdb191a5b99dcc8115e18d959591959605a1b6044820152606401610aed565b612085338383612fd1565b6000546001600160a01b031633146123005760405162461bcd60e51b8152600401610aed90613b8d565b600080546040516001600160a01b03808516939216917f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73591a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b61236433610e2b565b6123805760405162461bcd60e51b8152600401610aed90613b56565b61238c8484848461309f565b50505050565b80806123ce5760405162461bcd60e51b815260206004820152600b60248201526a0b4cae4de4098cadccee8d60ab1b6044820152606401610aed565b60008033815b84811015612452578686828181106123ee576123ee613c18565b9050602002013592506124018284612a95565b61241d5760405162461bcd60e51b8152600401610aed90613b56565b61242683611535565b6124309085613bd0565b935061243b83612e4b565b6000848152600760205260409020556001016123d4565b506011546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561249c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c09190613c45565b9050808411156124ce578093505b836000036124df5750505050505050565b60115460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018790529091169063a9059cbb906044016020604051808303816000875af1158015612532573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125569190613c5e565b6125725760405162461bcd60e51b8152600401610aed90613c7b565b50505050505050565b6000818152600360205260409020546060906001600160a01b03166125d65760405162461bcd60e51b81526020600482015260116024820152703737b732bc34b9ba32b73a103a37b5b2b760791b6044820152606401610aed565b6000828152600a6020526040812054600f906125f1906130d2565b604051602001612602929190613dc6565b60405160208183030381529060405290506000816040516020016126269190613deb565b6040516020818303038152906040529050600081612643866130d2565b604051602001612654929190613e10565b6040516020818303038152906040529050806010604051602001612679929190613e36565b6040516020818303038152906040529350505050919050565b6000546001600160a01b031633146126bc5760405162461bcd60e51b8152600401610aed90613b8d565b600154600255565b601154600160a01b900460ff166127135760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c8139bdd08115b98589b1959606a1b6044820152606401610aed565b601154600160b01b900460ff166127655760405162461bcd60e51b815260206004820152601660248201527515da1a5d19481b1a5cdd081a5cc8191a5cd8589b195960521b6044820152606401610aed565b6127a682828080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600d5491503390506131fe565b15156001146127f75760405162461bcd60e51b815260206004820152601760248201527f55736572204973204e6f742057686974656c69737465640000000000000000006044820152606401610aed565b600083116128375760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908125b9c1d5d609a1b6044820152606401610aed565b3483600e546128469190613cd4565b111561288b5760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0815985b1d594814d95b9d60621b6044820152606401610aed565b60005b838110156128b4576128a233600154612f44565b806128ac81613be8565b91505061288e565b503360009081526004602052604090205460191015610bfc5760405162461bcd60e51b815260206004820152601560248201527413585e08121bdb191a5b99dcc8115e18d959591959605a1b6044820152606401610aed565b6000546001600160a01b031633146129375760405162461bcd60e51b8152600401610aed90613b8d565b6011805460ff60b01b19169055565b6000546001600160a01b031633146129705760405162461bcd60e51b8152600401610aed90613b8d565b6011805460ff60a81b19169055565b6000546001600160a01b031633146129a95760405162461bcd60e51b8152600401610aed90613b8d565b600482106129e45760405162461bcd60e51b81526020600482015260086024820152674d61782072616e6b60c01b6044820152606401610aed565b6000918252600b602052604090912060020155565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612a5c826113e1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b0316612af95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a206e6f6e6578697374656e7420746f6b656e000000000000006044820152606401610aed565b6000612b04836113e1565b9050806001600160a01b0316846001600160a01b03161480612b3f5750836001600160a01b0316612b3484610a81565b6001600160a01b0316145b8061156e575061156e81856129f9565b6000612b5a82611535565b6011546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612ba8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcc9190613c45565b905080821115612bda578091505b81600003612be85750505050565b612bf183612e4b565b6000848152600760205260409081902091909155601154905163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529091169063a9059cbb906044016020604051808303816000875af1158015612c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7b9190613c5e565b61238c5760405162461bcd60e51b8152600401610aed90613c7b565b826001600160a01b0316612caa826113e1565b6001600160a01b031614612cf25760405162461bcd60e51b815260206004820152600f60248201526e24b731b7b93932b1ba1037bbb732b960891b6044820152606401610aed565b6001600160a01b038216612d375760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610aed565b6000612d4284611492565b11612d7e5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f2042616c616e636560a01b6044820152606401610aed565b612d89600082612a27565b612d938382612b4f565b6001600160a01b0383166000908152600460205260408120805460019290612dbc908490613c2e565b90915550506001600160a01b0382166000908152600460205260408120805460019290612dea908490613bd0565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6009546000828152600a60209081526040808320548352600b9091528120600301549091610a7b9190612f02565b600082600003612e8b57506000610a7b565b6000612e978385613cd4565b905082612ea48583613cb2565b14612efb5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610aed565b9392505050565b6000612efb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613214565b612f4e828261324b565b612f6a60008383604051806020016040528060008152506133ee565b6120855760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610aed565b816001600160a01b0316836001600160a01b0316036130325760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610aed565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6130aa848484612c97565b6130b6848484846133ee565b61238c5760405162461bcd60e51b8152600401610aed90613e54565b6060816000036130f95750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613123578061310d81613be8565b915061311c9050600a83613cb2565b91506130fd565b60008167ffffffffffffffff81111561313e5761313e6139a4565b6040519080825280601f01601f191660200182016040528015613168576020820181803683370190505b509050815b85156131f55761317e600182613c2e565b9050600061318d600a88613cb2565b61319890600a613cd4565b6131a29088613c2e565b6131ad906030613e9a565b905060008160f81b9050808484815181106131ca576131ca613c18565b60200101906001600160f81b031916908160001a9053506131ec600a89613cb2565b9750505061316d565b50949350505050565b60008261320b85846134f6565b14949350505050565b600081836132355760405162461bcd60e51b8152600401610aed91906136c7565b5060006132428486613cb2565b95945050505050565b6000818152600360205260409020546001600160a01b0316156132b05760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610aed565b600254600154106133035760405162461bcd60e51b815260206004820152601960248201527f416c6c204e4654732048617665204265656e204d696e746564000000000000006044820152606401610aed565b6001600160a01b038216600090815260046020526040812080546001929061332c908490613bd0565b9091555050600081815260036020526040812080546001600160a01b0319166001600160a01b038516179055600180549091829161336b908390613bd0565b90915550506000808052600b602052600080516020613f1a83398151915280549161339583613be8565b91905055506133a381612e4b565b60008281526007602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000613402846001600160a01b031661356a565b156134eb57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613439903390899088908890600401613ebf565b6020604051808303816000875af1925050508015613474575060408051601f3d908101601f1916820190925261347191810190613efc565b60015b6134d1573d8080156134a2576040519150601f19603f3d011682016040523d82523d6000602084013e6134a7565b606091505b5080516000036134c95760405162461bcd60e51b8152600401610aed90613e54565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061156e565b506001949350505050565b600081815b845181101561356257600085828151811061351857613518613c18565b6020026020010151905080831161353e576000838152602082905260409020925061354f565b600081815260208490526040902092505b508061355a81613be8565b9150506134fb565b509392505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061156e575050151592915050565b8280546135af90613cf3565b90600052602060002090601f0160209004810192826135d15760008555613617565b82601f106135ea5782800160ff19823516178555613617565b82800160010185558215613617579182015b828111156136175782358255916020019190600101906135fc565b50613623929150613627565b5090565b5b808211156136235760008155600101613628565b6001600160e01b031981168114610c4a57600080fd5b60006020828403121561366457600080fd5b8135612efb8161363c565b60005b8381101561368a578181015183820152602001613672565b8381111561238c5750506000910152565b600081518084526136b381602086016020860161366f565b601f01601f19169290920160200192915050565b602081526000612efb602083018461369b565b6000602082840312156136ec57600080fd5b5035919050565b6001600160a01b0381168114610c4a57600080fd5b6000806040838503121561371b57600080fd5b8235613726816136f3565b946020939093013593505050565b60008060006060848603121561374957600080fd5b8335613754816136f3565b92506020840135613764816136f3565b929592945050506040919091013590565b6000806020838503121561378857600080fd5b823567ffffffffffffffff808211156137a057600080fd5b818501915085601f8301126137b457600080fd5b8135818111156137c357600080fd5b8660208285010111156137d557600080fd5b60209290920196919550909350505050565b600080604083850312156137fa57600080fd5b50508035926020909101359150565b60006020828403121561381b57600080fd5b8135612efb816136f3565b6020808252825182820181905260009190848201906040850190845b8181101561385e57835183529284019291840191600101613842565b50909695505050505050565b60008083601f84011261387c57600080fd5b50813567ffffffffffffffff81111561389457600080fd5b6020830191508360208260051b85010111156138af57600080fd5b9250929050565b600080600080604085870312156138cc57600080fd5b843567ffffffffffffffff808211156138e457600080fd5b6138f08883890161386a565b9096509450602087013591508082111561390957600080fd5b506139168782880161386a565b95989497509550505050565b600080600080600060a0868803121561393a57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b8015158114610c4a57600080fd5b6000806040838503121561397e57600080fd5b8235613989816136f3565b915060208301356139998161395d565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156139d057600080fd5b84356139db816136f3565b935060208501356139eb816136f3565b925060408501359150606085013567ffffffffffffffff80821115613a0f57600080fd5b818701915087601f830112613a2357600080fd5b813581811115613a3557613a356139a4565b604051601f8201601f19908116603f01168101908382118183101715613a5d57613a5d6139a4565b816040528281528a6020848701011115613a7657600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060208385031215613aad57600080fd5b823567ffffffffffffffff811115613ac457600080fd5b613ad08582860161386a565b90969095509350505050565b600080600060408486031215613af157600080fd5b83359250602084013567ffffffffffffffff811115613b0f57600080fd5b613b1b8682870161386a565b9497909650939450505050565b60008060408385031215613b3b57600080fd5b8235613b46816136f3565b91506020830135613999816136f3565b6020808252601d908201527f63616c6c6572206e6f74206f776e6572206e6f7220617070726f766564000000604082015260600190565b60208082526013908201527221b0b63632b91034b9903737ba1037bbb732b960691b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115613be357613be3613bba565b500190565b600060018201613bfa57613bfa613bba565b5060010190565b600081613c1057613c10613bba565b506000190190565b634e487b7160e01b600052603260045260246000fd5b600082821015613c4057613c40613bba565b500390565b600060208284031215613c5757600080fd5b5051919050565b600060208284031215613c7057600080fd5b8151612efb8161395d565b60208082526019908201527f4661696c757265204f6e20546f6b656e205472616e7366657200000000000000604082015260600190565b600082613ccf57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613cee57613cee613bba565b500290565b600181811c90821680613d0757607f821691505b602082108103613d2757634e487b7160e01b600052602260045260246000fd5b50919050565b8054600090600181811c9080831680613d4757607f831692505b60208084108203613d6857634e487b7160e01b600052602260045260246000fd5b818015613d7c5760018114613d8d57613dba565b60ff19861689528489019650613dba565b60008881526020902060005b86811015613db25781548b820152908501908301613d99565b505084890196505b50505050505092915050565b6000613dd28285613d2d565b8351613de281836020880161366f565b01949350505050565b60008251613dfd81846020870161366f565b602d60f81b920191825250600101919050565b60008351613e2281846020880161366f565b835190830190613de281836020880161366f565b60008351613e4881846020880161366f565b61324281840185613d2d565b60208082526026908201527f4552433732313a206e6f6e20455243373231526563656976657220696d706c6560408201526536b2b73a32b960d11b606082015260800190565b600060ff821660ff84168060ff03821115613eb757613eb7613bba565b019392505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613ef29083018461369b565b9695505050505050565b600060208284031215613f0e57600080fd5b8151612efb8161363c56fedf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f76a26469706673582212203a32a27c7ae5f2a6e4ab78ad9f6efbb9a8362240fae7522684e1e7c446e45bde64736f6c634300080e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ca155171f67e7bd27f4fde729a28c0ff20b88c1f
-----Decoded View---------------
Arg [0] : paymentReceiver_ (address): 0xcA155171f67e7bd27F4FDe729A28c0Ff20b88C1F
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000ca155171f67e7bd27f4fde729a28c0ff20b88c1f
Deployed Bytecode Sourcemap
25876:27903:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42945:297;;;;;;;;;;-1:-1:-1;42945:297:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;42945:297:0;;;;;;;;43848:92;;;;;;;;;;-1:-1:-1;43927:5:0;;;;;;;;;;;;-1:-1:-1;;;43927:5:0;;;;43848:92;;;;;;;:::i;45285:204::-;;;;;;;;;;-1:-1:-1;45285:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1692:32:1;;;1674:51;;1662:2;1647:18;45285:204:0;1528:203:1;40551:377:0;;;;;;;;;;-1:-1:-1;40551:377:0;;;;;:::i;:::-;;:::i;:::-;;37312:201;;;;;;;;;;-1:-1:-1;37312:201:0;;;;;:::i;:::-;;:::i;26990:27::-;;;;;;;;;;;;;;;;;;;2338:25:1;;;2326:2;2311:18;26990:27:0;2192:177:1;27882:28:0;;;;;;;;;;;;;;;;30485:86;;;;;;;;;;;;;:::i;42265:93::-;;;;;;;;;;-1:-1:-1;42338:12:0;;42265:93;;28200:41;;;;;;;;;;-1:-1:-1;28200:41:0;;;;-1:-1:-1;;;28200:41:0;;;;;;41216:256;;;;;;;;;;-1:-1:-1;41216:256:0;;;;;:::i;:::-;;:::i;27819:25::-;;;;;;;;;;;;;;;;26268:34;;;;;;;;;;;;;;;;30677:154;;;;;;;;;;;;;:::i;26209:27::-;;;;;;;;;;;;;;;;41543:177;;;;;;;;;;-1:-1:-1;41543:177:0;;;;;:::i;:::-;;:::i;31274:114::-;;;;;;;;;;-1:-1:-1;31274:114:0;;;;;:::i;:::-;;:::i;31074:86::-;;;;;;;;;;-1:-1:-1;31074:86:0;;;;;:::i;:::-;;:::i;32662:1455::-;;;;;;:::i;:::-;;:::i;28159:34::-;;;;;;;;;;-1:-1:-1;28159:34:0;;;;-1:-1:-1;;;28159:34:0;;;;;;28248:35;;;;;;;;;;-1:-1:-1;28248:35:0;;;;-1:-1:-1;;;28248:35:0;;;;;;31168:98;;;;;;;;;;-1:-1:-1;31168:98:0;;;;;:::i;:::-;;:::i;42366:507::-;;;;;;;;;;-1:-1:-1;42366:507:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;29468:698::-;;;;;;;;;;-1:-1:-1;29468:698:0;;;;;:::i;:::-;;:::i;43558:223::-;;;;;;;;;;-1:-1:-1;43558:223:0;;;;;:::i;:::-;;:::i;31396:124::-;;;;;;;;;;-1:-1:-1;31396:124:0;;;;;:::i;:::-;;:::i;43306:190::-;;;;;;;;;;-1:-1:-1;43306:190:0;;;;;:::i;:::-;;:::i;32292:92::-;;;;;;;;;;-1:-1:-1;32292:92:0;;;;;:::i;:::-;;:::i;45791:327::-;;;;;;;;;;-1:-1:-1;45791:327:0;;;;;:::i;:::-;;:::i;31739:545::-;;;;;;;;;;-1:-1:-1;31739:545:0;;;;;:::i;:::-;;:::i;37521:2450::-;;;;;;;;;;-1:-1:-1;37521:2450:0;;;;;:::i;:::-;;:::i;25786:83::-;;;;;;;;;;-1:-1:-1;25829:7:0;25856:5;-1:-1:-1;;;;;25856:5:0;25786:83;;30839:227;;;;;;;;;;-1:-1:-1;30839:227:0;;;;;:::i;:::-;;:::i;30393:84::-;;;;;;;;;;;;;:::i;30174:100::-;;;;;;;;;;-1:-1:-1;30174:100:0;;;;;:::i;:::-;;:::i;44009:96::-;;;;;;;;;;-1:-1:-1;44090:7:0;;;;;;;;;;;;-1:-1:-1;;;44090:7:0;;;;44009:96;;27567:36;;;;;;;;;;;;27602:1;27567:36;;34189:624;;;;;;:::i;:::-;;:::i;41000:149::-;;;;;;;;;;-1:-1:-1;41000:149:0;;;;;:::i;:::-;;:::i;27273:45::-;;;;;;;;;;-1:-1:-1;27273:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;25560:132;;;;;;;;;;-1:-1:-1;25560:132:0;;;;;:::i;:::-;;:::i;52300:124::-;;;;;;;;;;-1:-1:-1;52300:124:0;;-1:-1:-1;;;7464:52:1;;7452:2;7437:18;52300:124:0;7320:202:1;41791:300:0;;;;;;;;;;-1:-1:-1;41791:300:0;;;;;:::i;:::-;;:::i;35807:1497::-;;;;;;;;;;-1:-1:-1;35807:1497:0;;;;;:::i;:::-;;:::i;44176:406::-;;;;;;;;;;-1:-1:-1;44176:406:0;;;;;:::i;:::-;;:::i;27638:38::-;;;;;;;;;;-1:-1:-1;27638:38:0;;;;-1:-1:-1;;;;;27638:38:0;;;32392:96;;;;;;;;;;;;;:::i;34910:889::-;;;;;;:::i;:::-;;:::i;30579:90::-;;;;;;;;;;;;;:::i;30282:103::-;;;;;;;;;;;;;:::i;27501:40::-;;;;;;;;;;-1:-1:-1;27501:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10365:25:1;;;10421:2;10406:18;;10399:34;;;;10449:18;;;10442:34;;;;10507:2;10492:18;;10485:34;10550:3;10535:19;;10528:35;10352:3;10337:19;27501:40:0;10106:463:1;31528:203:0;;;;;;;;;;-1:-1:-1;31528:203:0;;;;;:::i;:::-;;:::i;45560:162::-;;;;;;;;;;-1:-1:-1;45560:162:0;;;;;:::i;:::-;;:::i;28108:19::-;;;;;;;;;;-1:-1:-1;28108:19:0;;;;-1:-1:-1;;;;;28108:19:0;;;42945:297;43039:4;-1:-1:-1;;;;;;43076:40:0;;-1:-1:-1;;;43076:40:0;;:105;;-1:-1:-1;;;;;;;43133:48:0;;-1:-1:-1;;;43133:48:0;43076:105;:158;;;-1:-1:-1;;;;;;;;;;3817:40:0;;;43198:36;43056:178;42945:297;-1:-1:-1;;42945:297:0:o;45285:204::-;45353:7;46677:16;;;:7;:16;;;;;;-1:-1:-1;;;;;46677:16:0;45373:64;;;;-1:-1:-1;;;45373:64:0;;11391:2:1;45373:64:0;;;11373:21:1;11430:2;11410:18;;;11403:30;11469:34;11449:18;;;11442:62;-1:-1:-1;;;11520:18:1;;;11513:33;11563:19;;45373:64:0;;;;;;;;;-1:-1:-1;45457:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;45457:24:0;;45285:204::o;40551:377::-;40624:15;40642:16;40650:7;40642;:16::i;:::-;40624:34;;40683:7;-1:-1:-1;;;;;40677:13:0;:2;-1:-1:-1;;;;;40677:13:0;;40669:59;;;;-1:-1:-1;;;40669:59:0;;11795:2:1;40669:59:0;;;11777:21:1;11834:2;11814:18;;;11807:30;11873:34;11853:18;;;11846:62;-1:-1:-1;;;11924:18:1;;;11917:31;11965:19;;40669:59:0;11593:397:1;40669:59:0;16777:10;-1:-1:-1;;;;;40763:23:0;;;;:66;;-1:-1:-1;40790:39:0;40807:7;16777:10;45560:162;:::i;40790:39::-;40741:145;;;;-1:-1:-1;;;40741:145:0;;12197:2:1;40741:145:0;;;12179:21:1;12236:2;12216:18;;;12209:30;12275:31;12255:18;;;12248:59;12324:18;;40741:145:0;11995:353:1;40741:145:0;40899:21;40908:2;40912:7;40899:8;:21::i;:::-;40613:315;40551:377;;:::o;37312:201::-;37379:41;16777:10;37398:12;37412:7;37379:18;:41::i;:::-;37371:83;;;;-1:-1:-1;;;37371:83:0;;;;;;;:::i;:::-;37479:16;;;;:7;:16;;;;;;37465:40;;-1:-1:-1;;;;;37479:16:0;37487:7;37465:13;:40::i;:::-;37312:201;:::o;30485:86::-;25167:5;;-1:-1:-1;;;;;25167:5:0;25153:10;:19;25145:51;;;;-1:-1:-1;;;25145:51:0;;;;;;;:::i;:::-;30541:14:::1;:22:::0;;-1:-1:-1;;;;30541:22:0::1;::::0;;30485:86::o;41216:256::-;41350:41;16777:10;41369:12;16697:98;41350:41;41342:83;;;;-1:-1:-1;;;41342:83:0;;;;;;;:::i;:::-;41436:28;41446:4;41452:2;41456:7;41436:9;:28::i;30677:154::-;25167:5;;-1:-1:-1;;;;;25167:5:0;25153:10;:19;25145:51;;;;-1:-1:-1;;;25145:51:0;;;;;;;:::i;:::-;30747:15:::1;::::0;30739:63:::1;::::0;30728:6:::1;::::0;-1:-1:-1;;;;;30747:15:0::1;::::0;30776:21:::1;::::0;30728:6;30739:63;30728:6;30739:63;30776:21;30747:15;30739:63:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30727:75;;;30821:1;30813:10;;;::::0;::::1;41543:177:::0;41673:39;41690:4;41696:2;41700:7;41673:39;;;;;;;;;;;;:16;:39::i;31274:114::-;25167:5;;-1:-1:-1;;;;;25167:5:0;25153:10;:19;25145:51;;;;-1:-1:-1;;;25145:51:0;;;;;;;:::i;:::-;31359:21:::1;:6;31368:12:::0;;31359:21:::1;:::i;31074:86::-:0;25167:5;;-1:-1:-1;;;;;25167:5:0;25153:10;:19;25145:51;;;;-1:-1:-1;;;25145:51:0;;;;;;;:::i;:::-;31138:4:::1;:14:::0;31074:86::o;32662:1455::-;32764:22;;-1:-1:-1;;;32764:22:0;;;;32763:23;32741:109;;;;-1:-1:-1;;;32741:109:0;;13471:2:1;32741:109:0;;;13453:21:1;13510:2;13490:18;;;13483:30;13549:34;13529:18;;;13522:62;-1:-1:-1;;;13600:18:1;;;13593:34;13644:19;;32741:109:0;13269:400:1;32741:109:0;32883:41;16777:10;32902:12;32916:7;32883:18;:41::i;:::-;32861:121;;;;-1:-1:-1;;;32861:121:0;;13876:2:1;32861:121:0;;;13858:21:1;13915:2;13895:18;;;13888:30;13954:31;13934:18;;;13927:59;14003:18;;32861:121:0;13674:353:1;32861:121:0;27602:1;33015:7;:19;;32993:86;;;;-1:-1:-1;;;32993:86:0;;14234:2:1;32993:86:0;;;14216:21:1;14273:2;14253:18;;;14246:30;-1:-1:-1;;;14292:18:1;;;14285:47;14349:18;;32993:86:0;14032:341:1;32993:86:0;33121:16;33140;;;:7;:16;;;;;;33189:21;;;33167:92;;;;-1:-1:-1;;;33167:92:0;;14580:2:1;33167:92:0;;;14562:21:1;14619:2;14599:18;;;14592:30;-1:-1:-1;;;14638:18:1;;;14631:51;14699:18;;33167:92:0;14378:345:1;33167:92:0;33315:14;;;;:5;:14;;;;;:18;;;;33292:20;;:41;33270:107;;;;-1:-1:-1;;;33270:107:0;;14930:2:1;33270:107:0;;;14912:21:1;14969:2;14949:18;;;14942:30;-1:-1:-1;;;14988:18:1;;;14981:46;15044:18;;33270:107:0;14728:340:1;33270:107:0;33428:18;33475:11;33461:106;33492:7;33488:1;:11;33461:106;;;33538:5;:12;33544:5;:1;33548;33544:5;:::i;:::-;33538:12;;;;;;;;;;;:17;;;33521:34;;;;;:::i;:::-;;-1:-1:-1;33501:3:0;;;;:::i;:::-;;;;33461:106;;;;33612:13;33599:9;:26;;33577:99;;;;-1:-1:-1;;;33577:99:0;;15680:2:1;33577:99:0;;;15662:21:1;15719:2;15699:18;;;15692:30;15758:25;15738:18;;;15731:53;15801:18;;33577:99:0;15478:347:1;33577:99:0;33736:36;16777:10;33764:7;33736:13;:36::i;:::-;33822:18;;;;:5;:18;;;;;:26;;;;;;:::i;:::-;;;;-1:-1:-1;;33898:14:0;;;;:5;:14;;;;;:22;;;;;;:::i;:::-;;;;-1:-1:-1;;33968:16:0;;;;:7;:16;;;;;:26;;;34078:31;33976:7;34078:22;:31::i;:::-;34053:22;;;;:13;:22;;;;;;:56;;;;-1:-1:-1;;;32662:1455:0:o;31168:98::-;25167:5;;-1:-1:-1;;;;;25167:5:0;25153:10;:19;25145:51;;;;-1:-1:-1;;;25145:51:0;;;;;;;:::i;:::-;31242:16:::1;:7;31252:6:::0;;31242:16:::1;:::i;42366:507::-:0;42427:16;42456:20;42493:16;42503:5;42493:9;:16::i;:::-;42479:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42479:31:0;-1:-1:-1;42456:54:0;-1:-1:-1;;;;;;42525:19:0;;42521:40;;42555:3;42366:507;-1:-1:-1;;42366:507:0:o;42521:40::-;42575:16;42585:5;42575:9;:16::i;:::-;42595:1;42575:21;42571:42;;42607:3;42366:507;-1:-1:-1;;42366:507:0:o;42571:42::-;42623:13;42656:6;42651:194;42672:12;;42668:1;:16;42651:194;;;42706:10;;;;:7;:10;;;;;;-1:-1:-1;;;;;42706:19:0;;;:10;;:19;42702:100;;42759:1;42746:3;42750:5;42746:10;;;;;;;;:::i;:::-;;;;;;;;;;:14;42779:7;;;;:::i;:::-;;;;42702:100;42828:3;;42651:194;;;-1:-1:-1;42862:3:0;;42366:507;-1:-1:-1;;;42366:507:0:o;29468:698::-;25167:5;;-1:-1:-1;;;;;25167:5:0;25153:10;:19;25145:51;;;;-1:-1:-1;;;25145:51:0;;;;;;;:::i;:::-;29599:22:::1;::::0;-1:-1:-1;;;29599:22:0;::::1;;;29577:73;;;::::0;-1:-1:-1;;;29577:73:0;;16305:2:1;29577:73:0::1;::::0;::::1;16287:21:1::0;16344:1;16324:18;;;16317:29;-1:-1:-1;;;16362:18:1;;;16355:31;16403:18;;29577:73:0::1;16103:324:1::0;29577:73:0::1;29685:8:::0;29719:25;;::::1;29711:39;;;::::0;-1:-1:-1;;;29711:39:0;;16634:2:1;29711:39:0::1;::::0;::::1;16616:21:1::0;16673:1;16653:18;;;16646:29;-1:-1:-1;;;16691:18:1;;;16684:31;16732:18;;29711:39:0::1;16432:324:1::0;29711:39:0::1;29768:6;29763:396;29784:6;29780:1;:10;29763:396;;;29834:7;:20;29842:8;;29851:1;29842:11;;;;;;;:::i;:::-;;;;;;;29834:20;;;;;;;;;;;;29858:1;29834:25;:44;;;;;29877:1;29863:8;;29872:1;29863:11;;;;;;;:::i;:::-;;;;;;;:15;29834:44;29808:107;;;::::0;-1:-1:-1;;;29808:107:0;;16963:2:1;29808:107:0::1;::::0;::::1;16945:21:1::0;17002:1;16982:18;;;16975:29;-1:-1:-1;;;17020:18:1;;;17013:31;17061:18;;29808:107:0::1;16761:324:1::0;29808:107:0::1;29953:8;;29962:1;29953:11;;;;;;;:::i;:::-;;;;;;;29930:7;:20;29938:8;;29947:1;29938:11;;;;;;;:::i;:::-;;;;;;;29930:20;;;;;;;;;;;:34;;;;29979:5;:18;29985:8;;29994:1;29985:11;;;;;;;:::i;:::-;;;;;;;29979:18;;;;;;;;;;;:24;;;:26;;;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;30020:8:0::1;::::0;;;:5:::1;:8;::::0;-1:-1:-1;;;;;;;;;;;30020:16:0;;;::::1;::::0;::::1;:::i;:::-;;;;;;30080:35;30103:8;;30112:1;30103:11;;;;;;;:::i;:::-;;;;;;;30080:22;:35::i;:::-;30051:13;:26;30065:8;;30074:1;30065:11;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;30051:26:::0;;-1:-1:-1;30051:26:0;::::1;::::0;;;;;;-1:-1:-1;30051:26:0;:64;30142:3:::1;;29763:396;;;;29566:600;29468:698:::0;;;;:::o;43558:223::-;43622:7;43660:16;;;:7;:16;;;;;;-1:-1:-1;;;;;43660:16:0;;43687:61;;;;-1:-1:-1;;;43687:61:0;;17292:2:1;43687:61:0;;;17274:21:1;17331:2;17311:18;;;17304:30;17370:29;17350:18;;;17343:57;17417:18;;43687:61:0;17090:351:1;31396:124:0;25167:5;;-1:-1:-1;;;;;25167:5:0;25153:10;:19;25145:51;;;;-1:-1:-1;;;25145:51:0;;;;;;;:::i;:::-;31483:15:::1;:29:::0;;-1:-1:-1;;;;;;31483:29:0::1;-1:-1:-1::0;;;;;31483:29:0;;;::::1;::::0;;;::::1;::::0;;31396:124::o;43306:190::-;43372:7;-1:-1:-1;;;;;43400:21:0;;43392:60;;;;-1:-1:-1;;;43392:60:0;;17648:2:1;43392:60:0;;;17630:21:1;17687:2;17667:18;;;17660:30;17726:28;17706:18;;;17699:56;17772:18;;43392:60:0;17446:350:1;43392:60:0;-1:-1:-1;;;;;;43470:18:0;;;;;:9;:18;;;;;;;43306:190::o;32292:92::-;25167:5;;-1:-1:-1;;;;;25167:5:0;25153:10;:19;25145:51;;;;-1:-1:-1;;;25145:51:0;;;;;;;:::i;:::-;32359:10:::1;:17:::0;32292:92::o;45791:327::-;45853:7;45875:24;45902:31;45925:7;45902:22;:31::i;:::-;45944:23;45970:22;;;:13;:22;;;;;;45875:58;;-1:-1:-1;46008:35:0;;;46005:52;;-1:-1:-1;46053:1:0;;45791:327;-1:-1:-1;;;45791:327:0:o;46005:52::-;46076:34;46095:15;46076:16;:34;:::i;:::-;46069:41;45791:327;-1:-1:-1;;;;45791:327:0:o;31739:545::-;25167:5;;-1:-1:-1;;;;;25167:5:0;25153:10;:19;25145:51;;;;-1:-1:-1;;;25145:51:0;;;;;;;:::i;:::-;26945:5:::1;31973:4:::0;31965:5;31957;31937:17:::1;31947:7:::0;31937;:17:::1;:::i;:::-;:25;;;;:::i;:::-;:33;;;;:::i;:::-;:40;;;;:::i;:::-;:59;31915:128;;;::::0;-1:-1:-1;;;31915:128:0;;18133:2:1;31915:128:0::1;::::0;::::1;18115:21:1::0;18172:2;18152:18;;;18145:30;-1:-1:-1;;;18191:18:1;;;18184:49;18250:18;;31915:128:0::1;17931:343:1::0;31915:128:0::1;32054:5;:8;::::0;:27;:37;;;;32102:27;:37;;;;32150:27;:35;32196:27;:35;32054:27:::1;:8;32242::::0;:27;:34;31739:545::o;37521:2450::-;37579:22;;-1:-1:-1;;;37579:22:0;;;;37575:61;;;37521:2450;:::o;37575:61::-;37694:5;;:30;;-1:-1:-1;;;37694:30:0;;37718:4;37694:30;;;1674:51:1;37680:11:0;;-1:-1:-1;;;;;37694:5:0;;:15;;1647:18:1;;37694:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37757:5;;:119;;-1:-1:-1;;;37757:119:0;;37794:10;37757:119;;;18708:34:1;37831:4:0;18758:18:1;;;18751:43;18810:18;;;18803:34;;;37680:44:0;;-1:-1:-1;;;;;;37757:5:0;;:18;;18643::1;;37757:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37735:194;;;;-1:-1:-1;;;37735:194:0;;;;;;;:::i;:::-;37953:5;;:30;;-1:-1:-1;;;37953:30:0;;37977:4;37953:30;;;1674:51:1;37940:10:0;;-1:-1:-1;;;;;37953:5:0;;:15;;1647:18:1;;37953:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37940:43;;38064:6;38056:5;:14;38034:77;;;;-1:-1:-1;;;38034:77:0;;19654:2:1;38034:77:0;;;19636:21:1;19693:2;19673:18;;;19666:30;-1:-1:-1;;;19712:18:1;;;19705:43;19765:18;;38034:77:0;19452:337:1;38034:77:0;38122:13;38138:14;38146:6;38138:5;:14;:::i;:::-;38122:30;;38217:8;38201:12;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;38271:7:0;;-1:-1:-1;38271:7:0;;;;38318:31;40106:5;:8;;:27;;40149;;40192;;40234;;40106;40043:4;40276:8;:27;;39979:343;;;;;;38318:31;38402:1;38396:8;;;;:5;:8;;;:14;38270:79;;-1:-1:-1;38270:79:0;;-1:-1:-1;38270:79:0;;-1:-1:-1;38270:79:0;-1:-1:-1;38270:79:0;-1:-1:-1;38396:19:0;38392:166;;38438:6;38443:1;38438:2;:6;:::i;:::-;38432:12;;;;:::i;:::-;;-1:-1:-1;38465:6:0;38470:1;38465:2;:6;:::i;:::-;38459:12;;;;:::i;:::-;;-1:-1:-1;38492:6:0;38497:1;38492:2;:6;:::i;:::-;38486:12;;;;:::i;:::-;;-1:-1:-1;38519:6:0;38524:1;38519:2;:6;:::i;:::-;38513:12;;;;:::i;:::-;;;38545:1;38540:6;;38392:166;38578:1;38572:8;;;;:5;:8;;;:14;:19;;38568:139;;38614:6;38619:1;38614:2;:6;:::i;:::-;38608:12;;;;:::i;:::-;;-1:-1:-1;38641:6:0;38646:1;38641:2;:6;:::i;:::-;38635:12;;;;:::i;:::-;;-1:-1:-1;38668:6:0;38673:1;38668:2;:6;:::i;:::-;38662:12;;;;:::i;:::-;;;38694:1;38689:6;;38568:139;38727:1;38721:8;;;;:5;:8;;;:14;:19;;38717:112;;38763:6;38768:1;38763:2;:6;:::i;:::-;38757:12;;;;:::i;:::-;;-1:-1:-1;38790:6:0;38795:1;38790:2;:6;:::i;:::-;38784:12;;;;:::i;:::-;;;38816:1;38811:6;;38717:112;38849:1;38843:8;;;;:5;:8;;;:14;:19;;38839:81;;38879:8;38885:2;38879:8;;:::i;:::-;;;38907:1;38902:6;;38839:81;38977:14;38994:37;26945:5;38994:16;:8;39007:2;38994:12;:16::i;:::-;:20;;:37::i;:::-;38977:54;-1:-1:-1;39042:14:0;39059:37;26945:5;39059:16;:8;39072:2;39059:12;:16::i;:37::-;39042:54;-1:-1:-1;39107:12:0;39122:37;26945:5;39122:16;:8;39135:2;39122:12;:16::i;:37::-;39107:52;-1:-1:-1;39170:12:0;39185:37;26945:5;39185:16;:8;39198:2;39185:12;:16::i;:37::-;39170:52;-1:-1:-1;39233:11:0;39247:37;26945:5;39247:16;:8;39260:2;39247:12;:16::i;:37::-;39346:1;39357;39340:8;:5;:8;;;:14;39233:51;;-1:-1:-1;39340:18:0;39336:114;;39429:1;39423:8;;:5;:8;;;:14;39408:9;;39397:41;;39423:14;39397:21;;:6;;:10;:21::i;:41::-;39381:1;39375:8;;;;:5;:8;;:18;:63;;:18;;:8;:63;;;;;:::i;:::-;;;;-1:-1:-1;;39336:114:0;39470:1;39481;39464:8;:5;:8;;;:14;:18;39460:115;;39554:1;39548:8;;:5;:8;;;:14;39533:9;;39521:42;;39548:14;39521:22;;:7;;:11;:22::i;:42::-;39505:1;39499:8;;;;:5;:8;;:18;:64;;:18;;:8;:64;;;;;:::i;:::-;;;;-1:-1:-1;;39460:115:0;39595:1;39606;39589:8;:5;:8;;;:14;:18;39585:115;;39679:1;39673:8;;:5;:8;;;:14;39658:9;;39646:42;;39673:14;39646:22;;:7;;:11;:22::i;:42::-;39630:1;39624:8;;;;:5;:8;;:18;:64;;:18;;:8;:64;;;;;:::i;:::-;;;;-1:-1:-1;;39585:115:0;39720:1;39731;39714:8;:5;:8;;;:14;:18;39710:117;;39806:1;39800:8;;:5;:8;;;:14;39785:9;;39771:44;;39800:14;39771:24;;:9;;:13;:24::i;:44::-;39755:1;39749:8;;;;:5;:8;;:18;:66;;:18;;:8;:66;;;;;:::i;:::-;;;;-1:-1:-1;;39710:117:0;39858:1;39841:8;;:5;:8;;-1:-1:-1;;;;;;;;;;;39841:14:0;:18;39837:117;;39927:8;;;:5;:8;;-1:-1:-1;;;;;;;;;;;39927:14:0;39912:9;;39898:44;;39927:14;39898:24;;:9;;:13;:24::i;:44::-;39876:8;;;;:5;:8;;:18;:66;;:18;;:8;:66;;;;;:::i;:::-;;;;-1:-1:-1;;39837:117:0;37564:2407;;;;;;;;;;;;;37521:2450;:::o;30839:227::-;25167:5;;-1:-1:-1;;;;;25167:5:0;25153:10;:19;25145:51;;;;-1:-1:-1;;;25145:51:0;;;;;;;:::i;:::-;30934:5:::1;::::0;-1:-1:-1;;;;;30934:5:0;;::::1;30916:24:::0;;::::1;::::0;30908:63:::1;;;::::0;-1:-1:-1;;;30908:63:0;;20218:2:1;30908:63:0::1;::::0;::::1;20200:21:1::0;20257:2;20237:18;;;20230:30;20296:28;20276:18;;;20269:56;20342:18;;30908:63:0::1;20016:350:1::0;30908:63:0::1;31018:39;::::0;-1:-1:-1;;;31018:39:0;;31051:4:::1;31018:39;::::0;::::1;1674:51:1::0;-1:-1:-1;;;;;30982:23:0;::::1;::::0;::::1;::::0;31006:10:::1;::::0;30982:23;;31018:24:::1;::::0;1647:18:1;;31018:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30982:76;::::0;-1:-1:-1;;;;;;30982:76:0::1;::::0;;;;;;-1:-1:-1;;;;;20563:32:1;;;30982:76:0::1;::::0;::::1;20545:51:1::0;20612:18;;;20605:34;20518:18;;30982:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30839:227:::0;:::o;30393:84::-;25167:5;;-1:-1:-1;;;;;25167:5:0;25153:10;:19;25145:51;;;;-1:-1:-1;;;25145:51:0;;;;;;;:::i;:::-;30448:14:::1;:21:::0;;-1:-1:-1;;;;30448:21:0::1;-1:-1:-1::0;;;30448:21:0::1;::::0;;30393:84::o;30174:100::-;25167:5;;-1:-1:-1;;;;;25167:5:0;25153:10;:19;25145:51;;;;-1:-1:-1;;;25145:51:0;;;;;;;:::i;:::-;30244:5:::1;:22:::0;;-1:-1:-1;;;;;;30244:22:0::1;-1:-1:-1::0;;;;;30244:22:0;;;::::1;::::0;;;::::1;::::0;;30174:100::o;34189:624::-;34276:14;;-1:-1:-1;;;34276:14:0;;;;34254:83;;;;-1:-1:-1;;;34254:83:0;;20852:2:1;34254:83:0;;;20834:21:1;20891:2;20871:18;;;20864:30;-1:-1:-1;;;20910:18:1;;;20903:49;20969:18;;34254:83:0;20650:343:1;34254:83:0;34371:16;;-1:-1:-1;;;34371:16:0;;;;34370:17;34348:88;;;;-1:-1:-1;;;34348:88:0;;21200:2:1;34348:88:0;;;21182:21:1;21239:2;21219:18;;;21212:30;-1:-1:-1;;;21258:18:1;;;21251:51;21319:18;;34348:88:0;20998:345:1;34348:88:0;34473:1;34457:13;:17;34449:43;;;;-1:-1:-1;;;34449:43:0;;21550:2:1;34449:43:0;;;21532:21:1;21589:2;21569:18;;;21562:30;-1:-1:-1;;;21608:18:1;;;21601:43;21661:18;;34449:43:0;21348:337:1;34449:43:0;34535:9;34518:13;34511:4;;:20;;;;:::i;:::-;:33;;34503:66;;;;-1:-1:-1;;;34503:66:0;;22065:2:1;34503:66:0;;;22047:21:1;22104:2;22084:18;;;22077:30;-1:-1:-1;;;22123:18:1;;;22116:50;22183:18;;34503:66:0;21863:344:1;34503:66:0;34587:6;34582:103;34603:13;34599:1;:17;34582:103;;;34638:35;34648:10;34660:12;;34638:9;:35::i;:::-;34618:3;;;;:::i;:::-;;;;34582:103;;;-1:-1:-1;34729:10:0;34719:21;;;;:9;:21;;;;;;27767:2;-1:-1:-1;34719:37:0;34697:108;;;;-1:-1:-1;;;34697:108:0;;22414:2:1;34697:108:0;;;22396:21:1;22453:2;22433:18;;;22426:30;-1:-1:-1;;;22472:18:1;;;22465:51;22533:18;;34697:108:0;22212:345:1;41000:149:0;41088:53;16777:10;41121:9;41132:8;41088:18;:53::i;25560:132::-;25167:5;;-1:-1:-1;;;;;25167:5:0;25153:10;:19;25145:51;;;;-1:-1:-1;;;25145:51:0;;;;;;;:::i;:::-;25641:5:::1;::::0;;25632:25:::1;::::0;-1:-1:-1;;;;;25632:25:0;;::::1;::::0;25641:5;::::1;::::0;25632:25:::1;::::0;::::1;25668:5;:16:::0;;-1:-1:-1;;;;;;25668:16:0::1;-1:-1:-1::0;;;;;25668:16:0;;;::::1;::::0;;;::::1;::::0;;25560:132::o;41791:300::-;41958:41;16777:10;41977:12;16697:98;41958:41;41950:83;;;;-1:-1:-1;;;41950:83:0;;;;;;;:::i;:::-;42044:39;42058:4;42064:2;42068:7;42077:5;42044:13;:39::i;:::-;41791:300;;;;:::o;35807:1497::-;35944:8;35992:10;35970:71;;;;-1:-1:-1;;;35970:71:0;;22764:2:1;35970:71:0;;;22746:21:1;22803:2;22783:18;;;22776:30;-1:-1:-1;;;22822:18:1;;;22815:41;22873:18;;35970:71:0;22562:335:1;35970:71:0;36094:17;;16777:10;36094:17;36282:549;36303:6;36299:1;:10;36282:549;;;36374:8;;36383:1;36374:11;;;;;;;:::i;:::-;;;;;;;36362:23;;36454:37;36473:6;36481:9;36454:18;:37::i;:::-;36446:79;;;;-1:-1:-1;;;36446:79:0;;;;;;;:::i;:::-;36599:25;36614:9;36599:14;:25::i;:::-;36583:41;;;;:::i;:::-;;;36723:33;36746:9;36723:22;:33::i;:::-;36696:24;;;;:13;:24;;;;;:60;36814:3;;36282:549;;;-1:-1:-1;36890:5:0;;:30;;-1:-1:-1;;;36890:30:0;;36914:4;36890:30;;;1674:51:1;36879:8:0;;-1:-1:-1;;;;;36890:5:0;;:15;;1647:18:1;;36890:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36879:41;;36986:3;36971:12;:18;36967:69;;;37021:3;37006:18;;36967:69;37085:12;37101:1;37085:17;37081:56;;37119:7;;;;;35807:1497;;:::o;37081:56::-;37207:5;;:36;;-1:-1:-1;;;37207:36:0;;-1:-1:-1;;;;;20563:32:1;;;37207:36:0;;;20545:51:1;20612:18;;;20605:34;;;37207:5:0;;;;:14;;20518:18:1;;37207:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37185:111;;;;-1:-1:-1;;;37185:111:0;;;;;;;:::i;:::-;35865:1439;;;;;35807:1497;;:::o;44176:406::-;46653:4;46677:16;;;:7;:16;;;;;;44241:13;;-1:-1:-1;;;;;46677:16:0;44267:46;;;;-1:-1:-1;;;44267:46:0;;23104:2:1;44267:46:0;;;23086:21:1;23143:2;23123:18;;;23116:30;-1:-1:-1;;;23162:18:1;;;23155:47;23219:18;;44267:46:0;22902:341:1;44267:46:0;44326:19;44380:16;;;:7;:16;;;;;;44362:7;;44371:26;;:8;:26::i;:::-;44348:50;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44326:72;;44409:19;44445:5;44431:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;44409:47;;44467:19;44503:5;44510:17;44519:7;44510:8;:17::i;:::-;44489:39;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44467:61;;44560:5;44567:6;44546:28;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44539:35;;;;;44176:406;;;:::o;32392:96::-;25167:5;;-1:-1:-1;;;;;25167:5:0;25153:10;:19;25145:51;;;;-1:-1:-1;;;25145:51:0;;;;;;;:::i;:::-;32468:12:::1;::::0;32455:10:::1;:25:::0;32392:96::o;34910:889::-;35032:14;;-1:-1:-1;;;35032:14:0;;;;35010:83;;;;-1:-1:-1;;;35010:83:0;;20852:2:1;35010:83:0;;;20834:21:1;20891:2;20871:18;;;20864:30;-1:-1:-1;;;20910:18:1;;;20903:49;20969:18;;35010:83:0;20650:343:1;35010:83:0;35126:16;;-1:-1:-1;;;35126:16:0;;;;35104:88;;;;-1:-1:-1;;;35104:88:0;;26589:2:1;35104:88:0;;;26571:21:1;26628:2;26608:18;;;26601:30;-1:-1:-1;;;26647:18:1;;;26640:52;26709:18;;35104:88:0;26387:346:1;35104:88:0;35225:128;35262:5;;35225:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35286:10:0;;;-1:-1:-1;16777:10:0;;-1:-1:-1;35225:18:0;:128::i;:::-;:136;;35357:4;35225:136;35203:209;;;;-1:-1:-1;;;35203:209:0;;26940:2:1;35203:209:0;;;26922:21:1;26979:2;26959:18;;;26952:30;27018:25;26998:18;;;26991:53;27061:18;;35203:209:0;26738:347:1;35203:209:0;35449:1;35433:13;:17;35425:43;;;;-1:-1:-1;;;35425:43:0;;21550:2:1;35425:43:0;;;21532:21:1;21589:2;21569:18;;;21562:30;-1:-1:-1;;;21608:18:1;;;21601:43;21661:18;;35425:43:0;21348:337:1;35425:43:0;35511:9;35494:13;35487:4;;:20;;;;:::i;:::-;:33;;35479:66;;;;-1:-1:-1;;;35479:66:0;;22065:2:1;35479:66:0;;;22047:21:1;22104:2;22084:18;;;22077:30;-1:-1:-1;;;22123:18:1;;;22116:50;22183:18;;35479:66:0;21863:344:1;35479:66:0;35563:6;35558:103;35579:13;35575:1;:17;35558:103;;;35614:35;35624:10;35636:12;;35614:9;:35::i;:::-;35594:3;;;;:::i;:::-;;;;35558:103;;;-1:-1:-1;35705:10:0;35695:21;;;;:9;:21;;;;;;27767:2;-1:-1:-1;35695:37:0;35673:108;;;;-1:-1:-1;;;35673:108:0;;22414:2:1;35673:108:0;;;22396:21:1;22453:2;22433:18;;;22426:30;-1:-1:-1;;;22472:18:1;;;22465:51;22533:18;;35673:108:0;22212:345:1;30579:90:0;25167:5;;-1:-1:-1;;;;;25167:5:0;25153:10;:19;25145:51;;;;-1:-1:-1;;;25145:51:0;;;;;;;:::i;:::-;30637:16:::1;:24:::0;;-1:-1:-1;;;;30637:24:0::1;::::0;;30579:90::o;30282:103::-;25167:5;;-1:-1:-1;;;;;25167:5:0;25153:10;:19;25145:51;;;;-1:-1:-1;;;25145:51:0;;;;;;;:::i;:::-;30347:22:::1;:30:::0;;-1:-1:-1;;;;30347:30:0::1;::::0;;30282:103::o;31528:203::-;25167:5;;-1:-1:-1;;;;;25167:5:0;25153:10;:19;25145:51;;;;-1:-1:-1;;;25145:51:0;;;;;;;:::i;:::-;27602:1:::1;31635:4;:15;31613:73;;;::::0;-1:-1:-1;;;31613:73:0;;27292:2:1;31613:73:0::1;::::0;::::1;27274:21:1::0;27331:1;27311:18;;;27304:29;-1:-1:-1;;;27349:18:1;;;27342:38;27397:18;;31613:73:0::1;27090:331:1::0;31613:73:0::1;31697:11;::::0;;;:5:::1;:11;::::0;;;;;:16:::1;;:26:::0;31528:203::o;45560:162::-;-1:-1:-1;;;;;45676:27:0;;;45652:4;45676:27;;;:18;:27;;;;;;;;:38;;;;;;;;;;;;;;;45560:162::o;51672:159::-;51739:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;51739:29:0;-1:-1:-1;;;;;51739:29:0;;;;;;;;:24;;51793:16;51739:24;51793:7;:16::i;:::-;-1:-1:-1;;;;;51784:39:0;;;;;;;;;;;51672:159;;:::o;46882:320::-;46967:4;46677:16;;;:7;:16;;;;;;-1:-1:-1;;;;;46677:16:0;46984:54;;;;-1:-1:-1;;;46984:54:0;;27628:2:1;46984:54:0;;;27610:21:1;27667:2;27647:18;;;27640:30;27706:27;27686:18;;;27679:55;27751:18;;46984:54:0;27426:349:1;46984:54:0;47049:15;47067:16;47075:7;47067;:16::i;:::-;47049:34;;47113:7;-1:-1:-1;;;;;47102:18:0;:7;-1:-1:-1;;;;;47102:18:0;;:53;;;;47148:7;-1:-1:-1;;;;;47124:31:0;:20;47136:7;47124:11;:20::i;:::-;-1:-1:-1;;;;;47124:31:0;;47102:53;:91;;;;47159:34;47176:7;47185;47159:16;:34::i;50881:673::-;50992:12;51007:23;51022:7;51007:14;:23::i;:::-;51052:5;;:30;;-1:-1:-1;;;51052:30:0;;51076:4;51052:30;;;1674:51:1;50992:38:0;;-1:-1:-1;51041:8:0;;-1:-1:-1;;;;;51052:5:0;;;;:15;;1647:18:1;;51052:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51041:41;;51143:3;51133:7;:13;51129:59;;;51173:3;51163:13;;51129:59;51237:7;51248:1;51237:12;51233:51;;51266:7;;50881:673;;:::o;51233:51::-;51361:31;51384:7;51361:22;:31::i;:::-;51336:22;;;;:13;:22;;;;;;;:56;;;;51463:5;;:30;;-1:-1:-1;;;51463:30:0;;-1:-1:-1;;;;;20563:32:1;;;51463:30:0;;;20545:51:1;20612:18;;;20605:34;;;51463:5:0;;;;:14;;20518:18:1;;51463:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51441:105;;;;-1:-1:-1;;;51441:105:0;;;;;;;:::i;50168:651::-;50312:4;-1:-1:-1;;;;;50292:24:0;:16;50300:7;50292;:16::i;:::-;-1:-1:-1;;;;;50292:24:0;;50284:52;;;;-1:-1:-1;;;50284:52:0;;27982:2:1;50284:52:0;;;27964:21:1;28021:2;28001:18;;;27994:30;-1:-1:-1;;;28040:18:1;;;28033:45;28095:18;;50284:52:0;27780:339:1;50284:52:0;-1:-1:-1;;;;;50355:16:0;;50347:41;;;;-1:-1:-1;;;50347:41:0;;28326:2:1;50347:41:0;;;28308:21:1;28365:2;28345:18;;;28338:30;-1:-1:-1;;;28384:18:1;;;28377:42;28436:18;;50347:41:0;28124:336:1;50347:41:0;50425:1;50407:15;50417:4;50407:9;:15::i;:::-;:19;50399:44;;;;-1:-1:-1;;;50399:44:0;;28667:2:1;50399:44:0;;;28649:21:1;28706:2;28686:18;;;28679:30;-1:-1:-1;;;28725:18:1;;;28718:42;28777:18;;50399:44:0;28465:336:1;50399:44:0;50508:29;50525:1;50529:7;50508:8;:29::i;:::-;50588:28;50602:4;50608:7;50588:13;:28::i;:::-;-1:-1:-1;;;;;50659:15:0;;;;;;:9;:15;;;;;:20;;50678:1;;50659:15;:20;;50678:1;;50659:20;:::i;:::-;;;;-1:-1:-1;;;;;;;50690:13:0;;;;;;:9;:13;;;;;:18;;50707:1;;50690:13;:18;;50707:1;;50690:18;:::i;:::-;;;;-1:-1:-1;;50719:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;50719:21:0;-1:-1:-1;;;;;50719:21:0;;;;;;;;;50784:27;;50719:16;;50784:27;;;;;;;50168:651;;;:::o;46197:155::-;46334:9;;46269:7;46302:16;;;:7;:16;;;;;;;;;46296:23;;:5;:23;;;;;:33;;;46269:7;;46296:48;;:33;:37;:48::i;18528:471::-;18586:7;18831:1;18836;18831:6;18827:47;;-1:-1:-1;18861:1:0;18854:8;;18827:47;18886:9;18898:5;18902:1;18898;:5;:::i;:::-;18886:17;-1:-1:-1;18931:1:0;18922:5;18926:1;18886:17;18922:5;:::i;:::-;:10;18914:56;;;;-1:-1:-1;;;18914:56:0;;29008:2:1;18914:56:0;;;28990:21:1;29047:2;29027:18;;;29020:30;29086:34;29066:18;;;29059:62;-1:-1:-1;;;29137:18:1;;;29130:31;29178:19;;18914:56:0;28806:397:1;18914:56:0;18990:1;18528:471;-1:-1:-1;;;18528:471:0:o;19475:132::-;19533:7;19560:39;19564:1;19567;19560:39;;;;;;;;;;;;;;;;;:3;:39::i;47595:281::-;47688:18;47694:2;47698:7;47688:5;:18::i;:::-;47739:51;47770:1;47774:2;47778:7;47739:51;;;;;;;;;;;;:22;:51::i;:::-;47717:151;;;;-1:-1:-1;;;47717:151:0;;29410:2:1;47717:151:0;;;29392:21:1;29449:2;29429:18;;;29422:30;29488:34;29468:18;;;29461:62;-1:-1:-1;;;29539:18:1;;;29532:48;29597:19;;47717:151:0;29208:414:1;51973:319:0;52125:9;-1:-1:-1;;;;;52114:20:0;:7;-1:-1:-1;;;;;52114:20:0;;52106:58;;;;-1:-1:-1;;;52106:58:0;;29829:2:1;52106:58:0;;;29811:21:1;29868:2;29848:18;;;29841:30;29907:27;29887:18;;;29880:55;29952:18;;52106:58:0;29627:349:1;52106:58:0;-1:-1:-1;;;;;52175:27:0;;;;;;;:18;:27;;;;;;;;:38;;;;;;;;;;;;;:49;;-1:-1:-1;;52175:49:0;;;;;;;;;;52240:44;;540:41:1;;;52240:44:0;;513:18:1;52240:44:0;;;;;;;51973:319;;;:::o;49534:295::-;49683:28;49693:4;49699:2;49703:7;49683:9;:28::i;:::-;49730:48;49753:4;49759:2;49763:7;49772:5;49730:22;:48::i;:::-;49722:99;;;;-1:-1:-1;;;49722:99:0;;;;;;;:::i;44646:573::-;44696:27;44740:2;44746:1;44740:7;44736:50;;-1:-1:-1;;44764:10:0;;;;;;;;;;;;-1:-1:-1;;;44764:10:0;;;;;44646:573::o;44736:50::-;44805:2;44796:6;44837:69;44844:6;;44837:69;;44867:5;;;;:::i;:::-;;-1:-1:-1;44887:7:0;;-1:-1:-1;44892:2:0;44887:7;;:::i;:::-;;;44837:69;;;44916:17;44946:3;44936:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44936:14:0;-1:-1:-1;44916:34:0;-1:-1:-1;44970:3:0;44984:198;44991:7;;44984:198;;45019:3;45021:1;45019;:3;:::i;:::-;45015:7;-1:-1:-1;45037:10:0;45067:7;45072:2;45067;:7;:::i;:::-;:12;;45077:2;45067:12;:::i;:::-;45062:17;;:2;:17;:::i;:::-;45051:29;;:2;:29;:::i;:::-;45037:44;;45096:9;45115:4;45108:12;;45096:24;;45145:2;45135:4;45140:1;45135:7;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;45135:12:0;;;;;;;;-1:-1:-1;45162:8:0;45168:2;45162:8;;:::i;:::-;;;45000:182;;44984:198;;;-1:-1:-1;45206:4:0;44646:573;-1:-1:-1;;;;44646:573:0:o;794:190::-;919:4;972;943:25;956:5;963:4;943:12;:25::i;:::-;:33;;794:190;-1:-1:-1;;;;794:190:0:o;20103:278::-;20189:7;20224:12;20217:5;20209:28;;;;-1:-1:-1;;;20209:28:0;;;;;;;;:::i;:::-;-1:-1:-1;20248:9:0;20260:5;20264:1;20260;:5;:::i;:::-;20248:17;20103:278;-1:-1:-1;;;;;20103:278:0:o;48212:440::-;46653:4;46677:16;;;:7;:16;;;;;;-1:-1:-1;;;;;46677:16:0;:30;48276:58;;;;-1:-1:-1;;;48276:58:0;;30799:2:1;48276:58:0;;;30781:21:1;30838:2;30818:18;;;30811:30;30877;30857:18;;;30850:58;30925:18;;48276:58:0;30597:352:1;48276:58:0;48368:10;;48353:12;;:25;48345:63;;;;-1:-1:-1;;;48345:63:0;;31156:2:1;48345:63:0;;;31138:21:1;31195:2;31175:18;;;31168:30;31234:27;31214:18;;;31207:55;31279:18;;48345:63:0;30954:349:1;48345:63:0;-1:-1:-1;;;;;48421:13:0;;;;;;:9;:13;;;;;:18;;48438:1;;48421:13;:18;;48438:1;;48421:18;:::i;:::-;;;;-1:-1:-1;;48450:16:0;;;;:7;:16;;;;;:21;;-1:-1:-1;;;;;;48450:21:0;-1:-1:-1;;;;;48450:21:0;;;;;-1:-1:-1;48482:17:0;;-1:-1:-1;;;;48482:17:0;;-1:-1:-1;;48482:17:0;:::i;:::-;;;;-1:-1:-1;;48510:8:0;;;;:5;:8;;-1:-1:-1;;;;;;;;;;;48510:16:0;;;;;;:::i;:::-;;;;;;48562:31;48585:7;48562:22;:31::i;:::-;48537:22;;;;:13;:22;;;;;;:56;;;;48611:33;;48551:7;;-1:-1:-1;;;;;48611:33:0;;;;;48537:22;;48611:33;48212:440;;:::o;52989:787::-;53144:4;53165:15;:2;-1:-1:-1;;;;;53165:13:0;;:15::i;:::-;53161:608;;;53201:72;;-1:-1:-1;;;53201:72:0;;-1:-1:-1;;;;;53201:36:0;;;;;:72;;16777:10;;53252:4;;53258:7;;53267:5;;53201:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53201:72:0;;;;;;;;-1:-1:-1;;53201:72:0;;;;;;;;;;;;:::i;:::-;;;53197:517;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53443:6;:13;53460:1;53443:18;53439:260;;53486:48;;-1:-1:-1;;;53486:48:0;;;;;;;:::i;53439:260::-;53649:6;53643:13;53634:6;53630:2;53626:15;53619:38;53197:517;-1:-1:-1;;;;;;53324:51:0;-1:-1:-1;;;53324:51:0;;-1:-1:-1;53317:58:0;;53161:608;-1:-1:-1;53753:4:0;52989:787;;;;;;:::o;1346:675::-;1429:7;1472:4;1429:7;1487:497;1511:5;:12;1507:1;:16;1487:497;;;1545:20;1568:5;1574:1;1568:8;;;;;;;;:::i;:::-;;;;;;;1545:31;;1611:12;1595;:28;1591:382;;2097:13;2147:15;;;2183:4;2176:15;;;2230:4;2214:21;;1723:57;;1591:382;;;2097:13;2147:15;;;2183:4;2176:15;;;2230:4;2214:21;;1900:57;;1591:382;-1:-1:-1;1525:3:0;;;;:::i;:::-;;;;1487:497;;;-1:-1:-1;2001:12:0;1346:675;-1:-1:-1;;;1346:675:0:o;10675:619::-;10735:4;11203:20;;11046:66;11243:23;;;;;;:42;;-1:-1:-1;;11270:15:0;;;11235:51;-1:-1:-1;;10675:619:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:1;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:1:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:1;;1343:180;-1:-1:-1;1343:180:1:o;1736:131::-;-1:-1:-1;;;;;1811:31:1;;1801:42;;1791:70;;1857:1;1854;1847:12;1872:315;1940:6;1948;2001:2;1989:9;1980:7;1976:23;1972:32;1969:52;;;2017:1;2014;2007:12;1969:52;2056:9;2043:23;2075:31;2100:5;2075:31;:::i;:::-;2125:5;2177:2;2162:18;;;;2149:32;;-1:-1:-1;;;1872:315:1:o;2374:456::-;2451:6;2459;2467;2520:2;2508:9;2499:7;2495:23;2491:32;2488:52;;;2536:1;2533;2526:12;2488:52;2575:9;2562:23;2594:31;2619:5;2594:31;:::i;:::-;2644:5;-1:-1:-1;2701:2:1;2686:18;;2673:32;2714:33;2673:32;2714:33;:::i;:::-;2374:456;;2766:7;;-1:-1:-1;;;2820:2:1;2805:18;;;;2792:32;;2374:456::o;3017:592::-;3088:6;3096;3149:2;3137:9;3128:7;3124:23;3120:32;3117:52;;;3165:1;3162;3155:12;3117:52;3205:9;3192:23;3234:18;3275:2;3267:6;3264:14;3261:34;;;3291:1;3288;3281:12;3261:34;3329:6;3318:9;3314:22;3304:32;;3374:7;3367:4;3363:2;3359:13;3355:27;3345:55;;3396:1;3393;3386:12;3345:55;3436:2;3423:16;3462:2;3454:6;3451:14;3448:34;;;3478:1;3475;3468:12;3448:34;3523:7;3518:2;3509:6;3505:2;3501:15;3497:24;3494:37;3491:57;;;3544:1;3541;3534:12;3491:57;3575:2;3567:11;;;;;3597:6;;-1:-1:-1;3017:592:1;;-1:-1:-1;;;;3017:592:1:o;3614:248::-;3682:6;3690;3743:2;3731:9;3722:7;3718:23;3714:32;3711:52;;;3759:1;3756;3749:12;3711:52;-1:-1:-1;;3782:23:1;;;3852:2;3837:18;;;3824:32;;-1:-1:-1;3614:248:1:o;3867:247::-;3926:6;3979:2;3967:9;3958:7;3954:23;3950:32;3947:52;;;3995:1;3992;3985:12;3947:52;4034:9;4021:23;4053:31;4078:5;4053:31;:::i;4119:632::-;4290:2;4342:21;;;4412:13;;4315:18;;;4434:22;;;4261:4;;4290:2;4513:15;;;;4487:2;4472:18;;;4261:4;4556:169;4570:6;4567:1;4564:13;4556:169;;;4631:13;;4619:26;;4700:15;;;;4665:12;;;;4592:1;4585:9;4556:169;;;-1:-1:-1;4742:3:1;;4119:632;-1:-1:-1;;;;;;4119:632:1:o;4756:367::-;4819:8;4829:6;4883:3;4876:4;4868:6;4864:17;4860:27;4850:55;;4901:1;4898;4891:12;4850:55;-1:-1:-1;4924:20:1;;4967:18;4956:30;;4953:50;;;4999:1;4996;4989:12;4953:50;5036:4;5028:6;5024:17;5012:29;;5096:3;5089:4;5079:6;5076:1;5072:14;5064:6;5060:27;5056:38;5053:47;5050:67;;;5113:1;5110;5103:12;5050:67;4756:367;;;;;:::o;5128:773::-;5250:6;5258;5266;5274;5327:2;5315:9;5306:7;5302:23;5298:32;5295:52;;;5343:1;5340;5333:12;5295:52;5383:9;5370:23;5412:18;5453:2;5445:6;5442:14;5439:34;;;5469:1;5466;5459:12;5439:34;5508:70;5570:7;5561:6;5550:9;5546:22;5508:70;:::i;:::-;5597:8;;-1:-1:-1;5482:96:1;-1:-1:-1;5685:2:1;5670:18;;5657:32;;-1:-1:-1;5701:16:1;;;5698:36;;;5730:1;5727;5720:12;5698:36;;5769:72;5833:7;5822:8;5811:9;5807:24;5769:72;:::i;:::-;5128:773;;;;-1:-1:-1;5860:8:1;-1:-1:-1;;;;5128:773:1:o;6351:454::-;6446:6;6454;6462;6470;6478;6531:3;6519:9;6510:7;6506:23;6502:33;6499:53;;;6548:1;6545;6538:12;6499:53;-1:-1:-1;;6571:23:1;;;6641:2;6626:18;;6613:32;;-1:-1:-1;6692:2:1;6677:18;;6664:32;;6743:2;6728:18;;6715:32;;-1:-1:-1;6794:3:1;6779:19;6766:33;;-1:-1:-1;6351:454:1;-1:-1:-1;6351:454:1:o;6810:118::-;6896:5;6889:13;6882:21;6875:5;6872:32;6862:60;;6918:1;6915;6908:12;6933:382;6998:6;7006;7059:2;7047:9;7038:7;7034:23;7030:32;7027:52;;;7075:1;7072;7065:12;7027:52;7114:9;7101:23;7133:31;7158:5;7133:31;:::i;:::-;7183:5;-1:-1:-1;7240:2:1;7225:18;;7212:32;7253:30;7212:32;7253:30;:::i;:::-;7302:7;7292:17;;;6933:382;;;;;:::o;7527:127::-;7588:10;7583:3;7579:20;7576:1;7569:31;7619:4;7616:1;7609:15;7643:4;7640:1;7633:15;7659:1266;7754:6;7762;7770;7778;7831:3;7819:9;7810:7;7806:23;7802:33;7799:53;;;7848:1;7845;7838:12;7799:53;7887:9;7874:23;7906:31;7931:5;7906:31;:::i;:::-;7956:5;-1:-1:-1;8013:2:1;7998:18;;7985:32;8026:33;7985:32;8026:33;:::i;:::-;8078:7;-1:-1:-1;8132:2:1;8117:18;;8104:32;;-1:-1:-1;8187:2:1;8172:18;;8159:32;8210:18;8240:14;;;8237:34;;;8267:1;8264;8257:12;8237:34;8305:6;8294:9;8290:22;8280:32;;8350:7;8343:4;8339:2;8335:13;8331:27;8321:55;;8372:1;8369;8362:12;8321:55;8408:2;8395:16;8430:2;8426;8423:10;8420:36;;;8436:18;;:::i;:::-;8511:2;8505:9;8479:2;8565:13;;-1:-1:-1;;8561:22:1;;;8585:2;8557:31;8553:40;8541:53;;;8609:18;;;8629:22;;;8606:46;8603:72;;;8655:18;;:::i;:::-;8695:10;8691:2;8684:22;8730:2;8722:6;8715:18;8770:7;8765:2;8760;8756;8752:11;8748:20;8745:33;8742:53;;;8791:1;8788;8781:12;8742:53;8847:2;8842;8838;8834:11;8829:2;8821:6;8817:15;8804:46;8892:1;8887:2;8882;8874:6;8870:15;8866:24;8859:35;8913:6;8903:16;;;;;;;7659:1266;;;;;;;:::o;8930:437::-;9016:6;9024;9077:2;9065:9;9056:7;9052:23;9048:32;9045:52;;;9093:1;9090;9083:12;9045:52;9133:9;9120:23;9166:18;9158:6;9155:30;9152:50;;;9198:1;9195;9188:12;9152:50;9237:70;9299:7;9290:6;9279:9;9275:22;9237:70;:::i;:::-;9326:8;;9211:96;;-1:-1:-1;8930:437:1;-1:-1:-1;;;;8930:437:1:o;9596:505::-;9691:6;9699;9707;9760:2;9748:9;9739:7;9735:23;9731:32;9728:52;;;9776:1;9773;9766:12;9728:52;9812:9;9799:23;9789:33;;9873:2;9862:9;9858:18;9845:32;9900:18;9892:6;9889:30;9886:50;;;9932:1;9929;9922:12;9886:50;9971:70;10033:7;10024:6;10013:9;10009:22;9971:70;:::i;:::-;9596:505;;10060:8;;-1:-1:-1;9945:96:1;;-1:-1:-1;;;;9596:505:1:o;10574:388::-;10642:6;10650;10703:2;10691:9;10682:7;10678:23;10674:32;10671:52;;;10719:1;10716;10709:12;10671:52;10758:9;10745:23;10777:31;10802:5;10777:31;:::i;:::-;10827:5;-1:-1:-1;10884:2:1;10869:18;;10856:32;10897:33;10856:32;10897:33;:::i;12353:353::-;12555:2;12537:21;;;12594:2;12574:18;;;12567:30;12633:31;12628:2;12613:18;;12606:59;12697:2;12682:18;;12353:353::o;12711:343::-;12913:2;12895:21;;;12952:2;12932:18;;;12925:30;-1:-1:-1;;;12986:2:1;12971:18;;12964:49;13045:2;13030:18;;12711:343::o;15073:127::-;15134:10;15129:3;15125:20;15122:1;15115:31;15165:4;15162:1;15155:15;15189:4;15186:1;15179:15;15205:128;15245:3;15276:1;15272:6;15269:1;15266:13;15263:39;;;15282:18;;:::i;:::-;-1:-1:-1;15318:9:1;;15205:128::o;15338:135::-;15377:3;15398:17;;;15395:43;;15418:18;;:::i;:::-;-1:-1:-1;15465:1:1;15454:13;;15338:135::o;15830:136::-;15869:3;15897:5;15887:39;;15906:18;;:::i;:::-;-1:-1:-1;;;15942:18:1;;15830:136::o;15971:127::-;16032:10;16027:3;16023:20;16020:1;16013:31;16063:4;16060:1;16053:15;16087:4;16084:1;16077:15;17801:125;17841:4;17869:1;17866;17863:8;17860:34;;;17874:18;;:::i;:::-;-1:-1:-1;17911:9:1;;17801:125::o;18279:184::-;18349:6;18402:2;18390:9;18381:7;18377:23;18373:32;18370:52;;;18418:1;18415;18408:12;18370:52;-1:-1:-1;18441:16:1;;18279:184;-1:-1:-1;18279:184:1:o;18848:245::-;18915:6;18968:2;18956:9;18947:7;18943:23;18939:32;18936:52;;;18984:1;18981;18974:12;18936:52;19016:9;19010:16;19035:28;19057:5;19035:28;:::i;19098:349::-;19300:2;19282:21;;;19339:2;19319:18;;;19312:30;19378:27;19373:2;19358:18;;19351:55;19438:2;19423:18;;19098:349::o;19794:217::-;19834:1;19860;19850:132;;19904:10;19899:3;19895:20;19892:1;19885:31;19939:4;19936:1;19929:15;19967:4;19964:1;19957:15;19850:132;-1:-1:-1;19996:9:1;;19794:217::o;21690:168::-;21730:7;21796:1;21792;21788:6;21784:14;21781:1;21778:21;21773:1;21766:9;21759:17;21755:45;21752:71;;;21803:18;;:::i;:::-;-1:-1:-1;21843:9:1;;21690:168::o;23248:380::-;23327:1;23323:12;;;;23370;;;23391:61;;23445:4;23437:6;23433:17;23423:27;;23391:61;23498:2;23490:6;23487:14;23467:18;23464:38;23461:161;;23544:10;23539:3;23535:20;23532:1;23525:31;23579:4;23576:1;23569:15;23607:4;23604:1;23597:15;23461:161;;23248:380;;;:::o;23759:973::-;23844:12;;23809:3;;23899:1;23919:18;;;;23972;;;;23999:61;;24053:4;24045:6;24041:17;24031:27;;23999:61;24079:2;24127;24119:6;24116:14;24096:18;24093:38;24090:161;;24173:10;24168:3;24164:20;24161:1;24154:31;24208:4;24205:1;24198:15;24236:4;24233:1;24226:15;24090:161;24267:18;24294:104;;;;24412:1;24407:319;;;;24260:466;;24294:104;-1:-1:-1;;24327:24:1;;24315:37;;24372:16;;;;-1:-1:-1;24294:104:1;;24407:319;23706:1;23699:14;;;23743:4;23730:18;;24501:1;24515:165;24529:6;24526:1;24523:13;24515:165;;;24607:14;;24594:11;;;24587:35;24650:16;;;;24544:10;;24515:165;;;24519:3;;24709:6;24704:3;24700:16;24693:23;;24260:466;;;;;;;23759:973;;;;:::o;24737:376::-;24913:3;24941:38;24975:3;24967:6;24941:38;:::i;:::-;25008:6;25002:13;25024:52;25069:6;25065:2;25058:4;25050:6;25046:17;25024:52;:::i;:::-;25092:15;;24737:376;-1:-1:-1;;;;24737:376:1:o;25118:428::-;25339:3;25377:6;25371:13;25393:53;25439:6;25434:3;25427:4;25419:6;25415:17;25393:53;:::i;:::-;-1:-1:-1;;;25468:16:1;;25493:18;;;-1:-1:-1;25538:1:1;25527:13;;25118:428;-1:-1:-1;25118:428:1:o;25551:470::-;25730:3;25768:6;25762:13;25784:53;25830:6;25825:3;25818:4;25810:6;25806:17;25784:53;:::i;:::-;25900:13;;25859:16;;;;25922:57;25900:13;25859:16;25956:4;25944:17;;25922:57;:::i;26026:356::-;26202:3;26240:6;26234:13;26256:53;26302:6;26297:3;26290:4;26282:6;26278:17;26256:53;:::i;:::-;26325:51;26368:6;26363:3;26359:16;26351:6;26325:51;:::i;29981:402::-;30183:2;30165:21;;;30222:2;30202:18;;;30195:30;30261:34;30256:2;30241:18;;30234:62;-1:-1:-1;;;30327:2:1;30312:18;;30305:36;30373:3;30358:19;;29981:402::o;30388:204::-;30426:3;30462:4;30459:1;30455:12;30494:4;30491:1;30487:12;30529:3;30523:4;30519:14;30514:3;30511:23;30508:49;;;30537:18;;:::i;:::-;30573:13;;30388:204;-1:-1:-1;;;30388:204:1:o;31308:489::-;-1:-1:-1;;;;;31577:15:1;;;31559:34;;31629:15;;31624:2;31609:18;;31602:43;31676:2;31661:18;;31654:34;;;31724:3;31719:2;31704:18;;31697:31;;;31502:4;;31745:46;;31771:19;;31763:6;31745:46;:::i;:::-;31737:54;31308:489;-1:-1:-1;;;;;;31308:489:1:o;31802:249::-;31871:6;31924:2;31912:9;31903:7;31899:23;31895:32;31892:52;;;31940:1;31937;31930:12;31892:52;31972:9;31966:16;31991:30;32015:5;31991:30;:::i
Swarm Source
ipfs://3a32a27c7ae5f2a6e4ab78ad9f6efbb9a8362240fae7522684e1e7c446e45bde
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.