Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 24 from a total of 24 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Claim With Kimon... | 15252737 | 1312 days ago | IN | 0 ETH | 0.00143557 | ||||
| Safe Transfer Fr... | 15228860 | 1316 days ago | IN | 0 ETH | 0.00072886 | ||||
| Withdraw | 15219484 | 1317 days ago | IN | 0 ETH | 0.00044211 | ||||
| Withdraw | 15219476 | 1317 days ago | IN | 0 ETH | 0.00046204 | ||||
| Mint Public | 15202521 | 1320 days ago | IN | 0.4 ETH | 0.0030464 | ||||
| Withdraw | 15179467 | 1323 days ago | IN | 0 ETH | 0.00044943 | ||||
| Safe Transfer Fr... | 15174434 | 1324 days ago | IN | 0 ETH | 0.00188291 | ||||
| Mint Public | 15051262 | 1343 days ago | IN | 0.4 ETH | 0.01440117 | ||||
| Claim With Kimon... | 14645956 | 1411 days ago | IN | 0 ETH | 0.00213739 | ||||
| Claim | 14638242 | 1412 days ago | IN | 0 ETH | 0.003049 | ||||
| Claim | 14638236 | 1412 days ago | IN | 0 ETH | 0.00251279 | ||||
| Withdraw | 14637031 | 1412 days ago | IN | 0 ETH | 0.00133656 | ||||
| Claim | 14632606 | 1413 days ago | IN | 0 ETH | 0.00349984 | ||||
| Claim | 14630211 | 1413 days ago | IN | 0 ETH | 0.00858181 | ||||
| Claim | 14621071 | 1414 days ago | IN | 0 ETH | 0.00465962 | ||||
| Claim | 14621023 | 1414 days ago | IN | 0 ETH | 0.0046403 | ||||
| Mint Public | 14620150 | 1415 days ago | IN | 0.4 ETH | 0.00912248 | ||||
| Mint Public | 14618259 | 1415 days ago | IN | 0.4 ETH | 0.01134812 | ||||
| Claim With Kimon... | 14618188 | 1415 days ago | IN | 0 ETH | 0.00467993 | ||||
| Claim | 14618013 | 1415 days ago | IN | 0 ETH | 0.00663576 | ||||
| Claim | 14617899 | 1415 days ago | IN | 0 ETH | 0.00336145 | ||||
| Claim | 14617768 | 1415 days ago | IN | 0 ETH | 0.0129545 | ||||
| Claim With Kimon... | 14617698 | 1415 days ago | IN | 0 ETH | 0.00426039 | ||||
| Set Paused | 14617678 | 1415 days ago | IN | 0 ETH | 0.00099484 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Katana
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-04-19
*/
// Sources flattened with hardhat v2.9.3 https://hardhat.org
// File @openzeppelin/contracts/utils/introspection/IERC165.sol@v4.5.0
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File @openzeppelin/contracts/token/ERC1155/IERC1155.sol@v4.5.0
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC1155 compliant contract, as defined in the
* https://eips.ethereum.org/EIPS/eip-1155[EIP].
*
* _Available since v3.1._
*/
interface IERC1155 is IERC165 {
/**
* @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
*/
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
/**
* @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
* transfers.
*/
event TransferBatch(
address indexed operator,
address indexed from,
address indexed to,
uint256[] ids,
uint256[] values
);
/**
* @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
* `approved`.
*/
event ApprovalForAll(address indexed account, address indexed operator, bool approved);
/**
* @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
*
* If an {URI} event was emitted for `id`, the standard
* https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
* returned by {IERC1155MetadataURI-uri}.
*/
event URI(string value, uint256 indexed id);
/**
* @dev Returns the amount of tokens of token type `id` owned by `account`.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function balanceOf(address account, uint256 id) external view returns (uint256);
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
*
* Requirements:
*
* - `accounts` and `ids` must have the same length.
*/
function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
external
view
returns (uint256[] memory);
/**
* @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
*
* Emits an {ApprovalForAll} event.
*
* Requirements:
*
* - `operator` cannot be the caller.
*/
function setApprovalForAll(address operator, bool approved) external;
/**
* @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
*
* See {setApprovalForAll}.
*/
function isApprovedForAll(address account, address operator) external view returns (bool);
/**
* @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
*
* Emits a {TransferSingle} event.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
* - `from` must have a balance of tokens of type `id` of at least `amount`.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
* acceptance magic value.
*/
function safeTransferFrom(
address from,
address to,
uint256 id,
uint256 amount,
bytes calldata data
) external;
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
*
* Emits a {TransferBatch} event.
*
* Requirements:
*
* - `ids` and `amounts` must have the same length.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
* acceptance magic value.
*/
function safeBatchTransferFrom(
address from,
address to,
uint256[] calldata ids,
uint256[] calldata amounts,
bytes calldata data
) external;
}
// File @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol@v4.5.0
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)
pragma solidity ^0.8.0;
/**
* @dev _Available since v3.1._
*/
interface IERC1155Receiver is IERC165 {
/**
* @dev Handles the receipt of a single ERC1155 token type. This function is
* called at the end of a `safeTransferFrom` after the balance has been updated.
*
* NOTE: To accept the transfer, this must return
* `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
* (i.e. 0xf23a6e61, or its own function selector).
*
* @param operator The address which initiated the transfer (i.e. msg.sender)
* @param from The address which previously owned the token
* @param id The ID of the token being transferred
* @param value The amount of tokens being transferred
* @param data Additional data with no specified format
* @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
*/
function onERC1155Received(
address operator,
address from,
uint256 id,
uint256 value,
bytes calldata data
) external returns (bytes4);
/**
* @dev Handles the receipt of a multiple ERC1155 token types. This function
* is called at the end of a `safeBatchTransferFrom` after the balances have
* been updated.
*
* NOTE: To accept the transfer(s), this must return
* `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
* (i.e. 0xbc197c81, or its own function selector).
*
* @param operator The address which initiated the batch transfer (i.e. msg.sender)
* @param from The address which previously owned the token
* @param ids An array containing ids of each token being transferred (order and length must match values array)
* @param values An array containing amounts of each token being transferred (order and length must match ids array)
* @param data Additional data with no specified format
* @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
*/
function onERC1155BatchReceived(
address operator,
address from,
uint256[] calldata ids,
uint256[] calldata values,
bytes calldata data
) external returns (bytes4);
}
// File @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol@v4.5.0
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the optional ERC1155MetadataExtension interface, as defined
* in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
*
* _Available since v3.1._
*/
interface IERC1155MetadataURI is IERC1155 {
/**
* @dev Returns the URI for token type `id`.
*
* If the `\{id\}` substring is present in the URI, it must be replaced by
* clients with the actual token type ID.
*/
function uri(uint256 id) external view returns (string memory);
}
// File @openzeppelin/contracts/utils/Address.sol@v4.5.0
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File @openzeppelin/contracts/utils/Context.sol@v4.5.0
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File @openzeppelin/contracts/utils/introspection/ERC165.sol@v4.5.0
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
/**
* @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;
}
}
// File @openzeppelin/contracts/access/Ownable.sol@v4.5.0
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File contracts/katana.sol
pragma solidity ^0.8.0;
library Counters {
struct Counter {
// This variable should never be directly accessed by users of the library: interactions must be restricted to
// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
// this feature: see https://github.com/ethereum/solidity/issues/4637
uint256 _value; // default: 0
}
function current(Counter storage counter) internal view returns (uint256) {
return counter._value;
}
function increment(Counter storage counter) internal {
unchecked {
counter._value += 1;
}
}
function decrement(Counter storage counter) internal {
uint256 value = counter._value;
require(value > 0, "Counter: decrement overflow");
unchecked {
counter._value = value - 1;
}
}
function initialize(Counter storage counter, uint256 _value) internal {
counter._value = _value;
}
function reset(Counter storage counter) internal {
counter._value = 0;
}
}
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
}
/**
* @dev These functions deal with verification of Merkle trees (hash trees),
*/
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) {
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 = keccak256(
abi.encodePacked(computedHash, proofElement)
);
} else {
// Hash(current element of the proof + current computed hash)
computedHash = keccak256(
abi.encodePacked(proofElement, computedHash)
);
}
}
// Check if the computed hash (root) is equal to the provided root
return computedHash == root;
}
}
interface Shiburai {
function balanceOf(address account) external view returns (uint256);
}
interface Kimono {
function onMintingWithKimono(address _samurai) external;
function canClaimWithKimono(address _samurai) external view returns (bool);
function kimonosMintedFor(address _samurai)
external
view
returns (uint256[] memory);
function useKimonoDiscount(address _samurai) external returns (bool);
function usedKimonoDiscounts(address _samurai)
external
view
returns (uint256);
}
interface SHIBURAIVESTKEEPER {
function remainingVestedBalance(address _address)
external
view
returns (uint256);
}
/**
* @dev Implementation of the basic standard multi-token.
* See https://eips.ethereum.org/EIPS/eip-1155
* Originally based on code by Enjin: https://github.com/enjin/erc-1155
*
* _Available since v3.1._
*/
contract Katana is ERC165, IERC1155, IERC1155MetadataURI, Ownable {
using Strings for uint256;
using Address for address;
using Counters for Counters.Counter;
uint256 public constant FIRST_GIFTS = 25;
uint256 public constant MAX_SUPPLY_PLUS_ONE = 226;
bytes32 public merkleRoot =
0xdfdcc7864634f607d7b2126d6df16c31d3d8e2f0b469c59b3f3959e50fb3877a;
Counters.Counter private _tokenIdCounter;
Counters.Counter private _giftedIdCounter;
address public kimono;
address public shiburai = 0x275EB4F541b372EfF2244A444395685C32485368;
address public vestKeeper = 0x9f83c3ddd69CCb205eaA2bac013E6851d59E7B43;
address[MAX_SUPPLY_PLUS_ONE] internal _owners; // start counting at 1
// Mapping from account to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
mapping(address => bool) public rewardClaimed;
// Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
string private _uri;
uint256 public price = 0.8 ether;
uint256 public shiburaiDiscountAtAmount = 4000 * 10**9;
// Track mints per wallet to restrict to a given number
mapping(address => uint256) private _mintsPerWallet;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Tracking mint status
bool private _paused = true;
// Contract name
string public name;
// Contract symbol
string public symbol;
/**
* @dev See {_setURI}.
*/
constructor(
string memory uri_,
string memory name_,
string memory symbol_,
address _kimono
) {
_tokenIdCounter.initialize(FIRST_GIFTS);
name = name_;
symbol = symbol_;
_setURI(uri_);
kimono = _kimono;
}
function setKimono(address _kimono) public onlyOwner {
kimono = _kimono;
}
function setVestKeeper(address _vestKeeper) public onlyOwner {
vestKeeper = _vestKeeper;
}
function claimWithKimono() public returns (uint256) {
require(tx.origin == msg.sender, "Katana: Samurai only.");
require(
_tokenIdCounter.current() + 1 < MAX_SUPPLY_PLUS_ONE,
"Katana: Max supply exceeded"
);
Kimono(kimono).onMintingWithKimono(msg.sender);
_tokenIdCounter.increment();
uint256 nextTokenId = _tokenIdCounter.current();
_mint(_msgSender(), nextTokenId, 1, "");
return nextTokenId;
}
function setShiburaiDiscountAtAmount(
address _shiburai,
uint256 _shiburaiDiscountAtAmount
) external onlyOwner {
shiburai = _shiburai;
shiburaiDiscountAtAmount = _shiburaiDiscountAtAmount;
}
function priceToPay(address _samurai, uint256 amount)
public
view
returns (uint256)
{
if (
Shiburai(shiburai).balanceOf(_samurai) +
SHIBURAIVESTKEEPER(vestKeeper).remainingVestedBalance(
_samurai
) >=
shiburaiDiscountAtAmount
) {
return (price / 2) * amount;
} else {
uint256 _current = _tokenIdCounter.current() - FIRST_GIFTS;
uint256 toPay;
for (uint256 i; i < amount; i++) {
if (_current + i < 25) {
toPay += price / 2;
} else {
uint256 usedKimonoDiscounts;
if (Kimono(kimono).kimonosMintedFor(_samurai).length == 0) {
usedKimonoDiscounts = 3;
} else {
usedKimonoDiscounts = Kimono(kimono)
.usedKimonoDiscounts(_samurai);
}
for (uint256 j = i; j < amount; j++) {
if (usedKimonoDiscounts + (j - i) < 3) {
toPay += price / 2;
} else {
toPay += price;
}
}
break;
}
}
return toPay;
}
}
function canClaimWithKimono(address _samurai) external view returns (bool) {
return Kimono(kimono).canClaimWithKimono(_samurai);
}
function verifyClaim(
address _account,
uint256 _amount,
bytes32[] calldata _merkleProof
) public view returns (bool) {
bytes32 node = keccak256(abi.encodePacked(_amount, _account));
return MerkleProof.verify(_merkleProof, merkleRoot, node);
}
function claim(uint256 _amount, bytes32[] calldata _merkleProof) public {
require(tx.origin == msg.sender, "Katana: Samurai only.");
require(_paused == false, "Katana: Minting is paused");
require(
verifyClaim(_msgSender(), _amount, _merkleProof),
"Katana: Not eligible for a claim"
);
require(!rewardClaimed[_msgSender()], "Katana: Reward already claimed");
rewardClaimed[_msgSender()] = true;
_giftedIdCounter.increment();
uint256 nextTokenId = _giftedIdCounter.current();
require(nextTokenId <= FIRST_GIFTS, "Katana: No more rewards");
_mint(_msgSender(), nextTokenId, 1, "");
for (uint256 i = 1; i < _amount; i++) {
if (_giftedIdCounter.current() + 1 > FIRST_GIFTS) {
break;
} else {
_giftedIdCounter.increment();
_mint(_msgSender(), _giftedIdCounter.current(), 1, "");
}
}
}
/**
* Sets a new mint price for the public mint.
*/
function setMintPrice(uint256 newPrice) public onlyOwner {
price = newPrice;
}
/**
* Returns the paused state for the contract.
*/
function isPaused() public view returns (bool) {
return _paused;
}
/**
* Sets the paused state for the contract.
*
* Pausing the contract also stops all minting options.
*/
function setPaused(bool paused_) public onlyOwner {
_paused = paused_;
}
/**
* @dev See {_setURI}
*/
function setUri(string memory newUri) public onlyOwner {
_setURI(newUri);
}
/**
* Public Mint
*/
function mintPublic(uint256 amount) public payable {
require(tx.origin == msg.sender, "Katana: Samurai only.");
uint256 totalPrice = priceToPay(msg.sender, amount);
require(msg.value == totalPrice, "Katana: Wrong mint price");
if (totalPrice < amount * price) {
if (
Shiburai(shiburai).balanceOf(msg.sender) +
SHIBURAIVESTKEEPER(vestKeeper).remainingVestedBalance(
msg.sender
) <
shiburaiDiscountAtAmount
) {
uint256 until = _tokenIdCounter.current() +
amount -
FIRST_GIFTS;
if (until > 25) {
uint256 overDiscount = until - 25;
uint256 discountsLeft = 3 -
Kimono(kimono).usedKimonoDiscounts(msg.sender);
overDiscount = overDiscount < discountsLeft
? overDiscount
: discountsLeft;
for (uint256 i = 0; i < overDiscount; i++) {
Kimono(kimono).useKimonoDiscount(msg.sender);
}
}
}
}
require(
_tokenIdCounter.current() + amount < MAX_SUPPLY_PLUS_ONE,
"Katana: Max supply exceeded"
);
uint256 nextTokenId;
for (uint256 i = 0; i < amount; i++) {
_tokenIdCounter.increment();
nextTokenId = _tokenIdCounter.current();
_mint(_msgSender(), nextTokenId, 1, "");
}
}
/**
* Mint Giveaways (only Owner)
*
* Option for the owner to mint leftover token to be used in giveaways.
*/
function mintGiveaway(address to_, uint256 amount) public onlyOwner {
require(_paused == false, "Katana: Minting is paused");
require(
_tokenIdCounter.current() < MAX_SUPPLY_PLUS_ONE,
"Katana: Max supply exceeded"
);
uint256 nextTokenId;
for (uint256 i = 0; i < amount; i++) {
_tokenIdCounter.increment();
nextTokenId = _tokenIdCounter.current();
_mint(to_, nextTokenId, 1, "");
}
}
/**
* Withdraws all retrieved funds into the project team wallets.
*
* Splits the funds 90/10 for owner/dev.
*/
function withdraw() public onlyOwner {
Address.sendValue(payable(_msgSender()), address(this).balance);
}
/**
* Returns the number of minted tokens.
*/
function totalSupply() public view returns (uint256) {
return
_tokenIdCounter.current() +
_giftedIdCounter.current() -
FIRST_GIFTS;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId)
public
view
virtual
override(ERC165, IERC165)
returns (bool)
{
return
interfaceId == type(IERC1155).interfaceId ||
interfaceId == type(IERC1155MetadataURI).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC1155MetadataURI-uri}.
*
* This implementation returns the same URI for *all* token types. It relies
* on the token type ID substitution mechanism
* https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
*
* Clients calling this function must replace the `\{id\}` substring with the
* actual token type ID.
*/
function uri(uint256 tokenId)
public
view
virtual
override
returns (string memory)
{
return string(abi.encodePacked(_uri, tokenId.toString()));
}
/**
* @dev See {IERC1155-balanceOf}.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function balanceOf(address account, uint256 id)
public
view
virtual
override
returns (uint256)
{
require(
account != address(0),
"ERC1155: balance query for the zero address"
);
require(id < MAX_SUPPLY_PLUS_ONE, "ERC1155D: id exceeds maximum");
return _owners[id] == account ? 1 : 0;
}
function erc721BalanceOf(address owner)
public
view
virtual
returns (uint256)
{
require(
owner != address(0),
"ERC721: address zero is not a valid owner"
);
return _balances[owner];
}
/**
* @dev See {IERC1155-balanceOfBatch}.
*
* Requirements:
*
* - `accounts` and `ids` must have the same length.
*/
function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
public
view
virtual
override
returns (uint256[] memory)
{
require(
accounts.length == ids.length,
"ERC1155: accounts and ids length mismatch"
);
uint256[] memory batchBalances = new uint256[](accounts.length);
for (uint256 i = 0; i < accounts.length; ++i) {
batchBalances[i] = balanceOf(accounts[i], ids[i]);
}
return batchBalances;
}
/**
* @dev See {IERC1155-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved)
public
virtual
override
{
_setApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC1155-isApprovedForAll}.
*/
function isApprovedForAll(address account, address operator)
public
view
virtual
override
returns (bool)
{
return _operatorApprovals[account][operator];
}
/**
* @dev See {IERC1155-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 id,
uint256 amount,
bytes memory data
) public virtual override {
require(
from == _msgSender() || isApprovedForAll(from, _msgSender()),
"ERC1155: caller is not owner nor approved"
);
_safeTransferFrom(from, to, id, amount, data);
}
/**
* @dev See {IERC1155-safeBatchTransferFrom}.
*/
function safeBatchTransferFrom(
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) public virtual override {
require(
from == _msgSender() || isApprovedForAll(from, _msgSender()),
"ERC1155: transfer caller is not owner nor approved"
);
_safeBatchTransferFrom(from, to, ids, amounts, data);
}
/**
* @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
*
* Emits a {TransferSingle} event.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `from` must have a balance of tokens of type `id` of at least `amount`.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
* acceptance magic value.
*/
function _safeTransferFrom(
address from,
address to,
uint256 id,
uint256 amount,
bytes memory data
) internal virtual {
require(to != address(0), "ERC1155: transfer to the zero address");
address operator = _msgSender();
uint256[] memory ids = _asSingletonArray(id);
uint256[] memory amounts = _asSingletonArray(amount);
_beforeTokenTransfer(operator, from, to, ids, amounts, data);
require(
_owners[id] == from && amount < 2,
"ERC1155: insufficient balance for transfer"
);
// The ERC1155 spec allows for transfering zero tokens, but we are still expected
// to run the other checks and emit the event. But we don't want an ownership change
// in that case
if (amount == 1) {
_owners[id] = to;
_balances[to] = _balances[to] + 1;
_balances[from] = _balances[from] - 1;
}
emit TransferSingle(operator, from, to, id, amount);
_afterTokenTransfer(operator, from, to, ids, amounts, data);
_doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
}
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
*
* Emits a {TransferBatch} event.
*
* Requirements:
*
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
* acceptance magic value.
*/
function _safeBatchTransferFrom(
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) internal virtual {
require(
ids.length == amounts.length,
"ERC1155: ids and amounts length mismatch"
);
require(to != address(0), "ERC1155: transfer to the zero address");
address operator = _msgSender();
_beforeTokenTransfer(operator, from, to, ids, amounts, data);
uint256 transfered;
for (uint256 i = 0; i < ids.length; ++i) {
uint256 id = ids[i];
require(
_owners[id] == from && amounts[i] < 2,
"ERC1155: insufficient balance for transfer"
);
if (amounts[i] == 1) {
_owners[id] == to;
transfered = transfered + 1;
}
}
_balances[to] = _balances[to] + transfered;
_balances[from] = _balances[from] - transfered;
emit TransferBatch(operator, from, to, ids, amounts);
_afterTokenTransfer(operator, from, to, ids, amounts, data);
_doSafeBatchTransferAcceptanceCheck(
operator,
from,
to,
ids,
amounts,
data
);
}
/**
* @dev Sets a new URI for all token types, by relying on the token type ID
* substitution mechanism
* https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
*
* By this mechanism, any occurrence of the `\{id\}` substring in either the
* URI or any of the amounts in the JSON file at said URI will be replaced by
* clients with the token type ID.
*
* For example, the `https://token-cdn-domain/\{id\}.json` URI would be
* interpreted by clients as
* `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
* for token type ID 0x4cce0.
*
* See {uri}.
*
* Because these URIs cannot be meaningfully represented by the {URI} event,
* this function emits no events.
*/
function _setURI(string memory newuri) internal virtual {
_uri = newuri;
}
/**
* @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
*
* Emits a {TransferSingle} event.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
* acceptance magic value.
*/
function _mint(
address to,
uint256 id,
uint256 amount,
bytes memory data
) internal virtual {
require(to != address(0), "ERC1155: mint to the zero address");
require(amount < 2, "ERC1155D: exceeds supply");
require(id < MAX_SUPPLY_PLUS_ONE, "ERC1155D: invalid id");
address operator = _msgSender();
uint256[] memory ids = _asSingletonArray(id);
uint256[] memory amounts = _asSingletonArray(amount);
_beforeTokenTransfer(operator, address(0), to, ids, amounts, data);
// The ERC1155 spec allows for transfering zero tokens, but we are still expected
// to run the other checks and emit the event. But we don't want an ownership change
// in that case
if (amount == 1) {
_owners[id] = to;
_balances[to] = _balances[to] + 1;
}
emit TransferSingle(operator, address(0), to, id, amount);
_afterTokenTransfer(operator, address(0), to, ids, amounts, data);
_doSafeTransferAcceptanceCheck(
operator,
address(0),
to,
id,
amount,
data
);
}
/**
* @dev Destroys `amount` tokens of token type `id` from `from`
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `from` must have at least `amount` tokens of token type `id`.
*/
function _burn(
address from,
uint256 id,
uint256 amount
) internal virtual {
require(from != address(0), "ERC1155: burn from the zero address");
address operator = _msgSender();
uint256[] memory ids = _asSingletonArray(id);
uint256[] memory amounts = _asSingletonArray(amount);
_beforeTokenTransfer(operator, from, address(0), ids, amounts, "");
require(
_owners[id] == from && amount < 2,
"ERC1155: burn amount exceeds balance"
);
if (amount == 1) {
_owners[id] = address(0);
}
emit TransferSingle(operator, from, address(0), id, amount);
_afterTokenTransfer(operator, from, address(0), ids, amounts, "");
}
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
*
* Requirements:
*
* - `ids` and `amounts` must have the same length.
*/
function _burnBatch(
address from,
uint256[] memory ids,
uint256[] memory amounts
) internal virtual {
require(from != address(0), "ERC1155: burn from the zero address");
require(
ids.length == amounts.length,
"ERC1155: ids and amounts length mismatch"
);
address operator = _msgSender();
_beforeTokenTransfer(operator, from, address(0), ids, amounts, "");
for (uint256 i = 0; i < ids.length; i++) {
uint256 id = ids[i];
require(
_owners[id] == from && amounts[i] < 2,
"ERC1155: burn amount exceeds balance"
);
if (amounts[i] == 1) {
_owners[id] = address(0);
}
}
emit TransferBatch(operator, from, address(0), ids, amounts);
_afterTokenTransfer(operator, from, address(0), ids, amounts, "");
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Emits a {ApprovalForAll} event.
*/
function _setApprovalForAll(
address owner_,
address operator,
bool approved
) internal virtual {
require(
owner_ != operator,
"ERC1155: setting approval status for self"
);
_operatorApprovals[owner_][operator] = approved;
emit ApprovalForAll(owner_, operator, approved);
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning, as well as batched variants.
*
* The same hook is called on both single and batched variants. For single
* transfers, the length of the `id` and `amount` arrays will be 1.
*
* Calling conditions (for each `id` and `amount` pair):
*
* - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* of token type `id` will be transferred to `to`.
* - When `from` is zero, `amount` tokens of token type `id` will be minted
* for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
* will be burned.
* - `from` and `to` are never both zero.
* - `ids` and `amounts` have the same, non-zero length.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address operator,
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) internal virtual {}
/**
* @dev Hook that is called after any token transfer. This includes minting
* and burning, as well as batched variants.
*
* The same hook is called on both single and batched variants. For single
* transfers, the length of the `id` and `amount` arrays will be 1.
*
* Calling conditions (for each `id` and `amount` pair):
*
* - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* of token type `id` will be transferred to `to`.
* - When `from` is zero, `amount` tokens of token type `id` will be minted
* for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
* will be burned.
* - `from` and `to` are never both zero.
* - `ids` and `amounts` have the same, non-zero length.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address operator,
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) internal virtual {}
function _doSafeTransferAcceptanceCheck(
address operator,
address from,
address to,
uint256 id,
uint256 amount,
bytes memory data
) private {
if (to.isContract()) {
try
IERC1155Receiver(to).onERC1155Received(
operator,
from,
id,
amount,
data
)
returns (bytes4 response) {
if (response != IERC1155Receiver.onERC1155Received.selector) {
revert("ERC1155: ERC1155Receiver rejected tokens");
}
} catch Error(string memory reason) {
revert(reason);
} catch {
revert("ERC1155: transfer to non ERC1155Receiver implementer");
}
}
}
function _doSafeBatchTransferAcceptanceCheck(
address operator,
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) private {
if (to.isContract()) {
try
IERC1155Receiver(to).onERC1155BatchReceived(
operator,
from,
ids,
amounts,
data
)
returns (bytes4 response) {
if (
response != IERC1155Receiver.onERC1155BatchReceived.selector
) {
revert("ERC1155: ERC1155Receiver rejected tokens");
}
} catch Error(string memory reason) {
revert(reason);
} catch {
revert("ERC1155: transfer to non ERC1155Receiver implementer");
}
}
}
function _asSingletonArray(uint256 element)
internal
pure
returns (uint256[] memory)
{
uint256[] memory array = new uint256[](1);
array[0] = element;
return array;
}
function getOwnershipRecordOffChain()
external
view
returns (address[MAX_SUPPLY_PLUS_ONE] memory)
{
return _owners;
}
function ownerOfERC721Like(uint256 id) external view returns (address) {
require(id < _owners.length, "ERC1155D: id exceeds maximum");
address owner_ = _owners[id];
require(
owner_ != address(0),
"ERC1155D: owner query for nonexistent token"
);
return owner_;
}
function getERC721BalanceOffChain(address _address)
external
view
returns (uint256)
{
uint256 counter = 0;
for (uint256 i; i < _owners.length; i++) {
if (_owners[i] == _address) {
counter++;
}
}
return counter;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"uri_","type":"string"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address","name":"_kimono","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"FIRST_GIFTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY_PLUS_ONE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_samurai","type":"address"}],"name":"canClaimWithKimono","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimWithKimono","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"erc721BalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getERC721BalanceOffChain","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwnershipRecordOffChain","outputs":[{"internalType":"address[226]","name":"","type":"address[226]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kimono","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintGiveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintPublic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOfERC721Like","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_samurai","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"priceToPay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardClaimed","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":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"address","name":"_kimono","type":"address"}],"name":"setKimono","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused_","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_shiburai","type":"address"},{"internalType":"uint256","name":"_shiburaiDiscountAtAmount","type":"uint256"}],"name":"setShiburaiDiscountAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"setUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vestKeeper","type":"address"}],"name":"setVestKeeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shiburai","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"shiburaiDiscountAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"verifyClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestKeeper","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040527fdfdcc7864634f607d7b2126d6df16c31d3d8e2f0b469c59b3f3959e50fb3877a6001908155600580546001600160a01b031990811673275eb4f541b372eff2244a444395685c324853681790915560068054909116739f83c3ddd69ccb205eaa2bac013e6851d59e7b43179055670b1a2bc2ec50000060ec556503a35294400060ed5560f0805460ff19169091179055348015620000a257600080fd5b5060405162003a0338038062003a03833981016040819052620000c59162000317565b620000d0336200014d565b620000ec601960026200019d60201b62001ba01790919060201c565b8251620001019060f1906020860190620001ba565b508151620001179060f2906020850190620001ba565b506200012384620001a1565b600480546001600160a01b0319166001600160a01b0392909216919091179055506200041d915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b9055565b8051620001b69060eb906020840190620001ba565b5050565b828054620001c890620003ca565b90600052602060002090601f016020900481019282620001ec576000855562000237565b82601f106200020757805160ff191683800117855562000237565b8280016001018555821562000237579182015b82811115620002375782518255916020019190600101906200021a565b506200024592915062000249565b5090565b5b808211156200024557600081556001016200024a565b600082601f8301126200027257600080fd5b81516001600160401b03808211156200028f576200028f62000407565b604051601f8301601f19908116603f01168101908282118183101715620002ba57620002ba62000407565b81604052838152602092508683858801011115620002d757600080fd5b600091505b83821015620002fb5785820183015181830184015290820190620002dc565b838211156200030d5760008385830101525b9695505050505050565b600080600080608085870312156200032e57600080fd5b84516001600160401b03808211156200034657600080fd5b620003548883890162000260565b955060208701519150808211156200036b57600080fd5b620003798883890162000260565b945060408701519150808211156200039057600080fd5b506200039f8782880162000260565b606087015190935090506001600160a01b0381168114620003bf57600080fd5b939692955090935050565b600181811c90821680620003df57607f821691505b602082108114156200040157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6135d6806200042d6000396000f3fe6080604052600436106101e05760003560e01c8062fdd58e146101e557806301ffc9a71461021857806303ed32241461024857806306fdde031461026a5780630e89341c1461028c57806316c38b3c146102ac57806318160ddd146102cc5780631b60efb0146102e157806329e19704146103015780632eb2c2d6146103315780632eb4a7ab146103515780632f52ebb71461036757806339f81d8b146103875780633ccfd60b146103a75780634e1273f4146103bc57806356e695ed146103e9578063585028031461040b57806363160bf2146104215780636b337e57146104415780636f97a21314610461578063715018a61461048e5780637df332e7146104a357806382d5b249146104c35780638da5cb5b146104d85780638e477789146104ed57806395d89b411461050d57806396df31a5146105225780639b642de114610542578063a035b1fe14610562578063a22cb46514610578578063a6bd25b914610598578063aa2945db146105ad578063b187bd26146105cd578063b3f9ea34146105e5578063cde5e0fa14610605578063d33a65e514610625578063de181bab1461063a578063e985e9c51461065a578063efd0cbf9146106a3578063f242432a146106b6578063f2fde38b146106d6578063f4a0a528146106f6575b600080fd5b3480156101f157600080fd5b50610205610200366004612bab565b610716565b6040519081526020015b60405180910390f35b34801561022457600080fd5b50610238610233366004612dd9565b6107ea565b604051901515815260200161020f565b34801561025457600080fd5b50610268610263366004612bab565b61083a565b005b34801561027657600080fd5b5061027f61088f565b60405161020f919061312c565b34801561029857600080fd5b5061027f6102a7366004612e5b565b61091d565b3480156102b857600080fd5b506102686102c7366004612d9f565b610951565b3480156102d857600080fd5b50610205610993565b3480156102ed57600080fd5b506102686102fc366004612bab565b6109bc565b34801561030d57600080fd5b5061023861031c366004612a19565b60ea6020526000908152604090205460ff1681565b34801561033d57600080fd5b5061026861034c366004612a67565b610a89565b34801561035d57600080fd5b5061020560015481565b34801561037357600080fd5b50610268610382366004612e8d565b610b20565b34801561039357600080fd5b506102056103a2366004612a19565b610d14565b3480156103b357600080fd5b50610268610d77565b3480156103c857600080fd5b506103dc6103d7366004612c2e565b610db2565b60405161020f91906130f4565b3480156103f557600080fd5b506103fe610edb565b60405161020f91906130b9565b34801561041757600080fd5b5061020560ed5481565b34801561042d57600080fd5b5061026861043c366004612a19565b610f21565b34801561044d57600080fd5b5061023861045c366004612a19565b610f72565b34801561046d57600080fd5b50600454610481906001600160a01b031681565b60405161020f9190613002565b34801561049a57600080fd5b50610268610ff4565b3480156104af57600080fd5b50600654610481906001600160a01b031681565b3480156104cf57600080fd5b5061020560e281565b3480156104e457600080fd5b5061048161102d565b3480156104f957600080fd5b50610481610508366004612e5b565b61103c565b34801561051957600080fd5b5061027f6110e1565b34801561052e57600080fd5b50600554610481906001600160a01b031681565b34801561054e57600080fd5b5061026861055d366004612e13565b6110ee565b34801561056e57600080fd5b5061020560ec5481565b34801561058457600080fd5b50610268610593366004612b74565b611129565b3480156105a457600080fd5b50610205601981565b3480156105b957600080fd5b506102386105c8366004612bd5565b611138565b3480156105d957600080fd5b5060f05460ff16610238565b3480156105f157600080fd5b50610205610600366004612a19565b6111c7565b34801561061157600080fd5b50610268610620366004612a19565b61124d565b34801561063157600080fd5b5061020561129e565b34801561064657600080fd5b50610205610655366004612bab565b61137c565b34801561066657600080fd5b50610238610675366004612a34565b6001600160a01b03918216600090815260e96020908152604080832093909416825291909152205460ff1690565b6102686106b1366004612e5b565b6116a8565b3480156106c257600080fd5b506102686106d1366004612b10565b611a48565b3480156106e257600080fd5b506102686106f1366004612a19565b611acf565b34801561070257600080fd5b50610268610711366004612e5b565b611b6c565b60006001600160a01b0383166107875760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b60e282106107a75760405162461bcd60e51b815260040161077e906131e9565b826001600160a01b031660078360e281106107c4576107c461348b565b01546001600160a01b0316146107db5760006107de565b60015b60ff1690505b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061081b57506001600160e01b031982166303a24d0760e21b145b806107e457506301ffc9a760e01b6001600160e01b03198316146107e4565b3361084361102d565b6001600160a01b0316146108695760405162461bcd60e51b815260040161077e906132ae565b600580546001600160a01b0319166001600160a01b03939093169290921790915560ed55565b60f1805461089c906133c9565b80601f01602080910402602001604051908101604052809291908181526020018280546108c8906133c9565b80156109155780601f106108ea57610100808354040283529160200191610915565b820191906000526020600020905b8154815290600101906020018083116108f857829003601f168201915b505050505081565b606060eb61092a83611ba4565b60405160200161093b929190612f5b565b6040516020818303038152906040529050919050565b3361095a61102d565b6001600160a01b0316146109805760405162461bcd60e51b815260040161077e906132ae565b60f0805460ff1916911515919091179055565b600060196109a060035490565b6002546109ad919061333b565b6109b79190613386565b905090565b336109c561102d565b6001600160a01b0316146109eb5760405162461bcd60e51b815260040161077e906132ae565b60f05460ff1615610a0e5760405162461bcd60e51b815260040161077e90613187565b60e2610a1960025490565b10610a365760405162461bcd60e51b815260040161077e906132e3565b6000805b82811015610a8357610a50600280546001019055565b6002549150610a718483600160405180602001604052806000815250611ca9565b80610a7b81613430565b915050610a3a565b50505050565b6001600160a01b038516331480610aa55750610aa58533610675565b610b0c5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161077e565b610b198585858585611e76565b5050505050565b323314610b3f5760405162461bcd60e51b815260040161077e906131ba565b60f05460ff1615610b625760405162461bcd60e51b815260040161077e90613187565b610b6e33848484611138565b610bba5760405162461bcd60e51b815260206004820181905260248201527f4b6174616e613a204e6f7420656c696769626c6520666f72206120636c61696d604482015260640161077e565b33600090815260ea602052604090205460ff1615610c1a5760405162461bcd60e51b815260206004820152601e60248201527f4b6174616e613a2052657761726420616c726561647920636c61696d65640000604482015260640161077e565b33600090815260ea60205260409020805460ff1916600190811790915560038054909101908190556019811115610c8d5760405162461bcd60e51b81526020600482015260176024820152764b6174616e613a204e6f206d6f7265207265776172647360481b604482015260640161077e565b610caa335b82600160405180602001604052806000815250611ca9565b60015b84811015610b19576019610cc060035490565b610ccb90600161333b565b1115610cd657610b19565b610ce4600380546001019055565b610d0233600354600160405180602001604052806000815250611ca9565b80610d0c81613430565b915050610cad565b600080805b60e2811015610d7057836001600160a01b031660078260e28110610d3f57610d3f61348b565b01546001600160a01b03161415610d5e5781610d5a81613430565b9250505b80610d6881613430565b915050610d19565b5092915050565b33610d8061102d565b6001600160a01b031614610da65760405162461bcd60e51b815260040161077e906132ae565b610db033476120ba565b565b60608151835114610e175760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161077e565b600083516001600160401b03811115610e3257610e326134a1565b604051908082528060200260200182016040528015610e5b578160200160208202803683370190505b50905060005b8451811015610ed357610ea6858281518110610e7f57610e7f61348b565b6020026020010151858381518110610e9957610e9961348b565b6020026020010151610716565b828281518110610eb857610eb861348b565b6020908102919091010152610ecc81613430565b9050610e61565b509392505050565b610ee3612804565b60408051611c408101918290529060079060e29082845b81546001600160a01b03168152600190910190602001808311610efa575050505050905090565b33610f2a61102d565b6001600160a01b031614610f505760405162461bcd60e51b815260040161077e906132ae565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60048054604051636b337e5760e01b81526000926001600160a01b0390921691636b337e5791610fa491869101613002565b60206040518083038186803b158015610fbc57600080fd5b505afa158015610fd0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e49190612dbc565b33610ffd61102d565b6001600160a01b0316146110235760405162461bcd60e51b815260040161077e906132ae565b610db060006121d5565b6000546001600160a01b031690565b600060e2821061105e5760405162461bcd60e51b815260040161077e906131e9565b600060078360e281106110735761107361348b565b01546001600160a01b03169050806107e45760405162461bcd60e51b815260206004820152602b60248201527f45524331313535443a206f776e657220717565727920666f72206e6f6e65786960448201526a39ba32b73a103a37b5b2b760a91b606482015260840161077e565b60f2805461089c906133c9565b336110f761102d565b6001600160a01b03161461111d5760405162461bcd60e51b815260040161077e906132ae565b61112681612225565b50565b611134338383612238565b5050565b600080848660405160200161116492919091825260601b6001600160601b031916602082015260340190565b6040516020818303038152906040528051906020012090506111bd848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506001549150849050612319565b9695505050505050565b60006001600160a01b0382166112315760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161077e565b506001600160a01b0316600090815260ef602052604090205490565b3361125661102d565b6001600160a01b03161461127c5760405162461bcd60e51b815260040161077e906132ae565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60003233146112bf5760405162461bcd60e51b815260040161077e906131ba565b60e26112ca60025490565b6112d590600161333b565b106112f25760405162461bcd60e51b815260040161077e906132e3565b600480546040516306e8531160e51b81526001600160a01b039091169163dd0a62209161132191339101613002565b600060405180830381600087803b15801561133b57600080fd5b505af115801561134f573d6000803e3d6000fd5b50505050611361600280546001019055565b600061136c60025490565b905061137733610c92565b919050565b60ed5460065460405163a70dade760e01b8152600092916001600160a01b03169063a70dade7906113b1908790600401613002565b60206040518083038186803b1580156113c957600080fd5b505afa1580156113dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114019190612e74565b6005546040516370a0823160e01b81526001600160a01b03909116906370a0823190611431908890600401613002565b60206040518083038186803b15801561144957600080fd5b505afa15801561145d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114819190612e74565b61148b919061333b565b106114b15781600260ec546114a09190613353565b6114aa9190613367565b90506107e4565b600060196114be60025490565b6114c89190613386565b90506000805b8481101561169e5760196114e2828561333b565b101561150857600260ec546114f79190613353565b611501908361333b565b915061168c565b6004805460405163141e783560e21b81526000926001600160a01b0390921691635079e0d49161153a918b9101613002565b60006040518083038186803b15801561155257600080fd5b505afa158015611566573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261158e9190810190612cfe565b5161159b5750600361161d565b6004805460405163532f0e6760e11b81526001600160a01b039091169163a65e1cce916115ca918b9101613002565b60206040518083038186803b1580156115e257600080fd5b505afa1580156115f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161a9190612e74565b90505b815b868110156116855760036116338483613386565b61163d908461333b565b101561166357600260ec546116529190613353565b61165c908561333b565b9350611673565b60ec54611670908561333b565b93505b8061167d81613430565b91505061161f565b505061169e565b8061169681613430565b9150506114ce565b5091506107e49050565b3233146116c75760405162461bcd60e51b815260040161077e906131ba565b60006116d3338361137c565b905080341461171f5760405162461bcd60e51b81526020600482015260186024820152774b6174616e613a2057726f6e67206d696e7420707269636560401b604482015260640161077e565b60ec5461172c9083613367565b8110156119c85760ed5460065460405163a70dade760e01b81526001600160a01b039091169063a70dade790611766903390600401613002565b60206040518083038186803b15801561177e57600080fd5b505afa158015611792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b69190612e74565b6005546040516370a0823160e01b81526001600160a01b03909116906370a08231906117e6903390600401613002565b60206040518083038186803b1580156117fe57600080fd5b505afa158015611812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118369190612e74565b611840919061333b565b10156119c857600060198361185460025490565b61185e919061333b565b6118689190613386565b905060198111156119c6576000611880601983613386565b6004805460405163532f0e6760e11b81529293506000926001600160a01b039091169163a65e1cce916118b591339101613002565b60206040518083038186803b1580156118cd57600080fd5b505afa1580156118e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119059190612e74565b611910906003613386565b905080821061191f5780611921565b815b915060005b828110156119c2576004805460405163650c092d60e01b81526001600160a01b039091169163650c092d9161195d91339101613002565b602060405180830381600087803b15801561197757600080fd5b505af115801561198b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119af9190612dbc565b50806119ba81613430565b915050611926565b5050505b505b60e2826119d460025490565b6119de919061333b565b106119fb5760405162461bcd60e51b815260040161077e906132e3565b6000805b83811015610a8357611a15600280546001019055565b6002549150611a363383600160405180602001604052806000815250611ca9565b80611a4081613430565b9150506119ff565b6001600160a01b038516331480611a645750611a648533610675565b611ac25760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161077e565b610b1985858585856123c8565b33611ad861102d565b6001600160a01b031614611afe5760405162461bcd60e51b815260040161077e906132ae565b6001600160a01b038116611b635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161077e565b611126816121d5565b33611b7561102d565b6001600160a01b031614611b9b5760405162461bcd60e51b815260040161077e906132ae565b60ec55565b9055565b606081611bc85750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611bf25780611bdc81613430565b9150611beb9050600a83613353565b9150611bcc565b6000816001600160401b03811115611c0c57611c0c6134a1565b6040519080825280601f01601f191660200182016040528015611c36576020820181803683370190505b5090505b8415611ca157611c4b600183613386565b9150611c58600a8661344b565b611c6390603061333b565b60f81b818381518110611c7857611c7861348b565b60200101906001600160f81b031916908160001a905350611c9a600a86613353565b9450611c3a565b949350505050565b6001600160a01b038416611d095760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161077e565b60028210611d545760405162461bcd60e51b815260206004820152601860248201527745524331313535443a206578636565647320737570706c7960401b604482015260640161077e565b60e28310611d9b5760405162461bcd60e51b8152602060048201526014602482015273115490cc4c4d4d510e881a5b9d985b1a59081a5960621b604482015260640161077e565b336000611da78561255f565b90506000611db48561255f565b90508460011415611e24578660078760e28110611dd357611dd361348b565b0180546001600160a01b0319166001600160a01b039283161790558716600090815260ef6020526040902054611e0a90600161333b565b6001600160a01b038816600090815260ef60205260409020555b60408051878152602081018790526001600160a01b03808a169260009291871691600080516020613581833981519152910160405180910390a4611e6d836000898989896125b2565b50505050505050565b8151835114611ed85760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161077e565b6001600160a01b038416611efe5760405162461bcd60e51b815260040161077e9061321f565b336000805b8551811015611ff7576000868281518110611f2057611f2061348b565b60200260200101519050886001600160a01b031660078260e28110611f4757611f4761348b565b01546001600160a01b0316148015611f7857506002868381518110611f6e57611f6e61348b565b6020026020010151105b611f945760405162461bcd60e51b815260040161077e90613264565b858281518110611fa657611fa661348b565b602002602001015160011415611fe657876001600160a01b031660078260e28110611fd357611fd361348b565b50611fe39150849050600161333b565b92505b50611ff081613430565b9050611f03565b506001600160a01b038616600090815260ef602052604090205461201c90829061333b565b6001600160a01b03808816600090815260ef6020526040808220939093559089168152205461204c908290613386565b6001600160a01b03808916600081815260ef60205260409081902093909355915188821692918516907f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb906120a4908a908a90613107565b60405180910390a4611e6d828888888888612724565b8047101561210a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161077e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612157576040519150601f19603f3d011682016040523d82523d6000602084013e61215c565b606091505b50509050806121d05760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c20726044820152791958da5c1a595b9d081b585e481a185d99481c995d995c9d195960321b606482015260840161077e565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516111349060eb906020840190612823565b816001600160a01b0316836001600160a01b031614156122ac5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161077e565b6001600160a01b03838116600081815260e96020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600081815b85518110156123bd57600086828151811061233b5761233b61348b565b6020026020010151905080831161237d5760408051602081018590529081018290526060016040516020818303038152906040528051906020012092506123aa565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b50806123b581613430565b91505061231e565b509092149392505050565b6001600160a01b0384166123ee5760405162461bcd60e51b815260040161077e9061321f565b3360006123fa8561255f565b905060006124078561255f565b9050876001600160a01b031660078760e281106124265761242661348b565b01546001600160a01b031614801561243e5750600285105b61245a5760405162461bcd60e51b815260040161077e90613264565b84600114156124f9578660078760e281106124775761247761348b565b0180546001600160a01b0319166001600160a01b039283161790558716600090815260ef60205260409020546124ae90600161333b565b6001600160a01b03808916600090815260ef602052604080822093909355908a16815220546124df90600190613386565b6001600160a01b038916600090815260ef60205260409020555b866001600160a01b0316886001600160a01b0316846001600160a01b0316600080516020613581833981519152898960405161253f929190918252602082015260400190565b60405180910390a46125558389898989896125b2565b5050505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106125995761259961348b565b602090810291909101015292915050565b505050505050565b6125c4846001600160a01b03166127f5565b156125aa5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906125fd9089908990889088908890600401613074565b602060405180830381600087803b15801561261757600080fd5b505af1925050508015612647575060408051601f3d908101601f1916820190925261264491810190612df6565b60015b6126f4576126536134b7565b806308c379a0141561268d57506126686134d3565b80612673575061268f565b8060405162461bcd60e51b815260040161077e919061312c565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161077e565b6001600160e01b0319811663f23a6e6160e01b14611e6d5760405162461bcd60e51b815260040161077e9061313f565b612736846001600160a01b03166127f5565b156125aa5760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061276f9089908990889088908890600401613016565b602060405180830381600087803b15801561278957600080fd5b505af19250505080156127b9575060408051601f3d908101601f191682019092526127b691810190612df6565b60015b6127c5576126536134b7565b6001600160e01b0319811663bc197c8160e01b14611e6d5760405162461bcd60e51b815260040161077e9061313f565b6001600160a01b03163b151590565b60405180611c40016040528060e2906020820280368337509192915050565b82805461282f906133c9565b90600052602060002090601f0160209004810192826128515760008555612897565b82601f1061286a57805160ff1916838001178555612897565b82800160010185558215612897579182015b8281111561289757825182559160200191906001019061287c565b506128a39291506128a7565b5090565b5b808211156128a357600081556001016128a8565b60006001600160401b038311156128d5576128d56134a1565b6040516128ec601f8501601f191660200182613404565b80915083815284848401111561290157600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461137757600080fd5b60008083601f84011261294257600080fd5b5081356001600160401b0381111561295957600080fd5b6020830191508360208260051b850101111561297457600080fd5b9250929050565b600082601f83011261298c57600080fd5b8135602061299982613318565b6040516129a68282613404565b8381528281019150858301600585901b870184018810156129c657600080fd5b60005b858110156129e5578135845292840192908401906001016129c9565b5090979650505050505050565b600082601f830112612a0357600080fd5b612a12838335602085016128bc565b9392505050565b600060208284031215612a2b57600080fd5b612a1282612919565b60008060408385031215612a4757600080fd5b612a5083612919565b9150612a5e60208401612919565b90509250929050565b600080600080600060a08688031215612a7f57600080fd5b612a8886612919565b9450612a9660208701612919565b935060408601356001600160401b0380821115612ab257600080fd5b612abe89838a0161297b565b94506060880135915080821115612ad457600080fd5b612ae089838a0161297b565b93506080880135915080821115612af657600080fd5b50612b03888289016129f2565b9150509295509295909350565b600080600080600060a08688031215612b2857600080fd5b612b3186612919565b9450612b3f60208701612919565b9350604086013592506060860135915060808601356001600160401b03811115612b6857600080fd5b612b03888289016129f2565b60008060408385031215612b8757600080fd5b612b9083612919565b91506020830135612ba08161355c565b809150509250929050565b60008060408385031215612bbe57600080fd5b612bc783612919565b946020939093013593505050565b60008060008060608587031215612beb57600080fd5b612bf485612919565b93506020850135925060408501356001600160401b03811115612c1657600080fd5b612c2287828801612930565b95989497509550505050565b60008060408385031215612c4157600080fd5b82356001600160401b0380821115612c5857600080fd5b818501915085601f830112612c6c57600080fd5b81356020612c7982613318565b604051612c868282613404565b8381528281019150858301600585901b870184018b1015612ca657600080fd5b600096505b84871015612cd057612cbc81612919565b835260019690960195918301918301612cab565b5096505086013592505080821115612ce757600080fd5b50612cf48582860161297b565b9150509250929050565b60006020808385031215612d1157600080fd5b82516001600160401b03811115612d2757600080fd5b8301601f81018513612d3857600080fd5b8051612d4381613318565b604051612d508282613404565b8281528481019150838501600584901b85018601891015612d7057600080fd5b600094505b83851015612d93578051835260019490940193918501918501612d75565b50979650505050505050565b600060208284031215612db157600080fd5b8135612a128161355c565b600060208284031215612dce57600080fd5b8151612a128161355c565b600060208284031215612deb57600080fd5b8135612a128161356a565b600060208284031215612e0857600080fd5b8151612a128161356a565b600060208284031215612e2557600080fd5b81356001600160401b03811115612e3b57600080fd5b8201601f81018413612e4c57600080fd5b611ca1848235602084016128bc565b600060208284031215612e6d57600080fd5b5035919050565b600060208284031215612e8657600080fd5b5051919050565b600080600060408486031215612ea257600080fd5b8335925060208401356001600160401b03811115612ebf57600080fd5b612ecb86828701612930565b9497909650939450505050565b600081518084526020808501945080840160005b83811015612f0857815187529582019590820190600101612eec565b509495945050505050565b60008151808452612f2b81602086016020860161339d565b601f01601f19169290920160200192915050565b60008151612f5181856020860161339d565b9290920192915050565b600080845481600182811c915080831680612f7757607f831692505b6020808410821415612f9757634e487b7160e01b86526022600452602486fd5b818015612fab5760018114612fbc57612fe9565b60ff19861689528489019650612fe9565b60008b81526020902060005b86811015612fe15781548b820152908501908301612fc8565b505084890196505b505050505050612ff98185612f3f565b95945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528516602082015260a06040820181905260009061304290830186612ed8565b82810360608401526130548186612ed8565b905082810360808401526130688185612f13565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906130ae90830184612f13565b979650505050505050565b611c408101818360005b60e28110156130eb5781516001600160a01b03168352602092830192909101906001016130c3565b50505092915050565b602081526000612a126020830184612ed8565b60408152600061311a6040830185612ed8565b8281036020840152612ff98185612ed8565b602081526000612a126020830184612f13565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526019908201527812d85d185b984e88135a5b9d1a5b99c81a5cc81c185d5cd959603a1b604082015260600190565b60208082526015908201527425b0ba30b7309d1029b0b6bab930b49037b7363c9760591b604082015260600190565b6020808252601c908201527b45524331313535443a2069642065786365656473206d6178696d756d60201b604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601b908201527a12d85d185b984e8813585e081cdd5c1c1b1e48195e18d959591959602a1b604082015260600190565b60006001600160401b03821115613331576133316134a1565b5060051b60200190565b6000821982111561334e5761334e61345f565b500190565b60008261336257613362613475565b500490565b60008160001904831182151516156133815761338161345f565b500290565b6000828210156133985761339861345f565b500390565b60005b838110156133b85781810151838201526020016133a0565b83811115610a835750506000910152565b600181811c908216806133dd57607f821691505b602082108114156133fe57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b0381118282101715613429576134296134a1565b6040525050565b60006000198214156134445761344461345f565b5060010190565b60008261345a5761345a613475565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156134d05760046000803e5060005160e01c5b90565b600060443d10156134e15790565b6040516003193d81016004833e81513d6001600160401b03808311602484018310171561351057505050505090565b82850191508151818111156135285750505050505090565b843d87010160208285010111156135425750505050505090565b61355160208286010187613404565b509095945050505050565b801515811461112657600080fd5b6001600160e01b03198116811461112657600080fdfec3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62a26469706673582212201d7b87a3a767e28b6f5e63d33ffde183bd36a1a30aa137101b3e51aadfd435e464736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000026be1b45564ab3b1f20f421bb5fb5899f7c802c3000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5959655057554c56334867447a31737846583578446f61436b43447a57776a66686d6b4166534441474a697a2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5368696275726169204b6174616e61000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064b4154414e410000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101e05760003560e01c8062fdd58e146101e557806301ffc9a71461021857806303ed32241461024857806306fdde031461026a5780630e89341c1461028c57806316c38b3c146102ac57806318160ddd146102cc5780631b60efb0146102e157806329e19704146103015780632eb2c2d6146103315780632eb4a7ab146103515780632f52ebb71461036757806339f81d8b146103875780633ccfd60b146103a75780634e1273f4146103bc57806356e695ed146103e9578063585028031461040b57806363160bf2146104215780636b337e57146104415780636f97a21314610461578063715018a61461048e5780637df332e7146104a357806382d5b249146104c35780638da5cb5b146104d85780638e477789146104ed57806395d89b411461050d57806396df31a5146105225780639b642de114610542578063a035b1fe14610562578063a22cb46514610578578063a6bd25b914610598578063aa2945db146105ad578063b187bd26146105cd578063b3f9ea34146105e5578063cde5e0fa14610605578063d33a65e514610625578063de181bab1461063a578063e985e9c51461065a578063efd0cbf9146106a3578063f242432a146106b6578063f2fde38b146106d6578063f4a0a528146106f6575b600080fd5b3480156101f157600080fd5b50610205610200366004612bab565b610716565b6040519081526020015b60405180910390f35b34801561022457600080fd5b50610238610233366004612dd9565b6107ea565b604051901515815260200161020f565b34801561025457600080fd5b50610268610263366004612bab565b61083a565b005b34801561027657600080fd5b5061027f61088f565b60405161020f919061312c565b34801561029857600080fd5b5061027f6102a7366004612e5b565b61091d565b3480156102b857600080fd5b506102686102c7366004612d9f565b610951565b3480156102d857600080fd5b50610205610993565b3480156102ed57600080fd5b506102686102fc366004612bab565b6109bc565b34801561030d57600080fd5b5061023861031c366004612a19565b60ea6020526000908152604090205460ff1681565b34801561033d57600080fd5b5061026861034c366004612a67565b610a89565b34801561035d57600080fd5b5061020560015481565b34801561037357600080fd5b50610268610382366004612e8d565b610b20565b34801561039357600080fd5b506102056103a2366004612a19565b610d14565b3480156103b357600080fd5b50610268610d77565b3480156103c857600080fd5b506103dc6103d7366004612c2e565b610db2565b60405161020f91906130f4565b3480156103f557600080fd5b506103fe610edb565b60405161020f91906130b9565b34801561041757600080fd5b5061020560ed5481565b34801561042d57600080fd5b5061026861043c366004612a19565b610f21565b34801561044d57600080fd5b5061023861045c366004612a19565b610f72565b34801561046d57600080fd5b50600454610481906001600160a01b031681565b60405161020f9190613002565b34801561049a57600080fd5b50610268610ff4565b3480156104af57600080fd5b50600654610481906001600160a01b031681565b3480156104cf57600080fd5b5061020560e281565b3480156104e457600080fd5b5061048161102d565b3480156104f957600080fd5b50610481610508366004612e5b565b61103c565b34801561051957600080fd5b5061027f6110e1565b34801561052e57600080fd5b50600554610481906001600160a01b031681565b34801561054e57600080fd5b5061026861055d366004612e13565b6110ee565b34801561056e57600080fd5b5061020560ec5481565b34801561058457600080fd5b50610268610593366004612b74565b611129565b3480156105a457600080fd5b50610205601981565b3480156105b957600080fd5b506102386105c8366004612bd5565b611138565b3480156105d957600080fd5b5060f05460ff16610238565b3480156105f157600080fd5b50610205610600366004612a19565b6111c7565b34801561061157600080fd5b50610268610620366004612a19565b61124d565b34801561063157600080fd5b5061020561129e565b34801561064657600080fd5b50610205610655366004612bab565b61137c565b34801561066657600080fd5b50610238610675366004612a34565b6001600160a01b03918216600090815260e96020908152604080832093909416825291909152205460ff1690565b6102686106b1366004612e5b565b6116a8565b3480156106c257600080fd5b506102686106d1366004612b10565b611a48565b3480156106e257600080fd5b506102686106f1366004612a19565b611acf565b34801561070257600080fd5b50610268610711366004612e5b565b611b6c565b60006001600160a01b0383166107875760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b60e282106107a75760405162461bcd60e51b815260040161077e906131e9565b826001600160a01b031660078360e281106107c4576107c461348b565b01546001600160a01b0316146107db5760006107de565b60015b60ff1690505b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061081b57506001600160e01b031982166303a24d0760e21b145b806107e457506301ffc9a760e01b6001600160e01b03198316146107e4565b3361084361102d565b6001600160a01b0316146108695760405162461bcd60e51b815260040161077e906132ae565b600580546001600160a01b0319166001600160a01b03939093169290921790915560ed55565b60f1805461089c906133c9565b80601f01602080910402602001604051908101604052809291908181526020018280546108c8906133c9565b80156109155780601f106108ea57610100808354040283529160200191610915565b820191906000526020600020905b8154815290600101906020018083116108f857829003601f168201915b505050505081565b606060eb61092a83611ba4565b60405160200161093b929190612f5b565b6040516020818303038152906040529050919050565b3361095a61102d565b6001600160a01b0316146109805760405162461bcd60e51b815260040161077e906132ae565b60f0805460ff1916911515919091179055565b600060196109a060035490565b6002546109ad919061333b565b6109b79190613386565b905090565b336109c561102d565b6001600160a01b0316146109eb5760405162461bcd60e51b815260040161077e906132ae565b60f05460ff1615610a0e5760405162461bcd60e51b815260040161077e90613187565b60e2610a1960025490565b10610a365760405162461bcd60e51b815260040161077e906132e3565b6000805b82811015610a8357610a50600280546001019055565b6002549150610a718483600160405180602001604052806000815250611ca9565b80610a7b81613430565b915050610a3a565b50505050565b6001600160a01b038516331480610aa55750610aa58533610675565b610b0c5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161077e565b610b198585858585611e76565b5050505050565b323314610b3f5760405162461bcd60e51b815260040161077e906131ba565b60f05460ff1615610b625760405162461bcd60e51b815260040161077e90613187565b610b6e33848484611138565b610bba5760405162461bcd60e51b815260206004820181905260248201527f4b6174616e613a204e6f7420656c696769626c6520666f72206120636c61696d604482015260640161077e565b33600090815260ea602052604090205460ff1615610c1a5760405162461bcd60e51b815260206004820152601e60248201527f4b6174616e613a2052657761726420616c726561647920636c61696d65640000604482015260640161077e565b33600090815260ea60205260409020805460ff1916600190811790915560038054909101908190556019811115610c8d5760405162461bcd60e51b81526020600482015260176024820152764b6174616e613a204e6f206d6f7265207265776172647360481b604482015260640161077e565b610caa335b82600160405180602001604052806000815250611ca9565b60015b84811015610b19576019610cc060035490565b610ccb90600161333b565b1115610cd657610b19565b610ce4600380546001019055565b610d0233600354600160405180602001604052806000815250611ca9565b80610d0c81613430565b915050610cad565b600080805b60e2811015610d7057836001600160a01b031660078260e28110610d3f57610d3f61348b565b01546001600160a01b03161415610d5e5781610d5a81613430565b9250505b80610d6881613430565b915050610d19565b5092915050565b33610d8061102d565b6001600160a01b031614610da65760405162461bcd60e51b815260040161077e906132ae565b610db033476120ba565b565b60608151835114610e175760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161077e565b600083516001600160401b03811115610e3257610e326134a1565b604051908082528060200260200182016040528015610e5b578160200160208202803683370190505b50905060005b8451811015610ed357610ea6858281518110610e7f57610e7f61348b565b6020026020010151858381518110610e9957610e9961348b565b6020026020010151610716565b828281518110610eb857610eb861348b565b6020908102919091010152610ecc81613430565b9050610e61565b509392505050565b610ee3612804565b60408051611c408101918290529060079060e29082845b81546001600160a01b03168152600190910190602001808311610efa575050505050905090565b33610f2a61102d565b6001600160a01b031614610f505760405162461bcd60e51b815260040161077e906132ae565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60048054604051636b337e5760e01b81526000926001600160a01b0390921691636b337e5791610fa491869101613002565b60206040518083038186803b158015610fbc57600080fd5b505afa158015610fd0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e49190612dbc565b33610ffd61102d565b6001600160a01b0316146110235760405162461bcd60e51b815260040161077e906132ae565b610db060006121d5565b6000546001600160a01b031690565b600060e2821061105e5760405162461bcd60e51b815260040161077e906131e9565b600060078360e281106110735761107361348b565b01546001600160a01b03169050806107e45760405162461bcd60e51b815260206004820152602b60248201527f45524331313535443a206f776e657220717565727920666f72206e6f6e65786960448201526a39ba32b73a103a37b5b2b760a91b606482015260840161077e565b60f2805461089c906133c9565b336110f761102d565b6001600160a01b03161461111d5760405162461bcd60e51b815260040161077e906132ae565b61112681612225565b50565b611134338383612238565b5050565b600080848660405160200161116492919091825260601b6001600160601b031916602082015260340190565b6040516020818303038152906040528051906020012090506111bd848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506001549150849050612319565b9695505050505050565b60006001600160a01b0382166112315760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161077e565b506001600160a01b0316600090815260ef602052604090205490565b3361125661102d565b6001600160a01b03161461127c5760405162461bcd60e51b815260040161077e906132ae565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60003233146112bf5760405162461bcd60e51b815260040161077e906131ba565b60e26112ca60025490565b6112d590600161333b565b106112f25760405162461bcd60e51b815260040161077e906132e3565b600480546040516306e8531160e51b81526001600160a01b039091169163dd0a62209161132191339101613002565b600060405180830381600087803b15801561133b57600080fd5b505af115801561134f573d6000803e3d6000fd5b50505050611361600280546001019055565b600061136c60025490565b905061137733610c92565b919050565b60ed5460065460405163a70dade760e01b8152600092916001600160a01b03169063a70dade7906113b1908790600401613002565b60206040518083038186803b1580156113c957600080fd5b505afa1580156113dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114019190612e74565b6005546040516370a0823160e01b81526001600160a01b03909116906370a0823190611431908890600401613002565b60206040518083038186803b15801561144957600080fd5b505afa15801561145d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114819190612e74565b61148b919061333b565b106114b15781600260ec546114a09190613353565b6114aa9190613367565b90506107e4565b600060196114be60025490565b6114c89190613386565b90506000805b8481101561169e5760196114e2828561333b565b101561150857600260ec546114f79190613353565b611501908361333b565b915061168c565b6004805460405163141e783560e21b81526000926001600160a01b0390921691635079e0d49161153a918b9101613002565b60006040518083038186803b15801561155257600080fd5b505afa158015611566573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261158e9190810190612cfe565b5161159b5750600361161d565b6004805460405163532f0e6760e11b81526001600160a01b039091169163a65e1cce916115ca918b9101613002565b60206040518083038186803b1580156115e257600080fd5b505afa1580156115f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161a9190612e74565b90505b815b868110156116855760036116338483613386565b61163d908461333b565b101561166357600260ec546116529190613353565b61165c908561333b565b9350611673565b60ec54611670908561333b565b93505b8061167d81613430565b91505061161f565b505061169e565b8061169681613430565b9150506114ce565b5091506107e49050565b3233146116c75760405162461bcd60e51b815260040161077e906131ba565b60006116d3338361137c565b905080341461171f5760405162461bcd60e51b81526020600482015260186024820152774b6174616e613a2057726f6e67206d696e7420707269636560401b604482015260640161077e565b60ec5461172c9083613367565b8110156119c85760ed5460065460405163a70dade760e01b81526001600160a01b039091169063a70dade790611766903390600401613002565b60206040518083038186803b15801561177e57600080fd5b505afa158015611792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b69190612e74565b6005546040516370a0823160e01b81526001600160a01b03909116906370a08231906117e6903390600401613002565b60206040518083038186803b1580156117fe57600080fd5b505afa158015611812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118369190612e74565b611840919061333b565b10156119c857600060198361185460025490565b61185e919061333b565b6118689190613386565b905060198111156119c6576000611880601983613386565b6004805460405163532f0e6760e11b81529293506000926001600160a01b039091169163a65e1cce916118b591339101613002565b60206040518083038186803b1580156118cd57600080fd5b505afa1580156118e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119059190612e74565b611910906003613386565b905080821061191f5780611921565b815b915060005b828110156119c2576004805460405163650c092d60e01b81526001600160a01b039091169163650c092d9161195d91339101613002565b602060405180830381600087803b15801561197757600080fd5b505af115801561198b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119af9190612dbc565b50806119ba81613430565b915050611926565b5050505b505b60e2826119d460025490565b6119de919061333b565b106119fb5760405162461bcd60e51b815260040161077e906132e3565b6000805b83811015610a8357611a15600280546001019055565b6002549150611a363383600160405180602001604052806000815250611ca9565b80611a4081613430565b9150506119ff565b6001600160a01b038516331480611a645750611a648533610675565b611ac25760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161077e565b610b1985858585856123c8565b33611ad861102d565b6001600160a01b031614611afe5760405162461bcd60e51b815260040161077e906132ae565b6001600160a01b038116611b635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161077e565b611126816121d5565b33611b7561102d565b6001600160a01b031614611b9b5760405162461bcd60e51b815260040161077e906132ae565b60ec55565b9055565b606081611bc85750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611bf25780611bdc81613430565b9150611beb9050600a83613353565b9150611bcc565b6000816001600160401b03811115611c0c57611c0c6134a1565b6040519080825280601f01601f191660200182016040528015611c36576020820181803683370190505b5090505b8415611ca157611c4b600183613386565b9150611c58600a8661344b565b611c6390603061333b565b60f81b818381518110611c7857611c7861348b565b60200101906001600160f81b031916908160001a905350611c9a600a86613353565b9450611c3a565b949350505050565b6001600160a01b038416611d095760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161077e565b60028210611d545760405162461bcd60e51b815260206004820152601860248201527745524331313535443a206578636565647320737570706c7960401b604482015260640161077e565b60e28310611d9b5760405162461bcd60e51b8152602060048201526014602482015273115490cc4c4d4d510e881a5b9d985b1a59081a5960621b604482015260640161077e565b336000611da78561255f565b90506000611db48561255f565b90508460011415611e24578660078760e28110611dd357611dd361348b565b0180546001600160a01b0319166001600160a01b039283161790558716600090815260ef6020526040902054611e0a90600161333b565b6001600160a01b038816600090815260ef60205260409020555b60408051878152602081018790526001600160a01b03808a169260009291871691600080516020613581833981519152910160405180910390a4611e6d836000898989896125b2565b50505050505050565b8151835114611ed85760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161077e565b6001600160a01b038416611efe5760405162461bcd60e51b815260040161077e9061321f565b336000805b8551811015611ff7576000868281518110611f2057611f2061348b565b60200260200101519050886001600160a01b031660078260e28110611f4757611f4761348b565b01546001600160a01b0316148015611f7857506002868381518110611f6e57611f6e61348b565b6020026020010151105b611f945760405162461bcd60e51b815260040161077e90613264565b858281518110611fa657611fa661348b565b602002602001015160011415611fe657876001600160a01b031660078260e28110611fd357611fd361348b565b50611fe39150849050600161333b565b92505b50611ff081613430565b9050611f03565b506001600160a01b038616600090815260ef602052604090205461201c90829061333b565b6001600160a01b03808816600090815260ef6020526040808220939093559089168152205461204c908290613386565b6001600160a01b03808916600081815260ef60205260409081902093909355915188821692918516907f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb906120a4908a908a90613107565b60405180910390a4611e6d828888888888612724565b8047101561210a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161077e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612157576040519150601f19603f3d011682016040523d82523d6000602084013e61215c565b606091505b50509050806121d05760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c20726044820152791958da5c1a595b9d081b585e481a185d99481c995d995c9d195960321b606482015260840161077e565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516111349060eb906020840190612823565b816001600160a01b0316836001600160a01b031614156122ac5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161077e565b6001600160a01b03838116600081815260e96020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600081815b85518110156123bd57600086828151811061233b5761233b61348b565b6020026020010151905080831161237d5760408051602081018590529081018290526060016040516020818303038152906040528051906020012092506123aa565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b50806123b581613430565b91505061231e565b509092149392505050565b6001600160a01b0384166123ee5760405162461bcd60e51b815260040161077e9061321f565b3360006123fa8561255f565b905060006124078561255f565b9050876001600160a01b031660078760e281106124265761242661348b565b01546001600160a01b031614801561243e5750600285105b61245a5760405162461bcd60e51b815260040161077e90613264565b84600114156124f9578660078760e281106124775761247761348b565b0180546001600160a01b0319166001600160a01b039283161790558716600090815260ef60205260409020546124ae90600161333b565b6001600160a01b03808916600090815260ef602052604080822093909355908a16815220546124df90600190613386565b6001600160a01b038916600090815260ef60205260409020555b866001600160a01b0316886001600160a01b0316846001600160a01b0316600080516020613581833981519152898960405161253f929190918252602082015260400190565b60405180910390a46125558389898989896125b2565b5050505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106125995761259961348b565b602090810291909101015292915050565b505050505050565b6125c4846001600160a01b03166127f5565b156125aa5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906125fd9089908990889088908890600401613074565b602060405180830381600087803b15801561261757600080fd5b505af1925050508015612647575060408051601f3d908101601f1916820190925261264491810190612df6565b60015b6126f4576126536134b7565b806308c379a0141561268d57506126686134d3565b80612673575061268f565b8060405162461bcd60e51b815260040161077e919061312c565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161077e565b6001600160e01b0319811663f23a6e6160e01b14611e6d5760405162461bcd60e51b815260040161077e9061313f565b612736846001600160a01b03166127f5565b156125aa5760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061276f9089908990889088908890600401613016565b602060405180830381600087803b15801561278957600080fd5b505af19250505080156127b9575060408051601f3d908101601f191682019092526127b691810190612df6565b60015b6127c5576126536134b7565b6001600160e01b0319811663bc197c8160e01b14611e6d5760405162461bcd60e51b815260040161077e9061313f565b6001600160a01b03163b151590565b60405180611c40016040528060e2906020820280368337509192915050565b82805461282f906133c9565b90600052602060002090601f0160209004810192826128515760008555612897565b82601f1061286a57805160ff1916838001178555612897565b82800160010185558215612897579182015b8281111561289757825182559160200191906001019061287c565b506128a39291506128a7565b5090565b5b808211156128a357600081556001016128a8565b60006001600160401b038311156128d5576128d56134a1565b6040516128ec601f8501601f191660200182613404565b80915083815284848401111561290157600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461137757600080fd5b60008083601f84011261294257600080fd5b5081356001600160401b0381111561295957600080fd5b6020830191508360208260051b850101111561297457600080fd5b9250929050565b600082601f83011261298c57600080fd5b8135602061299982613318565b6040516129a68282613404565b8381528281019150858301600585901b870184018810156129c657600080fd5b60005b858110156129e5578135845292840192908401906001016129c9565b5090979650505050505050565b600082601f830112612a0357600080fd5b612a12838335602085016128bc565b9392505050565b600060208284031215612a2b57600080fd5b612a1282612919565b60008060408385031215612a4757600080fd5b612a5083612919565b9150612a5e60208401612919565b90509250929050565b600080600080600060a08688031215612a7f57600080fd5b612a8886612919565b9450612a9660208701612919565b935060408601356001600160401b0380821115612ab257600080fd5b612abe89838a0161297b565b94506060880135915080821115612ad457600080fd5b612ae089838a0161297b565b93506080880135915080821115612af657600080fd5b50612b03888289016129f2565b9150509295509295909350565b600080600080600060a08688031215612b2857600080fd5b612b3186612919565b9450612b3f60208701612919565b9350604086013592506060860135915060808601356001600160401b03811115612b6857600080fd5b612b03888289016129f2565b60008060408385031215612b8757600080fd5b612b9083612919565b91506020830135612ba08161355c565b809150509250929050565b60008060408385031215612bbe57600080fd5b612bc783612919565b946020939093013593505050565b60008060008060608587031215612beb57600080fd5b612bf485612919565b93506020850135925060408501356001600160401b03811115612c1657600080fd5b612c2287828801612930565b95989497509550505050565b60008060408385031215612c4157600080fd5b82356001600160401b0380821115612c5857600080fd5b818501915085601f830112612c6c57600080fd5b81356020612c7982613318565b604051612c868282613404565b8381528281019150858301600585901b870184018b1015612ca657600080fd5b600096505b84871015612cd057612cbc81612919565b835260019690960195918301918301612cab565b5096505086013592505080821115612ce757600080fd5b50612cf48582860161297b565b9150509250929050565b60006020808385031215612d1157600080fd5b82516001600160401b03811115612d2757600080fd5b8301601f81018513612d3857600080fd5b8051612d4381613318565b604051612d508282613404565b8281528481019150838501600584901b85018601891015612d7057600080fd5b600094505b83851015612d93578051835260019490940193918501918501612d75565b50979650505050505050565b600060208284031215612db157600080fd5b8135612a128161355c565b600060208284031215612dce57600080fd5b8151612a128161355c565b600060208284031215612deb57600080fd5b8135612a128161356a565b600060208284031215612e0857600080fd5b8151612a128161356a565b600060208284031215612e2557600080fd5b81356001600160401b03811115612e3b57600080fd5b8201601f81018413612e4c57600080fd5b611ca1848235602084016128bc565b600060208284031215612e6d57600080fd5b5035919050565b600060208284031215612e8657600080fd5b5051919050565b600080600060408486031215612ea257600080fd5b8335925060208401356001600160401b03811115612ebf57600080fd5b612ecb86828701612930565b9497909650939450505050565b600081518084526020808501945080840160005b83811015612f0857815187529582019590820190600101612eec565b509495945050505050565b60008151808452612f2b81602086016020860161339d565b601f01601f19169290920160200192915050565b60008151612f5181856020860161339d565b9290920192915050565b600080845481600182811c915080831680612f7757607f831692505b6020808410821415612f9757634e487b7160e01b86526022600452602486fd5b818015612fab5760018114612fbc57612fe9565b60ff19861689528489019650612fe9565b60008b81526020902060005b86811015612fe15781548b820152908501908301612fc8565b505084890196505b505050505050612ff98185612f3f565b95945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528516602082015260a06040820181905260009061304290830186612ed8565b82810360608401526130548186612ed8565b905082810360808401526130688185612f13565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906130ae90830184612f13565b979650505050505050565b611c408101818360005b60e28110156130eb5781516001600160a01b03168352602092830192909101906001016130c3565b50505092915050565b602081526000612a126020830184612ed8565b60408152600061311a6040830185612ed8565b8281036020840152612ff98185612ed8565b602081526000612a126020830184612f13565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526019908201527812d85d185b984e88135a5b9d1a5b99c81a5cc81c185d5cd959603a1b604082015260600190565b60208082526015908201527425b0ba30b7309d1029b0b6bab930b49037b7363c9760591b604082015260600190565b6020808252601c908201527b45524331313535443a2069642065786365656473206d6178696d756d60201b604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601b908201527a12d85d185b984e8813585e081cdd5c1c1b1e48195e18d959591959602a1b604082015260600190565b60006001600160401b03821115613331576133316134a1565b5060051b60200190565b6000821982111561334e5761334e61345f565b500190565b60008261336257613362613475565b500490565b60008160001904831182151516156133815761338161345f565b500290565b6000828210156133985761339861345f565b500390565b60005b838110156133b85781810151838201526020016133a0565b83811115610a835750506000910152565b600181811c908216806133dd57607f821691505b602082108114156133fe57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b0381118282101715613429576134296134a1565b6040525050565b60006000198214156134445761344461345f565b5060010190565b60008261345a5761345a613475565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156134d05760046000803e5060005160e01c5b90565b600060443d10156134e15790565b6040516003193d81016004833e81513d6001600160401b03808311602484018310171561351057505050505090565b82850191508151818111156135285750505050505090565b843d87010160208285010111156135425750505050505090565b61355160208286010187613404565b509095945050505050565b801515811461112657600080fd5b6001600160e01b03198116811461112657600080fdfec3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62a26469706673582212201d7b87a3a767e28b6f5e63d33ffde183bd36a1a30aa137101b3e51aadfd435e464736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000026be1b45564ab3b1f20f421bb5fb5899f7c802c3000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5959655057554c56334867447a31737846583578446f61436b43447a57776a66686d6b4166534441474a697a2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5368696275726169204b6174616e61000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064b4154414e410000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : uri_ (string): https://gateway.pinata.cloud/ipfs/QmYYePWULV3HgDz1sxFX5xDoaCkCDzWwjfhmkAfSDAGJiz/
Arg [1] : name_ (string): Shiburai Katana
Arg [2] : symbol_ (string): KATANA
Arg [3] : _kimono (address): 0x26Be1B45564Ab3B1F20F421bb5FB5899f7c802C3
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [3] : 00000000000000000000000026be1b45564ab3b1f20f421bb5fb5899f7c802c3
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [5] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [6] : 732f516d5959655057554c56334867447a31737846583578446f61436b43447a
Arg [7] : 57776a66686d6b4166534441474a697a2f000000000000000000000000000000
Arg [8] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [9] : 5368696275726169204b6174616e610000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [11] : 4b4154414e410000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
25935:27585:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36525:404;;;;;;;;;;-1:-1:-1;36525:404:0;;;;;:::i;:::-;;:::i;:::-;;;15735:25:1;;;15723:2;15708:18;36525:404:0;;;;;;;;35394:360;;;;;;;;;;-1:-1:-1;35394:360:0;;;;;:::i;:::-;;:::i;:::-;;;15562:14:1;;15555:22;15537:41;;15525:2;15510:18;35394:360:0;15397:187:1;28570:237:0;;;;;;;;;;-1:-1:-1;28570:237:0;;;;;:::i;:::-;;:::i;:::-;;27426:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;36165:209::-;;;;;;;;;;-1:-1:-1;36165:209:0;;;;;:::i;:::-;;:::i;32213:86::-;;;;;;;;;;-1:-1:-1;32213:86:0;;;;;:::i;:::-;;:::i;35136:186::-;;;;;;;;;;;;;:::i;34289:508::-;;;;;;;;;;-1:-1:-1;34289:508:0;;;;;:::i;:::-;;:::i;26820:45::-;;;;;;;;;;-1:-1:-1;26820:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;39046:442;;;;;;;;;;-1:-1:-1;39046:442:0;;;;;:::i;:::-;;:::i;26223:103::-;;;;;;;;;;;;;;;;30730:1014;;;;;;;;;;-1:-1:-1;30730:1014:0;;;;;:::i;:::-;;:::i;53189:328::-;;;;;;;;;;-1:-1:-1;53189:328:0;;;;;:::i;:::-;;:::i;34946:119::-;;;;;;;;;;;;;:::i;37385:561::-;;;;;;;;;;-1:-1:-1;37385:561:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;52673:163::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;27056:54::-;;;;;;;;;;;;;;;;27949:104;;;;;;;;;;-1:-1:-1;27949:104:0;;;;;:::i;:::-;;:::i;30272:144::-;;;;;;;;;;-1:-1:-1;30272:144:0;;;;;:::i;:::-;;:::i;26432:21::-;;;;;;;;;;-1:-1:-1;26432:21:0;;;;-1:-1:-1;;;;;26432:21:0;;;;;;;;;;:::i;20639:103::-;;;;;;;;;;;;;:::i;26535:70::-;;;;;;;;;;-1:-1:-1;26535:70:0;;;;-1:-1:-1;;;;;26535:70:0;;;26165:49;;;;;;;;;;;;26211:3;26165:49;;19988:87;;;;;;;;;;;;;:::i;52844:337::-;;;;;;;;;;-1:-1:-1;52844:337:0;;;;;:::i;:::-;;:::i;27475:20::-;;;;;;;;;;;;;:::i;26460:68::-;;;;;;;;;;-1:-1:-1;26460:68:0;;;;-1:-1:-1;;;;;26460:68:0;;;32352:89;;;;;;;;;;-1:-1:-1;32352:89:0;;;;;:::i;:::-;;:::i;27017:32::-;;;;;;;;;;;;;;;;38019:187;;;;;;;;;;-1:-1:-1;38019:187:0;;;;;:::i;:::-;;:::i;26118:40::-;;;;;;;;;;;;26156:2;26118:40;;30424:298;;;;;;;;;;-1:-1:-1;30424:298:0;;;;;:::i;:::-;;:::i;31990:80::-;;;;;;;;;;-1:-1:-1;32055:7:0;;;;31990:80;;36937:282;;;;;;;;;;-1:-1:-1;36937:282:0;;;;;:::i;:::-;;:::i;27853:88::-;;;;;;;;;;-1:-1:-1;27853:88:0;;;;;:::i;:::-;;:::i;28061:501::-;;;;;;;;;;;;;:::i;28815:1449::-;;;;;;;;;;-1:-1:-1;28815:1449:0;;;;;:::i;:::-;;:::i;38278:218::-;;;;;;;;;;-1:-1:-1;38278:218:0;;;;;:::i;:::-;-1:-1:-1;;;;;38451:27:0;;;38422:4;38451:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;38278:218;32487:1655;;;;;;:::i;:::-;;:::i;38568:401::-;;;;;;;;;;-1:-1:-1;38568:401:0;;;;;:::i;:::-;;:::i;20897:201::-;;;;;;;;;;-1:-1:-1;20897:201:0;;;;;:::i;:::-;;:::i;31821:92::-;;;;;;;;;;-1:-1:-1;31821:92:0;;;;;:::i;:::-;;:::i;36525:404::-;36656:7;-1:-1:-1;;;;;36703:21:0;;36681:114;;;;-1:-1:-1;;;36681:114:0;;17381:2:1;36681:114:0;;;17363:21:1;17420:2;17400:18;;;17393:30;17459:34;17439:18;;;17432:62;-1:-1:-1;;;17510:18:1;;;17503:41;17561:19;;36681:114:0;;;;;;;;;26211:3;36814:2;:24;36806:65;;;;-1:-1:-1;;;36806:65:0;;;;;;;:::i;:::-;36906:7;-1:-1:-1;;;;;36891:22:0;:7;36899:2;36891:11;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;36891:11:0;:22;:30;;36920:1;36891:30;;;36916:1;36891:30;36884:37;;;;36525:404;;;;;:::o;35394:360::-;35541:4;-1:-1:-1;;;;;;35583:41:0;;-1:-1:-1;;;35583:41:0;;:110;;-1:-1:-1;;;;;;;35641:52:0;;-1:-1:-1;;;35641:52:0;35583:110;:163;;;-1:-1:-1;;;;;;;;;;18867:40:0;;;35710:36;18758:157;28570:237;17755:10;20208:7;:5;:7::i;:::-;-1:-1:-1;;;;;20208:23:0;;20200:68;;;;-1:-1:-1;;;20200:68:0;;;;;;;:::i;:::-;28716:8:::1;:20:::0;;-1:-1:-1;;;;;;28716:20:0::1;-1:-1:-1::0;;;;;28716:20:0;;;::::1;::::0;;;::::1;::::0;;;28747:24:::1;:52:::0;28570:237::o;27426:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36165:209::-;36278:13;36340:4;36346:18;:7;:16;:18::i;:::-;36323:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36309:57;;36165:209;;;:::o;32213:86::-;17755:10;20208:7;:5;:7::i;:::-;-1:-1:-1;;;;;20208:23:0;;20200:68;;;;-1:-1:-1;;;20200:68:0;;;;;;;:::i;:::-;32274:7:::1;:17:::0;;-1:-1:-1;;32274:17:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32213:86::o;35136:186::-;35180:7;26156:2;35261:26;:16;22034:14;;21942:114;35261:26;35220:15;22034:14;35220:67;;;;:::i;:::-;:94;;;;:::i;:::-;35200:114;;35136:186;:::o;34289:508::-;17755:10;20208:7;:5;:7::i;:::-;-1:-1:-1;;;;;20208:23:0;;20200:68;;;;-1:-1:-1;;;20200:68:0;;;;;;;:::i;:::-;34376:7:::1;::::0;::::1;;:16;34368:54;;;;-1:-1:-1::0;;;34368:54:0::1;;;;;;;:::i;:::-;26211:3;34455:25;:15;22034:14:::0;;21942:114;34455:25:::1;:47;34433:124;;;;-1:-1:-1::0;;;34433:124:0::1;;;;;;;:::i;:::-;34568:19;::::0;34600:190:::1;34624:6;34620:1;:10;34600:190;;;34652:27;:15;22153:19:::0;;22171:1;22153:19;;;22064:127;34652:27:::1;34708:15;22034:14:::0;34694:39:::1;;34748:30;34754:3;34759:11;34772:1;34748:30;;;;;;;;;;;::::0;:5:::1;:30::i;:::-;34632:3:::0;::::1;::::0;::::1;:::i;:::-;;;;34600:190;;;;34357:440;34289:508:::0;;:::o;39046:442::-;-1:-1:-1;;;;;39279:20:0;;17755:10;39279:20;;:60;;-1:-1:-1;39303:36:0;39320:4;17755:10;38278:218;:::i;39303:36::-;39257:160;;;;-1:-1:-1;;;39257:160:0;;21620:2:1;39257:160:0;;;21602:21:1;21659:2;21639:18;;;21632:30;21698:34;21678:18;;;21671:62;-1:-1:-1;;;21749:18:1;;;21742:48;21807:19;;39257:160:0;21418:414:1;39257:160:0;39428:52;39451:4;39457:2;39461:3;39466:7;39475:4;39428:22;:52::i;:::-;39046:442;;;;;:::o;30730:1014::-;30821:9;30834:10;30821:23;30813:57;;;;-1:-1:-1;;;30813:57:0;;;;;;;:::i;:::-;30889:7;;;;:16;30881:54;;;;-1:-1:-1;;;30881:54:0;;;;;;;:::i;:::-;30968:48;17755:10;30994:7;31003:12;;30968:11;:48::i;:::-;30946:130;;;;-1:-1:-1;;;30946:130:0;;24643:2:1;30946:130:0;;;24625:21:1;;;24662:18;;;24655:30;24721:34;24701:18;;;24694:62;24773:18;;30946:130:0;24441:356:1;30946:130:0;17755:10;31096:27;;;;:13;:27;;;;;;;;31095:28;31087:71;;;;-1:-1:-1;;;31087:71:0;;23932:2:1;31087:71:0;;;23914:21:1;23971:2;23951:18;;;23944:30;24010:32;23990:18;;;23983:60;24060:18;;31087:71:0;23730:354:1;31087:71:0;17755:10;31171:27;;;;:13;:27;;;;;:34;;-1:-1:-1;;31171:34:0;31201:4;31171:34;;;;;;31216:16;22153:19;;;;;;;;;26156:2;31324:26;;;31316:62;;;;-1:-1:-1;;;31316:62:0;;24291:2:1;31316:62:0;;;24273:21:1;24330:2;24310:18;;;24303:30;-1:-1:-1;;;24349:18:1;;;24342:53;24412:18;;31316:62:0;24089:347:1;31316:62:0;31389:39;17755:10;31395:12;31409:11;31422:1;31389:39;;;;;;;;;;;;:5;:39::i;:::-;31458:1;31441:296;31465:7;31461:1;:11;31441:296;;;26156:2;31498:26;:16;22034:14;;21942:114;31498:26;:30;;31527:1;31498:30;:::i;:::-;:44;31494:232;;;31563:5;;31494:232;31609:28;:16;22153:19;;22171:1;22153:19;;;22064:127;31609:28;31656:54;17755:10;31676:16;22034:14;31704:1;31656:54;;;;;;;;;;;;:5;:54::i;:::-;31474:3;;;;:::i;:::-;;;;31441:296;;53189:328;53291:7;;;53346:139;53366:14;53362:1;:18;53346:139;;;53420:8;-1:-1:-1;;;;;53406:22:0;:7;53414:1;53406:10;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;53406:10:0;:22;53402:72;;;53449:9;;;;:::i;:::-;;;;53402:72;53382:3;;;;:::i;:::-;;;;53346:139;;;-1:-1:-1;53502:7:0;53189:328;-1:-1:-1;;53189:328:0:o;34946:119::-;17755:10;20208:7;:5;:7::i;:::-;-1:-1:-1;;;;;20208:23:0;;20200:68;;;;-1:-1:-1;;;20200:68:0;;;;;;;:::i;:::-;34994:63:::1;17755:10:::0;35035:21:::1;34994:17;:63::i;:::-;34946:119::o:0;37385:561::-;37541:16;37616:3;:10;37597:8;:15;:29;37575:120;;;;-1:-1:-1;;;37575:120:0;;25414:2:1;37575:120:0;;;25396:21:1;25453:2;25433:18;;;25426:30;25492:34;25472:18;;;25465:62;-1:-1:-1;;;25543:18:1;;;25536:39;25592:19;;37575:120:0;25212:405:1;37575:120:0;37708:30;37755:8;:15;-1:-1:-1;;;;;37741:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37741:30:0;;37708:63;;37789:9;37784:122;37808:8;:15;37804:1;:19;37784:122;;;37864:30;37874:8;37883:1;37874:11;;;;;;;;:::i;:::-;;;;;;;37887:3;37891:1;37887:6;;;;;;;;:::i;:::-;;;;;;;37864:9;:30::i;:::-;37845:13;37859:1;37845:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;37825:3;;;:::i;:::-;;;37784:122;;;-1:-1:-1;37925:13:0;37385:561;-1:-1:-1;;;37385:561:0:o;52673:163::-;52761:35;;:::i;:::-;52814:14;;;;;;;;;;;52821:7;;52814:14;;52821:7;52814:14;;;;-1:-1:-1;;;;;52814:14:0;;;;;;;;;;;;;;;;;;;;;;52673:163;:::o;27949:104::-;17755:10;20208:7;:5;:7::i;:::-;-1:-1:-1;;;;;20208:23:0;;20200:68;;;;-1:-1:-1;;;20200:68:0;;;;;;;:::i;:::-;28021:10:::1;:24:::0;;-1:-1:-1;;;;;;28021:24:0::1;-1:-1:-1::0;;;;;28021:24:0;;;::::1;::::0;;;::::1;::::0;;27949:104::o;30272:144::-;30372:6;;;30365:43;;-1:-1:-1;;;30365:43:0;;30341:4;;-1:-1:-1;;;;;30372:6:0;;;;30365:33;;:43;;30399:8;;30365:43;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20639:103::-;17755:10;20208:7;:5;:7::i;:::-;-1:-1:-1;;;;;20208:23:0;;20200:68;;;;-1:-1:-1;;;20200:68:0;;;;;;;:::i;:::-;20704:30:::1;20731:1;20704:18;:30::i;19988:87::-:0;20034:7;20061:6;-1:-1:-1;;;;;20061:6:0;;19988:87::o;52844:337::-;52906:7;52939:14;52934:2;:19;52926:60;;;;-1:-1:-1;;;52926:60:0;;;;;;;:::i;:::-;52997:14;53014:7;53022:2;53014:11;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;53014:11:0;;-1:-1:-1;53058:20:0;53036:113;;;;-1:-1:-1;;;53036:113:0;;23164:2:1;53036:113:0;;;23146:21:1;23203:2;23183:18;;;23176:30;23242:34;23222:18;;;23215:62;-1:-1:-1;;;23293:18:1;;;23286:41;23344:19;;53036:113:0;22962:407:1;27475:20:0;;;;;;;:::i;32352:89::-;17755:10;20208:7;:5;:7::i;:::-;-1:-1:-1;;;;;20208:23:0;;20200:68;;;;-1:-1:-1;;;20200:68:0;;;;;;;:::i;:::-;32418:15:::1;32426:6;32418:7;:15::i;:::-;32352:89:::0;:::o;38019:187::-;38146:52;17755:10;38179:8;38189;38146:18;:52::i;:::-;38019:187;;:::o;30424:298::-;30568:4;30585:12;30627:7;30636:8;30610:35;;;;;;;;12392:19:1;;;12474:2;12445:15;-1:-1:-1;;;;;;12441:45:1;12436:2;12427:12;;12420:67;12512:2;12503:12;;12235:286;30610:35:0;;;;;;;;;;;;;30600:46;;;;;;30585:61;;30664:50;30683:12;;30664:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30697:10:0;;;-1:-1:-1;30709:4:0;;-1:-1:-1;30664:18:0;:50::i;:::-;30657:57;30424:298;-1:-1:-1;;;;;;30424:298:0:o;36937:282::-;37042:7;-1:-1:-1;;;;;37089:19:0;;37067:110;;;;-1:-1:-1;;;37067:110:0;;20447:2:1;37067:110:0;;;20429:21:1;20486:2;20466:18;;;20459:30;20525:34;20505:18;;;20498:62;-1:-1:-1;;;20576:18:1;;;20569:39;20625:19;;37067:110:0;20245:405:1;37067:110:0;-1:-1:-1;;;;;;37195:16:0;;;;;:9;:16;;;;;;;36937:282::o;27853:88::-;17755:10;20208:7;:5;:7::i;:::-;-1:-1:-1;;;;;20208:23:0;;20200:68;;;;-1:-1:-1;;;20200:68:0;;;;;;;:::i;:::-;27917:6:::1;:16:::0;;-1:-1:-1;;;;;;27917:16:0::1;-1:-1:-1::0;;;;;27917:16:0;;;::::1;::::0;;;::::1;::::0;;27853:88::o;28061:501::-;28104:7;28132:9;28145:10;28132:23;28124:57;;;;-1:-1:-1;;;28124:57:0;;;;;;;:::i;:::-;26211:3;28214:25;:15;22034:14;;21942:114;28214:25;:29;;28242:1;28214:29;:::i;:::-;:51;28192:128;;;;-1:-1:-1;;;28192:128:0;;;;;;;:::i;:::-;28338:6;;;28331:46;;-1:-1:-1;;;28331:46:0;;-1:-1:-1;;;;;28338:6:0;;;;28331:34;;:46;;28366:10;;28331:46;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28390:27;:15;22153:19;;22171:1;22153:19;;;22064:127;28390:27;28428:19;28450:25;:15;22034:14;;21942:114;28450:25;28428:47;-1:-1:-1;28486:39:0;17755:10;28492:12;17675:98;28486:39;28543:11;28061:501;-1:-1:-1;28061:501:0:o;28815:1449::-;29138:24;;29037:10;;29018:103;;-1:-1:-1;;;29018:103:0;;28917:7;;29138:24;-1:-1:-1;;;;;29037:10:0;;29018:53;;:103;;29094:8;;29018:103;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28969:8;;28960:38;;-1:-1:-1;;;28960:38:0;;-1:-1:-1;;;;;28969:8:0;;;;28960:28;;:38;;28989:8;;28960:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:161;;;;:::i;:::-;:202;28942:1315;;29210:6;29205:1;29197:5;;:9;;;;:::i;:::-;29196:20;;;;:::i;:::-;29189:27;;;;28942:1315;29249:16;26156:2;29268:25;:15;22034:14;;21942:114;29268:25;:39;;;;:::i;:::-;29249:58;;29322:13;29355:9;29350:869;29370:6;29366:1;:10;29350:869;;;29421:2;29406:12;29417:1;29406:8;:12;:::i;:::-;:17;29402:802;;;29465:1;29457:5;;:9;;;;:::i;:::-;29448:18;;;;:::i;:::-;;;29402:802;;;29576:6;;;29569:41;;-1:-1:-1;;;29569:41:0;;29515:27;;-1:-1:-1;;;;;29576:6:0;;;;29569:31;;:41;;29601:8;;29569:41;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29569:41:0;;;;;;;;;;;;:::i;:::-;:48;29565:286;;-1:-1:-1;29673:1:0;29565:286;;;29760:6;;;29753:74;;-1:-1:-1;;;29753:74:0;;-1:-1:-1;;;;;29760:6:0;;;;29753:64;;:74;;29818:8;;29753:74;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29731:96;;29565:286;29892:1;29875:282;29899:6;29895:1;:10;29875:282;;;29975:1;29966:5;29970:1;29966;:5;:::i;:::-;29943:29;;:19;:29;:::i;:::-;:33;29939:195;;;30026:1;30018:5;;:9;;;;:::i;:::-;30009:18;;;;:::i;:::-;;;29939:195;;;30101:5;;30092:14;;;;:::i;:::-;;;29939:195;29907:3;;;;:::i;:::-;;;;29875:282;;;;30179:5;;;29402:802;29378:3;;;;:::i;:::-;;;;29350:869;;;-1:-1:-1;30240:5:0;-1:-1:-1;30233:12:0;;-1:-1:-1;30233:12:0;32487:1655;32557:9;32570:10;32557:23;32549:57;;;;-1:-1:-1;;;32549:57:0;;;;;;;:::i;:::-;32617:18;32638:30;32649:10;32661:6;32638:10;:30::i;:::-;32617:51;;32700:10;32687:9;:23;32679:60;;;;-1:-1:-1;;;32679:60:0;;22811:2:1;32679:60:0;;;22793:21:1;22850:2;22830:18;;;22823:30;-1:-1:-1;;;22869:18:1;;;22862:54;22933:18;;32679:60:0;22609:348:1;32679:60:0;32776:5;;32767:14;;:6;:14;:::i;:::-;32754:10;:27;32750:998;;;33017:24;;32903:10;;32884:113;;-1:-1:-1;;;32884:113:0;;-1:-1:-1;;;;;32903:10:0;;;;32884:53;;:113;;32964:10;;32884:113;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32829:8;;32820:40;;-1:-1:-1;;;32820:40:0;;-1:-1:-1;;;;;32829:8:0;;;;32820:28;;:40;;32849:10;;32820:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:177;;;;:::i;:::-;:221;32798:939;;;33076:13;26156:2;33141:6;33092:25;:15;22034:14;;21942:114;33092:25;:55;;;;:::i;:::-;:90;;;;:::i;:::-;33076:106;;33213:2;33205:5;:10;33201:521;;;33240:20;33263:10;33271:2;33263:5;:10;:::i;:::-;33356:6;;;33349:46;;-1:-1:-1;;;33349:46:0;;33240:33;;-1:-1:-1;33296:21:0;;-1:-1:-1;;;;;33356:6:0;;;;33349:34;;:46;;33384:10;;33349:46;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33320:75;;:1;:75;:::i;:::-;33296:99;;33448:13;33433:12;:28;:109;;33529:13;33433:109;;;33489:12;33433:109;33418:124;;33570:9;33565:138;33589:12;33585:1;:16;33565:138;;;33642:6;;;33635:44;;-1:-1:-1;;;33635:44:0;;-1:-1:-1;;;;;33642:6:0;;;;33635:32;;:44;;33668:10;;33635:44;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;33603:3:0;;;;:::i;:::-;;;;33565:138;;;;33217:505;;33201:521;33057:680;32798:939;26211:3;33810:6;33782:25;:15;22034:14;;21942:114;33782:25;:34;;;;:::i;:::-;:56;33760:133;;;;-1:-1:-1;;;33760:133:0;;;;;;;:::i;:::-;33904:19;;33936:199;33960:6;33956:1;:10;33936:199;;;33988:27;:15;22153:19;;22171:1;22153:19;;;22064:127;33988:27;34044:15;22034:14;34030:39;-1:-1:-1;34084:39:0;17755:10;34104:11;34117:1;34084:39;;;;;;;;;;;;:5;:39::i;:::-;33968:3;;;;:::i;:::-;;;;33936:199;;38568:401;-1:-1:-1;;;;;38776:20:0;;17755:10;38776:20;;:60;;-1:-1:-1;38800:36:0;38817:4;17755:10;38278:218;:::i;38800:36::-;38754:151;;;;-1:-1:-1;;;38754:151:0;;18200:2:1;38754:151:0;;;18182:21:1;18239:2;18219:18;;;18212:30;18278:34;18258:18;;;18251:62;-1:-1:-1;;;18329:18:1;;;18322:39;18378:19;;38754:151:0;17998:405:1;38754:151:0;38916:45;38934:4;38940:2;38944;38948:6;38956:4;38916:17;:45::i;20897:201::-;17755:10;20208:7;:5;:7::i;:::-;-1:-1:-1;;;;;20208:23:0;;20200:68;;;;-1:-1:-1;;;20200:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20986:22:0;::::1;20978:73;;;::::0;-1:-1:-1;;;20978:73:0;;17793:2:1;20978:73:0::1;::::0;::::1;17775:21:1::0;17832:2;17812:18;;;17805:30;17871:34;17851:18;;;17844:62;-1:-1:-1;;;17922:18:1;;;17915:36;17968:19;;20978:73:0::1;17591:402:1::0;20978:73:0::1;21062:28;21081:8;21062:18;:28::i;31821:92::-:0;17755:10;20208:7;:5;:7::i;:::-;-1:-1:-1;;;;;20208:23:0;;20200:68;;;;-1:-1:-1;;;20200:68:0;;;;;;;:::i;:::-;31889:5:::1;:16:::0;31821:92::o;22442:112::-;22523:23;;22442:112::o;22881:723::-;22937:13;23158:10;23154:53;;-1:-1:-1;;23185:10:0;;;;;;;;;;;;-1:-1:-1;;;23185:10:0;;;;;22881:723::o;23154:53::-;23232:5;23217:12;23273:78;23280:9;;23273:78;;23306:8;;;;:::i;:::-;;-1:-1:-1;23329:10:0;;-1:-1:-1;23337:2:0;23329:10;;:::i;:::-;;;23273:78;;;23361:19;23393:6;-1:-1:-1;;;;;23383:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23383:17:0;;23361:39;;23411:154;23418:10;;23411:154;;23445:11;23455:1;23445:11;;:::i;:::-;;-1:-1:-1;23514:10:0;23522:2;23514:5;:10;:::i;:::-;23501:24;;:2;:24;:::i;:::-;23488:39;;23471:6;23478;23471:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;23471:56:0;;;;;;;;-1:-1:-1;23542:11:0;23551:2;23542:11;;:::i;:::-;;;23411:154;;;23589:6;22881:723;-1:-1:-1;;;;22881:723:0:o;44224:1236::-;-1:-1:-1;;;;;44377:16:0;;44369:62;;;;-1:-1:-1;;;44369:62:0;;26233:2:1;44369:62:0;;;26215:21:1;26272:2;26252:18;;;26245:30;26311:34;26291:18;;;26284:62;-1:-1:-1;;;26362:18:1;;;26355:31;26403:19;;44369:62:0;26031:397:1;44369:62:0;44459:1;44450:6;:10;44442:47;;;;-1:-1:-1;;;44442:47:0;;18610:2:1;44442:47:0;;;18592:21:1;18649:2;18629:18;;;18622:30;-1:-1:-1;;;18668:18:1;;;18661:54;18732:18;;44442:47:0;18408:348:1;44442:47:0;26211:3;44508:2;:24;44500:57;;;;-1:-1:-1;;;44500:57:0;;19390:2:1;44500:57:0;;;19372:21:1;19429:2;19409:18;;;19402:30;-1:-1:-1;;;19448:18:1;;;19441:50;19508:18;;44500:57:0;19188:344:1;44500:57:0;17755:10;44570:16;44635:21;44653:2;44635:17;:21::i;:::-;44612:44;;44667:24;44694:25;44712:6;44694:17;:25::i;:::-;44667:52;;45025:6;45035:1;45025:11;45021:108;;;45067:2;45053:7;45061:2;45053:11;;;;;;;:::i;:::-;;:16;;-1:-1:-1;;;;;;45053:16:0;-1:-1:-1;;;;;45053:16:0;;;;;;45100:13;;-1:-1:-1;45100:13:0;;;:9;:13;;;;;;:17;;-1:-1:-1;45100:17:0;:::i;:::-;-1:-1:-1;;;;;45084:13:0;;;;;;:9;:13;;;;;:33;45021:108;45146:52;;;26789:25:1;;;26845:2;26830:18;;26823:34;;;-1:-1:-1;;;;;45146:52:0;;;;45179:1;;45146:52;;;;-1:-1:-1;;;;;;;;;;;45146:52:0;26762:18:1;45146:52:0;;;;;;;45289:163;45334:8;45365:1;45382:2;45399;45416:6;45437:4;45289:30;:163::i;:::-;44358:1102;;;44224:1236;;;;:::o;41536:1368::-;41777:7;:14;41763:3;:10;:28;41741:118;;;;-1:-1:-1;;;41741:118:0;;25824:2:1;41741:118:0;;;25806:21:1;25863:2;25843:18;;;25836:30;25902:34;25882:18;;;25875:62;-1:-1:-1;;;25953:18:1;;;25946:38;26001:19;;41741:118:0;25622:404:1;41741:118:0;-1:-1:-1;;;;;41878:16:0;;41870:66;;;;-1:-1:-1;;;41870:66:0;;;;;;;:::i;:::-;17755:10;41949:16;;42093:380;42117:3;:10;42113:1;:14;42093:380;;;42149:10;42162:3;42166:1;42162:6;;;;;;;;:::i;:::-;;;;;;;42149:19;;42226:4;-1:-1:-1;;;;;42211:19:0;:7;42219:2;42211:11;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;42211:11:0;:19;:37;;;;;42247:1;42234:7;42242:1;42234:10;;;;;;;;:::i;:::-;;;;;;;:14;42211:37;42185:141;;;;-1:-1:-1;;;42185:141:0;;;;;;;:::i;:::-;42347:7;42355:1;42347:10;;;;;;;;:::i;:::-;;;;;;;42361:1;42347:15;42343:119;;;42398:2;-1:-1:-1;;;;;42383:17:0;:7;42391:2;42383:11;;;;;;;:::i;:::-;-1:-1:-1;42432:14:0;;-1:-1:-1;42432:10:0;;-1:-1:-1;42383:11:0;42432:14;:::i;:::-;42419:27;;42343:119;-1:-1:-1;42129:3:0;;;:::i;:::-;;;42093:380;;;-1:-1:-1;;;;;;42499:13:0;;;;;;:9;:13;;;;;;:26;;42515:10;;42499:26;:::i;:::-;-1:-1:-1;;;;;42483:13:0;;;;;;;:9;:13;;;;;;:42;;;;42554:15;;;;;;;:28;;42572:10;;42554:28;:::i;:::-;-1:-1:-1;;;;;42536:15:0;;;;;;;:9;:15;;;;;;;:46;;;;42600:47;;;;;;42536:15;42600:47;;;;;;;42634:3;;42639:7;;42600:47;:::i;:::-;;;;;;;;42732:164;42782:8;42805:4;42824:2;42841:3;42859:7;42881:4;42732:35;:164::i;10981:317::-;11096:6;11071:21;:31;;11063:73;;;;-1:-1:-1;;;11063:73:0;;19739:2:1;11063:73:0;;;19721:21:1;19778:2;19758:18;;;19751:30;19817:31;19797:18;;;19790:59;19866:18;;11063:73:0;19537:353:1;11063:73:0;11150:12;11168:9;-1:-1:-1;;;;;11168:14:0;11190:6;11168:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11149:52;;;11220:7;11212:78;;;;-1:-1:-1;;;11212:78:0;;18963:2:1;11212:78:0;;;18945:21:1;19002:2;18982:18;;;18975:30;19041:34;19021:18;;;19014:62;-1:-1:-1;;;19092:18:1;;;19085:56;19158:19;;11212:78:0;18761:422:1;11212:78:0;11052:246;10981:317;;:::o;21258:191::-;21332:16;21351:6;;-1:-1:-1;;;;;21368:17:0;;;-1:-1:-1;;;;;;21368:17:0;;;;;;21401:40;;21351:6;;;;;;;21401:40;;21332:16;21401:40;21321:128;21258:191;:::o;43748:88::-;43815:13;;;;:4;;:13;;;;;:::i;47813:372::-;47984:8;-1:-1:-1;;;;;47974:18:0;:6;-1:-1:-1;;;;;47974:18:0;;;47952:109;;;;-1:-1:-1;;;47952:109:0;;25004:2:1;47952:109:0;;;24986:21:1;25043:2;25023:18;;;25016:30;25082:34;25062:18;;;25055:62;-1:-1:-1;;;25133:18:1;;;25126:39;25182:19;;47952:109:0;24802:405:1;47952:109:0;-1:-1:-1;;;;;48072:26:0;;;;;;;:18;:26;;;;;;;;:36;;;;;;;;;;;;;:47;;-1:-1:-1;;48072:47:0;;;;;;;;;;48135:42;;15537:41:1;;;48135:42:0;;15510:18:1;48135:42:0;;;;;;;47813:372;;;:::o;24060:910::-;24185:4;24225;24185;24242:605;24266:5;:12;24262:1;:16;24242:605;;;24300:20;24323:5;24329:1;24323:8;;;;;;;;:::i;:::-;;;;;;;24300:31;;24368:12;24352;:28;24348:488;;24527:44;;;;;;10751:19:1;;;10786:12;;;10779:28;;;10823:12;;24527:44:0;;;;;;;;;;;;24495:95;;;;;;24480:110;;24348:488;;;24757:44;;;;;;10751:19:1;;;10786:12;;;10779:28;;;10823:12;;24757:44:0;;;;;;;;;;;;24725:95;;;;;;24710:110;;24348:488;-1:-1:-1;24280:3:0;;;;:::i;:::-;;;;24242:605;;;-1:-1:-1;24942:20:0;;;;24060:910;-1:-1:-1;;;24060:910:0:o;39952:1226::-;-1:-1:-1;;;;;40140:16:0;;40132:66;;;;-1:-1:-1;;;40132:66:0;;;;;;;:::i;:::-;17755:10;40211:16;40276:21;40294:2;40276:17;:21::i;:::-;40253:44;;40308:24;40335:25;40353:6;40335:17;:25::i;:::-;40308:52;;40483:4;-1:-1:-1;;;;;40468:19:0;:7;40476:2;40468:11;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;40468:11:0;:19;:33;;;;;40500:1;40491:6;:10;40468:33;40446:125;;;;-1:-1:-1;;;40446:125:0;;;;;;;:::i;:::-;40798:6;40808:1;40798:11;40794:160;;;40840:2;40826:7;40834:2;40826:11;;;;;;;:::i;:::-;;:16;;-1:-1:-1;;;;;;40826:16:0;-1:-1:-1;;;;;40826:16:0;;;;;;40873:13;;-1:-1:-1;40873:13:0;;;:9;:13;;;;;;:17;;-1:-1:-1;40873:17:0;:::i;:::-;-1:-1:-1;;;;;40857:13:0;;;;;;;:9;:13;;;;;;:33;;;;40923:15;;;;;;;:19;;40941:1;;40923:19;:::i;:::-;-1:-1:-1;;;;;40905:15:0;;;;;;:9;:15;;;;;:37;40794:160;41002:2;-1:-1:-1;;;;;40971:46:0;40996:4;-1:-1:-1;;;;;40971:46:0;40986:8;-1:-1:-1;;;;;40971:46:0;-1:-1:-1;;;;;;;;;;;41006:2:0;41010:6;40971:46;;;;;;26789:25:1;;;26845:2;26830:18;;26823:34;26777:2;26762:18;;26615:248;40971:46:0;;;;;;;;41102:68;41133:8;41143:4;41149:2;41153;41157:6;41165:4;41102:30;:68::i;:::-;40121:1057;;;39952:1226;;;;;:::o;52434:231::-;52587:16;;;52601:1;52587:16;;;;;;;;;52528;;52562:22;;52587:16;;;;;;;;;;;;-1:-1:-1;52587:16:0;52562:41;;52625:7;52614:5;52620:1;52614:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;52652:5;52434:231;-1:-1:-1;;52434:231:0:o;49141:221::-;;;;;;;:::o;50545:898::-;50760:15;:2;-1:-1:-1;;;;;50760:13:0;;:15::i;:::-;50756:680;;;50813:196;;-1:-1:-1;;;50813:196:0;;-1:-1:-1;;;;;50813:38:0;;;;;:196;;50874:8;;50905:4;;50932:2;;50957:6;;50986:4;;50813:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50813:196:0;;;;;;;;-1:-1:-1;;50813:196:0;;;;;;;;;;;;:::i;:::-;;;50792:633;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;51298:6;51291:14;;-1:-1:-1;;;51291:14:0;;;;;;;;:::i;50792:633::-;;;51347:62;;-1:-1:-1;;;51347:62:0;;16197:2:1;51347:62:0;;;16179:21:1;16236:2;16216:18;;;16209:30;16275:34;16255:18;;;16248:62;-1:-1:-1;;;16326:18:1;;;16319:50;16386:19;;51347:62:0;15995:416:1;50792:633:0;-1:-1:-1;;;;;;51072:55:0;;-1:-1:-1;;;51072:55:0;51068:154;;51152:50;;-1:-1:-1;;;51152:50:0;;;;;;;:::i;51451:975::-;51691:15;:2;-1:-1:-1;;;;;51691:13:0;;:15::i;:::-;51687:732;;;51744:203;;-1:-1:-1;;;51744:203:0;;-1:-1:-1;;;;;51744:43:0;;;;;:203;;51810:8;;51841:4;;51868:3;;51894:7;;51924:4;;51744:203;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51744:203:0;;;;;;;;-1:-1:-1;;51744:203:0;;;;;;;;;;;;:::i;:::-;;;51723:685;;;;:::i;:::-;-1:-1:-1;;;;;;52032:60:0;;-1:-1:-1;;;52032:60:0;52006:199;;52135:50;;-1:-1:-1;;;52135:50:0;;;;;;;:::i;9720:326::-;-1:-1:-1;;;;;10015:19:0;;:23;;;9720:326::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:468:1;78:5;-1:-1:-1;;;;;101:30:1;;98:56;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:1;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:45;;;369:1;366;359:12;328:45;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;14:468;;;;;:::o;487:173::-;555:20;;-1:-1:-1;;;;;604:31:1;;594:42;;584:70;;650:1;647;640:12;665:367;728:8;738:6;792:3;785:4;777:6;773:17;769:27;759:55;;810:1;807;800:12;759:55;-1:-1:-1;833:20:1;;-1:-1:-1;;;;;865:30:1;;862:50;;;908:1;905;898:12;862:50;945:4;937:6;933:17;921:29;;1005:3;998:4;988:6;985:1;981:14;973:6;969:27;965:38;962:47;959:67;;;1022:1;1019;1012:12;959:67;665:367;;;;;:::o;1037:735::-;1091:5;1144:3;1137:4;1129:6;1125:17;1121:27;1111:55;;1162:1;1159;1152:12;1111:55;1198:6;1185:20;1224:4;1247:43;1287:2;1247:43;:::i;:::-;1319:2;1313:9;1331:31;1359:2;1351:6;1331:31;:::i;:::-;1397:18;;;1431:15;;;;-1:-1:-1;1466:15:1;;;1516:1;1512:10;;;1500:23;;1496:32;;1493:41;-1:-1:-1;1490:61:1;;;1547:1;1544;1537:12;1490:61;1569:1;1579:163;1593:2;1590:1;1587:9;1579:163;;;1650:17;;1638:30;;1688:12;;;;1720;;;;1611:1;1604:9;1579:163;;;-1:-1:-1;1760:6:1;;1037:735;-1:-1:-1;;;;;;;1037:735:1:o;1777:220::-;1819:5;1872:3;1865:4;1857:6;1853:17;1849:27;1839:55;;1890:1;1887;1880:12;1839:55;1912:79;1987:3;1978:6;1965:20;1958:4;1950:6;1946:17;1912:79;:::i;:::-;1903:88;1777:220;-1:-1:-1;;;1777:220:1:o;2002:186::-;2061:6;2114:2;2102:9;2093:7;2089:23;2085:32;2082:52;;;2130:1;2127;2120:12;2082:52;2153:29;2172:9;2153:29;:::i;2193:260::-;2261:6;2269;2322:2;2310:9;2301:7;2297:23;2293:32;2290:52;;;2338:1;2335;2328:12;2290:52;2361:29;2380:9;2361:29;:::i;:::-;2351:39;;2409:38;2443:2;2432:9;2428:18;2409:38;:::i;:::-;2399:48;;2193:260;;;;;:::o;2458:943::-;2612:6;2620;2628;2636;2644;2697:3;2685:9;2676:7;2672:23;2668:33;2665:53;;;2714:1;2711;2704:12;2665:53;2737:29;2756:9;2737:29;:::i;:::-;2727:39;;2785:38;2819:2;2808:9;2804:18;2785:38;:::i;:::-;2775:48;-1:-1:-1;2874:2:1;2859:18;;2846:32;-1:-1:-1;;;;;2927:14:1;;;2924:34;;;2954:1;2951;2944:12;2924:34;2977:61;3030:7;3021:6;3010:9;3006:22;2977:61;:::i;:::-;2967:71;;3091:2;3080:9;3076:18;3063:32;3047:48;;3120:2;3110:8;3107:16;3104:36;;;3136:1;3133;3126:12;3104:36;3159:63;3214:7;3203:8;3192:9;3188:24;3159:63;:::i;:::-;3149:73;;3275:3;3264:9;3260:19;3247:33;3231:49;;3305:2;3295:8;3292:16;3289:36;;;3321:1;3318;3311:12;3289:36;;3344:51;3387:7;3376:8;3365:9;3361:24;3344:51;:::i;:::-;3334:61;;;2458:943;;;;;;;;:::o;3406:606::-;3510:6;3518;3526;3534;3542;3595:3;3583:9;3574:7;3570:23;3566:33;3563:53;;;3612:1;3609;3602:12;3563:53;3635:29;3654:9;3635:29;:::i;:::-;3625:39;;3683:38;3717:2;3706:9;3702:18;3683:38;:::i;:::-;3673:48;-1:-1:-1;3768:2:1;3753:18;;3740:32;;-1:-1:-1;3819:2:1;3804:18;;3791:32;;-1:-1:-1;3874:3:1;3859:19;;3846:33;-1:-1:-1;;;;;3891:30:1;;3888:50;;;3934:1;3931;3924:12;3888:50;3957:49;3998:7;3989:6;3978:9;3974:22;3957:49;:::i;4017:315::-;4082:6;4090;4143:2;4131:9;4122:7;4118:23;4114:32;4111:52;;;4159:1;4156;4149:12;4111:52;4182:29;4201:9;4182:29;:::i;:::-;4172:39;;4261:2;4250:9;4246:18;4233:32;4274:28;4296:5;4274:28;:::i;:::-;4321:5;4311:15;;;4017:315;;;;;:::o;4337:254::-;4405:6;4413;4466:2;4454:9;4445:7;4441:23;4437:32;4434:52;;;4482:1;4479;4472:12;4434:52;4505:29;4524:9;4505:29;:::i;:::-;4495:39;4581:2;4566:18;;;;4553:32;;-1:-1:-1;;;4337:254:1:o;4596:579::-;4700:6;4708;4716;4724;4777:2;4765:9;4756:7;4752:23;4748:32;4745:52;;;4793:1;4790;4783:12;4745:52;4816:29;4835:9;4816:29;:::i;:::-;4806:39;-1:-1:-1;4892:2:1;4877:18;;4864:32;;-1:-1:-1;4947:2:1;4932:18;;4919:32;-1:-1:-1;;;;;4963:30:1;;4960:50;;;5006:1;5003;4996:12;4960:50;5045:70;5107:7;5098:6;5087:9;5083:22;5045:70;:::i;:::-;4596:579;;;;-1:-1:-1;5134:8:1;-1:-1:-1;;;;4596:579:1:o;5180:1219::-;5298:6;5306;5359:2;5347:9;5338:7;5334:23;5330:32;5327:52;;;5375:1;5372;5365:12;5327:52;5402:23;;-1:-1:-1;;;;;5474:14:1;;;5471:34;;;5501:1;5498;5491:12;5471:34;5539:6;5528:9;5524:22;5514:32;;5584:7;5577:4;5573:2;5569:13;5565:27;5555:55;;5606:1;5603;5596:12;5555:55;5642:2;5629:16;5664:4;5687:43;5727:2;5687:43;:::i;:::-;5759:2;5753:9;5771:31;5799:2;5791:6;5771:31;:::i;:::-;5837:18;;;5871:15;;;;-1:-1:-1;5906:11:1;;;5948:1;5944:10;;;5936:19;;5932:28;;5929:41;-1:-1:-1;5926:61:1;;;5983:1;5980;5973:12;5926:61;6005:1;5996:10;;6015:169;6029:2;6026:1;6023:9;6015:169;;;6086:23;6105:3;6086:23;:::i;:::-;6074:36;;6047:1;6040:9;;;;;6130:12;;;;6162;;6015:169;;;-1:-1:-1;6203:6:1;-1:-1:-1;;6247:18:1;;6234:32;;-1:-1:-1;;6278:16:1;;;6275:36;;;6307:1;6304;6297:12;6275:36;;6330:63;6385:7;6374:8;6363:9;6359:24;6330:63;:::i;:::-;6320:73;;;5180:1219;;;;;:::o;6404:954::-;6499:6;6530:2;6573;6561:9;6552:7;6548:23;6544:32;6541:52;;;6589:1;6586;6579:12;6541:52;6616:16;;-1:-1:-1;;;;;6644:30:1;;6641:50;;;6687:1;6684;6677:12;6641:50;6710:22;;6763:4;6755:13;;6751:27;-1:-1:-1;6741:55:1;;6792:1;6789;6782:12;6741:55;6821:2;6815:9;6843:43;6883:2;6843:43;:::i;:::-;6915:2;6909:9;6927:31;6955:2;6947:6;6927:31;:::i;:::-;6993:18;;;7027:15;;;;-1:-1:-1;7062:11:1;;;7104:1;7100:10;;;7092:19;;7088:28;;7085:41;-1:-1:-1;7082:61:1;;;7139:1;7136;7129:12;7082:61;7161:1;7152:10;;7171:156;7185:2;7182:1;7179:9;7171:156;;;7242:10;;7230:23;;7203:1;7196:9;;;;;7273:12;;;;7305;;7171:156;;;-1:-1:-1;7346:6:1;6404:954;-1:-1:-1;;;;;;;6404:954:1:o;7363:241::-;7419:6;7472:2;7460:9;7451:7;7447:23;7443:32;7440:52;;;7488:1;7485;7478:12;7440:52;7527:9;7514:23;7546:28;7568:5;7546:28;:::i;7609:245::-;7676:6;7729:2;7717:9;7708:7;7704:23;7700:32;7697:52;;;7745:1;7742;7735:12;7697:52;7777:9;7771:16;7796:28;7818:5;7796:28;:::i;7859:245::-;7917:6;7970:2;7958:9;7949:7;7945:23;7941:32;7938:52;;;7986:1;7983;7976:12;7938:52;8025:9;8012:23;8044:30;8068:5;8044:30;:::i;8109:249::-;8178:6;8231:2;8219:9;8210:7;8206:23;8202:32;8199:52;;;8247:1;8244;8237:12;8199:52;8279:9;8273:16;8298:30;8322:5;8298:30;:::i;8363:450::-;8432:6;8485:2;8473:9;8464:7;8460:23;8456:32;8453:52;;;8501:1;8498;8491:12;8453:52;8528:23;;-1:-1:-1;;;;;8563:30:1;;8560:50;;;8606:1;8603;8596:12;8560:50;8629:22;;8682:4;8674:13;;8670:27;-1:-1:-1;8660:55:1;;8711:1;8708;8701:12;8660:55;8734:73;8799:7;8794:2;8781:16;8776:2;8772;8768:11;8734:73;:::i;8818:180::-;8877:6;8930:2;8918:9;8909:7;8905:23;8901:32;8898:52;;;8946:1;8943;8936:12;8898:52;-1:-1:-1;8969:23:1;;8818:180;-1:-1:-1;8818:180:1:o;9003:184::-;9073:6;9126:2;9114:9;9105:7;9101:23;9097:32;9094:52;;;9142:1;9139;9132:12;9094:52;-1:-1:-1;9165:16:1;;9003:184;-1:-1:-1;9003:184:1:o;9192:505::-;9287:6;9295;9303;9356:2;9344:9;9335:7;9331:23;9327:32;9324:52;;;9372:1;9369;9362:12;9324:52;9395:23;;;-1:-1:-1;9469:2:1;9454:18;;9441:32;-1:-1:-1;;;;;9485:30:1;;9482:50;;;9528:1;9525;9518:12;9482:50;9567:70;9629:7;9620:6;9609:9;9605:22;9567:70;:::i;:::-;9192:505;;9656:8;;-1:-1:-1;9541:96:1;;-1:-1:-1;;;;9192:505:1:o;9702:435::-;9755:3;9793:5;9787:12;9820:6;9815:3;9808:19;9846:4;9875:2;9870:3;9866:12;9859:19;;9912:2;9905:5;9901:14;9933:1;9943:169;9957:6;9954:1;9951:13;9943:169;;;10018:13;;10006:26;;10052:12;;;;10087:15;;;;9979:1;9972:9;9943:169;;;-1:-1:-1;10128:3:1;;9702:435;-1:-1:-1;;;;;9702:435:1:o;10142:257::-;10183:3;10221:5;10215:12;10248:6;10243:3;10236:19;10264:63;10320:6;10313:4;10308:3;10304:14;10297:4;10290:5;10286:16;10264:63;:::i;:::-;10381:2;10360:15;-1:-1:-1;;10356:29:1;10347:39;;;;10388:4;10343:50;;10142:257;-1:-1:-1;;10142:257:1:o;10404:185::-;10446:3;10484:5;10478:12;10499:52;10544:6;10539:3;10532:4;10525:5;10521:16;10499:52;:::i;:::-;10567:16;;;;;10404:185;-1:-1:-1;;10404:185:1:o;10846:1174::-;11022:3;11051:1;11084:6;11078:13;11114:3;11136:1;11164:9;11160:2;11156:18;11146:28;;11224:2;11213:9;11209:18;11246;11236:61;;11290:4;11282:6;11278:17;11268:27;;11236:61;11316:2;11364;11356:6;11353:14;11333:18;11330:38;11327:165;;;-1:-1:-1;;;11391:33:1;;11447:4;11444:1;11437:15;11477:4;11398:3;11465:17;11327:165;11508:18;11535:104;;;;11653:1;11648:320;;;;11501:467;;11535:104;-1:-1:-1;;11568:24:1;;11556:37;;11613:16;;;;-1:-1:-1;11535:104:1;;11648:320;27129:1;27122:14;;;27166:4;27153:18;;11743:1;11757:165;11771:6;11768:1;11765:13;11757:165;;;11849:14;;11836:11;;;11829:35;11892:16;;;;11786:10;;11757:165;;;11761:3;;11951:6;11946:3;11942:16;11935:23;;11501:467;;;;;;;11984:30;12010:3;12002:6;11984:30;:::i;:::-;11977:37;10846:1174;-1:-1:-1;;;;;10846:1174:1:o;12526:203::-;-1:-1:-1;;;;;12690:32:1;;;;12672:51;;12660:2;12645:18;;12526:203::o;12734:826::-;-1:-1:-1;;;;;13131:15:1;;;13113:34;;13183:15;;13178:2;13163:18;;13156:43;13093:3;13230:2;13215:18;;13208:31;;;13056:4;;13262:57;;13299:19;;13291:6;13262:57;:::i;:::-;13367:9;13359:6;13355:22;13350:2;13339:9;13335:18;13328:50;13401:44;13438:6;13430;13401:44;:::i;:::-;13387:58;;13494:9;13486:6;13482:22;13476:3;13465:9;13461:19;13454:51;13522:32;13547:6;13539;13522:32;:::i;:::-;13514:40;12734:826;-1:-1:-1;;;;;;;;12734:826:1:o;13565:560::-;-1:-1:-1;;;;;13862:15:1;;;13844:34;;13914:15;;13909:2;13894:18;;13887:43;13961:2;13946:18;;13939:34;;;14004:2;13989:18;;13982:34;;;13824:3;14047;14032:19;;14025:32;;;13787:4;;14074:45;;14099:19;;14091:6;14074:45;:::i;:::-;14066:53;13565:560;-1:-1:-1;;;;;;;13565:560:1:o;14130:526::-;14314:4;14299:20;;14303:9;14396:6;14272:4;14430:220;14444:4;14441:1;14438:11;14430:220;;;14507:13;;-1:-1:-1;;;;;14503:39:1;14491:52;;14566:4;14590:12;;;;14625:15;;;;14539:1;14457:9;14430:220;;;14434:3;;;14130:526;;;;:::o;14661:261::-;14840:2;14829:9;14822:21;14803:4;14860:56;14912:2;14901:9;14897:18;14889:6;14860:56;:::i;14927:465::-;15184:2;15173:9;15166:21;15147:4;15210:56;15262:2;15251:9;15247:18;15239:6;15210:56;:::i;:::-;15314:9;15306:6;15302:22;15297:2;15286:9;15282:18;15275:50;15342:44;15379:6;15371;15342:44;:::i;15771:219::-;15920:2;15909:9;15902:21;15883:4;15940:44;15980:2;15969:9;15965:18;15957:6;15940:44;:::i;16416:404::-;16618:2;16600:21;;;16657:2;16637:18;;;16630:30;16696:34;16691:2;16676:18;;16669:62;-1:-1:-1;;;16762:2:1;16747:18;;16740:38;16810:3;16795:19;;16416:404::o;16825:349::-;17027:2;17009:21;;;17066:2;17046:18;;;17039:30;-1:-1:-1;;;17100:2:1;17085:18;;17078:55;17165:2;17150:18;;16825:349::o;19895:345::-;20097:2;20079:21;;;20136:2;20116:18;;;20109:30;-1:-1:-1;;;20170:2:1;20155:18;;20148:51;20231:2;20216:18;;19895:345::o;20655:352::-;20857:2;20839:21;;;20896:2;20876:18;;;20869:30;-1:-1:-1;;;20930:2:1;20915:18;;20908:58;20998:2;20983:18;;20655:352::o;21012:401::-;21214:2;21196:21;;;21253:2;21233:18;;;21226:30;21292:34;21287:2;21272:18;;21265:62;-1:-1:-1;;;21358:2:1;21343:18;;21336:35;21403:3;21388:19;;21012:401::o;21837:406::-;22039:2;22021:21;;;22078:2;22058:18;;;22051:30;22117:34;22112:2;22097:18;;22090:62;-1:-1:-1;;;22183:2:1;22168:18;;22161:40;22233:3;22218:19;;21837:406::o;22248:356::-;22450:2;22432:21;;;22469:18;;;22462:30;22528:34;22523:2;22508:18;;22501:62;22595:2;22580:18;;22248:356::o;23374:351::-;23576:2;23558:21;;;23615:2;23595:18;;;23588:30;-1:-1:-1;;;23649:2:1;23634:18;;23627:57;23716:2;23701:18;;23374:351::o;26868:183::-;26928:4;-1:-1:-1;;;;;26950:30:1;;26947:56;;;26983:18;;:::i;:::-;-1:-1:-1;27028:1:1;27024:14;27040:4;27020:25;;26868:183::o;27182:128::-;27222:3;27253:1;27249:6;27246:1;27243:13;27240:39;;;27259:18;;:::i;:::-;-1:-1:-1;27295:9:1;;27182:128::o;27315:120::-;27355:1;27381;27371:35;;27386:18;;:::i;:::-;-1:-1:-1;27420:9:1;;27315:120::o;27440:168::-;27480:7;27546:1;27542;27538:6;27534:14;27531:1;27528:21;27523:1;27516:9;27509:17;27505:45;27502:71;;;27553:18;;:::i;:::-;-1:-1:-1;27593:9:1;;27440:168::o;27613:125::-;27653:4;27681:1;27678;27675:8;27672:34;;;27686:18;;:::i;:::-;-1:-1:-1;27723:9:1;;27613:125::o;27743:258::-;27815:1;27825:113;27839:6;27836:1;27833:13;27825:113;;;27915:11;;;27909:18;27896:11;;;27889:39;27861:2;27854:10;27825:113;;;27956:6;27953:1;27950:13;27947:48;;;-1:-1:-1;;27991:1:1;27973:16;;27966:27;27743:258::o;28006:380::-;28085:1;28081:12;;;;28128;;;28149:61;;28203:4;28195:6;28191:17;28181:27;;28149:61;28256:2;28248:6;28245:14;28225:18;28222:38;28219:161;;;28302:10;28297:3;28293:20;28290:1;28283:31;28337:4;28334:1;28327:15;28365:4;28362:1;28355:15;28219:161;;28006:380;;;:::o;28391:249::-;28501:2;28482:13;;-1:-1:-1;;28478:27:1;28466:40;;-1:-1:-1;;;;;28521:34:1;;28557:22;;;28518:62;28515:88;;;28583:18;;:::i;:::-;28619:2;28612:22;-1:-1:-1;;28391:249:1:o;28645:135::-;28684:3;-1:-1:-1;;28705:17:1;;28702:43;;;28725:18;;:::i;:::-;-1:-1:-1;28772:1:1;28761:13;;28645:135::o;28785:112::-;28817:1;28843;28833:35;;28848:18;;:::i;:::-;-1:-1:-1;28882:9:1;;28785:112::o;28902:127::-;28963:10;28958:3;28954:20;28951:1;28944:31;28994:4;28991:1;28984:15;29018:4;29015:1;29008:15;29034:127;29095:10;29090:3;29086:20;29083:1;29076:31;29126:4;29123:1;29116:15;29150:4;29147:1;29140:15;29166:127;29227:10;29222:3;29218:20;29215:1;29208:31;29258:4;29255:1;29248:15;29282:4;29279:1;29272:15;29298:127;29359:10;29354:3;29350:20;29347:1;29340:31;29390:4;29387:1;29380:15;29414:4;29411:1;29404:15;29430:179;29465:3;29507:1;29489:16;29486:23;29483:120;;;29553:1;29550;29547;29532:23;-1:-1:-1;29590:1:1;29584:8;29579:3;29575:18;29483:120;29430:179;:::o;29614:671::-;29653:3;29695:4;29677:16;29674:26;29671:39;;;29614:671;:::o;29671:39::-;29737:2;29731:9;-1:-1:-1;;29802:16:1;29798:25;;29795:1;29731:9;29774:50;29847:11;;29877:16;-1:-1:-1;;;;;29945:14:1;;;29976:4;29964:17;;29961:25;-1:-1:-1;29942:45:1;29939:58;;;29990:5;;;;;29614:671;:::o;29939:58::-;30027:6;30021:4;30017:17;30006:28;;30063:3;30057:10;30090:2;30082:6;30079:14;30076:27;;;30096:5;;;;;;29614:671;:::o;30076:27::-;30180:2;30161:16;30155:4;30151:27;30147:36;30140:4;30131:6;30126:3;30122:16;30118:27;30115:69;30112:82;;;30187:5;;;;;;29614:671;:::o;30112:82::-;30203:57;30254:4;30245:6;30237;30233:19;30229:30;30223:4;30203:57;:::i;:::-;-1:-1:-1;30276:3:1;;29614:671;-1:-1:-1;;;;;29614:671:1:o;30290:118::-;30376:5;30369:13;30362:21;30355:5;30352:32;30342:60;;30398:1;30395;30388:12;30413:131;-1:-1:-1;;;;;;30487:32:1;;30477:43;;30467:71;;30534:1;30531;30524:12
Swarm Source
ipfs://1d7b87a3a767e28b6f5e63d33ffde183bd36a1a30aa137101b3e51aadfd435e4
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.