Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 29 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Approval For... | 15682011 | 1219 days ago | IN | 0 ETH | 0.00043471 | ||||
| Mint | 15227041 | 1289 days ago | IN | 0.05 ETH | 0.00461255 | ||||
| Mint | 15143211 | 1302 days ago | IN | 0.15 ETH | 0.00777528 | ||||
| Mint | 15143211 | 1302 days ago | IN | 0.15 ETH | 0.00988708 | ||||
| Mint | 14749840 | 1367 days ago | IN | 0.05 ETH | 0.00700873 | ||||
| Set Approval For... | 14346150 | 1430 days ago | IN | 0 ETH | 0.00113239 | ||||
| Transfer From | 14340628 | 1431 days ago | IN | 0 ETH | 0.00238192 | ||||
| Mint | 14235063 | 1447 days ago | IN | 0.05 ETH | 0.00303699 | ||||
| Mint | 14230446 | 1448 days ago | IN | 0.05 ETH | 0.00725186 | ||||
| Mint | 14230440 | 1448 days ago | IN | 0.05 ETH | 0.00511312 | ||||
| Mint | 14226865 | 1449 days ago | IN | 0.1 ETH | 0.012454 | ||||
| Mint | 14222447 | 1449 days ago | IN | 0.05 ETH | 0.00368954 | ||||
| Mint | 14220586 | 1449 days ago | IN | 0.2 ETH | 0.01667319 | ||||
| Transfer From | 14216661 | 1450 days ago | IN | 0 ETH | 0.00241034 | ||||
| Mint | 14209339 | 1451 days ago | IN | 0.05 ETH | 0.00635133 | ||||
| Mint | 14206169 | 1452 days ago | IN | 0.05 ETH | 0.00698459 | ||||
| Mint | 14204527 | 1452 days ago | IN | 0.05 ETH | 0.00804658 | ||||
| Mint | 14202796 | 1452 days ago | IN | 0.05 ETH | 0.00343739 | ||||
| Mint | 14202791 | 1452 days ago | IN | 0.1 ETH | 0.00393178 | ||||
| Set Sale State | 14202761 | 1452 days ago | IN | 0 ETH | 0.00083939 | ||||
| Mint | 14193713 | 1454 days ago | IN | 0.04 ETH | 0.00494158 | ||||
| Mint | 14193710 | 1454 days ago | IN | 0.04 ETH | 0.00726305 | ||||
| Presale List Add | 14193046 | 1454 days ago | IN | 0 ETH | 0.00316834 | ||||
| Set Sale State | 14189590 | 1454 days ago | IN | 0 ETH | 0.00123145 | ||||
| Presale List Add | 14189577 | 1454 days ago | IN | 0 ETH | 0.00260353 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
TheLastOfThem
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-02-11
*/
/*
░▀█▀░█░█░█▀▀░█░░░█▀█░█▀▀░▀█▀░█▀█░█▀▀░▀█▀░█░█░█▀▀░█▄█
░░█░░█▀█░█▀▀░█░░░█▀█░▀▀█░░█░░█░█░█▀▀░░█░░█▀█░█▀▀░█░█
░░▀░░▀░▀░▀▀▀░▀▀▀░▀░▀░▀▀▀░░▀░░▀▀▀░▀░░░░▀░░▀░▀░▀▀▀░▀░▀
*/
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
pragma solidity ^0.8.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 Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length)
internal
pure
returns (string memory)
{
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(
address(this).balance >= amount,
"Address: insufficient balance"
);
(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);
}
}
}
}
/*********************************************
*********************************************
* H e l p e r c o n t r a c t s
*/
abstract contract ReentrancyGuard {
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
modifier nonReentrant() {
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
_status = _ENTERED;
_;
_status = _NOT_ENTERED;
}
}
abstract contract Ownable {
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
constructor() {
_transferOwnership(msg.sender);
}
function owner() public view virtual returns (address) {
return _owner;
}
modifier onlyOwner() {
require(owner() == msg.sender, "Caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Invalid address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
abstract contract Sale is Ownable {
// not-active(0), presale(1), sale(2)
uint8 private _saleState;
uint256 private _priceSale;
uint256 private _pricePresale;
uint256 private _presaleListCount;
uint256 private _presaleListCap;
mapping(address => uint8) private _presaleList;
event SaleStateChanged(uint8 indexed lastState, uint8 indexed newState);
constructor() Ownable() {
_saleState = 0;
_presaleListCount = 0;
}
function setSaleState(uint8 _state) public onlyOwner {
require(_state >= 0 && _state <= 2, "Invalid state");
uint8 _lastState = _saleState;
_saleState = _state;
emit SaleStateChanged(_lastState, _state);
}
function saleState() public view virtual returns (uint8) {
return _saleState;
}
function setPricePresale(uint256 _val) public onlyOwner {
_pricePresale = _val;
}
function pricePresale() public view virtual returns (uint256) {
return _pricePresale;
}
function setPriceSale(uint256 _val) public onlyOwner {
_priceSale = _val;
}
function priceSale() public view virtual returns (uint256) {
return _priceSale;
}
function setPresaleListCap(uint256 _cap) public onlyOwner {
require(_cap >= 0, "Invalid capacity");
_presaleListCap = _cap;
}
function presaleListCap() public view virtual returns (uint256) {
return _presaleListCap;
}
function presaleListCount() public view virtual returns (uint256) {
return _presaleListCount;
}
function presaleListCheck(address _addr)
public
view
virtual
returns (bool)
{
return _presaleList[_addr] > 0;
}
function presaleListAdd(address[] memory _addresses) public onlyOwner {
uint256 len = _addresses.length;
require(
_presaleListCount + len <= _presaleListCap,
"Presale list will overflow"
);
for (uint256 i = 0; i < len; i++) {
_presaleList[_addresses[i]] = 1;
_presaleListCount++;
}
}
function presaleListRemove(address[] memory _addresses) public onlyOwner {
uint256 len = _addresses.length;
for (uint256 i = 0; i < len; i++) {
_presaleList[_addresses[i]] = 0;
_presaleListCount--;
}
}
}
/*********************************************
*********************************************
* I n t e r f a c e s
*/
interface IERC721Receiver {
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
interface IERC165 {
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
interface IERC2981 {
function royaltyInfo(uint256 tokenId, uint256 salePrice)
external
view
returns (address receiver, uint256 royaltyAmount);
}
interface IERC721Metadata {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function tokenURI(uint256 tokenId) external view returns (string memory);
}
interface IERC721 {
event Transfer(
address indexed from,
address indexed to,
uint256 indexed tokenId
);
event Approval(
address indexed owner,
address indexed approved,
uint256 indexed tokenId
);
event ApprovalForAll(
address indexed owner,
address indexed operator,
bool approved
);
function balanceOf(address owner) external view returns (uint256 balance);
function ownerOf(uint256 tokenId) external view returns (address owner);
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
function approve(address to, uint256 tokenId) external;
function getApproved(uint256 tokenId)
external
view
returns (address operator);
function setApprovalForAll(address operator, bool _approved) external;
function isApprovedForAll(address owner, address operator)
external
view
returns (bool);
}
contract TheLastOfThem is
IERC165,
IERC721,
IERC721Metadata,
IERC2981,
Sale,
ReentrancyGuard
{
using Strings for uint256;
using Address for address;
/*********************************************
*********************************************
* P r i v a t e
* m e m b e r s
*
*/
string private _name;
string private _symbol;
string private _baseURI;
bool private _baseURILocked;
uint8 private _mintCap;
uint8 private _mintCapPresale;
uint256 private _maxSupply;
uint256 private _maxSupplyPresale;
mapping(uint256 => address) private _owners;
mapping(uint256 => address) private _tokenApprovals;
mapping(address => uint256) private _balances;
mapping(address => uint8) private _mintedPresale;
mapping(address => uint8) private _minted;
mapping(address => uint8) private _mintedOwner;
mapping(address => mapping(address => bool)) private _operatorApprovals;
address private _royaltyAddr;
uint256 private _royaltyBasis;
uint256 private _lastTokenId;
constructor() Sale() ReentrancyGuard() {
_symbol = "TLOT";
_name = "TheLastOfThem";
_lastTokenId = 0;
setPricePresale(0.04 ether);
setPriceSale(0.05 ether);
setMintCapPresale(100);
setMintCap(120);
setMaxSupplyPresale(500);
setMaxSupply(4460);
setPresaleListCap(30);
setBaseURI("https://api.thelastofthem.org/nft/");
setRoyalty(0x4d26e56C11eB83f6EB80aA1D0F7507a184ea7C4d, 1000);
}
/*********************************************
*********************************************
* P u b l i c
* m e t h o d s
*
*/
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function totalSupply() public view virtual returns (uint256) {
return _lastTokenId;
}
function setRoyalty(address _addr, uint256 _val) public onlyOwner {
require(_addr != address(0), "Invalid address");
_royaltyAddr = _addr;
_royaltyBasis = _val;
}
function royaltyInfo(uint256 _tokenId, uint256 _price)
public
view
virtual
override
returns (address receiver, uint256 royaltyAmount)
{
if (_exists(_tokenId)) {
return (_royaltyAddr, (_price * _royaltyBasis) / 10000);
}
return (_royaltyAddr, 0);
}
function tokenURI(uint256 _tokenId)
public
view
virtual
override
returns (string memory)
{
require(_exists(_tokenId), "URI query for nonexistent token");
require(bytes(_baseURI).length > 0, "Base URI not set");
return string(abi.encodePacked(_baseURI, _tokenId.toString(), ".json"));
}
function setBaseURI(string memory _val) public onlyOwner {
require(!_baseURILocked, "baseURI is locked");
_baseURI = _val;
}
function lockBaseURI() public onlyOwner {
_baseURILocked = true;
}
function baseURI() public view virtual returns (string memory) {
return _baseURI;
}
function setMaxSupplyPresale(uint256 _val) public onlyOwner {
_maxSupplyPresale = _val;
}
function maxSupplyPresale() public view virtual returns (uint256) {
return _maxSupplyPresale;
}
function setMaxSupply(uint256 _val) public onlyOwner {
_maxSupply = _val;
}
function maxSupply() public view virtual returns (uint256) {
return _maxSupply;
}
function setMintCapPresale(uint8 _cap) public onlyOwner {
require(_cap >= 0, "Invalid capacity");
_mintCapPresale = _cap;
}
function mintCapPresale() public view virtual returns (uint8) {
return _mintCapPresale;
}
function setMintCap(uint8 _cap) public onlyOwner {
require(_cap >= 0, "Invalid capacity");
_mintCap = _cap;
}
function mintCap() public view virtual returns (uint8) {
return _mintCap;
}
function supportsInterface(bytes4 interfaceId)
public
pure
virtual
override
returns (bool)
{
return
interfaceId == type(IERC165).interfaceId ||
interfaceId == type(IERC2981).interfaceId ||
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId;
}
function minted(address _addr)
public
view
virtual
returns (
uint256,
uint256,
uint256,
uint256
)
{
uint256 total = _minted[_addr] +
_mintedOwner[_addr] +
_mintedPresale[_addr];
return (
total,
_mintedOwner[_addr],
_mintedPresale[_addr],
_minted[_addr]
);
}
function mint(uint8 _mintAmount) public payable {
mintTo(_mintAmount, msg.sender);
}
function mintTo(uint8 _mintAmount, address _receiver)
public
payable
nonReentrant
{
require(_receiver != address(0), "Invalid address");
require(_lastTokenId < _maxSupply, "Sale completed");
uint8 _state = saleState();
require(_state == 1 || _state == 2, "Sale is not active");
if (_state == 1) {
_presaleMint(_mintAmount, _receiver);
} else {
_saleMint(_mintAmount, _receiver);
}
}
function mintOwner(uint8 _mintAmount) public onlyOwner {
mintOwnerTo(_mintAmount, msg.sender);
}
function mintOwnerTo(uint8 _mintAmount, address _receiver)
public
onlyOwner
nonReentrant
{
require(_mintAmount > 0, "Invalid mint amount");
require(_lastTokenId < _maxSupply, "Sale completed");
require(
_mintAmount + totalSupply() <= _maxSupply,
"Max supply will overflow"
);
for (uint256 i = 0; i < _mintAmount; i++) {
_lastTokenId++;
_mintedOwner[_receiver] += 1;
_mint(_receiver, _lastTokenId);
}
}
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
require(
_isApprovedOrOwner(msg.sender, tokenId),
"Transfer caller is not owner nor approved"
);
_transfer(from, to, tokenId);
}
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public virtual override {
require(
_isApprovedOrOwner(msg.sender, tokenId),
"Transfer caller is not owner nor approved"
);
_safeTransfer(from, to, tokenId, _data);
}
function balanceOf(address checkedOwner)
public
view
virtual
override
returns (uint256)
{
return _balances[checkedOwner];
}
function ownerOf(uint256 tokenId)
public
view
virtual
override
returns (address)
{
return _owners[tokenId];
}
function walletOfOwner(address _addr)
public
view
returns (uint256[] memory)
{
uint256 _tokenCount = balanceOf(_addr);
uint256[] memory _output = new uint256[](_tokenCount);
uint256 _supply = totalSupply();
uint256 _idx = 0;
for (uint256 _tokenId = 1; _tokenId <= _supply; _tokenId++) {
if (_owners[_tokenId] == _addr) {
_output[_idx] = _tokenId;
_idx++;
}
}
return _output;
}
function withdraw(address _addr, uint256 _amnt) public onlyOwner {
require(_addr != address(0), "Invalid address");
uint256 currentBalance = address(this).balance;
uint256 withdrawn;
if (_amnt == 0) {
withdrawn = address(this).balance;
} else {
require(
currentBalance >= _amnt,
"Contract balance is less than withdrawn amount"
);
withdrawn = _amnt;
}
_withdraw(_addr, withdrawn);
}
function approve(address to, uint256 tokenId) public virtual override {
address tokenOwner = ownerOf(tokenId);
require(to != tokenOwner, "Approval to current owner");
require(
msg.sender == tokenOwner ||
isApprovedForAll(tokenOwner, msg.sender),
"Approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
function isApprovedForAll(address checkedOwner, address operator)
public
view
virtual
override
returns (bool)
{
return _operatorApprovals[checkedOwner][operator];
}
function setApprovalForAll(address operator, bool approved)
public
virtual
override
{
require(operator != msg.sender, "Approve to caller");
_operatorApprovals[msg.sender][operator] = approved;
emit ApprovalForAll(msg.sender, operator, approved);
}
function getApproved(uint256 tokenId)
public
view
virtual
override
returns (address)
{
return _tokenApprovals[tokenId];
}
/*********************************************
*********************************************
* P r i v a t e
* m e t h o d s
*
*/
function _exists(uint256 tokenId) private view returns (bool) {
return _owners[tokenId] != address(0);
}
function _isApprovedOrOwner(address spender, uint256 tokenId)
private
view
returns (bool)
{
require(_exists(tokenId), "Operator query for nonexistent token");
address tokenOwner = ownerOf(tokenId);
return (tokenOwner == spender ||
getApproved(tokenId) == spender ||
isApprovedForAll(tokenOwner, spender));
}
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private {
_transfer(from, to, tokenId);
require(
_checkOnERC721Received(from, to, tokenId, _data),
"Transfer to non ERC721Receiver implementer"
);
}
function _transfer(
address from,
address to,
uint256 tokenId
) private {
require(to != address(0), "Invalid address");
require(ownerOf(tokenId) == from, "Transfer of token that is not own");
_beforeTokenTransfer(from, to, tokenId);
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
}
function _approve(address to, uint256 tokenId) private {
_tokenApprovals[tokenId] = to;
emit Approval(ownerOf(tokenId), to, tokenId);
}
function _withdraw(address _addr, uint256 _amt) private nonReentrant {
(bool success, ) = _addr.call{value: _amt}("");
require(success, "Transfer failed");
}
function _presaleMint(uint8 _mintAmount, address _receiver) private {
require(presaleListCheck(_receiver), "Address not on the whitelist");
require(
_mintAmount > 0 && _mintAmount <= _mintCapPresale,
"Invalid mint amount"
);
require(
_mintAmount + _mintedPresale[_receiver] <= _mintCapPresale,
"User mint amount will overflow"
);
require(
_mintAmount + totalSupply() <= _maxSupplyPresale,
"Presale supply will overflow"
);
require(
msg.value >= pricePresale() * _mintAmount,
"More funds required"
);
for (uint256 i = 0; i < _mintAmount; i++) {
_lastTokenId++;
_mintedPresale[_receiver] += 1;
_mint(_receiver, _lastTokenId);
}
}
function _saleMint(uint8 _mintAmount, address _receiver) private {
require(
_mintAmount > 0 && _mintAmount <= _mintCap,
"Invalid mint amount"
);
require(
_mintAmount + _minted[_receiver] <= _mintCap,
"User mint amount will overflow"
);
require(
_mintAmount + totalSupply() <= _maxSupply,
"Max supply will overflow"
);
require(msg.value >= priceSale() * _mintAmount, "More funds required");
for (uint256 i = 0; i < _mintAmount; i++) {
_lastTokenId++;
_minted[_receiver] += 1;
_mint(_receiver, _lastTokenId);
}
}
function _mint(address to, uint256 tokenId) private {
require(!_exists(tokenId), "Token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
}
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (to.isContract()) {
try
IERC721Receiver(to).onERC721Received(
msg.sender,
from,
tokenId,
_data
)
returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("Transfer to non ERC721Receiver implementer");
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"lastState","type":"uint8"},{"indexed":true,"internalType":"uint8","name":"newState","type":"uint8"}],"name":"SaleStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"checkedOwner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"checkedOwner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_mintAmount","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintCap","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintCapPresale","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_mintAmount","type":"uint8"}],"name":"mintOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_mintAmount","type":"uint8"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintOwnerTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_mintAmount","type":"uint8"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"presaleListAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"presaleListCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"presaleListCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleListCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"presaleListRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pricePresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleState","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_val","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_val","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_val","type":"uint256"}],"name":"setMaxSupplyPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_cap","type":"uint8"}],"name":"setMintCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_cap","type":"uint8"}],"name":"setMintCapPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cap","type":"uint256"}],"name":"setPresaleListCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_val","type":"uint256"}],"name":"setPricePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_val","type":"uint256"}],"name":"setPriceSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"uint256","name":"_val","type":"uint256"}],"name":"setRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_state","type":"uint8"}],"name":"setSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"uint256","name":"_amnt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b506200001d336200014a565b6000805460ff60a01b19168155600355600160065560408051808201909152600480825263151313d560e21b60209092019182526200005f9160089162000467565b5060408051808201909152600d8082526c5468654c6173744f665468656d60981b6020909201918252620000969160079162000467565b506000601655620000ae668e1bc9bf0400006200019a565b620000c066b1a2bc2ec50000620001dc565b620000cc606462000215565b620000d8607862000267565b620000e56101f4620002b7565b620000f261116c620002f0565b620000fe601e62000329565b62000122604051806060016040528060228152602001620036bf6022913962000362565b62000144734d26e56c11eb83f6eb80aa1d0f7507a184ea7c4d6103e8620003d5565b620005d5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b33620001a562000458565b6001600160a01b031614620001d75760405162461bcd60e51b8152600401620001ce9062000536565b60405180910390fd5b600255565b33620001e762000458565b6001600160a01b031614620002105760405162461bcd60e51b8152600401620001ce9062000536565b600155565b336200022062000458565b6001600160a01b031614620002495760405162461bcd60e51b8152600401620001ce9062000536565b600a805460ff909216620100000262ff000019909216919091179055565b336200027262000458565b6001600160a01b0316146200029b5760405162461bcd60e51b8152600401620001ce9062000536565b600a805460ff9092166101000261ff0019909216919091179055565b33620002c262000458565b6001600160a01b031614620002eb5760405162461bcd60e51b8152600401620001ce9062000536565b600c55565b33620002fb62000458565b6001600160a01b031614620003245760405162461bcd60e51b8152600401620001ce9062000536565b600b55565b336200033462000458565b6001600160a01b0316146200035d5760405162461bcd60e51b8152600401620001ce9062000536565b600455565b336200036d62000458565b6001600160a01b031614620003965760405162461bcd60e51b8152600401620001ce9062000536565b600a5460ff1615620003bc5760405162461bcd60e51b8152600401620001ce906200056d565b8051620003d190600990602084019062000467565b5050565b33620003e062000458565b6001600160a01b031614620004095760405162461bcd60e51b8152600401620001ce9062000536565b6001600160a01b038216620004325760405162461bcd60e51b8152600401620001ce906200050d565b601480546001600160a01b0319166001600160a01b039390931692909217909155601555565b6000546001600160a01b031690565b828054620004759062000598565b90600052602060002090601f016020900481019282620004995760008555620004e4565b82601f10620004b457805160ff1916838001178555620004e4565b82800160010185558215620004e4579182015b82811115620004e4578251825591602001919060010190620004c7565b50620004f2929150620004f6565b5090565b5b80821115620004f25760008155600101620004f7565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b60208082526017908201527f43616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b60208082526011908201527018985cd9555492481a5cc81b1bd8dad959607a1b604082015260600190565b600281046001821680620005ad57607f821691505b60208210811415620005cf57634e487b7160e01b600052602260045260246000fd5b50919050565b6130da80620005e56000396000f3fe60806040526004361061031e5760003560e01c80636f8b44b0116101a5578063adaaa0c9116100ec578063d6e9089c11610095578063eaf0b3e31161006f578063eaf0b3e31461087d578063edfd5ced14610890578063f2fde38b146108b0578063f3fef3a3146108d05761031e565b8063d6e9089c14610833578063ddab9d9714610848578063e985e9c51461085d5761031e565b8063c87b56dd116100c6578063c87b56dd146107de578063d2d2070a146107fe578063d5abeb011461081e5761031e565b8063adaaa0c914610789578063afb6ed511461079e578063b88d4fde146107be5761031e565b80638da5cb5b1161014e57806395d89b411161012857806395d89b41146107345780639d12ab0e14610749578063a22cb465146107695761031e565b80638da5cb5b146106ea5780638f10d94d146106ff5780639147dd1b1461071f5761031e565b806376c71ca11161017f57806376c71ca1146106a057806381a7927e146106b557806383c7cd9f146106ca5761031e565b80636f8b44b01461064b57806370a082311461066b578063715018a61461068b5761031e565b80633ae50158116102695780635a67de07116102125780636352211e116101ec5780636352211e146106035780636c0360eb146106235780636ecd2306146106385761031e565b80635a67de07146105a15780635a94133c146105c1578063603f4d52146105e15761031e565b806347ccb3811161024357806347ccb3811461054c57806353df5c7c1461056c57806355f804b3146105815761031e565b80633ae50158146104df57806342842e0e146104ff578063438b63001461051f5761031e565b806313078948116102cb5780631e7269c5116102a55780631e7269c51461046157806323b872dd146104915780632a55205a146104b15761031e565b8063130789481461040a57806318160ddd1461042c5780631850af54146104415761031e565b8063095ea7b3116102fc578063095ea7b3146103a85780630abf4f79146103ca57806310fd332b146103ea5761031e565b806301ffc9a71461032357806306fdde0314610359578063081812fc1461037b575b600080fd5b34801561032f57600080fd5b5061034361033e36600461255d565b6108f0565b6040516103509190612818565b60405180910390f35b34801561036557600080fd5b5061036e6109c3565b6040516103509190612823565b34801561038757600080fd5b5061039b6103963660046125db565b610a55565b604051610350919061276b565b3480156103b457600080fd5b506103c86103c3366004612486565b610a70565b005b3480156103d657600080fd5b506103c86103e5366004612614565b610aff565b3480156103f657600080fd5b506103c8610405366004612486565b610b4c565b34801561041657600080fd5b5061041f610bc7565b6040516103509190612eb0565b34801561043857600080fd5b5061041f610bcd565b34801561044d57600080fd5b506103c861045c3660046124af565b610bd3565b34801561046d57600080fd5b5061048161047c366004612345565b610ca0565b6040516103509493929190612eb9565b34801561049d57600080fd5b506103c86104ac366004612398565b610d39565b3480156104bd57600080fd5b506104d16104cc3660046125f3565b610d6a565b6040516103509291906127bb565b3480156104eb57600080fd5b506103436104fa366004612345565b610dc6565b34801561050b57600080fd5b506103c861051a366004612398565b610de6565b34801561052b57600080fd5b5061053f61053a366004612345565b610e01565b60405161035091906127d4565b34801561055857600080fd5b506103c8610567366004612614565b610ef6565b34801561057857600080fd5b506103c8610f32565b34801561058d57600080fd5b506103c861059c366004612595565b610f70565b3480156105ad57600080fd5b506103c86105bc366004612614565b610fd9565b3480156105cd57600080fd5b506103c86105dc3660046125db565b611098565b3480156105ed57600080fd5b506105f66110cc565b6040516103509190612ed4565b34801561060f57600080fd5b5061039b61061e3660046125db565b6110dc565b34801561062f57600080fd5b5061036e6110f7565b6103c8610646366004612614565b611106565b34801561065757600080fd5b506103c86106663660046125db565b611110565b34801561067757600080fd5b5061041f610686366004612345565b611144565b34801561069757600080fd5b506103c861115f565b3480156106ac57600080fd5b506105f661119a565b3480156106c157600080fd5b5061041f6111a8565b3480156106d657600080fd5b506103c86106e536600461262e565b6111ae565b3480156106f657600080fd5b5061039b61130d565b34801561070b57600080fd5b506103c861071a3660046125db565b61131c565b34801561072b57600080fd5b5061041f611350565b34801561074057600080fd5b5061036e611356565b34801561075557600080fd5b506103c86107643660046124af565b611365565b34801561077557600080fd5b506103c861078436600461244c565b611461565b34801561079557600080fd5b5061041f6114f9565b3480156107aa57600080fd5b506103c86107b93660046125db565b6114ff565b3480156107ca57600080fd5b506103c86107d93660046123d3565b611533565b3480156107ea57600080fd5b5061036e6107f93660046125db565b61156b565b34801561080a57600080fd5b506103c8610819366004612614565b6115f2565b34801561082a57600080fd5b5061041f61163d565b34801561083f57600080fd5b506105f6611643565b34801561085457600080fd5b5061041f611652565b34801561086957600080fd5b50610343610878366004612366565b611658565b6103c861088b36600461262e565b611686565b34801561089c57600080fd5b506103c86108ab3660046125db565b611759565b3480156108bc57600080fd5b506103c86108cb366004612345565b61178d565b3480156108dc57600080fd5b506103c86108eb366004612486565b6117eb565b60006001600160e01b031982167f01ffc9a700000000000000000000000000000000000000000000000000000000148061095357506001600160e01b031982167f2a55205a00000000000000000000000000000000000000000000000000000000145b8061098757506001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000145b806109bb57506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b90505b919050565b6060600780546109d290612fe2565b80601f01602080910402602001604051908101604052809291908181526020018280546109fe90612fe2565b8015610a4b5780601f10610a2057610100808354040283529160200191610a4b565b820191906000526020600020905b815481529060010190602001808311610a2e57829003601f168201915b5050505050905090565b6000908152600e60205260409020546001600160a01b031690565b6000610a7b826110dc565b9050806001600160a01b0316836001600160a01b03161415610ab85760405162461bcd60e51b8152600401610aaf90612adf565b60405180910390fd5b336001600160a01b0382161480610ad45750610ad48133611658565b610af05760405162461bcd60e51b8152600401610aaf90612de5565b610afa838361187c565b505050565b33610b0861130d565b6001600160a01b031614610b2e5760405162461bcd60e51b8152600401610aaf906128db565b600a805460ff909216620100000262ff000019909216919091179055565b33610b5561130d565b6001600160a01b031614610b7b5760405162461bcd60e51b8152600401610aaf906128db565b6001600160a01b038216610ba15760405162461bcd60e51b8152600401610aaf9061286d565b601480546001600160a01b0319166001600160a01b039390931692909217909155601555565b600c5490565b60165490565b33610bdc61130d565b6001600160a01b031614610c025760405162461bcd60e51b8152600401610aaf906128db565b805160005b81811015610afa57600060056000858481518110610c3557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060036000815480929190610c8890612fcb565b91905055508080610c989061301d565b915050610c07565b6001600160a01b0381166000908152601060209081526040808320546012835281842054601190935290832054839283928392839260ff92831692610ce9929181169116612f30565b610cf39190612f30565b6001600160a01b03969096166000908152601260209081526040808320546010835281842054601190935292205460ff9889169992891698918216975016945092505050565b610d4333826118ea565b610d5f5760405162461bcd60e51b8152600401610aaf90612d1a565b610afa83838361196f565b600080610d7684611a9c565b15610dae576014546015546001600160a01b039091169061271090610d9b9086612f69565b610da59190612f55565b91509150610dbf565b50506014546001600160a01b031660005b9250929050565b6001600160a01b031660009081526005602052604090205460ff16151590565b610afa83838360405180602001604052806000815250611533565b60606000610e0e83611144565b905060008167ffffffffffffffff811115610e3957634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610e62578160200160208202803683370190505b5090506000610e6f610bcd565b9050600060015b828111610eeb576000818152600d60205260409020546001600160a01b0388811691161415610ed95780848381518110610ec057634e487b7160e01b600052603260045260246000fd5b602090810291909101015281610ed58161301d565b9250505b80610ee38161301d565b915050610e76565b509195945050505050565b33610eff61130d565b6001600160a01b031614610f255760405162461bcd60e51b8152600401610aaf906128db565b610f2f81336111ae565b50565b33610f3b61130d565b6001600160a01b031614610f615760405162461bcd60e51b8152600401610aaf906128db565b600a805460ff19166001179055565b33610f7961130d565b6001600160a01b031614610f9f5760405162461bcd60e51b8152600401610aaf906128db565b600a5460ff1615610fc25760405162461bcd60e51b8152600401610aaf90612c75565b8051610fd590600990602084019061222c565b5050565b33610fe261130d565b6001600160a01b0316146110085760405162461bcd60e51b8152600401610aaf906128db565b60028160ff16111561102c5760405162461bcd60e51b8152600401610aaf90612ce3565b6000805460ff838116600160a01b8181027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff851617855560405193049190911692909183917fe2034a7bf30bb7c637ee4fd008478210b21708c5c7177151827a49a6877a020d91a35050565b336110a161130d565b6001600160a01b0316146110c75760405162461bcd60e51b8152600401610aaf906128db565b600255565b600054600160a01b900460ff1690565b6000908152600d60205260409020546001600160a01b031690565b6060600980546109d290612fe2565b610f2f8133611686565b3361111961130d565b6001600160a01b03161461113f5760405162461bcd60e51b8152600401610aaf906128db565b600b55565b6001600160a01b03166000908152600f602052604090205490565b3361116861130d565b6001600160a01b03161461118e5760405162461bcd60e51b8152600401610aaf906128db565b6111986000611ab9565b565b600a54610100900460ff1690565b60015490565b336111b761130d565b6001600160a01b0316146111dd5760405162461bcd60e51b8152600401610aaf906128db565b600260065414156112005760405162461bcd60e51b8152600401610aaf90612e79565b600260065560ff82166112255760405162461bcd60e51b8152600401610aaf90612e42565b600b54601654106112485760405162461bcd60e51b8152600401610aaf906129ee565b600b54611253610bcd565b6112609060ff8516612f18565b111561127e5760405162461bcd60e51b8152600401610aaf90612836565b60005b8260ff16811015611303576016805490600061129c8361301d565b90915550506001600160a01b03821660009081526012602052604081208054600192906112cd90849060ff16612f30565b92506101000a81548160ff021916908360ff1602179055506112f182601654611b09565b806112fb8161301d565b915050611281565b5050600160065550565b6000546001600160a01b031690565b3361132561130d565b6001600160a01b03161461134b5760405162461bcd60e51b8152600401610aaf906128db565b600c55565b60025490565b6060600880546109d290612fe2565b3361136e61130d565b6001600160a01b0316146113945760405162461bcd60e51b8152600401610aaf906128db565b80516004546003546113a7908390612f18565b11156113c55760405162461bcd60e51b8152600401610aaf90612d77565b60005b81811015610afa576001600560008584815181106113f657634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908360ff160217905550600360008154809291906114499061301d565b919050555080806114599061301d565b9150506113c8565b6001600160a01b03821633141561148a5760405162461bcd60e51b8152600401610aaf90612b4d565b3360008181526013602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31906114ed908590612818565b60405180910390a35050565b60035490565b3361150861130d565b6001600160a01b03161461152e5760405162461bcd60e51b8152600401610aaf906128db565b600455565b61153d33836118ea565b6115595760405162461bcd60e51b8152600401610aaf90612d1a565b61156584848484611bc2565b50505050565b606061157682611a9c565b6115925760405162461bcd60e51b8152600401610aaf90612949565b6000600980546115a190612fe2565b9050116115c05760405162461bcd60e51b8152600401610aaf906128a4565b60096115cb83611bf5565b6040516020016115dc9291906126ba565b6040516020818303038152906040529050919050565b336115fb61130d565b6001600160a01b0316146116215760405162461bcd60e51b8152600401610aaf906128db565b600a805460ff9092166101000261ff0019909216919091179055565b600b5490565b600a5462010000900460ff1690565b60045490565b6001600160a01b03918216600090815260136020908152604080832093909416825291909152205460ff1690565b600260065414156116a95760405162461bcd60e51b8152600401610aaf90612e79565b60026006556001600160a01b0381166116d45760405162461bcd60e51b8152600401610aaf9061286d565b600b54601654106116f75760405162461bcd60e51b8152600401610aaf906129ee565b60006117016110cc565b90508060ff166001148061171857508060ff166002145b6117345760405162461bcd60e51b8152600401610aaf90612b16565b8060ff166001141561174f5761174a8383611d44565b611303565b6113038383611eeb565b3361176261130d565b6001600160a01b0316146117885760405162461bcd60e51b8152600401610aaf906128db565b600155565b3361179661130d565b6001600160a01b0316146117bc5760405162461bcd60e51b8152600401610aaf906128db565b6001600160a01b0381166117e25760405162461bcd60e51b8152600401610aaf9061286d565b610f2f81611ab9565b336117f461130d565b6001600160a01b03161461181a5760405162461bcd60e51b8152600401610aaf906128db565b6001600160a01b0382166118405760405162461bcd60e51b8152600401610aaf9061286d565b4760008261184f575047611872565b8282101561186f5760405162461bcd60e51b8152600401610aaf90612a82565b50815b611565848261206b565b6000818152600e6020526040902080546001600160a01b0319166001600160a01b03841690811790915581906118b1826110dc565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006118f582611a9c565b6119115760405162461bcd60e51b8152600401610aaf90612bbb565b600061191c836110dc565b9050836001600160a01b0316816001600160a01b031614806119575750836001600160a01b031661194c84610a55565b6001600160a01b0316145b8061196757506119678185611658565b949350505050565b6001600160a01b0382166119955760405162461bcd60e51b8152600401610aaf9061286d565b826001600160a01b03166119a8826110dc565b6001600160a01b0316146119ce5760405162461bcd60e51b8152600401610aaf90612a25565b6119d9838383610afa565b6119e460008261187c565b6001600160a01b0383166000908152600f60205260408120805460019290611a0d908490612f88565b90915550506001600160a01b0382166000908152600f60205260408120805460019290611a3b908490612f18565b90915550506000818152600d602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000908152600d60205260409020546001600160a01b0316151590565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611b1281611a9c565b15611b2f5760405162461bcd60e51b8152600401610aaf90612912565b611b3b60008383610afa565b6001600160a01b0382166000908152600f60205260408120805460019290611b64908490612f18565b90915550506000818152600d602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b611bcd84848461196f565b611bd984848484612112565b6115655760405162461bcd60e51b8152600401610aaf90612c18565b606081611c36575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526109be565b8160005b8115611c605780611c4a8161301d565b9150611c599050600a83612f55565b9150611c3a565b60008167ffffffffffffffff811115611c8957634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611cb3576020820181803683370190505b5090505b841561196757611cc8600183612f88565b9150611cd5600a86613038565b611ce0906030612f18565b60f81b818381518110611d0357634e487b7160e01b600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611d3d600a86612f55565b9450611cb7565b611d4d81610dc6565b611d695760405162461bcd60e51b8152600401610aaf90612dae565b60008260ff16118015611d8b5750600a5460ff62010000909104811690831611155b611da75760405162461bcd60e51b8152600401610aaf90612e42565b600a546001600160a01b03821660009081526010602052604090205460ff62010000909204821691611dda911684612f30565b60ff161115611dfb5760405162461bcd60e51b8152600401610aaf90612cac565b600c54611e06610bcd565b611e139060ff8516612f18565b1115611e315760405162461bcd60e51b8152600401610aaf906129b7565b8160ff16611e3d611350565b611e479190612f69565b341015611e665760405162461bcd60e51b8152600401610aaf90612b84565b60005b8260ff16811015610afa5760168054906000611e848361301d565b90915550506001600160a01b0382166000908152601060205260408120805460019290611eb590849060ff16612f30565b92506101000a81548160ff021916908360ff160217905550611ed982601654611b09565b80611ee38161301d565b915050611e69565b60008260ff16118015611f0c5750600a5460ff610100909104811690831611155b611f285760405162461bcd60e51b8152600401610aaf90612e42565b600a546001600160a01b03821660009081526011602052604090205460ff610100909204821691611f5a911684612f30565b60ff161115611f7b5760405162461bcd60e51b8152600401610aaf90612cac565b600b54611f86610bcd565b611f939060ff8516612f18565b1115611fb15760405162461bcd60e51b8152600401610aaf90612836565b8160ff16611fbd6111a8565b611fc79190612f69565b341015611fe65760405162461bcd60e51b8152600401610aaf90612b84565b60005b8260ff16811015610afa57601680549060006120048361301d565b90915550506001600160a01b038216600090815260116020526040812080546001929061203590849060ff16612f30565b92506101000a81548160ff021916908360ff16021790555061205982601654611b09565b806120638161301d565b915050611fe9565b6002600654141561208e5760405162461bcd60e51b8152600401610aaf90612e79565b60026006819055506000826001600160a01b0316826040516120af90612768565b60006040518083038185875af1925050503d80600081146120ec576040519150601f19603f3d011682016040523d82523d6000602084013e6120f1565b606091505b50509050806113035760405162461bcd60e51b8152600401610aaf90612980565b6000612126846001600160a01b0316612226565b1561221b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061215d90339089908890889060040161277f565b602060405180830381600087803b15801561217757600080fd5b505af19250505080156121a7575060408051601f3d908101601f191682019092526121a491810190612579565b60015b612201573d8080156121d5576040519150601f19603f3d011682016040523d82523d6000602084013e6121da565b606091505b5080516121f95760405162461bcd60e51b8152600401610aaf90612c18565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611967565b506001949350505050565b3b151590565b82805461223890612fe2565b90600052602060002090601f01602090048101928261225a57600085556122a0565b82601f1061227357805160ff19168380011785556122a0565b828001600101855582156122a0579182015b828111156122a0578251825591602001919060010190612285565b506122ac9291506122b0565b5090565b5b808211156122ac57600081556001016122b1565b600067ffffffffffffffff8311156122df576122df613078565b6122f2601f8401601f1916602001612ee2565b905082815283838301111561230657600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146109be57600080fd5b803560ff811681146109be57600080fd5b600060208284031215612356578081fd5b61235f8261231d565b9392505050565b60008060408385031215612378578081fd5b6123818361231d565b915061238f6020840161231d565b90509250929050565b6000806000606084860312156123ac578081fd5b6123b58461231d565b92506123c36020850161231d565b9150604084013590509250925092565b600080600080608085870312156123e8578081fd5b6123f18561231d565b93506123ff6020860161231d565b925060408501359150606085013567ffffffffffffffff811115612421578182fd5b8501601f81018713612431578182fd5b612440878235602084016122c5565b91505092959194509250565b6000806040838503121561245e578182fd5b6124678361231d565b91506020830135801515811461247b578182fd5b809150509250929050565b60008060408385031215612498578182fd5b6124a18361231d565b946020939093013593505050565b600060208083850312156124c1578182fd5b823567ffffffffffffffff808211156124d8578384fd5b818501915085601f8301126124eb578384fd5b8135818111156124fd576124fd613078565b838102915061250d848301612ee2565b8181528481019084860184860187018a1015612527578788fd5b8795505b838610156125505761253c8161231d565b83526001959095019491860191860161252b565b5098975050505050505050565b60006020828403121561256e578081fd5b813561235f8161308e565b60006020828403121561258a578081fd5b815161235f8161308e565b6000602082840312156125a6578081fd5b813567ffffffffffffffff8111156125bc578182fd5b8201601f810184136125cc578182fd5b611967848235602084016122c5565b6000602082840312156125ec578081fd5b5035919050565b60008060408385031215612605578182fd5b50508035926020909101359150565b600060208284031215612625578081fd5b61235f82612334565b60008060408385031215612640578182fd5b61238183612334565b60008151808452612661816020860160208601612f9f565b601f01601f19169290920160200192915050565b60008151612687818560208601612f9f565b9290920192915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815260050190565b82546000908190600281046001808316806126d657607f831692505b60208084108214156126f657634e487b7160e01b87526022600452602487fd5b81801561270a576001811461271b57612747565b60ff19861689528489019650612747565b6127248b612f0c565b885b8681101561273f5781548b820152908501908301612726565b505084890196505b50505050505061275f61275a8286612675565b612691565b95945050505050565b90565b6001600160a01b0391909116815260200190565b60006001600160a01b038087168352808616602084015250836040830152608060608301526127b16080830184612649565b9695505050505050565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561280c578351835292840192918401916001016127f0565b50909695505050505050565b901515815260200190565b60006020825261235f6020830184612649565b60208082526018908201527f4d617820737570706c792077696c6c206f766572666c6f770000000000000000604082015260600190565b6020808252600f908201527f496e76616c696420616464726573730000000000000000000000000000000000604082015260600190565b60208082526010908201527f4261736520555249206e6f742073657400000000000000000000000000000000604082015260600190565b60208082526017908201527f43616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b60208082526014908201527f546f6b656e20616c7265616479206d696e746564000000000000000000000000604082015260600190565b6020808252601f908201527f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00604082015260600190565b6020808252600f908201527f5472616e73666572206661696c65640000000000000000000000000000000000604082015260600190565b6020808252601c908201527f50726573616c6520737570706c792077696c6c206f766572666c6f7700000000604082015260600190565b6020808252600e908201527f53616c6520636f6d706c65746564000000000000000000000000000000000000604082015260600190565b60208082526021908201527f5472616e73666572206f6620746f6b656e2074686174206973206e6f74206f7760408201527f6e00000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602e908201527f436f6e74726163742062616c616e6365206973206c657373207468616e20776960408201527f7468647261776e20616d6f756e74000000000000000000000000000000000000606082015260800190565b60208082526019908201527f417070726f76616c20746f2063757272656e74206f776e657200000000000000604082015260600190565b60208082526012908201527f53616c65206973206e6f74206163746976650000000000000000000000000000604082015260600190565b60208082526011908201527f417070726f766520746f2063616c6c6572000000000000000000000000000000604082015260600190565b60208082526013908201527f4d6f72652066756e647320726571756972656400000000000000000000000000604082015260600190565b60208082526024908201527f4f70657261746f7220717565727920666f72206e6f6e6578697374656e74207460408201527f6f6b656e00000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602a908201527f5472616e7366657220746f206e6f6e204552433732315265636569766572206960408201527f6d706c656d656e74657200000000000000000000000000000000000000000000606082015260800190565b60208082526011908201527f62617365555249206973206c6f636b6564000000000000000000000000000000604082015260600190565b6020808252601e908201527f55736572206d696e7420616d6f756e742077696c6c206f766572666c6f770000604082015260600190565b6020808252600d908201527f496e76616c696420737461746500000000000000000000000000000000000000604082015260600190565b60208082526029908201527f5472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7260408201527f20617070726f7665640000000000000000000000000000000000000000000000606082015260800190565b6020808252601a908201527f50726573616c65206c6973742077696c6c206f766572666c6f77000000000000604082015260600190565b6020808252601c908201527f41646472657373206e6f74206f6e207468652077686974656c69737400000000604082015260600190565b60208082526030908201527f417070726f76652063616c6c6572206973206e6f74206f776e6572206e6f722060408201527f617070726f76656420666f7220616c6c00000000000000000000000000000000606082015260800190565b60208082526013908201527f496e76616c6964206d696e7420616d6f756e7400000000000000000000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b90815260200190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715612f0457612f04613078565b604052919050565b60009081526020902090565b60008219821115612f2b57612f2b61304c565b500190565b600060ff821660ff84168060ff03821115612f4d57612f4d61304c565b019392505050565b600082612f6457612f64613062565b500490565b6000816000190483118215151615612f8357612f8361304c565b500290565b600082821015612f9a57612f9a61304c565b500390565b60005b83811015612fba578181015183820152602001612fa2565b838111156115655750506000910152565b600081612fda57612fda61304c565b506000190190565b600281046001821680612ff657607f821691505b6020821081141561301757634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156130315761303161304c565b5060010190565b60008261304757613047613062565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610f2f57600080fdfea26469706673582212204847f7d2c2b3e3c2e73cb738682f3eda0d8dd8f4e80824dc2a2c21e4c39b6ffc64736f6c6343000800003368747470733a2f2f6170692e7468656c6173746f667468656d2e6f72672f6e66742f
Deployed Bytecode
0x60806040526004361061031e5760003560e01c80636f8b44b0116101a5578063adaaa0c9116100ec578063d6e9089c11610095578063eaf0b3e31161006f578063eaf0b3e31461087d578063edfd5ced14610890578063f2fde38b146108b0578063f3fef3a3146108d05761031e565b8063d6e9089c14610833578063ddab9d9714610848578063e985e9c51461085d5761031e565b8063c87b56dd116100c6578063c87b56dd146107de578063d2d2070a146107fe578063d5abeb011461081e5761031e565b8063adaaa0c914610789578063afb6ed511461079e578063b88d4fde146107be5761031e565b80638da5cb5b1161014e57806395d89b411161012857806395d89b41146107345780639d12ab0e14610749578063a22cb465146107695761031e565b80638da5cb5b146106ea5780638f10d94d146106ff5780639147dd1b1461071f5761031e565b806376c71ca11161017f57806376c71ca1146106a057806381a7927e146106b557806383c7cd9f146106ca5761031e565b80636f8b44b01461064b57806370a082311461066b578063715018a61461068b5761031e565b80633ae50158116102695780635a67de07116102125780636352211e116101ec5780636352211e146106035780636c0360eb146106235780636ecd2306146106385761031e565b80635a67de07146105a15780635a94133c146105c1578063603f4d52146105e15761031e565b806347ccb3811161024357806347ccb3811461054c57806353df5c7c1461056c57806355f804b3146105815761031e565b80633ae50158146104df57806342842e0e146104ff578063438b63001461051f5761031e565b806313078948116102cb5780631e7269c5116102a55780631e7269c51461046157806323b872dd146104915780632a55205a146104b15761031e565b8063130789481461040a57806318160ddd1461042c5780631850af54146104415761031e565b8063095ea7b3116102fc578063095ea7b3146103a85780630abf4f79146103ca57806310fd332b146103ea5761031e565b806301ffc9a71461032357806306fdde0314610359578063081812fc1461037b575b600080fd5b34801561032f57600080fd5b5061034361033e36600461255d565b6108f0565b6040516103509190612818565b60405180910390f35b34801561036557600080fd5b5061036e6109c3565b6040516103509190612823565b34801561038757600080fd5b5061039b6103963660046125db565b610a55565b604051610350919061276b565b3480156103b457600080fd5b506103c86103c3366004612486565b610a70565b005b3480156103d657600080fd5b506103c86103e5366004612614565b610aff565b3480156103f657600080fd5b506103c8610405366004612486565b610b4c565b34801561041657600080fd5b5061041f610bc7565b6040516103509190612eb0565b34801561043857600080fd5b5061041f610bcd565b34801561044d57600080fd5b506103c861045c3660046124af565b610bd3565b34801561046d57600080fd5b5061048161047c366004612345565b610ca0565b6040516103509493929190612eb9565b34801561049d57600080fd5b506103c86104ac366004612398565b610d39565b3480156104bd57600080fd5b506104d16104cc3660046125f3565b610d6a565b6040516103509291906127bb565b3480156104eb57600080fd5b506103436104fa366004612345565b610dc6565b34801561050b57600080fd5b506103c861051a366004612398565b610de6565b34801561052b57600080fd5b5061053f61053a366004612345565b610e01565b60405161035091906127d4565b34801561055857600080fd5b506103c8610567366004612614565b610ef6565b34801561057857600080fd5b506103c8610f32565b34801561058d57600080fd5b506103c861059c366004612595565b610f70565b3480156105ad57600080fd5b506103c86105bc366004612614565b610fd9565b3480156105cd57600080fd5b506103c86105dc3660046125db565b611098565b3480156105ed57600080fd5b506105f66110cc565b6040516103509190612ed4565b34801561060f57600080fd5b5061039b61061e3660046125db565b6110dc565b34801561062f57600080fd5b5061036e6110f7565b6103c8610646366004612614565b611106565b34801561065757600080fd5b506103c86106663660046125db565b611110565b34801561067757600080fd5b5061041f610686366004612345565b611144565b34801561069757600080fd5b506103c861115f565b3480156106ac57600080fd5b506105f661119a565b3480156106c157600080fd5b5061041f6111a8565b3480156106d657600080fd5b506103c86106e536600461262e565b6111ae565b3480156106f657600080fd5b5061039b61130d565b34801561070b57600080fd5b506103c861071a3660046125db565b61131c565b34801561072b57600080fd5b5061041f611350565b34801561074057600080fd5b5061036e611356565b34801561075557600080fd5b506103c86107643660046124af565b611365565b34801561077557600080fd5b506103c861078436600461244c565b611461565b34801561079557600080fd5b5061041f6114f9565b3480156107aa57600080fd5b506103c86107b93660046125db565b6114ff565b3480156107ca57600080fd5b506103c86107d93660046123d3565b611533565b3480156107ea57600080fd5b5061036e6107f93660046125db565b61156b565b34801561080a57600080fd5b506103c8610819366004612614565b6115f2565b34801561082a57600080fd5b5061041f61163d565b34801561083f57600080fd5b506105f6611643565b34801561085457600080fd5b5061041f611652565b34801561086957600080fd5b50610343610878366004612366565b611658565b6103c861088b36600461262e565b611686565b34801561089c57600080fd5b506103c86108ab3660046125db565b611759565b3480156108bc57600080fd5b506103c86108cb366004612345565b61178d565b3480156108dc57600080fd5b506103c86108eb366004612486565b6117eb565b60006001600160e01b031982167f01ffc9a700000000000000000000000000000000000000000000000000000000148061095357506001600160e01b031982167f2a55205a00000000000000000000000000000000000000000000000000000000145b8061098757506001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000145b806109bb57506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b90505b919050565b6060600780546109d290612fe2565b80601f01602080910402602001604051908101604052809291908181526020018280546109fe90612fe2565b8015610a4b5780601f10610a2057610100808354040283529160200191610a4b565b820191906000526020600020905b815481529060010190602001808311610a2e57829003601f168201915b5050505050905090565b6000908152600e60205260409020546001600160a01b031690565b6000610a7b826110dc565b9050806001600160a01b0316836001600160a01b03161415610ab85760405162461bcd60e51b8152600401610aaf90612adf565b60405180910390fd5b336001600160a01b0382161480610ad45750610ad48133611658565b610af05760405162461bcd60e51b8152600401610aaf90612de5565b610afa838361187c565b505050565b33610b0861130d565b6001600160a01b031614610b2e5760405162461bcd60e51b8152600401610aaf906128db565b600a805460ff909216620100000262ff000019909216919091179055565b33610b5561130d565b6001600160a01b031614610b7b5760405162461bcd60e51b8152600401610aaf906128db565b6001600160a01b038216610ba15760405162461bcd60e51b8152600401610aaf9061286d565b601480546001600160a01b0319166001600160a01b039390931692909217909155601555565b600c5490565b60165490565b33610bdc61130d565b6001600160a01b031614610c025760405162461bcd60e51b8152600401610aaf906128db565b805160005b81811015610afa57600060056000858481518110610c3557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060036000815480929190610c8890612fcb565b91905055508080610c989061301d565b915050610c07565b6001600160a01b0381166000908152601060209081526040808320546012835281842054601190935290832054839283928392839260ff92831692610ce9929181169116612f30565b610cf39190612f30565b6001600160a01b03969096166000908152601260209081526040808320546010835281842054601190935292205460ff9889169992891698918216975016945092505050565b610d4333826118ea565b610d5f5760405162461bcd60e51b8152600401610aaf90612d1a565b610afa83838361196f565b600080610d7684611a9c565b15610dae576014546015546001600160a01b039091169061271090610d9b9086612f69565b610da59190612f55565b91509150610dbf565b50506014546001600160a01b031660005b9250929050565b6001600160a01b031660009081526005602052604090205460ff16151590565b610afa83838360405180602001604052806000815250611533565b60606000610e0e83611144565b905060008167ffffffffffffffff811115610e3957634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610e62578160200160208202803683370190505b5090506000610e6f610bcd565b9050600060015b828111610eeb576000818152600d60205260409020546001600160a01b0388811691161415610ed95780848381518110610ec057634e487b7160e01b600052603260045260246000fd5b602090810291909101015281610ed58161301d565b9250505b80610ee38161301d565b915050610e76565b509195945050505050565b33610eff61130d565b6001600160a01b031614610f255760405162461bcd60e51b8152600401610aaf906128db565b610f2f81336111ae565b50565b33610f3b61130d565b6001600160a01b031614610f615760405162461bcd60e51b8152600401610aaf906128db565b600a805460ff19166001179055565b33610f7961130d565b6001600160a01b031614610f9f5760405162461bcd60e51b8152600401610aaf906128db565b600a5460ff1615610fc25760405162461bcd60e51b8152600401610aaf90612c75565b8051610fd590600990602084019061222c565b5050565b33610fe261130d565b6001600160a01b0316146110085760405162461bcd60e51b8152600401610aaf906128db565b60028160ff16111561102c5760405162461bcd60e51b8152600401610aaf90612ce3565b6000805460ff838116600160a01b8181027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff851617855560405193049190911692909183917fe2034a7bf30bb7c637ee4fd008478210b21708c5c7177151827a49a6877a020d91a35050565b336110a161130d565b6001600160a01b0316146110c75760405162461bcd60e51b8152600401610aaf906128db565b600255565b600054600160a01b900460ff1690565b6000908152600d60205260409020546001600160a01b031690565b6060600980546109d290612fe2565b610f2f8133611686565b3361111961130d565b6001600160a01b03161461113f5760405162461bcd60e51b8152600401610aaf906128db565b600b55565b6001600160a01b03166000908152600f602052604090205490565b3361116861130d565b6001600160a01b03161461118e5760405162461bcd60e51b8152600401610aaf906128db565b6111986000611ab9565b565b600a54610100900460ff1690565b60015490565b336111b761130d565b6001600160a01b0316146111dd5760405162461bcd60e51b8152600401610aaf906128db565b600260065414156112005760405162461bcd60e51b8152600401610aaf90612e79565b600260065560ff82166112255760405162461bcd60e51b8152600401610aaf90612e42565b600b54601654106112485760405162461bcd60e51b8152600401610aaf906129ee565b600b54611253610bcd565b6112609060ff8516612f18565b111561127e5760405162461bcd60e51b8152600401610aaf90612836565b60005b8260ff16811015611303576016805490600061129c8361301d565b90915550506001600160a01b03821660009081526012602052604081208054600192906112cd90849060ff16612f30565b92506101000a81548160ff021916908360ff1602179055506112f182601654611b09565b806112fb8161301d565b915050611281565b5050600160065550565b6000546001600160a01b031690565b3361132561130d565b6001600160a01b03161461134b5760405162461bcd60e51b8152600401610aaf906128db565b600c55565b60025490565b6060600880546109d290612fe2565b3361136e61130d565b6001600160a01b0316146113945760405162461bcd60e51b8152600401610aaf906128db565b80516004546003546113a7908390612f18565b11156113c55760405162461bcd60e51b8152600401610aaf90612d77565b60005b81811015610afa576001600560008584815181106113f657634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908360ff160217905550600360008154809291906114499061301d565b919050555080806114599061301d565b9150506113c8565b6001600160a01b03821633141561148a5760405162461bcd60e51b8152600401610aaf90612b4d565b3360008181526013602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31906114ed908590612818565b60405180910390a35050565b60035490565b3361150861130d565b6001600160a01b03161461152e5760405162461bcd60e51b8152600401610aaf906128db565b600455565b61153d33836118ea565b6115595760405162461bcd60e51b8152600401610aaf90612d1a565b61156584848484611bc2565b50505050565b606061157682611a9c565b6115925760405162461bcd60e51b8152600401610aaf90612949565b6000600980546115a190612fe2565b9050116115c05760405162461bcd60e51b8152600401610aaf906128a4565b60096115cb83611bf5565b6040516020016115dc9291906126ba565b6040516020818303038152906040529050919050565b336115fb61130d565b6001600160a01b0316146116215760405162461bcd60e51b8152600401610aaf906128db565b600a805460ff9092166101000261ff0019909216919091179055565b600b5490565b600a5462010000900460ff1690565b60045490565b6001600160a01b03918216600090815260136020908152604080832093909416825291909152205460ff1690565b600260065414156116a95760405162461bcd60e51b8152600401610aaf90612e79565b60026006556001600160a01b0381166116d45760405162461bcd60e51b8152600401610aaf9061286d565b600b54601654106116f75760405162461bcd60e51b8152600401610aaf906129ee565b60006117016110cc565b90508060ff166001148061171857508060ff166002145b6117345760405162461bcd60e51b8152600401610aaf90612b16565b8060ff166001141561174f5761174a8383611d44565b611303565b6113038383611eeb565b3361176261130d565b6001600160a01b0316146117885760405162461bcd60e51b8152600401610aaf906128db565b600155565b3361179661130d565b6001600160a01b0316146117bc5760405162461bcd60e51b8152600401610aaf906128db565b6001600160a01b0381166117e25760405162461bcd60e51b8152600401610aaf9061286d565b610f2f81611ab9565b336117f461130d565b6001600160a01b03161461181a5760405162461bcd60e51b8152600401610aaf906128db565b6001600160a01b0382166118405760405162461bcd60e51b8152600401610aaf9061286d565b4760008261184f575047611872565b8282101561186f5760405162461bcd60e51b8152600401610aaf90612a82565b50815b611565848261206b565b6000818152600e6020526040902080546001600160a01b0319166001600160a01b03841690811790915581906118b1826110dc565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006118f582611a9c565b6119115760405162461bcd60e51b8152600401610aaf90612bbb565b600061191c836110dc565b9050836001600160a01b0316816001600160a01b031614806119575750836001600160a01b031661194c84610a55565b6001600160a01b0316145b8061196757506119678185611658565b949350505050565b6001600160a01b0382166119955760405162461bcd60e51b8152600401610aaf9061286d565b826001600160a01b03166119a8826110dc565b6001600160a01b0316146119ce5760405162461bcd60e51b8152600401610aaf90612a25565b6119d9838383610afa565b6119e460008261187c565b6001600160a01b0383166000908152600f60205260408120805460019290611a0d908490612f88565b90915550506001600160a01b0382166000908152600f60205260408120805460019290611a3b908490612f18565b90915550506000818152600d602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000908152600d60205260409020546001600160a01b0316151590565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611b1281611a9c565b15611b2f5760405162461bcd60e51b8152600401610aaf90612912565b611b3b60008383610afa565b6001600160a01b0382166000908152600f60205260408120805460019290611b64908490612f18565b90915550506000818152600d602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b611bcd84848461196f565b611bd984848484612112565b6115655760405162461bcd60e51b8152600401610aaf90612c18565b606081611c36575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526109be565b8160005b8115611c605780611c4a8161301d565b9150611c599050600a83612f55565b9150611c3a565b60008167ffffffffffffffff811115611c8957634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611cb3576020820181803683370190505b5090505b841561196757611cc8600183612f88565b9150611cd5600a86613038565b611ce0906030612f18565b60f81b818381518110611d0357634e487b7160e01b600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611d3d600a86612f55565b9450611cb7565b611d4d81610dc6565b611d695760405162461bcd60e51b8152600401610aaf90612dae565b60008260ff16118015611d8b5750600a5460ff62010000909104811690831611155b611da75760405162461bcd60e51b8152600401610aaf90612e42565b600a546001600160a01b03821660009081526010602052604090205460ff62010000909204821691611dda911684612f30565b60ff161115611dfb5760405162461bcd60e51b8152600401610aaf90612cac565b600c54611e06610bcd565b611e139060ff8516612f18565b1115611e315760405162461bcd60e51b8152600401610aaf906129b7565b8160ff16611e3d611350565b611e479190612f69565b341015611e665760405162461bcd60e51b8152600401610aaf90612b84565b60005b8260ff16811015610afa5760168054906000611e848361301d565b90915550506001600160a01b0382166000908152601060205260408120805460019290611eb590849060ff16612f30565b92506101000a81548160ff021916908360ff160217905550611ed982601654611b09565b80611ee38161301d565b915050611e69565b60008260ff16118015611f0c5750600a5460ff610100909104811690831611155b611f285760405162461bcd60e51b8152600401610aaf90612e42565b600a546001600160a01b03821660009081526011602052604090205460ff610100909204821691611f5a911684612f30565b60ff161115611f7b5760405162461bcd60e51b8152600401610aaf90612cac565b600b54611f86610bcd565b611f939060ff8516612f18565b1115611fb15760405162461bcd60e51b8152600401610aaf90612836565b8160ff16611fbd6111a8565b611fc79190612f69565b341015611fe65760405162461bcd60e51b8152600401610aaf90612b84565b60005b8260ff16811015610afa57601680549060006120048361301d565b90915550506001600160a01b038216600090815260116020526040812080546001929061203590849060ff16612f30565b92506101000a81548160ff021916908360ff16021790555061205982601654611b09565b806120638161301d565b915050611fe9565b6002600654141561208e5760405162461bcd60e51b8152600401610aaf90612e79565b60026006819055506000826001600160a01b0316826040516120af90612768565b60006040518083038185875af1925050503d80600081146120ec576040519150601f19603f3d011682016040523d82523d6000602084013e6120f1565b606091505b50509050806113035760405162461bcd60e51b8152600401610aaf90612980565b6000612126846001600160a01b0316612226565b1561221b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061215d90339089908890889060040161277f565b602060405180830381600087803b15801561217757600080fd5b505af19250505080156121a7575060408051601f3d908101601f191682019092526121a491810190612579565b60015b612201573d8080156121d5576040519150601f19603f3d011682016040523d82523d6000602084013e6121da565b606091505b5080516121f95760405162461bcd60e51b8152600401610aaf90612c18565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611967565b506001949350505050565b3b151590565b82805461223890612fe2565b90600052602060002090601f01602090048101928261225a57600085556122a0565b82601f1061227357805160ff19168380011785556122a0565b828001600101855582156122a0579182015b828111156122a0578251825591602001919060010190612285565b506122ac9291506122b0565b5090565b5b808211156122ac57600081556001016122b1565b600067ffffffffffffffff8311156122df576122df613078565b6122f2601f8401601f1916602001612ee2565b905082815283838301111561230657600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146109be57600080fd5b803560ff811681146109be57600080fd5b600060208284031215612356578081fd5b61235f8261231d565b9392505050565b60008060408385031215612378578081fd5b6123818361231d565b915061238f6020840161231d565b90509250929050565b6000806000606084860312156123ac578081fd5b6123b58461231d565b92506123c36020850161231d565b9150604084013590509250925092565b600080600080608085870312156123e8578081fd5b6123f18561231d565b93506123ff6020860161231d565b925060408501359150606085013567ffffffffffffffff811115612421578182fd5b8501601f81018713612431578182fd5b612440878235602084016122c5565b91505092959194509250565b6000806040838503121561245e578182fd5b6124678361231d565b91506020830135801515811461247b578182fd5b809150509250929050565b60008060408385031215612498578182fd5b6124a18361231d565b946020939093013593505050565b600060208083850312156124c1578182fd5b823567ffffffffffffffff808211156124d8578384fd5b818501915085601f8301126124eb578384fd5b8135818111156124fd576124fd613078565b838102915061250d848301612ee2565b8181528481019084860184860187018a1015612527578788fd5b8795505b838610156125505761253c8161231d565b83526001959095019491860191860161252b565b5098975050505050505050565b60006020828403121561256e578081fd5b813561235f8161308e565b60006020828403121561258a578081fd5b815161235f8161308e565b6000602082840312156125a6578081fd5b813567ffffffffffffffff8111156125bc578182fd5b8201601f810184136125cc578182fd5b611967848235602084016122c5565b6000602082840312156125ec578081fd5b5035919050565b60008060408385031215612605578182fd5b50508035926020909101359150565b600060208284031215612625578081fd5b61235f82612334565b60008060408385031215612640578182fd5b61238183612334565b60008151808452612661816020860160208601612f9f565b601f01601f19169290920160200192915050565b60008151612687818560208601612f9f565b9290920192915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815260050190565b82546000908190600281046001808316806126d657607f831692505b60208084108214156126f657634e487b7160e01b87526022600452602487fd5b81801561270a576001811461271b57612747565b60ff19861689528489019650612747565b6127248b612f0c565b885b8681101561273f5781548b820152908501908301612726565b505084890196505b50505050505061275f61275a8286612675565b612691565b95945050505050565b90565b6001600160a01b0391909116815260200190565b60006001600160a01b038087168352808616602084015250836040830152608060608301526127b16080830184612649565b9695505050505050565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561280c578351835292840192918401916001016127f0565b50909695505050505050565b901515815260200190565b60006020825261235f6020830184612649565b60208082526018908201527f4d617820737570706c792077696c6c206f766572666c6f770000000000000000604082015260600190565b6020808252600f908201527f496e76616c696420616464726573730000000000000000000000000000000000604082015260600190565b60208082526010908201527f4261736520555249206e6f742073657400000000000000000000000000000000604082015260600190565b60208082526017908201527f43616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b60208082526014908201527f546f6b656e20616c7265616479206d696e746564000000000000000000000000604082015260600190565b6020808252601f908201527f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00604082015260600190565b6020808252600f908201527f5472616e73666572206661696c65640000000000000000000000000000000000604082015260600190565b6020808252601c908201527f50726573616c6520737570706c792077696c6c206f766572666c6f7700000000604082015260600190565b6020808252600e908201527f53616c6520636f6d706c65746564000000000000000000000000000000000000604082015260600190565b60208082526021908201527f5472616e73666572206f6620746f6b656e2074686174206973206e6f74206f7760408201527f6e00000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602e908201527f436f6e74726163742062616c616e6365206973206c657373207468616e20776960408201527f7468647261776e20616d6f756e74000000000000000000000000000000000000606082015260800190565b60208082526019908201527f417070726f76616c20746f2063757272656e74206f776e657200000000000000604082015260600190565b60208082526012908201527f53616c65206973206e6f74206163746976650000000000000000000000000000604082015260600190565b60208082526011908201527f417070726f766520746f2063616c6c6572000000000000000000000000000000604082015260600190565b60208082526013908201527f4d6f72652066756e647320726571756972656400000000000000000000000000604082015260600190565b60208082526024908201527f4f70657261746f7220717565727920666f72206e6f6e6578697374656e74207460408201527f6f6b656e00000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602a908201527f5472616e7366657220746f206e6f6e204552433732315265636569766572206960408201527f6d706c656d656e74657200000000000000000000000000000000000000000000606082015260800190565b60208082526011908201527f62617365555249206973206c6f636b6564000000000000000000000000000000604082015260600190565b6020808252601e908201527f55736572206d696e7420616d6f756e742077696c6c206f766572666c6f770000604082015260600190565b6020808252600d908201527f496e76616c696420737461746500000000000000000000000000000000000000604082015260600190565b60208082526029908201527f5472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7260408201527f20617070726f7665640000000000000000000000000000000000000000000000606082015260800190565b6020808252601a908201527f50726573616c65206c6973742077696c6c206f766572666c6f77000000000000604082015260600190565b6020808252601c908201527f41646472657373206e6f74206f6e207468652077686974656c69737400000000604082015260600190565b60208082526030908201527f417070726f76652063616c6c6572206973206e6f74206f776e6572206e6f722060408201527f617070726f76656420666f7220616c6c00000000000000000000000000000000606082015260800190565b60208082526013908201527f496e76616c6964206d696e7420616d6f756e7400000000000000000000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b90815260200190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715612f0457612f04613078565b604052919050565b60009081526020902090565b60008219821115612f2b57612f2b61304c565b500190565b600060ff821660ff84168060ff03821115612f4d57612f4d61304c565b019392505050565b600082612f6457612f64613062565b500490565b6000816000190483118215151615612f8357612f8361304c565b500290565b600082821015612f9a57612f9a61304c565b500390565b60005b83811015612fba578181015183820152602001612fa2565b838111156115655750506000910152565b600081612fda57612fda61304c565b506000190190565b600281046001821680612ff657607f821691505b6020821081141561301757634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156130315761303161304c565b5060010190565b60008261304757613047613062565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610f2f57600080fdfea26469706673582212204847f7d2c2b3e3c2e73cb738682f3eda0d8dd8f4e80824dc2a2c21e4c39b6ffc64736f6c63430008000033
Deployed Bytecode Sourcemap
18138:14967:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22474:400;;;;;;;;;;-1:-1:-1;22474:400:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19940:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;28025:185::-;;;;;;;;;;-1:-1:-1;28025:185:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;27029:421::-;;;;;;;;;;-1:-1:-1;27029:421:0;;;;;:::i;:::-;;:::i;:::-;;21972:146;;;;;;;;;;-1:-1:-1;21972:146:0;;;;;:::i;:::-;;:::i;20267:194::-;;;;;;;;;;-1:-1:-1;20267:194:0;;;;;:::i;:::-;;:::i;21655:109::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20160:99::-;;;;;;;;;;;;;:::i;15677:261::-;;;;;;;;;;-1:-1:-1;15677:261:0;;;;;:::i;:::-;;:::i;22882:471::-;;;;;;;;;;-1:-1:-1;22882:471:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;24674:313::-;;;;;;;;;;-1:-1:-1;24674:313:0;;;;;:::i;:::-;;:::i;20469:344::-;;;;;;;;;;-1:-1:-1;20469:344:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;15106:166::-;;;;;;;;;;-1:-1:-1;15106:166:0;;;;;:::i;:::-;;:::i;24995:185::-;;;;;;;;;;-1:-1:-1;24995:185:0;;;;;:::i;:::-;;:::i;25929:540::-;;;;;;;;;;-1:-1:-1;25929:540:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;23989:110::-;;;;;;;;;;-1:-1:-1;23989:110:0;;;;;:::i;:::-;;:::i;21351:80::-;;;;;;;;;;;;;:::i;21196:147::-;;;;;;;;;;-1:-1:-1;21196:147:0;;;;;:::i;:::-;;:::i;13953:246::-;;;;;;;;;;-1:-1:-1;13953:246:0;;;;;:::i;:::-;;:::i;14308:95::-;;;;;;;;;;-1:-1:-1;14308:95:0;;;;;:::i;:::-;;:::i;14207:93::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25748:173::-;;;;;;;;;;-1:-1:-1;25748:173:0;;;;;:::i;:::-;;:::i;21439:97::-;;;;;;;;;;;;;:::i;23361:98::-;;;;;;:::i;:::-;;:::i;21772:89::-;;;;;;;;;;-1:-1:-1;21772:89:0;;;;;:::i;:::-;;:::i;25553:187::-;;;;;;;;;;-1:-1:-1;25553:187:0;;;;;:::i;:::-;;:::i;12966:103::-;;;;;;;;;;;;;:::i;22377:89::-;;;;;;;;;;;;;:::i;14617:95::-;;;;;;;;;;;;;:::i;24107:559::-;;;;;;;;;;-1:-1:-1;24107:559:0;;;;;:::i;:::-;;:::i;12754:87::-;;;;;;;;;;;;;:::i;21544:103::-;;;;;;;;;;-1:-1:-1;21544:103:0;;;;;:::i;:::-;;:::i;14411:101::-;;;;;;;;;;;;;:::i;20048:104::-;;;;;;;;;;;;;:::i;15280:389::-;;;;;;;;;;-1:-1:-1;15280:389:0;;;;;:::i;:::-;;:::i;27694:323::-;;;;;;;;;;-1:-1:-1;27694:323:0;;;;;:::i;:::-;;:::i;14989:109::-;;;;;;;;;;;;;:::i;14720:148::-;;;;;;;;;;-1:-1:-1;14720:148:0;;;;;:::i;:::-;;:::i;25188:357::-;;;;;;;;;;-1:-1:-1;25188:357:0;;;;;:::i;:::-;;:::i;20821:367::-;;;;;;;;;;-1:-1:-1;20821:367:0;;;;;:::i;:::-;;:::i;22237:132::-;;;;;;;;;;-1:-1:-1;22237:132:0;;;;;:::i;:::-;;:::i;21869:95::-;;;;;;;;;;;;;:::i;22126:103::-;;;;;;;;;;;;;:::i;14876:105::-;;;;;;;;;;;;;:::i;27458:228::-;;;;;;;;;;-1:-1:-1;27458:228:0;;;;;:::i;:::-;;:::i;23467:514::-;;;;;;:::i;:::-;;:::i;14520:89::-;;;;;;;;;;-1:-1:-1;14520:89:0;;;;;:::i;:::-;;:::i;13077:178::-;;;;;;;;;;-1:-1:-1;13077:178:0;;;;;:::i;:::-;;:::i;26477:544::-;;;;;;;;;;-1:-1:-1;26477:544:0;;;;;:::i;:::-;;:::i;22474:400::-;22604:4;-1:-1:-1;;;;;;22646:40:0;;22661:25;22646:40;;:98;;-1:-1:-1;;;;;;;22703:41:0;;22718:26;22703:41;22646:98;:155;;;-1:-1:-1;;;;;;;22761:40:0;;22776:25;22761:40;22646:155;:220;;;-1:-1:-1;;;;;;;22818:48:0;;22833:33;22818:48;22646:220;22626:240;;22474:400;;;;:::o;19940:100::-;19994:13;20027:5;20020:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19940:100;:::o;28025:185::-;28146:7;28178:24;;;:15;:24;;;;;;-1:-1:-1;;;;;28178:24:0;;28025:185::o;27029:421::-;27110:18;27131:16;27139:7;27131;:16::i;:::-;27110:37;;27174:10;-1:-1:-1;;;;;27168:16:0;:2;-1:-1:-1;;;;;27168:16:0;;;27160:54;;;;-1:-1:-1;;;27160:54:0;;;;;;;:::i;:::-;;;;;;;;;27247:10;-1:-1:-1;;;;;27247:24:0;;;;:85;;;27292:40;27309:10;27321;27292:16;:40::i;:::-;27225:183;;;;-1:-1:-1;;;27225:183:0;;;;;;;:::i;:::-;27421:21;27430:2;27434:7;27421:8;:21::i;:::-;27029:421;;;:::o;21972:146::-;12900:10;12889:7;:5;:7::i;:::-;-1:-1:-1;;;;;12889:21:0;;12881:57;;;;-1:-1:-1;;;12881:57:0;;;;;;;:::i;:::-;22088:15:::1;:22:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;22088:22:0;;::::1;::::0;;;::::1;::::0;;21972:146::o;20267:194::-;12900:10;12889:7;:5;:7::i;:::-;-1:-1:-1;;;;;12889:21:0;;12881:57;;;;-1:-1:-1;;;12881:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20352:19:0;::::1;20344:47;;;;-1:-1:-1::0;;;20344:47:0::1;;;;;;;:::i;:::-;20402:12;:20:::0;;-1:-1:-1;;;;;;20402:20:0::1;-1:-1:-1::0;;;;;20402:20:0;;;::::1;::::0;;;::::1;::::0;;;20433:13:::1;:20:::0;20267:194::o;21655:109::-;21739:17;;21655:109;:::o;20160:99::-;20239:12;;20160:99;:::o;15677:261::-;12900:10;12889:7;:5;:7::i;:::-;-1:-1:-1;;;;;12889:21:0;;12881:57;;;;-1:-1:-1;;;12881:57:0;;;;;;;:::i;:::-;15775:17;;15761:11:::1;15805:126;15829:3;15825:1;:7;15805:126;;;15884:1;15854:12;:27;15867:10;15878:1;15867:13;;;;;;-1:-1:-1::0;;;15867:13:0::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;15854:27:0::1;-1:-1:-1::0;;;;;15854:27:0::1;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;15900:17;;:19;;;;;;;;;:::i;:::-;;;;;;15834:3;;;;;:::i;:::-;;;;15805:126;;22882:471:::0;-1:-1:-1;;;;;23174:21:0;;22992:7;23174:21;;;:14;:21;;;;;;;;;23139:12;:19;;;;;;23109:7;:14;;;;;;;22992:7;;;;;;;;23174:21;;;;;23109:49;;23139:19;;;;23109:14;:49;:::i;:::-;:86;;;;:::i;:::-;-1:-1:-1;;;;;23250:19:0;;;;;;;;:12;:19;;;;;;;;;23284:14;:21;;;;;;23320:7;:14;;;;;;23093:102;;;;;23250:19;;;;23284:21;;;;-1:-1:-1;23320:14:0;;-1:-1:-1;22882:471:0;-1:-1:-1;;;22882:471:0:o;24674:313::-;24830:39;24849:10;24861:7;24830:18;:39::i;:::-;24808:130;;;;-1:-1:-1;;;24808:130:0;;;;;;;:::i;:::-;24951:28;24961:4;24967:2;24971:7;24951:9;:28::i;20469:344::-;20607:16;20625:21;20668:17;20676:8;20668:7;:17::i;:::-;20664:105;;;20710:12;;20734:13;;-1:-1:-1;;;;;20710:12:0;;;;20751:5;;20725:22;;:6;:22;:::i;:::-;20724:32;;;;:::i;:::-;20702:55;;;;;;20664:105;-1:-1:-1;;20789:12:0;;-1:-1:-1;;;;;20789:12:0;;20469:344;;;;;;:::o;15106:166::-;-1:-1:-1;;;;;15241:19:0;15212:4;15241:19;;;:12;:19;;;;;;;;:23;;;15106:166::o;24995:185::-;25133:39;25150:4;25156:2;25160:7;25133:39;;;;;;;;;;;;:16;:39::i;25929:540::-;26015:16;26049:19;26071:16;26081:5;26071:9;:16::i;:::-;26049:38;;26098:24;26139:11;26125:26;;;;;;-1:-1:-1;;;26125:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26125:26:0;;26098:53;;26162:15;26180:13;:11;:13::i;:::-;26162:31;-1:-1:-1;26204:12:0;26257:1;26233:202;26272:7;26260:8;:19;26233:202;;26312:17;;;;:7;:17;;;;;;-1:-1:-1;;;;;26312:26:0;;;:17;;:26;26308:116;;;26375:8;26359:7;26367:4;26359:13;;;;;;-1:-1:-1;;;26359:13:0;;;;;;;;;;;;;;;;;;:24;26402:6;;;;:::i;:::-;;;;26308:116;26281:10;;;;:::i;:::-;;;;26233:202;;;-1:-1:-1;26454:7:0;;25929:540;-1:-1:-1;;;;;25929:540:0:o;23989:110::-;12900:10;12889:7;:5;:7::i;:::-;-1:-1:-1;;;;;12889:21:0;;12881:57;;;;-1:-1:-1;;;12881:57:0;;;;;;;:::i;:::-;24055:36:::1;24067:11;24080:10;24055:11;:36::i;:::-;23989:110:::0;:::o;21351:80::-;12900:10;12889:7;:5;:7::i;:::-;-1:-1:-1;;;;;12889:21:0;;12881:57;;;;-1:-1:-1;;;12881:57:0;;;;;;;:::i;:::-;21402:14:::1;:21:::0;;-1:-1:-1;;21402:21:0::1;21419:4;21402:21;::::0;;21351:80::o;21196:147::-;12900:10;12889:7;:5;:7::i;:::-;-1:-1:-1;;;;;12889:21:0;;12881:57;;;;-1:-1:-1;;;12881:57:0;;;;;;;:::i;:::-;21273:14:::1;::::0;::::1;;21272:15;21264:45;;;;-1:-1:-1::0;;;21264:45:0::1;;;;;;;:::i;:::-;21320:15:::0;;::::1;::::0;:8:::1;::::0;:15:::1;::::0;::::1;::::0;::::1;:::i;:::-;;21196:147:::0;:::o;13953:246::-;12900:10;12889:7;:5;:7::i;:::-;-1:-1:-1;;;;;12889:21:0;;12881:57;;;;-1:-1:-1;;;12881:57:0;;;;;;;:::i;:::-;14050:1:::1;14040:6;:11;;;;14017:52;;;;-1:-1:-1::0;;;14017:52:0::1;;;;;;;:::i;:::-;14080:16;14099:10:::0;;::::1;14120:19:::0;;::::1;-1:-1:-1::0;;;14120:19:0;;::::1;::::0;;::::1;;::::0;;14155:36:::1;::::0;14099:10;::::1;::::0;;;::::1;::::0;14120:19;;14099:10;;14155:36:::1;::::0;::::1;12949:1;13953:246:::0;:::o;14308:95::-;12900:10;12889:7;:5;:7::i;:::-;-1:-1:-1;;;;;12889:21:0;;12881:57;;;;-1:-1:-1;;;12881:57:0;;;;;;;:::i;:::-;14375:13:::1;:20:::0;14308:95::o;14207:93::-;14257:5;14282:10;-1:-1:-1;;;14282:10:0;;;;;14207:93::o;25748:173::-;25865:7;25897:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25897:16:0;;25748:173::o;21439:97::-;21487:13;21520:8;21513:15;;;;;:::i;23361:98::-;23420:31;23427:11;23440:10;23420:6;:31::i;21772:89::-;12900:10;12889:7;:5;:7::i;:::-;-1:-1:-1;;;;;12889:21:0;;12881:57;;;;-1:-1:-1;;;12881:57:0;;;;;;;:::i;:::-;21836:10:::1;:17:::0;21772:89::o;25553:187::-;-1:-1:-1;;;;;25709:23:0;25677:7;25709:23;;;:9;:23;;;;;;;25553:187::o;12966:103::-;12900:10;12889:7;:5;:7::i;:::-;-1:-1:-1;;;;;12889:21:0;;12881:57;;;;-1:-1:-1;;;12881:57:0;;;;;;;:::i;:::-;13031:30:::1;13058:1;13031:18;:30::i;:::-;12966:103::o:0;22377:89::-;22450:8;;;;;;;;22377:89::o;14617:95::-;14694:10;;14617:95;:::o;24107:559::-;12900:10;12889:7;:5;:7::i;:::-;-1:-1:-1;;;;;12889:21:0;;12881:57;;;;-1:-1:-1;;;12881:57:0;;;;;;;:::i;:::-;12212:1:::1;12358:7;;:19;;12350:63;;;;-1:-1:-1::0;;;12350:63:0::1;;;;;;;:::i;:::-;12212:1;12424:7;:18:::0;24247:15:::2;::::0;::::2;24239:47;;;;-1:-1:-1::0;;;24239:47:0::2;;;;;;;:::i;:::-;24320:10;;24305:12;;:25;24297:52;;;;-1:-1:-1::0;;;24297:52:0::2;;;;;;;:::i;:::-;24413:10;;24396:13;:11;:13::i;:::-;24382:27;::::0;::::2;::::0;::::2;;:::i;:::-;:41;;24360:115;;;;-1:-1:-1::0;;;24360:115:0::2;;;;;;;:::i;:::-;24493:9;24488:171;24512:11;24508:15;;:1;:15;24488:171;;;24545:12;:14:::0;;;:12:::2;:14;::::0;::::2;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;24574:23:0;::::2;;::::0;;;:12:::2;:23;::::0;;;;:28;;24601:1:::2;::::0;24574:23;:28:::2;::::0;24601:1;;24574:28:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24617:30;24623:9;24634:12;;24617:5;:30::i;:::-;24525:3:::0;::::2;::::0;::::2;:::i;:::-;;;;24488:171;;;-1:-1:-1::0;;12168:1:0::1;12465:7;:22:::0;-1:-1:-1;24107:559:0:o;12754:87::-;12800:7;12827:6;-1:-1:-1;;;;;12827:6:0;12754:87;:::o;21544:103::-;12900:10;12889:7;:5;:7::i;:::-;-1:-1:-1;;;;;12889:21:0;;12881:57;;;;-1:-1:-1;;;12881:57:0;;;;;;;:::i;:::-;21615:17:::1;:24:::0;21544:103::o;14411:101::-;14491:13;;14411:101;:::o;20048:104::-;20104:13;20137:7;20130:14;;;;;:::i;15280:389::-;12900:10;12889:7;:5;:7::i;:::-;-1:-1:-1;;;;;12889:21:0;;12881:57;;;;-1:-1:-1;;;12881:57:0;;;;;;;:::i;:::-;15375:17;;15454:15:::1;::::0;15427:17:::1;::::0;:23:::1;::::0;15375:17;;15427:23:::1;:::i;:::-;:42;;15405:118;;;;-1:-1:-1::0;;;15405:118:0::1;;;;;;;:::i;:::-;15541:9;15536:126;15560:3;15556:1;:7;15536:126;;;15615:1;15585:12;:27;15598:10;15609:1;15598:13;;;;;;-1:-1:-1::0;;;15598:13:0::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;15585:27:0::1;-1:-1:-1::0;;;;;15585:27:0::1;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;15631:17;;:19;;;;;;;;;:::i;:::-;;;;;;15565:3;;;;;:::i;:::-;;;;15536:126;;27694:323:::0;-1:-1:-1;;;;;27829:22:0;;27841:10;27829:22;;27821:52;;;;-1:-1:-1;;;27821:52:0;;;;;;;:::i;:::-;27913:10;27894:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;27894:40:0;;;;;;;;;;;:51;;-1:-1:-1;;27894:51:0;;;;;;;27963:46;;27894:40;;27913:10;27963:46;;;;27894:51;;27963:46;:::i;:::-;;;;;;;;27694:323;;:::o;14989:109::-;15073:17;;14989:109;:::o;14720:148::-;12900:10;12889:7;:5;:7::i;:::-;-1:-1:-1;;;;;12889:21:0;;12881:57;;;;-1:-1:-1;;;12881:57:0;;;;;;;:::i;:::-;14838:15:::1;:22:::0;14720:148::o;25188:357::-;25377:39;25396:10;25408:7;25377:18;:39::i;:::-;25355:130;;;;-1:-1:-1;;;25355:130:0;;;;;;;:::i;:::-;25498:39;25512:4;25518:2;25522:7;25531:5;25498:13;:39::i;:::-;25188:357;;;;:::o;20821:367::-;20940:13;20979:17;20987:8;20979:7;:17::i;:::-;20971:61;;;;-1:-1:-1;;;20971:61:0;;;;;;;:::i;:::-;21076:1;21057:8;21051:22;;;;;:::i;:::-;;;:26;21043:55;;;;-1:-1:-1;;;21043:55:0;;;;;;;:::i;:::-;21140:8;21150:19;:8;:17;:19::i;:::-;21123:56;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21109:71;;20821:367;;;:::o;22237:132::-;12900:10;12889:7;:5;:7::i;:::-;-1:-1:-1;;;;;12889:21:0;;12881:57;;;;-1:-1:-1;;;12881:57:0;;;;;;;:::i;:::-;22346:8:::1;:15:::0;;::::1;::::0;;::::1;;;-1:-1:-1::0;;22346:15:0;;::::1;::::0;;;::::1;::::0;;22237:132::o;21869:95::-;21946:10;;21869:95;:::o;22126:103::-;22206:15;;;;;;;;22126:103::o;14876:105::-;14958:15;;14876:105;:::o;27458:228::-;-1:-1:-1;;;;;27636:32:0;;;27607:4;27636:32;;;:18;:32;;;;;;;;:42;;;;;;;;;;;;;;;27458:228::o;23467:514::-;12212:1;12358:7;;:19;;12350:63;;;;-1:-1:-1;;;12350:63:0;;;;;;;:::i;:::-;12212:1;12424:7;:18;-1:-1:-1;;;;;23600:23:0;::::1;23592:51;;;;-1:-1:-1::0;;;23592:51:0::1;;;;;;;:::i;:::-;23677:10;;23662:12;;:25;23654:52;;;;-1:-1:-1::0;;;23654:52:0::1;;;;;;;:::i;:::-;23719:12;23734:11;:9;:11::i;:::-;23719:26;;23766:6;:11;;23776:1;23766:11;:26;;;;23781:6;:11;;23791:1;23781:11;23766:26;23758:57;;;;-1:-1:-1::0;;;23758:57:0::1;;;;;;;:::i;:::-;23832:6;:11;;23842:1;23832:11;23828:146;;;23860:36;23873:11;23886:9;23860:12;:36::i;:::-;23828:146;;;23929:33;23939:11;23952:9;23929;:33::i;14520:89::-:0;12900:10;12889:7;:5;:7::i;:::-;-1:-1:-1;;;;;12889:21:0;;12881:57;;;;-1:-1:-1;;;12881:57:0;;;;;;;:::i;:::-;14584:10:::1;:17:::0;14520:89::o;13077:178::-;12900:10;12889:7;:5;:7::i;:::-;-1:-1:-1;;;;;12889:21:0;;12881:57;;;;-1:-1:-1;;;12881:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13166:22:0;::::1;13158:50;;;;-1:-1:-1::0;;;13158:50:0::1;;;;;;;:::i;:::-;13219:28;13238:8;13219:18;:28::i;26477:544::-:0;12900:10;12889:7;:5;:7::i;:::-;-1:-1:-1;;;;;12889:21:0;;12881:57;;;;-1:-1:-1;;;12881:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26561:19:0;::::1;26553:47;;;;-1:-1:-1::0;;;26553:47:0::1;;;;;;;:::i;:::-;26638:21;26613:22;26704:10:::0;26700:274:::1;;-1:-1:-1::0;26743:21:0::1;26700:274;;;26841:5;26823:14;:23;;26797:131;;;;-1:-1:-1::0;;;26797:131:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;26957:5:0;26700:274:::1;26986:27;26996:5;27003:9;26986;:27::i;29892:160::-:0;29958:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;29958:29:0;-1:-1:-1;;;;;29958:29:0;;;;;;;;:24;;30014:16;29958:24;30014:7;:16::i;:::-;-1:-1:-1;;;;;30005:39:0;;;;;;;;;;;29892:160;;:::o;28517:401::-;28628:4;28658:16;28666:7;28658;:16::i;:::-;28650:65;;;;-1:-1:-1;;;28650:65:0;;;;;;;:::i;:::-;28728:18;28749:16;28757:7;28749;:16::i;:::-;28728:37;;28800:7;-1:-1:-1;;;;;28786:21:0;:10;-1:-1:-1;;;;;28786:21:0;;:69;;;;28848:7;-1:-1:-1;;;;;28824:31:0;:20;28836:7;28824:11;:20::i;:::-;-1:-1:-1;;;;;28824:31:0;;28786:69;:123;;;;28872:37;28889:10;28901:7;28872:16;:37::i;:::-;28778:132;28517:401;-1:-1:-1;;;;28517:401:0:o;29405:479::-;-1:-1:-1;;;;;29528:16:0;;29520:44;;;;-1:-1:-1;;;29520:44:0;;;;;;;:::i;:::-;29603:4;-1:-1:-1;;;;;29583:24:0;:16;29591:7;29583;:16::i;:::-;-1:-1:-1;;;;;29583:24:0;;29575:70;;;;-1:-1:-1;;;29575:70:0;;;;;;;:::i;:::-;29658:39;29679:4;29685:2;29689:7;29658:20;:39::i;:::-;29708:29;29725:1;29729:7;29708:8;:29::i;:::-;-1:-1:-1;;;;;29750:15:0;;;;;;:9;:15;;;;;:20;;29769:1;;29750:15;:20;;29769:1;;29750:20;:::i;:::-;;;;-1:-1:-1;;;;;;;29781:13:0;;;;;;:9;:13;;;;;:18;;29798:1;;29781:13;:18;;29798:1;;29781:18;:::i;:::-;;;;-1:-1:-1;;29810:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29810:21:0;-1:-1:-1;;;;;29810:21:0;;;;;;;;;29849:27;;29810:16;;29849:27;;;;;;;29405:479;;;:::o;28391:118::-;28447:4;28471:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28471:16:0;:30;;;28391:118::o;13263:191::-;13337:16;13356:6;;-1:-1:-1;;;;;13373:17:0;;;-1:-1:-1;;;;;;13373:17:0;;;;;;13406:40;;13356:6;;;;;;;13406:40;;13337:16;13406:40;13263:191;;:::o;31871:301::-;31943:16;31951:7;31943;:16::i;:::-;31942:17;31934:50;;;;-1:-1:-1;;;31934:50:0;;;;;;;:::i;:::-;31997:45;32026:1;32030:2;32034:7;31997:20;:45::i;:::-;-1:-1:-1;;;;;32063:13:0;;;;;;:9;:13;;;;;:18;;32080:1;;32063:13;:18;;32080:1;;32063:18;:::i;:::-;;;;-1:-1:-1;;32092:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32092:21:0;-1:-1:-1;;;;;32092:21:0;;;;;;;;32131:33;;32092:16;;;32131:33;;32092:16;;32131:33;31871:301;;:::o;29060:337::-;29208:28;29218:4;29224:2;29228:7;29208:9;:28::i;:::-;29271:48;29294:4;29300:2;29304:7;29313:5;29271:22;:48::i;:::-;29249:140;;;;-1:-1:-1;;;29249:140:0;;;;;;;:::i;1621:723::-;1677:13;1898:10;1894:53;;-1:-1:-1;1925:10:0;;;;;;;;;;;;;;;;;;;1894:53;1972:5;1957:12;2013:78;2020:9;;2013:78;;2046:8;;;;:::i;:::-;;-1:-1:-1;2069:10:0;;-1:-1:-1;2077:2:0;2069:10;;:::i;:::-;;;2013:78;;;2101:19;2133:6;2123:17;;;;;;-1:-1:-1;;;2123:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2123:17:0;;2101:39;;2151:154;2158:10;;2151:154;;2185:11;2195:1;2185:11;;:::i;:::-;;-1:-1:-1;2254:10:0;2262:2;2254:5;:10;:::i;:::-;2241:24;;:2;:24;:::i;:::-;2228:39;;2211:6;2218;2211:14;;;;;;-1:-1:-1;;;2211:14:0;;;;;;;;;;;;:56;;;;;;;;;;-1:-1:-1;2282:11:0;2291:2;2282:11;;:::i;:::-;;;2151:154;;30250:884;30337:27;30354:9;30337:16;:27::i;:::-;30329:68;;;;-1:-1:-1;;;30329:68:0;;;;;;;:::i;:::-;30446:1;30432:11;:15;;;:49;;;;-1:-1:-1;30466:15:0;;;;;;;;;30451:30;;;;;30432:49;30410:118;;;;-1:-1:-1;;;30410:118:0;;;;;;;:::i;:::-;30606:15;;-1:-1:-1;;;;;30577:25:0;;;;;;:14;:25;;;;;;30606:15;;;;;;;;30563:39;;30577:25;30563:11;:39;:::i;:::-;:58;;;;30541:138;;;;-1:-1:-1;;;30541:138:0;;;;;;;:::i;:::-;30745:17;;30728:13;:11;:13::i;:::-;30714:27;;;;;;:::i;:::-;:48;;30692:126;;;;-1:-1:-1;;;30692:126:0;;;;;;;:::i;:::-;30883:11;30866:28;;:14;:12;:14::i;:::-;:28;;;;:::i;:::-;30853:9;:41;;30831:110;;;;-1:-1:-1;;;30831:110:0;;;;;;;:::i;:::-;30959:9;30954:173;30978:11;30974:15;;:1;:15;30954:173;;;31011:12;:14;;;:12;:14;;;:::i;:::-;;;;-1:-1:-1;;;;;;;31040:25:0;;;;;;:14;:25;;;;;:30;;31069:1;;31040:25;:30;;31069:1;;31040:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31085;31091:9;31102:12;;31085:5;:30::i;:::-;30991:3;;;;:::i;:::-;;;;30954:173;;31142:721;31254:1;31240:11;:15;;;:42;;;;-1:-1:-1;31274:8:0;;;;;;;;;31259:23;;;;;31240:42;31218:111;;;;-1:-1:-1;;;31218:111:0;;;;;;;:::i;:::-;31400:8;;-1:-1:-1;;;;;31378:18:0;;;;;;:7;:18;;;;;;31400:8;;;;;;;;31364:32;;31378:18;31364:11;:32;:::i;:::-;:44;;;;31342:124;;;;-1:-1:-1;;;31342:124:0;;;;;;;:::i;:::-;31532:10;;31515:13;:11;:13::i;:::-;31501:27;;;;;;:::i;:::-;:41;;31479:115;;;;-1:-1:-1;;;31479:115:0;;;;;;;:::i;:::-;31642:11;31628:25;;:11;:9;:11::i;:::-;:25;;;;:::i;:::-;31615:9;:38;;31607:70;;;;-1:-1:-1;;;31607:70:0;;;;;;;:::i;:::-;31695:9;31690:166;31714:11;31710:15;;:1;:15;31690:166;;;31747:12;:14;;;:12;:14;;;:::i;:::-;;;;-1:-1:-1;;;;;;;31776:18:0;;;;;;:7;:18;;;;;:23;;31798:1;;31776:18;:23;;31798:1;;31776:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31814:30;31820:9;31831:12;;31814:5;:30::i;:::-;31727:3;;;;:::i;:::-;;;;31690:166;;30060:182;12212:1;12358:7;;:19;;12350:63;;;;-1:-1:-1;;;12350:63:0;;;;;;;:::i;:::-;12212:1;12424:7;:18;;;;30141:12:::1;30159:5;-1:-1:-1::0;;;;;30159:10:0::1;30177:4;30159:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30140:46;;;30207:7;30199:35;;;;-1:-1:-1::0;;;30199:35:0::1;;;;;;;:::i;32180:922::-:0;32335:4;32356:15;:2;-1:-1:-1;;;;;32356:13:0;;:15::i;:::-;32352:743;;;32409:173;;-1:-1:-1;;;32409:173:0;;-1:-1:-1;;;;;32409:36:0;;;;;:173;;32468:10;;32501:4;;32528:7;;32558:5;;32409:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32409:173:0;;;;;;;;-1:-1:-1;;32409:173:0;;;;;;;;;;;;:::i;:::-;;;32388:652;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32765:13:0;;32761:264;;32808:52;;-1:-1:-1;;;32808:52:0;;;;;;;:::i;32761:264::-;32975:6;32969:13;32960:6;32956:2;32952:15;32945:38;32388:652;-1:-1:-1;;;;;;32646:51:0;-1:-1:-1;;;32646:51:0;;-1:-1:-1;32639:58:0;;32352:743;-1:-1:-1;33079:4:0;32180:922;;;;;;:::o;4149:387::-;4472:20;4520:8;;;4149:387::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:409:1;;114:18;106:6;103:30;100:2;;;136:18;;:::i;:::-;174:58;220:2;197:17;;-1:-1:-1;;193:31:1;226:4;189:42;174:58;:::i;:::-;165:67;;255:6;248:5;241:21;295:3;286:6;281:3;277:16;274:25;271:2;;;312:1;309;302:12;271:2;361:6;356:3;349:4;342:5;338:16;325:43;415:1;408:4;399:6;392:5;388:18;384:29;377:40;90:333;;;;;:::o;428:198::-;498:20;;-1:-1:-1;;;;;547:54:1;;537:65;;527:2;;616:1;613;606:12;631:158;699:20;;759:4;748:16;;738:27;;728:2;;779:1;776;769:12;794:198;;906:2;894:9;885:7;881:23;877:32;874:2;;;927:6;919;912:22;874:2;955:31;976:9;955:31;:::i;:::-;945:41;864:128;-1:-1:-1;;;864:128:1:o;997:274::-;;;1126:2;1114:9;1105:7;1101:23;1097:32;1094:2;;;1147:6;1139;1132:22;1094:2;1175:31;1196:9;1175:31;:::i;:::-;1165:41;;1225:40;1261:2;1250:9;1246:18;1225:40;:::i;:::-;1215:50;;1084:187;;;;;:::o;1276:342::-;;;;1422:2;1410:9;1401:7;1397:23;1393:32;1390:2;;;1443:6;1435;1428:22;1390:2;1471:31;1492:9;1471:31;:::i;:::-;1461:41;;1521:40;1557:2;1546:9;1542:18;1521:40;:::i;:::-;1511:50;;1608:2;1597:9;1593:18;1580:32;1570:42;;1380:238;;;;;:::o;1623:702::-;;;;;1795:3;1783:9;1774:7;1770:23;1766:33;1763:2;;;1817:6;1809;1802:22;1763:2;1845:31;1866:9;1845:31;:::i;:::-;1835:41;;1895:40;1931:2;1920:9;1916:18;1895:40;:::i;:::-;1885:50;;1982:2;1971:9;1967:18;1954:32;1944:42;;2037:2;2026:9;2022:18;2009:32;2064:18;2056:6;2053:30;2050:2;;;2101:6;2093;2086:22;2050:2;2129:22;;2182:4;2174:13;;2170:27;-1:-1:-1;2160:2:1;;2216:6;2208;2201:22;2160:2;2244:75;2311:7;2306:2;2293:16;2288:2;2284;2280:11;2244:75;:::i;:::-;2234:85;;;1753:572;;;;;;;:::o;2330:369::-;;;2456:2;2444:9;2435:7;2431:23;2427:32;2424:2;;;2477:6;2469;2462:22;2424:2;2505:31;2526:9;2505:31;:::i;:::-;2495:41;;2586:2;2575:9;2571:18;2558:32;2633:5;2626:13;2619:21;2612:5;2609:32;2599:2;;2660:6;2652;2645:22;2599:2;2688:5;2678:15;;;2414:285;;;;;:::o;2704:266::-;;;2833:2;2821:9;2812:7;2808:23;2804:32;2801:2;;;2854:6;2846;2839:22;2801:2;2882:31;2903:9;2882:31;:::i;:::-;2872:41;2960:2;2945:18;;;;2932:32;;-1:-1:-1;;;2791:179:1:o;2975:1010::-;;3090:2;3133;3121:9;3112:7;3108:23;3104:32;3101:2;;;3154:6;3146;3139:22;3101:2;3199:9;3186:23;3228:18;3269:2;3261:6;3258:14;3255:2;;;3290:6;3282;3275:22;3255:2;3333:6;3322:9;3318:22;3308:32;;3378:7;3371:4;3367:2;3363:13;3359:27;3349:2;;3405:6;3397;3390:22;3349:2;3446;3433:16;3468:2;3464;3461:10;3458:2;;;3474:18;;:::i;:::-;3521:2;3517;3513:11;3503:21;;3544:27;3567:2;3563;3559:11;3544:27;:::i;:::-;3605:15;;;3636:12;;;;3668:11;;;3698;;;3694:20;;3691:33;-1:-1:-1;3688:2:1;;;3742:6;3734;3727:22;3688:2;3769:6;3760:15;;3784:171;3798:2;3795:1;3792:9;3784:171;;;3855:25;3876:3;3855:25;:::i;:::-;3843:38;;3816:1;3809:9;;;;;3901:12;;;;3933;;3784:171;;;-1:-1:-1;3974:5:1;3070:915;-1:-1:-1;;;;;;;;3070:915:1:o;3990:257::-;;4101:2;4089:9;4080:7;4076:23;4072:32;4069:2;;;4122:6;4114;4107:22;4069:2;4166:9;4153:23;4185:32;4211:5;4185:32;:::i;4252:261::-;;4374:2;4362:9;4353:7;4349:23;4345:32;4342:2;;;4395:6;4387;4380:22;4342:2;4432:9;4426:16;4451:32;4477:5;4451:32;:::i;4518:482::-;;4640:2;4628:9;4619:7;4615:23;4611:32;4608:2;;;4661:6;4653;4646:22;4608:2;4706:9;4693:23;4739:18;4731:6;4728:30;4725:2;;;4776:6;4768;4761:22;4725:2;4804:22;;4857:4;4849:13;;4845:27;-1:-1:-1;4835:2:1;;4891:6;4883;4876:22;4835:2;4919:75;4986:7;4981:2;4968:16;4963:2;4959;4955:11;4919:75;:::i;5005:190::-;;5117:2;5105:9;5096:7;5092:23;5088:32;5085:2;;;5138:6;5130;5123:22;5085:2;-1:-1:-1;5166:23:1;;5075:120;-1:-1:-1;5075:120:1:o;5200:258::-;;;5329:2;5317:9;5308:7;5304:23;5300:32;5297:2;;;5350:6;5342;5335:22;5297:2;-1:-1:-1;;5378:23:1;;;5448:2;5433:18;;;5420:32;;-1:-1:-1;5287:171:1:o;5463:194::-;;5573:2;5561:9;5552:7;5548:23;5544:32;5541:2;;;5594:6;5586;5579:22;5541:2;5622:29;5641:9;5622:29;:::i;5662:270::-;;;5789:2;5777:9;5768:7;5764:23;5760:32;5757:2;;;5810:6;5802;5795:22;5757:2;5838:29;5857:9;5838:29;:::i;5937:259::-;;6018:5;6012:12;6045:6;6040:3;6033:19;6061:63;6117:6;6110:4;6105:3;6101:14;6094:4;6087:5;6083:16;6061:63;:::i;:::-;6178:2;6157:15;-1:-1:-1;;6153:29:1;6144:39;;;;6185:4;6140:50;;5988:208;-1:-1:-1;;5988:208:1:o;6201:187::-;;6283:5;6277:12;6298:52;6343:6;6338:3;6331:4;6324:5;6320:16;6298:52;:::i;:::-;6366:16;;;;;6253:135;-1:-1:-1;;6253:135:1:o;6393:120::-;6472:7;6460:20;;6505:1;6496:11;;6450:63::o;6518:1372::-;6853:13;;6518:1372;;;;6926:1;6911:17;;6947:1;6983:18;;;;7010:2;;7064:4;7056:6;7052:17;7042:27;;7010:2;7090;7138;7130:6;7127:14;7107:18;7104:38;7101:2;;;-1:-1:-1;;;7172:3:1;7165:90;7278:4;7275:1;7268:15;7308:4;7303:3;7296:17;7101:2;7339:18;7366:104;;;;7484:1;7479:324;;;;7332:471;;7366:104;-1:-1:-1;;7399:24:1;;7387:37;;7444:16;;;;-1:-1:-1;7366:104:1;;7479:324;7515:39;7547:6;7515:39;:::i;:::-;7576:3;7592:165;7606:6;7603:1;7600:13;7592:165;;;7684:14;;7671:11;;;7664:35;7727:16;;;;7621:10;;7592:165;;;7596:3;;7786:6;7781:3;7777:16;7770:23;;7332:471;;;;;;;7819:65;7851:32;7879:3;7871:6;7851:32;:::i;:::-;7819:65;:::i;:::-;7812:72;6803:1087;-1:-1:-1;;;;;6803:1087:1:o;7895:205::-;8095:3;8086:14::o;8105:226::-;-1:-1:-1;;;;;8269:55:1;;;;8251:74;;8239:2;8224:18;;8206:125::o;8336:513::-;;-1:-1:-1;;;;;8640:2:1;8632:6;8628:15;8617:9;8610:34;8692:2;8684:6;8680:15;8675:2;8664:9;8660:18;8653:43;;8732:6;8727:2;8716:9;8712:18;8705:34;8775:3;8770:2;8759:9;8755:18;8748:31;8796:47;8838:3;8827:9;8823:19;8815:6;8796:47;:::i;:::-;8788:55;8539:310;-1:-1:-1;;;;;;8539:310:1:o;8854:297::-;-1:-1:-1;;;;;9046:55:1;;;;9028:74;;9133:2;9118:18;;9111:34;9016:2;9001:18;;8983:168::o;9156:635::-;9327:2;9379:21;;;9449:13;;9352:18;;;9471:22;;;9156:635;;9327:2;9550:15;;;;9524:2;9509:18;;;9156:635;9596:169;9610:6;9607:1;9604:13;9596:169;;;9671:13;;9659:26;;9740:15;;;;9705:12;;;;9632:1;9625:9;9596:169;;;-1:-1:-1;9782:3:1;;9307:484;-1:-1:-1;;;;;;9307:484:1:o;9796:187::-;9961:14;;9954:22;9936:41;;9924:2;9909:18;;9891:92::o;9988:221::-;;10137:2;10126:9;10119:21;10157:46;10199:2;10188:9;10184:18;10176:6;10157:46;:::i;10559:348::-;10761:2;10743:21;;;10800:2;10780:18;;;10773:30;10839:26;10834:2;10819:18;;10812:54;10898:2;10883:18;;10733:174::o;10912:339::-;11114:2;11096:21;;;11153:2;11133:18;;;11126:30;11192:17;11187:2;11172:18;;11165:45;11242:2;11227:18;;11086:165::o;11256:340::-;11458:2;11440:21;;;11497:2;11477:18;;;11470:30;11536:18;11531:2;11516:18;;11509:46;11587:2;11572:18;;11430:166::o;11601:347::-;11803:2;11785:21;;;11842:2;11822:18;;;11815:30;11881:25;11876:2;11861:18;;11854:53;11939:2;11924:18;;11775:173::o;11953:344::-;12155:2;12137:21;;;12194:2;12174:18;;;12167:30;12233:22;12228:2;12213:18;;12206:50;12288:2;12273:18;;12127:170::o;12302:355::-;12504:2;12486:21;;;12543:2;12523:18;;;12516:30;12582:33;12577:2;12562:18;;12555:61;12648:2;12633:18;;12476:181::o;12662:339::-;12864:2;12846:21;;;12903:2;12883:18;;;12876:30;12942:17;12937:2;12922:18;;12915:45;12992:2;12977:18;;12836:165::o;13006:352::-;13208:2;13190:21;;;13247:2;13227:18;;;13220:30;13286;13281:2;13266:18;;13259:58;13349:2;13334:18;;13180:178::o;13363:338::-;13565:2;13547:21;;;13604:2;13584:18;;;13577:30;13643:16;13638:2;13623:18;;13616:44;13692:2;13677:18;;13537:164::o;13706:397::-;13908:2;13890:21;;;13947:2;13927:18;;;13920:30;13986:34;13981:2;13966:18;;13959:62;14057:3;14052:2;14037:18;;14030:31;14093:3;14078:19;;13880:223::o;14108:410::-;14310:2;14292:21;;;14349:2;14329:18;;;14322:30;14388:34;14383:2;14368:18;;14361:62;14459:16;14454:2;14439:18;;14432:44;14508:3;14493:19;;14282:236::o;14523:349::-;14725:2;14707:21;;;14764:2;14744:18;;;14737:30;14803:27;14798:2;14783:18;;14776:55;14863:2;14848:18;;14697:175::o;14877:342::-;15079:2;15061:21;;;15118:2;15098:18;;;15091:30;15157:20;15152:2;15137:18;;15130:48;15210:2;15195:18;;15051:168::o;15224:341::-;15426:2;15408:21;;;15465:2;15445:18;;;15438:30;15504:19;15499:2;15484:18;;15477:47;15556:2;15541:18;;15398:167::o;15570:343::-;15772:2;15754:21;;;15811:2;15791:18;;;15784:30;15850:21;15845:2;15830:18;;15823:49;15904:2;15889:18;;15744:169::o;15918:400::-;16120:2;16102:21;;;16159:2;16139:18;;;16132:30;16198:34;16193:2;16178:18;;16171:62;16269:6;16264:2;16249:18;;16242:34;16308:3;16293:19;;16092:226::o;16323:406::-;16525:2;16507:21;;;16564:2;16544:18;;;16537:30;16603:34;16598:2;16583:18;;16576:62;16674:12;16669:2;16654:18;;16647:40;16719:3;16704:19;;16497:232::o;16734:341::-;16936:2;16918:21;;;16975:2;16955:18;;;16948:30;17014:19;17009:2;16994:18;;16987:47;17066:2;17051:18;;16908:167::o;17080:354::-;17282:2;17264:21;;;17321:2;17301:18;;;17294:30;17360:32;17355:2;17340:18;;17333:60;17425:2;17410:18;;17254:180::o;17439:337::-;17641:2;17623:21;;;17680:2;17660:18;;;17653:30;17719:15;17714:2;17699:18;;17692:43;17767:2;17752:18;;17613:163::o;17781:405::-;17983:2;17965:21;;;18022:2;18002:18;;;17995:30;18061:34;18056:2;18041:18;;18034:62;18132:11;18127:2;18112:18;;18105:39;18176:3;18161:19;;17955:231::o;18191:350::-;18393:2;18375:21;;;18432:2;18412:18;;;18405:30;18471:28;18466:2;18451:18;;18444:56;18532:2;18517:18;;18365:176::o;18546:352::-;18748:2;18730:21;;;18787:2;18767:18;;;18760:30;18826;18821:2;18806:18;;18799:58;18889:2;18874:18;;18720:178::o;18903:412::-;19105:2;19087:21;;;19144:2;19124:18;;;19117:30;19183:34;19178:2;19163:18;;19156:62;19254:18;19249:2;19234:18;;19227:46;19305:3;19290:19;;19077:238::o;19320:343::-;19522:2;19504:21;;;19561:2;19541:18;;;19534:30;19600:21;19595:2;19580:18;;19573:49;19654:2;19639:18;;19494:169::o;19668:355::-;19870:2;19852:21;;;19909:2;19889:18;;;19882:30;19948:33;19943:2;19928:18;;19921:61;20014:2;19999:18;;19842:181::o;20028:177::-;20174:25;;;20162:2;20147:18;;20129:76::o;20210:391::-;20441:25;;;20497:2;20482:18;;20475:34;;;;20540:2;20525:18;;20518:34;20583:2;20568:18;;20561:34;20428:3;20413:19;;20395:206::o;20606:184::-;20778:4;20766:17;;;;20748:36;;20736:2;20721:18;;20703:87::o;20795:251::-;20865:2;20859:9;20895:17;;;20942:18;20927:34;;20963:22;;;20924:62;20921:2;;;20989:18;;:::i;:::-;21025:2;21018:22;20839:207;;-1:-1:-1;20839:207:1:o;21051:129::-;;21119:17;;;21169:4;21153:21;;;21109:71::o;21185:128::-;;21256:1;21252:6;21249:1;21246:13;21243:2;;;21262:18;;:::i;:::-;-1:-1:-1;21298:9:1;;21233:80::o;21318:204::-;;21392:4;21389:1;21385:12;21424:4;21421:1;21417:12;21459:3;21453:4;21449:14;21444:3;21441:23;21438:2;;;21467:18;;:::i;:::-;21503:13;;21364:158;-1:-1:-1;;;21364:158:1:o;21527:120::-;;21593:1;21583:2;;21598:18;;:::i;:::-;-1:-1:-1;21632:9:1;;21573:74::o;21652:168::-;;21758:1;21754;21750:6;21746:14;21743:1;21740:21;21735:1;21728:9;21721:17;21717:45;21714:2;;;21765:18;;:::i;:::-;-1:-1:-1;21805:9:1;;21704:116::o;21825:125::-;;21893:1;21890;21887:8;21884:2;;;21898:18;;:::i;:::-;-1:-1:-1;21935:9:1;;21874:76::o;21955:258::-;22027:1;22037:113;22051:6;22048:1;22045:13;22037:113;;;22127:11;;;22121:18;22108:11;;;22101:39;22073:2;22066:10;22037:113;;;22168:6;22165:1;22162:13;22159:2;;;-1:-1:-1;;22203:1:1;22185:16;;22178:27;22008:205::o;22218:136::-;;22285:5;22275:2;;22294:18;;:::i;:::-;-1:-1:-1;;;22330:18:1;;22265:89::o;22359:437::-;22444:1;22434:12;;22491:1;22481:12;;;22502:2;;22556:4;22548:6;22544:17;22534:27;;22502:2;22609;22601:6;22598:14;22578:18;22575:38;22572:2;;;-1:-1:-1;;;22643:1:1;22636:88;22747:4;22744:1;22737:15;22775:4;22772:1;22765:15;22572:2;;22414:382;;;:::o;22801:135::-;;-1:-1:-1;;22861:17:1;;22858:2;;;22881:18;;:::i;:::-;-1:-1:-1;22928:1:1;22917:13;;22848:88::o;22941:112::-;;22999:1;22989:2;;23004:18;;:::i;:::-;-1:-1:-1;23038:9:1;;22979:74::o;23058:184::-;-1:-1:-1;;;23107:1:1;23100:88;23207:4;23204:1;23197:15;23231:4;23228:1;23221:15;23247:184;-1:-1:-1;;;23296:1:1;23289:88;23396:4;23393:1;23386:15;23420:4;23417:1;23410:15;23436:184;-1:-1:-1;;;23485:1:1;23478:88;23585:4;23582:1;23575:15;23609:4;23606:1;23599:15;23625:179;-1:-1:-1;;;;;;23705:5:1;23701:78;23694:5;23691:89;23681:2;;23794:1;23791;23784:12
Swarm Source
ipfs://4847f7d2c2b3e3c2e73cb738682f3eda0d8dd8f4e80824dc2a2c21e4c39b6ffc
Loading...
Loading
Loading...
Loading
Net Worth in USD
$2,385.13
Net Worth in ETH
1.28
Token Allocations
ETH
100.00%
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $1,863.38 | 1.28 | $2,385.13 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.