Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60a06040 | 16443481 | 626 days ago | IN | 0 ETH | 0.08139995 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
ElumntNFTMarketplace
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-19 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.1; library AddressUpgradeable { function isContract(address account) internal view returns (bool) { return account.code.length > 0; } 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"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } 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"); } 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); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } 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); } 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract Initializable { uint8 private _initialized; bool private _initializing; event Initialized(uint8 version); modifier initializer() { bool isTopLevelCall = !_initializing; require( (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1), "Initializable: contract is already initialized" ); _initialized = 1; if (isTopLevelCall) { _initializing = true; } _; if (isTopLevelCall) { _initializing = false; emit Initialized(1); } } modifier reinitializer(uint8 version) { require(!_initializing && _initialized < version, "Initializable: contract is already initialized"); _initialized = version; _initializing = true; _; _initializing = false; emit Initialized(version); } modifier onlyInitializing() { require(_initializing, "Initializable: contract is not initializing"); _; } function _disableInitializers() internal virtual { require(!_initializing, "Initializable: contract is initializing"); if (_initialized < type(uint8).max) { _initialized = type(uint8).max; emit Initialized(type(uint8).max); } } } interface IERC1822ProxiableUpgradeable { function proxiableUUID() external view returns (bytes32); } interface IBeaconUpgradeable { function implementation() external view returns (address); } library StorageSlotUpgradeable { struct AddressSlot { address value; } struct BooleanSlot { bool value; } struct Bytes32Slot { bytes32 value; } struct Uint256Slot { uint256 value; } function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } } abstract contract ERC1967UpgradeUpgradeable is Initializable { function __ERC1967Upgrade_init() internal onlyInitializing { } function __ERC1967Upgrade_init_unchained() internal onlyInitializing { } bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143; bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; event Upgraded(address indexed implementation); function _getImplementation() internal view returns (address) { return StorageSlotUpgradeable.getAddressSlot(_IMPLEMENTATION_SLOT).value; } function _setImplementation(address newImplementation) private { require(AddressUpgradeable.isContract(newImplementation), "ERC1967: new implementation is not a contract"); StorageSlotUpgradeable.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } function _upgradeTo(address newImplementation) internal { _setImplementation(newImplementation); emit Upgraded(newImplementation); } function _upgradeToAndCall( address newImplementation, bytes memory data, bool forceCall ) internal { _upgradeTo(newImplementation); if (data.length > 0 || forceCall) { _functionDelegateCall(newImplementation, data); } } function _upgradeToAndCallUUPS( address newImplementation, bytes memory data, bool forceCall ) internal { if (StorageSlotUpgradeable.getBooleanSlot(_ROLLBACK_SLOT).value) { _setImplementation(newImplementation); } else { try IERC1822ProxiableUpgradeable(newImplementation).proxiableUUID() returns (bytes32 slot) { require(slot == _IMPLEMENTATION_SLOT, "ERC1967Upgrade: unsupported proxiableUUID"); } catch { revert("ERC1967Upgrade: new implementation is not UUPS"); } _upgradeToAndCall(newImplementation, data, forceCall); } } bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; event AdminChanged(address previousAdmin, address newAdmin); function _getAdmin() internal view returns (address) { return StorageSlotUpgradeable.getAddressSlot(_ADMIN_SLOT).value; } function _setAdmin(address newAdmin) private { require(newAdmin != address(0), "ERC1967: new admin is the zero address"); StorageSlotUpgradeable.getAddressSlot(_ADMIN_SLOT).value = newAdmin; } function _changeAdmin(address newAdmin) internal { emit AdminChanged(_getAdmin(), newAdmin); _setAdmin(newAdmin); } bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50; event BeaconUpgraded(address indexed beacon); function _getBeacon() internal view returns (address) { return StorageSlotUpgradeable.getAddressSlot(_BEACON_SLOT).value; } function _setBeacon(address newBeacon) private { require(AddressUpgradeable.isContract(newBeacon), "ERC1967: new beacon is not a contract"); require( AddressUpgradeable.isContract(IBeaconUpgradeable(newBeacon).implementation()), "ERC1967: beacon implementation is not a contract" ); StorageSlotUpgradeable.getAddressSlot(_BEACON_SLOT).value = newBeacon; } function _upgradeBeaconToAndCall( address newBeacon, bytes memory data, bool forceCall ) internal { _setBeacon(newBeacon); emit BeaconUpgraded(newBeacon); if (data.length > 0 || forceCall) { _functionDelegateCall(IBeaconUpgradeable(newBeacon).implementation(), data); } } function _functionDelegateCall(address target, bytes memory data) private returns (bytes memory) { require(AddressUpgradeable.isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return AddressUpgradeable.verifyCallResult(success, returndata, "Address: low-level delegate call failed"); } uint256[50] private __gap; } abstract contract UUPSUpgradeable is Initializable, IERC1822ProxiableUpgradeable, ERC1967UpgradeUpgradeable { function __UUPSUpgradeable_init() internal onlyInitializing { } function __UUPSUpgradeable_init_unchained() internal onlyInitializing { } /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment address private immutable __self = address(this); modifier onlyProxy() { require(address(this) != __self, "Function must be called through delegatecall"); require(_getImplementation() == __self, "Function must be called through active proxy"); _; } modifier notDelegated() { require(address(this) == __self, "UUPSUpgradeable: must not be called through delegatecall"); _; } function proxiableUUID() external view virtual override notDelegated returns (bytes32) { return _IMPLEMENTATION_SLOT; } function upgradeTo(address newImplementation) external virtual onlyProxy { _authorizeUpgrade(newImplementation); _upgradeToAndCallUUPS(newImplementation, new bytes(0), false); } function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy { _authorizeUpgrade(newImplementation); _upgradeToAndCallUUPS(newImplementation, data, true); } function _authorizeUpgrade(address newImplementation) internal virtual; uint256[50] private __gap; } abstract contract ContextUpgradeable is Initializable { function __Context_init() internal onlyInitializing { } function __Context_init_unchained() internal onlyInitializing { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } uint256[50] private __gap; } abstract contract OwnableUpgradeable is Initializable, ContextUpgradeable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function __Ownable_init() internal onlyInitializing { __Ownable_init_unchained(); } function __Ownable_init_unchained() internal onlyInitializing { _transferOwnership(_msgSender()); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } uint256[49] private __gap; } library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; function toString(uint256 value) internal pure returns (string memory) { 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); } 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); } 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); } function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } contract Verification { function verify( address _signer, address _to, uint256 _amount, string memory _message, uint256 _nonce, bytes memory signature) internal pure returns (bool) { bytes32 messageHash = getMessageHash(_to, _amount, _message, _nonce); bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash); return recoverSigner(ethSignedMessageHash, signature) == _signer; } function getMessageHash( address _to, uint256 _amount, string memory _message, uint256 _nonce) internal pure returns (bytes32) { return keccak256(abi.encodePacked(_to, _amount, _message, _nonce)); } function getEthSignedMessageHash(bytes32 _messageHash) internal pure returns (bytes32) { return keccak256( abi.encodePacked("\x19Ethereum Signed Message:\n32", _messageHash) ); } function recoverSigner(bytes32 _ethSignedMessageHash, bytes memory _signature) internal pure returns (address) { (bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature); return ecrecover(_ethSignedMessageHash, v, r, s); } function splitSignature(bytes memory sig) internal pure returns ( bytes32 r, bytes32 s, uint8 v ) { require(sig.length == 65, "invalid signature length"); assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) v := byte(0, mload(add(sig, 96))) } } } interface ERC20Token { function transferFrom(address _from,address _to, uint _value) external returns (bool success); function balanceOf(address _owner) external returns (uint balance); function transfer(address _to, uint256 _amount) external returns (bool); } interface IERC1155Token { function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data) external; function mint(uint256 amount, address to) external returns(uint256 value); } interface IERC721Token { function safeMint(address to, string memory uri) external returns(uint256); function safeTransferFrom(address from, address to, uint256 tokenId) external; function ownerOf(uint256 tokenId) external returns (address owner); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else { return (address(0), RecoverError.InvalidSignatureLength); } } function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // contract ElumntNFTMarketplace is Ownable, Verification { contract ElumntNFTMarketplace is Initializable, UUPSUpgradeable, OwnableUpgradeable, Verification { // constructor() {} using SafeMath for uint256; mapping(address => mapping(uint256 => bool)) seenNonces; struct mint721Data { string metadata; address payable owner; address nft; } struct mint1155Data { address payable owner; address nft; uint256 amount; } struct acceptOfferBid721Data { string metadata; uint256 tokenId; address newOwner; address creator; address nft; bytes signature; uint256 amount; uint256 percent; uint256 royalty; string encodeKey; uint256 nonce; address erc20token; } struct acceptOfferBid1155Data { uint256 tokenId; address newOwner; address creator; uint256 quantity; uint256 totalQuantity; address nft; bytes signature; uint256 amount; uint256 percent; uint256 royalty; string encodeKey; uint256 nonce; address erc20token; } struct create721Data { string metadata; address owner; address nft; bytes signature; uint256 amount; string encodeKey; uint256 nonce; } struct create1155Data { address owner; address nft; bytes signature; uint256 amount; string encodeKey; uint256 nonce; uint256 totalQuantity; } struct buy721Data { string metadata; uint256 tokenId; address owner; address creator; address nft; bytes signature; uint256 amount; uint256 percent; uint256 royalty; string encodeKey; uint256 nonce; address erc20token; uint8 currency; } struct buy1155Data { uint256 tokenId; address owner; address creator; uint256 quantity; uint256 totalQuantity; address nft; bytes signature; uint256 amount; uint256 percent; uint256 royalty; string encodeKey; uint256 nonce; address erc20token; uint8 currency; } struct acceptData { string metadata; uint256 tokenId; address newOwner; address creator; address nft; uint256 amount; uint256 percent; uint256 royalty; address currentOwner; address erc20token; } struct transfer721Data { string metadata; uint256 tokenId; address newOwner; address nft; uint256 amount; bytes signature; address currentOwner; string encodeKey; uint256 nonce; } struct transfer1155Data { string metadata; uint256 tokenId; address newOwner; address nft; uint256 amount; uint256 quantity; bytes signature; address currentOwner; string encodeKey; uint256 nonce; } event CreatedNFT(uint256 tokenId); event BidOfferAccepted(uint256 tokenId, uint256 price, address from, address to, uint256 creatorEarning); event NftTransferred(uint256 tokenId, uint256 price, address from, address to, uint256 creatorEarning); event AutoAccepted(uint256 indexed tokenId,uint256 creatorEarning); function initialize() public initializer { __Ownable_init(); __UUPSUpgradeable_init(); } function _authorizeUpgrade(address) internal override onlyOwner{} // Internal / Private functions to be used in side the contract's different methods function mint721(mint721Data memory _nftData) internal returns (uint256) { IERC721Token nftToken = IERC721Token(_nftData.nft); uint256 tokenId = nftToken.safeMint(_nftData.owner, _nftData.metadata); return tokenId; } function mint1155(mint1155Data memory _nftData) internal returns (uint256) { IERC1155Token nftToken = IERC1155Token(_nftData.nft); uint256 tokenId = nftToken.mint(_nftData.amount, _nftData.owner); return tokenId; } function transfer721(address cAddress, address from, address to, uint256 token) internal { IERC721Token nftToken = IERC721Token(cAddress); nftToken.safeTransferFrom(from, to, token); } function transfer1155(address cAddress, address from, address to, uint256 amount, uint256 token) internal { IERC1155Token nftToken = IERC1155Token(cAddress); nftToken.safeTransferFrom(from, to, token, amount, ""); } function transfer20(address from, address to, uint256 amount, address tokenAddress) internal { ERC20Token token = ERC20Token(tokenAddress); uint256 balance = token.balanceOf(from); require(balance >= amount, "insufficient balance" ); token.transferFrom(from, to, amount); } function calculatePercentValue(uint256 total, uint256 percent) pure private returns(uint256) { uint256 division = total.mul(percent); uint256 percentValue = division.div(10000);//10000 base return percentValue; } //Public functions to manage NFTs function acceptOfferBid721(acceptOfferBid721Data memory _transferData) external payable onlyProxy { uint256 tokenId = _transferData.tokenId; require(!seenNonces[msg.sender][_transferData.nonce], "Invalid request"); seenNonces[msg.sender][_transferData.nonce] = true; require(verify(msg.sender, msg.sender, _transferData.amount, _transferData.encodeKey, _transferData.nonce, _transferData.signature), "invalid signature"); if(_transferData.tokenId == 0) { mint721Data memory mintData = mint721Data( _transferData.metadata, payable(msg.sender), _transferData.nft ); tokenId = mint721(mintData); } uint256 amountToTransfer = _transferData.amount; if(_transferData.percent > 0) { uint256 platformSharePercent = calculatePercentValue(_transferData.amount, _transferData.percent); amountToTransfer = amountToTransfer-platformSharePercent; transfer20(_transferData.newOwner, address(this), platformSharePercent, _transferData.erc20token); } uint256 royaltyPercent; if(_transferData.royalty > 0 && _transferData.creator != msg.sender) { royaltyPercent = calculatePercentValue(_transferData.amount, _transferData.royalty); amountToTransfer = amountToTransfer-royaltyPercent; transfer20(_transferData.newOwner, _transferData.creator, royaltyPercent, _transferData.erc20token); } transfer20(_transferData.newOwner, msg.sender, amountToTransfer, _transferData.erc20token); transfer721(_transferData.nft, msg.sender, _transferData.newOwner, tokenId); emit BidOfferAccepted(tokenId, msg.value, msg.sender, _transferData.newOwner, royaltyPercent); } function acceptOfferBid1155(acceptOfferBid1155Data memory _transferData) external payable onlyProxy { uint256 tokenId = _transferData.tokenId; require(!seenNonces[msg.sender][_transferData.nonce], "Invalid request"); seenNonces[msg.sender][_transferData.nonce] = true; require(verify(msg.sender, msg.sender, _transferData.amount, _transferData.encodeKey, _transferData.nonce, _transferData.signature), "invalid signature"); if(_transferData.tokenId == 0) { mint1155Data memory mintData = mint1155Data( payable(msg.sender), _transferData.nft, _transferData.totalQuantity ); tokenId = mint1155(mintData); } uint256 amountToTransfer = _transferData.amount; if(_transferData.percent > 0) { uint256 platformSharePercent = calculatePercentValue(_transferData.amount, _transferData.percent); amountToTransfer = amountToTransfer-platformSharePercent; transfer20(_transferData.newOwner, address(this), platformSharePercent, _transferData.erc20token); } uint256 royaltyPercent; if(_transferData.royalty > 0 && _transferData.creator != msg.sender) { royaltyPercent = calculatePercentValue(_transferData.amount, _transferData.royalty); amountToTransfer = amountToTransfer-royaltyPercent; transfer20(_transferData.newOwner, _transferData.creator, royaltyPercent, _transferData.erc20token); } transfer20(_transferData.newOwner, msg.sender, amountToTransfer, _transferData.erc20token); transfer1155(_transferData.nft, msg.sender, _transferData.newOwner, _transferData.quantity, tokenId); emit BidOfferAccepted(tokenId, msg.value, msg.sender, _transferData.newOwner, royaltyPercent); } function buy721(buy721Data memory _buyData) external payable onlyProxy { uint256 tokenId = _buyData.tokenId; require(!seenNonces[msg.sender][_buyData.nonce], "Invalid request"); seenNonces[msg.sender][_buyData.nonce] = true; require(verify(msg.sender, msg.sender, _buyData.amount, _buyData.encodeKey, _buyData.nonce, _buyData.signature), "invalid signature"); if(_buyData.tokenId == 0) { mint721Data memory mintData = mint721Data( _buyData.metadata, payable(_buyData.owner), _buyData.nft ); tokenId = mint721(mintData); } uint256 amountToTransfer = _buyData.amount; if(_buyData.percent > 0) { uint256 platformSharePercent = calculatePercentValue(_buyData.amount, _buyData.percent); amountToTransfer = amountToTransfer-platformSharePercent; if(_buyData.currency!=1) { transfer20(msg.sender, address(this), platformSharePercent, _buyData.erc20token); } } uint256 royaltyPercent; if(_buyData.royalty > 0 && _buyData.creator != _buyData.owner) { royaltyPercent = calculatePercentValue(_buyData.amount, _buyData.royalty); amountToTransfer = amountToTransfer-royaltyPercent; if(_buyData.currency==1) { payable(_buyData.creator).transfer(royaltyPercent); } else { transfer20(msg.sender, _buyData.creator, royaltyPercent, _buyData.erc20token); } } transfer721(_buyData.nft, _buyData.owner, msg.sender, tokenId); if(_buyData.currency==1) { payable(_buyData.owner).transfer(amountToTransfer); } else { transfer20(msg.sender, _buyData.owner, amountToTransfer, _buyData.erc20token); } emit NftTransferred(tokenId, msg.value, _buyData.owner, msg.sender, royaltyPercent); } function buy1155(buy1155Data memory _buyData) external payable onlyProxy { uint256 tokenId = _buyData.tokenId; require(!seenNonces[msg.sender][_buyData.nonce], "Invalid request"); seenNonces[msg.sender][_buyData.nonce] = true; require(verify(msg.sender, msg.sender, _buyData.amount, _buyData.encodeKey, _buyData.nonce, _buyData.signature), "invalid signature"); if(_buyData.tokenId == 0) { mint1155Data memory mintData = mint1155Data( payable(_buyData.owner), _buyData.nft, _buyData.totalQuantity ); tokenId = mint1155(mintData); } uint256 amountToTransfer = _buyData.amount; if(_buyData.percent > 0) { uint256 platformSharePercent = calculatePercentValue(_buyData.amount, _buyData.percent); amountToTransfer = amountToTransfer-platformSharePercent; if(_buyData.currency!=1) { transfer20(msg.sender, address(this), platformSharePercent, _buyData.erc20token); } } uint256 royaltyPercent; if(_buyData.royalty > 0 && _buyData.creator != _buyData.owner) { royaltyPercent = calculatePercentValue(_buyData.amount, _buyData.royalty); amountToTransfer = amountToTransfer-royaltyPercent; if(_buyData.currency==1) { payable(_buyData.creator).transfer(royaltyPercent); } else { transfer20(msg.sender, _buyData.creator, royaltyPercent, _buyData.erc20token); } } transfer1155(_buyData.nft, _buyData.owner, msg.sender, _buyData.quantity, tokenId); if(_buyData.currency==1) { payable(_buyData.owner).transfer(amountToTransfer); } else { transfer20(msg.sender, _buyData.owner, amountToTransfer, _buyData.erc20token); } emit NftTransferred(tokenId, msg.value, _buyData.owner, msg.sender, royaltyPercent); } function create721(create721Data memory _createData) external payable onlyProxy { require(!seenNonces[msg.sender][_createData.nonce], "Invalid request"); seenNonces[msg.sender][_createData.nonce] = true; require(verify(msg.sender, msg.sender, _createData.amount, _createData.encodeKey, _createData.nonce, _createData.signature), "invalid signature"); mint721Data memory mintData = mint721Data( _createData.metadata, payable(msg.sender), _createData.nft ); uint256 tokenId = mint721(mintData); emit CreatedNFT(tokenId); } function create1155(create1155Data memory _createData) external payable onlyProxy { require(!seenNonces[msg.sender][_createData.nonce], "Invalid request"); seenNonces[msg.sender][_createData.nonce] = true; require(verify(msg.sender, msg.sender, _createData.amount, _createData.encodeKey, _createData.nonce, _createData.signature), "invalid signature"); mint1155Data memory mintData = mint1155Data( payable(msg.sender), _createData.nft, _createData.totalQuantity ); uint256 tokenId = mint1155(mintData); emit CreatedNFT(tokenId); } function transferForFree721(transfer721Data memory _transferData) public onlyProxy { require(!seenNonces[msg.sender][_transferData.nonce], "Invalid request"); seenNonces[msg.sender][_transferData.nonce] = true; require(verify(msg.sender, msg.sender, _transferData.amount, _transferData.encodeKey, _transferData.nonce, _transferData.signature), "invalid signature"); uint256 tokenId = _transferData.tokenId; if(_transferData.tokenId == 0) { mint721Data memory mintData = mint721Data( _transferData.metadata, payable(msg.sender), _transferData.nft ); tokenId = mint721(mintData); } transfer721(_transferData.nft, msg.sender, _transferData.newOwner, tokenId); } function transferForFree1155(transfer1155Data memory _transferData) public onlyProxy { require(!seenNonces[msg.sender][_transferData.nonce], "Invalid request"); seenNonces[msg.sender][_transferData.nonce] = true; require(verify(msg.sender, msg.sender, _transferData.amount, _transferData.encodeKey, _transferData.nonce, _transferData.signature), "invalid signature"); uint256 tokenId = _transferData.tokenId; if(_transferData.tokenId == 0) { mint1155Data memory mintData = mint1155Data( payable(msg.sender), _transferData.nft, _transferData.quantity ); tokenId = mint1155(mintData); } transfer1155(_transferData.nft, _transferData.currentOwner, _transferData.newOwner, _transferData.quantity, tokenId); } //Functions only available for owner function acceptBid(acceptData memory _transferData) external payable onlyOwner onlyProxy { uint256 tokenId = _transferData.tokenId; if(_transferData.tokenId == 0) { mint721Data memory mintData = mint721Data( _transferData.metadata, payable(msg.sender), _transferData.nft ); tokenId = mint721(mintData); } uint256 amountToTransfer = _transferData.amount; if(_transferData.percent > 0) { uint256 platformSharePercent = calculatePercentValue(_transferData.amount, _transferData.percent); amountToTransfer = amountToTransfer-platformSharePercent; transfer20(_transferData.newOwner, address(this), platformSharePercent, _transferData.erc20token); } uint256 royaltyPercent; if(_transferData.royalty > 0) { royaltyPercent = calculatePercentValue(_transferData.amount, _transferData.royalty); amountToTransfer = amountToTransfer-royaltyPercent; transfer20(_transferData.newOwner, _transferData.creator, royaltyPercent, _transferData.erc20token); } transfer20(_transferData.newOwner, _transferData.currentOwner, amountToTransfer, _transferData.erc20token); transfer721(_transferData.nft, _transferData.currentOwner, _transferData.newOwner, tokenId); emit AutoAccepted(tokenId, royaltyPercent); } function withdrawBNB() public onlyOwner onlyProxy { payable(owner()).transfer(address(this).balance); } function withdrawERC20(address tokenAddress) public onlyOwner onlyProxy { ERC20Token token = ERC20Token(tokenAddress); uint256 balance = token.balanceOf(address(this)); require(balance >= 0, "insufficient balance" ); token.transfer(owner(), balance); } fallback () payable external {} receive () payable external {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"creatorEarning","type":"uint256"}],"name":"AutoAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"creatorEarning","type":"uint256"}],"name":"BidOfferAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"CreatedNFT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"creatorEarning","type":"uint256"}],"name":"NftTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"components":[{"internalType":"string","name":"metadata","type":"string"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"address","name":"nft","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"royalty","type":"uint256"},{"internalType":"address","name":"currentOwner","type":"address"},{"internalType":"address","name":"erc20token","type":"address"}],"internalType":"struct ElumntNFTMarketplace.acceptData","name":"_transferData","type":"tuple"}],"name":"acceptBid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"totalQuantity","type":"uint256"},{"internalType":"address","name":"nft","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"royalty","type":"uint256"},{"internalType":"string","name":"encodeKey","type":"string"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"erc20token","type":"address"}],"internalType":"struct ElumntNFTMarketplace.acceptOfferBid1155Data","name":"_transferData","type":"tuple"}],"name":"acceptOfferBid1155","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"metadata","type":"string"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"address","name":"nft","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"royalty","type":"uint256"},{"internalType":"string","name":"encodeKey","type":"string"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"erc20token","type":"address"}],"internalType":"struct ElumntNFTMarketplace.acceptOfferBid721Data","name":"_transferData","type":"tuple"}],"name":"acceptOfferBid721","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"totalQuantity","type":"uint256"},{"internalType":"address","name":"nft","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"royalty","type":"uint256"},{"internalType":"string","name":"encodeKey","type":"string"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"erc20token","type":"address"},{"internalType":"uint8","name":"currency","type":"uint8"}],"internalType":"struct ElumntNFTMarketplace.buy1155Data","name":"_buyData","type":"tuple"}],"name":"buy1155","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"metadata","type":"string"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"address","name":"nft","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"royalty","type":"uint256"},{"internalType":"string","name":"encodeKey","type":"string"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"erc20token","type":"address"},{"internalType":"uint8","name":"currency","type":"uint8"}],"internalType":"struct ElumntNFTMarketplace.buy721Data","name":"_buyData","type":"tuple"}],"name":"buy721","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"nft","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"encodeKey","type":"string"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"totalQuantity","type":"uint256"}],"internalType":"struct ElumntNFTMarketplace.create1155Data","name":"_createData","type":"tuple"}],"name":"create1155","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"metadata","type":"string"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"nft","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"encodeKey","type":"string"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"internalType":"struct ElumntNFTMarketplace.create721Data","name":"_createData","type":"tuple"}],"name":"create721","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"metadata","type":"string"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"address","name":"nft","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"address","name":"currentOwner","type":"address"},{"internalType":"string","name":"encodeKey","type":"string"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"internalType":"struct ElumntNFTMarketplace.transfer1155Data","name":"_transferData","type":"tuple"}],"name":"transferForFree1155","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"metadata","type":"string"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"address","name":"nft","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"address","name":"currentOwner","type":"address"},{"internalType":"string","name":"encodeKey","type":"string"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"internalType":"struct ElumntNFTMarketplace.transfer721Data","name":"_transferData","type":"tuple"}],"name":"transferForFree721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040523060601b60805234801561001757600080fd5b5060805160601c6137166100ec600039600081816102e40152818161032d015281816104cf0152818161050f01528181610780015281816107c00152818161085d0152818161089d015281816109230152818161096301528181610ac201528181610b0201528181610e2f01528181610e6f01528181610ee7015281816110c40152818161110401528181611363015281816113a30152818161151c0152818161155c01528181611697015281816116d70152818161183f0152818161187f01528181611c1b0152611c5b01526137166000f3fe6080604052600436106101015760003560e01c80638129fc1c1161008f578063a06816c411610061578063a06816c41461024b578063c12cc8e71461025e578063c33648cc1461027e578063f2fde38b14610291578063f4f3b200146102b157005b80638129fc1c146101e85780638399af48146101fd5780638da5cb5b1461021057806391d48a4d1461023857005b80633ba51889116100d35780633ba51889146101655780633cbf52d1146101855780634f1ef2861461019857806352d1902d146101ab578063715018a6146101d357005b8063179e3d711461010a5780631983f2151461011d5780631d111d13146101305780633659cfe61461014557005b3661010857005b005b610108610118366004612970565b6102d1565b61010861012b366004612b7a565b6104c4565b34801561013c57600080fd5b5061010861076d565b34801561015157600080fd5b506101086101603660046128cd565b610852565b34801561017157600080fd5b506101086101803660046131e1565b610918565b610108610193366004612ca2565b610ab7565b6101086101a63660046128e8565b610e24565b3480156101b757600080fd5b506101c0610eda565b6040519081526020015b60405180910390f35b3480156101df57600080fd5b50610108610f8d565b3480156101f457600080fd5b50610108610fa1565b61010861020b366004612a62565b6110b9565b34801561021c57600080fd5b506097546040516001600160a01b0390911681526020016101ca565b610108610246366004612fdd565b611358565b610108610259366004612f0a565b611511565b34801561026a57600080fd5b506101086102793660046130ca565b61168c565b61010861028c366004612dce565b611834565b34801561029d57600080fd5b506101086102ac3660046128cd565b611b92565b3480156102bd57600080fd5b506101086102cc3660046128cd565b611c08565b6102d9611dd8565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561032b5760405162461bcd60e51b815260040161032290613403565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661035d611e32565b6001600160a01b0316146103835760405162461bcd60e51b81526004016103229061344f565b6020810151806103c357604080516060810182528351815233602082015260808401516001600160a01b0316918101919091526103bf81611e4e565b9150505b60a082015160c08301511561040b5760006103e68460a001518560c00151611ee4565b90506103f2818361362a565b915061040984604001513083876101200151611f0a565b505b60e0830151600090156104515761042a8460a001518560e00151611ee4565b9050610436818361362a565b91506104518460400151856060015183876101200151611f0a565b61046b846040015185610100015184876101200151611f0a565b6104848460800151856101000151866040015186612066565b827f59d6715dc7dbafa61b6c844a65b5f4daa073b3e3e6db2fdc30a624b78761c606826040516104b691815260200190565b60405180910390a250505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561050d5760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661053f611e32565b6001600160a01b0316146105655760405162461bcd60e51b81526004016103229061344f565b60208082015133600090815260c9835260408082206101408601518352909352919091205460ff16156105aa5760405162461bcd60e51b8152600401610322906133af565b33600081815260c9602090815260408083206101408701805185529252909120805460ff1916600117905560c0840151610120850151915160a08601516105f6949384939290916120da565b6106125760405162461bcd60e51b8152600401610322906133d8565b602082015161065157604080516060810182528351815233602082015260808401516001600160a01b03169181019190915261064d81611e4e565b9150505b60c082015160e0830151156106995760006106748460c001518560e00151611ee4565b9050610680818361362a565b915061069784604001513083876101600151611f0a565b505b6000808461010001511180156106bc575060608401516001600160a01b03163314155b156106fb576106d48460c00151856101000151611ee4565b90506106e0818361362a565b91506106fb8460400151856060015183876101600151611f0a565b61071084604001513384876101600151611f0a565b610724846080015133866040015186612066565b7f935686764ead6e6dd7825ef27e93f2c856bdf20f6fc6554857ce358e139d8cf783343387604001518560405161075f9594939291906134e6565b60405180910390a150505050565b610775611dd8565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156107be5760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166107f0611e32565b6001600160a01b0316146108165760405162461bcd60e51b81526004016103229061344f565b6097546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561084f573d6000803e3d6000fd5b50565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561089b5760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108cd611e32565b6001600160a01b0316146108f35760405162461bcd60e51b81526004016103229061344f565b6108fc81612171565b6040805160008082526020820190925261084f91839190612179565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156109615760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610993611e32565b6001600160a01b0316146109b95760405162461bcd60e51b81526004016103229061344f565b33600090815260c960209081526040808320610100850151845290915290205460ff16156109f95760405162461bcd60e51b8152600401610322906133af565b33600081815260c9602090815260408083206101008601805185529252909120805460ff19166001179055608083015160e0840151915160a0850151610a44949384939290916120da565b610a605760405162461bcd60e51b8152600401610322906133d8565b602081015180610a9f576040805160608082018352845182523360208301528401516001600160a01b031691810191909152610a9b81611e4e565b9150505b610ab3826060015133846040015184612066565b5050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610b005760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610b32611e32565b6001600160a01b031614610b585760405162461bcd60e51b81526004016103229061344f565b805133600090815260c960209081526040808320610160860151845290915290205460ff1615610b9a5760405162461bcd60e51b8152600401610322906133af565b33600081815260c9602090815260408083206101608701805185529252909120805460ff1916600117905560e0840151610140850151915160c0860151610be6949384939290916120da565b610c025760405162461bcd60e51b8152600401610322906133d8565b8151610c52576000604051806060016040528084602001516001600160a01b031681526020018460a001516001600160a01b0316815260200184608001518152509050610c4e816122f8565b9150505b60e082015161010083015115610ca8576000610c778460e00151856101000151611ee4565b9050610c83818361362a565b9150836101a0015160ff16600114610ca657610ca6333083876101800151611f0a565b505b600080846101200151118015610cd8575083602001516001600160a01b031684604001516001600160a01b031614155b15610d6757610cf08460e00151856101200151611ee4565b9050610cfc818361362a565b9150836101a0015160ff1660011415610d525783604001516001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015610d4c573d6000803e3d6000fd5b50610d67565b610d6733856040015183876101800151611f0a565b610d808460a00151856020015133876060015187612347565b836101a0015160ff1660011415610dd45783602001516001600160a01b03166108fc839081150290604051600060405180830381858888f19350505050158015610dce573d6000803e3d6000fd5b50610de9565b610de933856020015184876101800151611f0a565b7f496af9e25ba2eda1287483f69419686171811cf75b261447027585c8d67bd3f683348660200151338560405161075f9594939291906134e6565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610e6d5760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610e9f611e32565b6001600160a01b031614610ec55760405162461bcd60e51b81526004016103229061344f565b610ece82612171565b610ab382826001612179565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f7a5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610322565b5060008051602061369a83398151915290565b610f95611dd8565b610f9f60006123d1565b565b600054610100900460ff1615808015610fc15750600054600160ff909116105b80610fdb5750303b158015610fdb575060005460ff166001145b61103e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610322565b6000805460ff191660011790558015611061576000805461ff0019166101001790555b611069612423565b611071612452565b801561084f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156111025760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611134611e32565b6001600160a01b03161461115a5760405162461bcd60e51b81526004016103229061344f565b805133600090815260c960209081526040808320610160860151845290915290205460ff161561119c5760405162461bcd60e51b8152600401610322906133af565b33600081815260c9602090815260408083206101608701805185529252909120805460ff1916600117905560e0840151610140850151915160c08601516111e8949384939290916120da565b6112045760405162461bcd60e51b8152600401610322906133d8565b8151611243576040805160608101825233815260a08401516001600160a01b0316602082015260808401519181019190915261123f816122f8565b9150505b60e08201516101008301511561128d5760006112688460e00151856101000151611ee4565b9050611274818361362a565b915061128b84602001513083876101800151611f0a565b505b6000808461012001511180156112b0575060408401516001600160a01b03163314155b156112ef576112c88460e00151856101200151611ee4565b90506112d4818361362a565b91506112ef8460200151856040015183876101800151611f0a565b61130484602001513384876101800151611f0a565b61131d8460a00151338660200151876060015187612347565b7f935686764ead6e6dd7825ef27e93f2c856bdf20f6fc6554857ce358e139d8cf783343387602001518560405161075f9594939291906134e6565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156113a15760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166113d3611e32565b6001600160a01b0316146113f95760405162461bcd60e51b81526004016103229061344f565b33600090815260c96020908152604080832060c0850151845290915290205460ff16156114385760405162461bcd60e51b8152600401610322906133af565b33600081815260c96020908152604080832060c08601805185529252909120805460ff19166001179055608083015160a084015191516060850151611482949384939290916120da565b61149e5760405162461bcd60e51b8152600401610322906133d8565b6040805160608101825282518152336020820152828201516001600160a01b03169181019190915260006114d182611e4e565b90507f72102923c3d44433bd725cb2c744a4c92a536ad249b665dec9853a16ed6655258160405161150491815260200190565b60405180910390a1505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561155a5760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661158c611e32565b6001600160a01b0316146115b25760405162461bcd60e51b81526004016103229061344f565b33600090815260c96020908152604080832060a0850151845290915290205460ff16156115f15760405162461bcd60e51b8152600401610322906133af565b33600081815260c96020908152604080832060a0860180518552925291829020805460ff191660011790556060840151608085015191519285015161163994938493916120da565b6116555760405162461bcd60e51b8152600401610322906133d8565b604080516060810182523381526020838101516001600160a01b03169082015260c08301519181019190915260006114d1826122f8565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156116d55760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611707611e32565b6001600160a01b03161461172d5760405162461bcd60e51b81526004016103229061344f565b33600090815260c960209081526040808320610120850151845290915290205460ff161561176d5760405162461bcd60e51b8152600401610322906133af565b33600081815260c9602090815260408083206101208601805185529252909120805460ff191660011790556080830151610100840151915160c08501516117b9949384939290916120da565b6117d55760405162461bcd60e51b8152600401610322906133d8565b6020810151806118175760408051606080820183523382528401516001600160a01b0316602082015260a084015191810191909152611813816122f8565b9150505b610ab382606001518360e0015184604001518560a0015185612347565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561187d5760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166118af611e32565b6001600160a01b0316146118d55760405162461bcd60e51b81526004016103229061344f565b60208082015133600090815260c9835260408082206101408601518352909352919091205460ff161561191a5760405162461bcd60e51b8152600401610322906133af565b33600081815260c9602090815260408083206101408701805185529252909120805460ff1916600117905560c0840151610120850151915160a0860151611966949384939290916120da565b6119825760405162461bcd60e51b8152600401610322906133d8565b60208201516119c7576040805160608101825283518152838201516001600160a01b039081166020830152608085015116918101919091526119c381611e4e565b9150505b60c082015160e083015115611a1b5760006119ea8460c001518560e00151611ee4565b90506119f6818361362a565b915083610180015160ff16600114611a1957611a19333083876101600151611f0a565b505b600080846101000151118015611a4b575083604001516001600160a01b031684606001516001600160a01b031614155b15611ada57611a638460c00151856101000151611ee4565b9050611a6f818361362a565b915083610180015160ff1660011415611ac55783606001516001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015611abf573d6000803e3d6000fd5b50611ada565b611ada33856060015183876101600151611f0a565b611aee846080015185604001513386612066565b83610180015160ff1660011415611b425783604001516001600160a01b03166108fc839081150290604051600060405180830381858888f19350505050158015611b3c573d6000803e3d6000fd5b50611b57565b611b5733856040015184876101600151611f0a565b7f496af9e25ba2eda1287483f69419686171811cf75b261447027585c8d67bd3f683348660400151338560405161075f9594939291906134e6565b611b9a611dd8565b6001600160a01b038116611bff5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610322565b61084f816123d1565b611c10611dd8565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611c595760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611c8b611e32565b6001600160a01b031614611cb15760405162461bcd60e51b81526004016103229061344f565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381600087803b158015611cf757600080fd5b505af1158015611d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2f9190612957565b9050816001600160a01b031663a9059cbb611d526097546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b158015611d9a57600080fd5b505af1158015611dae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd29190612935565b50505050565b6097546001600160a01b03163314610f9f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610322565b60008051602061369a833981519152546001600160a01b031690565b604080820151602083015183519251636902622f60e11b815260009384926001600160a01b0385169263d204c45e92611e8a9291600401613378565b602060405180830381600087803b158015611ea457600080fd5b505af1158015611eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611edc9190612957565b949350505050565b600080611ef18484612479565b90506000611f018261271061248c565b95945050505050565b6040516370a0823160e01b81526001600160a01b03858116600483015282916000918316906370a0823190602401602060405180830381600087803b158015611f5257600080fd5b505af1158015611f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8a9190612957565b905083811015611fd35760405162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742062616c616e636560601b6044820152606401610322565b6040516323b872dd60e01b81526001600160a01b0387811660048301528681166024830152604482018690528316906323b872dd90606401602060405180830381600087803b15801561202557600080fd5b505af1158015612039573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205d9190612935565b50505050505050565b604051632142170760e11b81526001600160a01b0384811660048301528381166024830152604482018390528591908216906342842e0e90606401600060405180830381600087803b1580156120bb57600080fd5b505af11580156120cf573d6000803e3d6000fd5b505050505050505050565b6000806120e987878787612498565b90506000612144826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050886001600160a01b031661215a82866124d1565b6001600160a01b0316149998505050505050505050565b61084f611dd8565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156121b1576121ac83612550565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156121ea57600080fd5b505afa92505050801561221a575060408051601f3d908101601f1916820190925261221791810190612957565b60015b61227d5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610322565b60008051602061369a83398151915281146122ec5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610322565b506121ac8383836125ec565b6020810151604080830151835191516394bf804d60e01b81526000939284926001600160a01b038516926394bf804d92611e8a92916004019182526001600160a01b0316602082015260400190565b604051637921219560e11b81526001600160a01b0385811660048301528481166024830152604482018390526064820184905260a06084830152600060a483015286919082169063f242432a9060c401600060405180830381600087803b1580156123b157600080fd5b505af11580156123c5573d6000803e3d6000fd5b50505050505050505050565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661244a5760405162461bcd60e51b81526004016103229061349b565b610f9f612611565b600054610100900460ff16610f9f5760405162461bcd60e51b81526004016103229061349b565b6000612485828461360b565b9392505050565b600061248582846135e9565b6000848484846040516020016124b19493929190613316565b604051602081830303815290604052805190602001209050949350505050565b6000806000806124e085612641565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa15801561253b573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6001600160a01b0381163b6125bd5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610322565b60008051602061369a83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6125f5836126b5565b6000825111806126025750805b156121ac57611dd283836126f5565b600054610100900460ff166126385760405162461bcd60e51b81526004016103229061349b565b610f9f336123d1565b600080600083516041146126975760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610322565b50505060208101516040820151606090920151909260009190911a90565b6126be81612550565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b61275d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610322565b600080846001600160a01b031684604051612778919061335c565b600060405180830381855af49150503d80600081146127b3576040519150601f19603f3d011682016040523d82523d6000602084013e6127b8565b606091505b5091509150611f0182826040518060600160405280602781526020016136ba60279139606083156127ea575081612485565b8251156127fa5782518084602001fd5b8160405162461bcd60e51b8152600401610322919061339c565b80356001600160a01b038116811461282b57600080fd5b919050565b600082601f83011261284157600080fd5b81356001600160401b038082111561285b5761285b613683565b604051601f8301601f19908116603f0116810190828211818310171561288357612883613683565b8160405283815286602085880101111561289c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803560ff8116811461282b57600080fd5b6000602082840312156128df57600080fd5b61248582612814565b600080604083850312156128fb57600080fd5b61290483612814565b915060208301356001600160401b0381111561291f57600080fd5b61292b85828601612830565b9150509250929050565b60006020828403121561294757600080fd5b8151801515811461248557600080fd5b60006020828403121561296957600080fd5b5051919050565b60006020828403121561298257600080fd5b81356001600160401b038082111561299957600080fd5b9083019061014082860312156129ae57600080fd5b6129b6613512565b8235828111156129c557600080fd5b6129d187828601612830565b825250602083013560208201526129ea60408401612814565b60408201526129fb60608401612814565b6060820152612a0c60808401612814565b608082015260a083013560a082015260c083013560c082015260e083013560e08201526101009150612a3f828401612814565b828201526101209150612a53828401612814565b91810191909152949350505050565b600060208284031215612a7457600080fd5b81356001600160401b0380821115612a8b57600080fd5b908301906101a08286031215612aa057600080fd5b612aa861353b565b82358152612ab860208401612814565b6020820152612ac960408401612814565b60408201526060830135606082015260808301356080820152612aee60a08401612814565b60a082015260c083013582811115612b0557600080fd5b612b1187828601612830565b60c08301525060e08381013590820152610100808401359082015261012080840135908201526101408084013583811115612b4b57600080fd5b612b5788828701612830565b828401525050610160915081830135828201526101809150612a53828401612814565b600060208284031215612b8c57600080fd5b81356001600160401b0380821115612ba357600080fd5b908301906101808286031215612bb857600080fd5b612bc061355e565b823582811115612bcf57600080fd5b612bdb87828601612830565b82525060208301356020820152612bf460408401612814565b6040820152612c0560608401612814565b6060820152612c1660808401612814565b608082015260a083013582811115612c2d57600080fd5b612c3987828601612830565b60a08301525060c083013560c082015260e083013560e08201526101008084013581830152506101208084013583811115612c7357600080fd5b612c7f88828701612830565b828401525050610140915081830135828201526101609150612a53828401612814565b600060208284031215612cb457600080fd5b81356001600160401b0380821115612ccb57600080fd5b908301906101c08286031215612ce057600080fd5b612ce8613581565b82358152612cf860208401612814565b6020820152612d0960408401612814565b60408201526060830135606082015260808301356080820152612d2e60a08401612814565b60a082015260c083013582811115612d4557600080fd5b612d5187828601612830565b60c08301525060e08381013590820152610100808401359082015261012080840135908201526101408084013583811115612d8b57600080fd5b612d9788828701612830565b828401525050610160915081830135828201526101809150612dba828401612814565b828201526101a09150612a538284016128bc565b600060208284031215612de057600080fd5b81356001600160401b0380821115612df757600080fd5b908301906101a08286031215612e0c57600080fd5b612e1461353b565b823582811115612e2357600080fd5b612e2f87828601612830565b82525060208301356020820152612e4860408401612814565b6040820152612e5960608401612814565b6060820152612e6a60808401612814565b608082015260a083013582811115612e8157600080fd5b612e8d87828601612830565b60a08301525060c083013560c082015260e083013560e08201526101008084013581830152506101208084013583811115612ec757600080fd5b612ed388828701612830565b828401525050610140915081830135828201526101609150612ef6828401612814565b828201526101809150612a538284016128bc565b600060208284031215612f1c57600080fd5b81356001600160401b0380821115612f3357600080fd5b9083019060e08286031215612f4757600080fd5b612f4f6135a4565b612f5883612814565b8152612f6660208401612814565b6020820152604083013582811115612f7d57600080fd5b612f8987828601612830565b60408301525060608301356060820152608083013582811115612fab57600080fd5b612fb787828601612830565b60808301525060a083013560a082015260c083013560c082015280935050505092915050565b600060208284031215612fef57600080fd5b81356001600160401b038082111561300657600080fd5b9083019060e0828603121561301a57600080fd5b6130226135a4565b82358281111561303157600080fd5b61303d87828601612830565b82525061304c60208401612814565b602082015261305d60408401612814565b604082015260608301358281111561307457600080fd5b61308087828601612830565b6060830152506080830135608082015260a0830135828111156130a257600080fd5b6130ae87828601612830565b60a08301525060c083013560c082015280935050505092915050565b6000602082840312156130dc57600080fd5b81356001600160401b03808211156130f357600080fd5b90830190610140828603121561310857600080fd5b613110613512565b82358281111561311f57600080fd5b61312b87828601612830565b8252506020830135602082015261314460408401612814565b604082015261315560608401612814565b60608201526080830135608082015260a083013560a082015260c08301358281111561318057600080fd5b61318c87828601612830565b60c08301525061319e60e08401612814565b60e082015261010080840135838111156131b757600080fd5b6131c388828701612830565b91830191909152506101209283013592810192909252509392505050565b6000602082840312156131f357600080fd5b81356001600160401b038082111561320a57600080fd5b90830190610120828603121561321f57600080fd5b6132276135c6565b82358281111561323657600080fd5b61324287828601612830565b8252506020830135602082015261325b60408401612814565b604082015261326c60608401612814565b60608201526080830135608082015260a08301358281111561328d57600080fd5b61329987828601612830565b60a0830152506132ab60c08401612814565b60c082015260e0830135828111156132c257600080fd5b6132ce87828601612830565b60e0830152506101009283013592810192909252509392505050565b60008151808452613302816020860160208601613641565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff198560601b16815283601482015260008351613346816034850160208801613641565b6034920191820192909252605401949350505050565b6000825161336e818460208701613641565b9190910192915050565b6001600160a01b0383168152604060208201819052600090611edc908301846132ea565b60208152600061248560208301846132ea565b6020808252600f908201526e125b9d985b1a59081c995c5d595cdd608a1b604082015260600190565b602080825260119082015270696e76616c6964207369676e617475726560781b604082015260600190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b94855260208501939093526001600160a01b039182166040850152166060830152608082015260a00190565b60405161014081016001600160401b038111828210171561353557613535613683565b60405290565b6040516101a081016001600160401b038111828210171561353557613535613683565b60405161018081016001600160401b038111828210171561353557613535613683565b6040516101c081016001600160401b038111828210171561353557613535613683565b60405160e081016001600160401b038111828210171561353557613535613683565b60405161012081016001600160401b038111828210171561353557613535613683565b60008261360657634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156136255761362561366d565b500290565b60008282101561363c5761363c61366d565b500390565b60005b8381101561365c578181015183820152602001613644565b83811115611dd25750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220fcdad98624acab229be434c6667b768c9d9875bb20ed6d5236ab483c5c76fadf64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101015760003560e01c80638129fc1c1161008f578063a06816c411610061578063a06816c41461024b578063c12cc8e71461025e578063c33648cc1461027e578063f2fde38b14610291578063f4f3b200146102b157005b80638129fc1c146101e85780638399af48146101fd5780638da5cb5b1461021057806391d48a4d1461023857005b80633ba51889116100d35780633ba51889146101655780633cbf52d1146101855780634f1ef2861461019857806352d1902d146101ab578063715018a6146101d357005b8063179e3d711461010a5780631983f2151461011d5780631d111d13146101305780633659cfe61461014557005b3661010857005b005b610108610118366004612970565b6102d1565b61010861012b366004612b7a565b6104c4565b34801561013c57600080fd5b5061010861076d565b34801561015157600080fd5b506101086101603660046128cd565b610852565b34801561017157600080fd5b506101086101803660046131e1565b610918565b610108610193366004612ca2565b610ab7565b6101086101a63660046128e8565b610e24565b3480156101b757600080fd5b506101c0610eda565b6040519081526020015b60405180910390f35b3480156101df57600080fd5b50610108610f8d565b3480156101f457600080fd5b50610108610fa1565b61010861020b366004612a62565b6110b9565b34801561021c57600080fd5b506097546040516001600160a01b0390911681526020016101ca565b610108610246366004612fdd565b611358565b610108610259366004612f0a565b611511565b34801561026a57600080fd5b506101086102793660046130ca565b61168c565b61010861028c366004612dce565b611834565b34801561029d57600080fd5b506101086102ac3660046128cd565b611b92565b3480156102bd57600080fd5b506101086102cc3660046128cd565b611c08565b6102d9611dd8565b306001600160a01b037f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb6291816141561032b5760405162461bcd60e51b815260040161032290613403565b60405180910390fd5b7f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb629186001600160a01b031661035d611e32565b6001600160a01b0316146103835760405162461bcd60e51b81526004016103229061344f565b6020810151806103c357604080516060810182528351815233602082015260808401516001600160a01b0316918101919091526103bf81611e4e565b9150505b60a082015160c08301511561040b5760006103e68460a001518560c00151611ee4565b90506103f2818361362a565b915061040984604001513083876101200151611f0a565b505b60e0830151600090156104515761042a8460a001518560e00151611ee4565b9050610436818361362a565b91506104518460400151856060015183876101200151611f0a565b61046b846040015185610100015184876101200151611f0a565b6104848460800151856101000151866040015186612066565b827f59d6715dc7dbafa61b6c844a65b5f4daa073b3e3e6db2fdc30a624b78761c606826040516104b691815260200190565b60405180910390a250505050565b306001600160a01b037f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb6291816141561050d5760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb629186001600160a01b031661053f611e32565b6001600160a01b0316146105655760405162461bcd60e51b81526004016103229061344f565b60208082015133600090815260c9835260408082206101408601518352909352919091205460ff16156105aa5760405162461bcd60e51b8152600401610322906133af565b33600081815260c9602090815260408083206101408701805185529252909120805460ff1916600117905560c0840151610120850151915160a08601516105f6949384939290916120da565b6106125760405162461bcd60e51b8152600401610322906133d8565b602082015161065157604080516060810182528351815233602082015260808401516001600160a01b03169181019190915261064d81611e4e565b9150505b60c082015160e0830151156106995760006106748460c001518560e00151611ee4565b9050610680818361362a565b915061069784604001513083876101600151611f0a565b505b6000808461010001511180156106bc575060608401516001600160a01b03163314155b156106fb576106d48460c00151856101000151611ee4565b90506106e0818361362a565b91506106fb8460400151856060015183876101600151611f0a565b61071084604001513384876101600151611f0a565b610724846080015133866040015186612066565b7f935686764ead6e6dd7825ef27e93f2c856bdf20f6fc6554857ce358e139d8cf783343387604001518560405161075f9594939291906134e6565b60405180910390a150505050565b610775611dd8565b306001600160a01b037f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb629181614156107be5760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb629186001600160a01b03166107f0611e32565b6001600160a01b0316146108165760405162461bcd60e51b81526004016103229061344f565b6097546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561084f573d6000803e3d6000fd5b50565b306001600160a01b037f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb6291816141561089b5760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb629186001600160a01b03166108cd611e32565b6001600160a01b0316146108f35760405162461bcd60e51b81526004016103229061344f565b6108fc81612171565b6040805160008082526020820190925261084f91839190612179565b306001600160a01b037f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb629181614156109615760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb629186001600160a01b0316610993611e32565b6001600160a01b0316146109b95760405162461bcd60e51b81526004016103229061344f565b33600090815260c960209081526040808320610100850151845290915290205460ff16156109f95760405162461bcd60e51b8152600401610322906133af565b33600081815260c9602090815260408083206101008601805185529252909120805460ff19166001179055608083015160e0840151915160a0850151610a44949384939290916120da565b610a605760405162461bcd60e51b8152600401610322906133d8565b602081015180610a9f576040805160608082018352845182523360208301528401516001600160a01b031691810191909152610a9b81611e4e565b9150505b610ab3826060015133846040015184612066565b5050565b306001600160a01b037f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb62918161415610b005760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb629186001600160a01b0316610b32611e32565b6001600160a01b031614610b585760405162461bcd60e51b81526004016103229061344f565b805133600090815260c960209081526040808320610160860151845290915290205460ff1615610b9a5760405162461bcd60e51b8152600401610322906133af565b33600081815260c9602090815260408083206101608701805185529252909120805460ff1916600117905560e0840151610140850151915160c0860151610be6949384939290916120da565b610c025760405162461bcd60e51b8152600401610322906133d8565b8151610c52576000604051806060016040528084602001516001600160a01b031681526020018460a001516001600160a01b0316815260200184608001518152509050610c4e816122f8565b9150505b60e082015161010083015115610ca8576000610c778460e00151856101000151611ee4565b9050610c83818361362a565b9150836101a0015160ff16600114610ca657610ca6333083876101800151611f0a565b505b600080846101200151118015610cd8575083602001516001600160a01b031684604001516001600160a01b031614155b15610d6757610cf08460e00151856101200151611ee4565b9050610cfc818361362a565b9150836101a0015160ff1660011415610d525783604001516001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015610d4c573d6000803e3d6000fd5b50610d67565b610d6733856040015183876101800151611f0a565b610d808460a00151856020015133876060015187612347565b836101a0015160ff1660011415610dd45783602001516001600160a01b03166108fc839081150290604051600060405180830381858888f19350505050158015610dce573d6000803e3d6000fd5b50610de9565b610de933856020015184876101800151611f0a565b7f496af9e25ba2eda1287483f69419686171811cf75b261447027585c8d67bd3f683348660200151338560405161075f9594939291906134e6565b306001600160a01b037f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb62918161415610e6d5760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb629186001600160a01b0316610e9f611e32565b6001600160a01b031614610ec55760405162461bcd60e51b81526004016103229061344f565b610ece82612171565b610ab382826001612179565b6000306001600160a01b037f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb629181614610f7a5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610322565b5060008051602061369a83398151915290565b610f95611dd8565b610f9f60006123d1565b565b600054610100900460ff1615808015610fc15750600054600160ff909116105b80610fdb5750303b158015610fdb575060005460ff166001145b61103e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610322565b6000805460ff191660011790558015611061576000805461ff0019166101001790555b611069612423565b611071612452565b801561084f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b306001600160a01b037f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb629181614156111025760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb629186001600160a01b0316611134611e32565b6001600160a01b03161461115a5760405162461bcd60e51b81526004016103229061344f565b805133600090815260c960209081526040808320610160860151845290915290205460ff161561119c5760405162461bcd60e51b8152600401610322906133af565b33600081815260c9602090815260408083206101608701805185529252909120805460ff1916600117905560e0840151610140850151915160c08601516111e8949384939290916120da565b6112045760405162461bcd60e51b8152600401610322906133d8565b8151611243576040805160608101825233815260a08401516001600160a01b0316602082015260808401519181019190915261123f816122f8565b9150505b60e08201516101008301511561128d5760006112688460e00151856101000151611ee4565b9050611274818361362a565b915061128b84602001513083876101800151611f0a565b505b6000808461012001511180156112b0575060408401516001600160a01b03163314155b156112ef576112c88460e00151856101200151611ee4565b90506112d4818361362a565b91506112ef8460200151856040015183876101800151611f0a565b61130484602001513384876101800151611f0a565b61131d8460a00151338660200151876060015187612347565b7f935686764ead6e6dd7825ef27e93f2c856bdf20f6fc6554857ce358e139d8cf783343387602001518560405161075f9594939291906134e6565b306001600160a01b037f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb629181614156113a15760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb629186001600160a01b03166113d3611e32565b6001600160a01b0316146113f95760405162461bcd60e51b81526004016103229061344f565b33600090815260c96020908152604080832060c0850151845290915290205460ff16156114385760405162461bcd60e51b8152600401610322906133af565b33600081815260c96020908152604080832060c08601805185529252909120805460ff19166001179055608083015160a084015191516060850151611482949384939290916120da565b61149e5760405162461bcd60e51b8152600401610322906133d8565b6040805160608101825282518152336020820152828201516001600160a01b03169181019190915260006114d182611e4e565b90507f72102923c3d44433bd725cb2c744a4c92a536ad249b665dec9853a16ed6655258160405161150491815260200190565b60405180910390a1505050565b306001600160a01b037f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb6291816141561155a5760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb629186001600160a01b031661158c611e32565b6001600160a01b0316146115b25760405162461bcd60e51b81526004016103229061344f565b33600090815260c96020908152604080832060a0850151845290915290205460ff16156115f15760405162461bcd60e51b8152600401610322906133af565b33600081815260c96020908152604080832060a0860180518552925291829020805460ff191660011790556060840151608085015191519285015161163994938493916120da565b6116555760405162461bcd60e51b8152600401610322906133d8565b604080516060810182523381526020838101516001600160a01b03169082015260c08301519181019190915260006114d1826122f8565b306001600160a01b037f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb629181614156116d55760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb629186001600160a01b0316611707611e32565b6001600160a01b03161461172d5760405162461bcd60e51b81526004016103229061344f565b33600090815260c960209081526040808320610120850151845290915290205460ff161561176d5760405162461bcd60e51b8152600401610322906133af565b33600081815260c9602090815260408083206101208601805185529252909120805460ff191660011790556080830151610100840151915160c08501516117b9949384939290916120da565b6117d55760405162461bcd60e51b8152600401610322906133d8565b6020810151806118175760408051606080820183523382528401516001600160a01b0316602082015260a084015191810191909152611813816122f8565b9150505b610ab382606001518360e0015184604001518560a0015185612347565b306001600160a01b037f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb6291816141561187d5760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb629186001600160a01b03166118af611e32565b6001600160a01b0316146118d55760405162461bcd60e51b81526004016103229061344f565b60208082015133600090815260c9835260408082206101408601518352909352919091205460ff161561191a5760405162461bcd60e51b8152600401610322906133af565b33600081815260c9602090815260408083206101408701805185529252909120805460ff1916600117905560c0840151610120850151915160a0860151611966949384939290916120da565b6119825760405162461bcd60e51b8152600401610322906133d8565b60208201516119c7576040805160608101825283518152838201516001600160a01b039081166020830152608085015116918101919091526119c381611e4e565b9150505b60c082015160e083015115611a1b5760006119ea8460c001518560e00151611ee4565b90506119f6818361362a565b915083610180015160ff16600114611a1957611a19333083876101600151611f0a565b505b600080846101000151118015611a4b575083604001516001600160a01b031684606001516001600160a01b031614155b15611ada57611a638460c00151856101000151611ee4565b9050611a6f818361362a565b915083610180015160ff1660011415611ac55783606001516001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015611abf573d6000803e3d6000fd5b50611ada565b611ada33856060015183876101600151611f0a565b611aee846080015185604001513386612066565b83610180015160ff1660011415611b425783604001516001600160a01b03166108fc839081150290604051600060405180830381858888f19350505050158015611b3c573d6000803e3d6000fd5b50611b57565b611b5733856040015184876101600151611f0a565b7f496af9e25ba2eda1287483f69419686171811cf75b261447027585c8d67bd3f683348660400151338560405161075f9594939291906134e6565b611b9a611dd8565b6001600160a01b038116611bff5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610322565b61084f816123d1565b611c10611dd8565b306001600160a01b037f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb62918161415611c595760405162461bcd60e51b815260040161032290613403565b7f00000000000000000000000069bba61a3af1a2d60826c96c8dc21931bdb629186001600160a01b0316611c8b611e32565b6001600160a01b031614611cb15760405162461bcd60e51b81526004016103229061344f565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381600087803b158015611cf757600080fd5b505af1158015611d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2f9190612957565b9050816001600160a01b031663a9059cbb611d526097546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b158015611d9a57600080fd5b505af1158015611dae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd29190612935565b50505050565b6097546001600160a01b03163314610f9f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610322565b60008051602061369a833981519152546001600160a01b031690565b604080820151602083015183519251636902622f60e11b815260009384926001600160a01b0385169263d204c45e92611e8a9291600401613378565b602060405180830381600087803b158015611ea457600080fd5b505af1158015611eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611edc9190612957565b949350505050565b600080611ef18484612479565b90506000611f018261271061248c565b95945050505050565b6040516370a0823160e01b81526001600160a01b03858116600483015282916000918316906370a0823190602401602060405180830381600087803b158015611f5257600080fd5b505af1158015611f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8a9190612957565b905083811015611fd35760405162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742062616c616e636560601b6044820152606401610322565b6040516323b872dd60e01b81526001600160a01b0387811660048301528681166024830152604482018690528316906323b872dd90606401602060405180830381600087803b15801561202557600080fd5b505af1158015612039573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205d9190612935565b50505050505050565b604051632142170760e11b81526001600160a01b0384811660048301528381166024830152604482018390528591908216906342842e0e90606401600060405180830381600087803b1580156120bb57600080fd5b505af11580156120cf573d6000803e3d6000fd5b505050505050505050565b6000806120e987878787612498565b90506000612144826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050886001600160a01b031661215a82866124d1565b6001600160a01b0316149998505050505050505050565b61084f611dd8565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156121b1576121ac83612550565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156121ea57600080fd5b505afa92505050801561221a575060408051601f3d908101601f1916820190925261221791810190612957565b60015b61227d5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610322565b60008051602061369a83398151915281146122ec5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610322565b506121ac8383836125ec565b6020810151604080830151835191516394bf804d60e01b81526000939284926001600160a01b038516926394bf804d92611e8a92916004019182526001600160a01b0316602082015260400190565b604051637921219560e11b81526001600160a01b0385811660048301528481166024830152604482018390526064820184905260a06084830152600060a483015286919082169063f242432a9060c401600060405180830381600087803b1580156123b157600080fd5b505af11580156123c5573d6000803e3d6000fd5b50505050505050505050565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661244a5760405162461bcd60e51b81526004016103229061349b565b610f9f612611565b600054610100900460ff16610f9f5760405162461bcd60e51b81526004016103229061349b565b6000612485828461360b565b9392505050565b600061248582846135e9565b6000848484846040516020016124b19493929190613316565b604051602081830303815290604052805190602001209050949350505050565b6000806000806124e085612641565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa15801561253b573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6001600160a01b0381163b6125bd5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610322565b60008051602061369a83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6125f5836126b5565b6000825111806126025750805b156121ac57611dd283836126f5565b600054610100900460ff166126385760405162461bcd60e51b81526004016103229061349b565b610f9f336123d1565b600080600083516041146126975760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610322565b50505060208101516040820151606090920151909260009190911a90565b6126be81612550565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b61275d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610322565b600080846001600160a01b031684604051612778919061335c565b600060405180830381855af49150503d80600081146127b3576040519150601f19603f3d011682016040523d82523d6000602084013e6127b8565b606091505b5091509150611f0182826040518060600160405280602781526020016136ba60279139606083156127ea575081612485565b8251156127fa5782518084602001fd5b8160405162461bcd60e51b8152600401610322919061339c565b80356001600160a01b038116811461282b57600080fd5b919050565b600082601f83011261284157600080fd5b81356001600160401b038082111561285b5761285b613683565b604051601f8301601f19908116603f0116810190828211818310171561288357612883613683565b8160405283815286602085880101111561289c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803560ff8116811461282b57600080fd5b6000602082840312156128df57600080fd5b61248582612814565b600080604083850312156128fb57600080fd5b61290483612814565b915060208301356001600160401b0381111561291f57600080fd5b61292b85828601612830565b9150509250929050565b60006020828403121561294757600080fd5b8151801515811461248557600080fd5b60006020828403121561296957600080fd5b5051919050565b60006020828403121561298257600080fd5b81356001600160401b038082111561299957600080fd5b9083019061014082860312156129ae57600080fd5b6129b6613512565b8235828111156129c557600080fd5b6129d187828601612830565b825250602083013560208201526129ea60408401612814565b60408201526129fb60608401612814565b6060820152612a0c60808401612814565b608082015260a083013560a082015260c083013560c082015260e083013560e08201526101009150612a3f828401612814565b828201526101209150612a53828401612814565b91810191909152949350505050565b600060208284031215612a7457600080fd5b81356001600160401b0380821115612a8b57600080fd5b908301906101a08286031215612aa057600080fd5b612aa861353b565b82358152612ab860208401612814565b6020820152612ac960408401612814565b60408201526060830135606082015260808301356080820152612aee60a08401612814565b60a082015260c083013582811115612b0557600080fd5b612b1187828601612830565b60c08301525060e08381013590820152610100808401359082015261012080840135908201526101408084013583811115612b4b57600080fd5b612b5788828701612830565b828401525050610160915081830135828201526101809150612a53828401612814565b600060208284031215612b8c57600080fd5b81356001600160401b0380821115612ba357600080fd5b908301906101808286031215612bb857600080fd5b612bc061355e565b823582811115612bcf57600080fd5b612bdb87828601612830565b82525060208301356020820152612bf460408401612814565b6040820152612c0560608401612814565b6060820152612c1660808401612814565b608082015260a083013582811115612c2d57600080fd5b612c3987828601612830565b60a08301525060c083013560c082015260e083013560e08201526101008084013581830152506101208084013583811115612c7357600080fd5b612c7f88828701612830565b828401525050610140915081830135828201526101609150612a53828401612814565b600060208284031215612cb457600080fd5b81356001600160401b0380821115612ccb57600080fd5b908301906101c08286031215612ce057600080fd5b612ce8613581565b82358152612cf860208401612814565b6020820152612d0960408401612814565b60408201526060830135606082015260808301356080820152612d2e60a08401612814565b60a082015260c083013582811115612d4557600080fd5b612d5187828601612830565b60c08301525060e08381013590820152610100808401359082015261012080840135908201526101408084013583811115612d8b57600080fd5b612d9788828701612830565b828401525050610160915081830135828201526101809150612dba828401612814565b828201526101a09150612a538284016128bc565b600060208284031215612de057600080fd5b81356001600160401b0380821115612df757600080fd5b908301906101a08286031215612e0c57600080fd5b612e1461353b565b823582811115612e2357600080fd5b612e2f87828601612830565b82525060208301356020820152612e4860408401612814565b6040820152612e5960608401612814565b6060820152612e6a60808401612814565b608082015260a083013582811115612e8157600080fd5b612e8d87828601612830565b60a08301525060c083013560c082015260e083013560e08201526101008084013581830152506101208084013583811115612ec757600080fd5b612ed388828701612830565b828401525050610140915081830135828201526101609150612ef6828401612814565b828201526101809150612a538284016128bc565b600060208284031215612f1c57600080fd5b81356001600160401b0380821115612f3357600080fd5b9083019060e08286031215612f4757600080fd5b612f4f6135a4565b612f5883612814565b8152612f6660208401612814565b6020820152604083013582811115612f7d57600080fd5b612f8987828601612830565b60408301525060608301356060820152608083013582811115612fab57600080fd5b612fb787828601612830565b60808301525060a083013560a082015260c083013560c082015280935050505092915050565b600060208284031215612fef57600080fd5b81356001600160401b038082111561300657600080fd5b9083019060e0828603121561301a57600080fd5b6130226135a4565b82358281111561303157600080fd5b61303d87828601612830565b82525061304c60208401612814565b602082015261305d60408401612814565b604082015260608301358281111561307457600080fd5b61308087828601612830565b6060830152506080830135608082015260a0830135828111156130a257600080fd5b6130ae87828601612830565b60a08301525060c083013560c082015280935050505092915050565b6000602082840312156130dc57600080fd5b81356001600160401b03808211156130f357600080fd5b90830190610140828603121561310857600080fd5b613110613512565b82358281111561311f57600080fd5b61312b87828601612830565b8252506020830135602082015261314460408401612814565b604082015261315560608401612814565b60608201526080830135608082015260a083013560a082015260c08301358281111561318057600080fd5b61318c87828601612830565b60c08301525061319e60e08401612814565b60e082015261010080840135838111156131b757600080fd5b6131c388828701612830565b91830191909152506101209283013592810192909252509392505050565b6000602082840312156131f357600080fd5b81356001600160401b038082111561320a57600080fd5b90830190610120828603121561321f57600080fd5b6132276135c6565b82358281111561323657600080fd5b61324287828601612830565b8252506020830135602082015261325b60408401612814565b604082015261326c60608401612814565b60608201526080830135608082015260a08301358281111561328d57600080fd5b61329987828601612830565b60a0830152506132ab60c08401612814565b60c082015260e0830135828111156132c257600080fd5b6132ce87828601612830565b60e0830152506101009283013592810192909252509392505050565b60008151808452613302816020860160208601613641565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff198560601b16815283601482015260008351613346816034850160208801613641565b6034920191820192909252605401949350505050565b6000825161336e818460208701613641565b9190910192915050565b6001600160a01b0383168152604060208201819052600090611edc908301846132ea565b60208152600061248560208301846132ea565b6020808252600f908201526e125b9d985b1a59081c995c5d595cdd608a1b604082015260600190565b602080825260119082015270696e76616c6964207369676e617475726560781b604082015260600190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b94855260208501939093526001600160a01b039182166040850152166060830152608082015260a00190565b60405161014081016001600160401b038111828210171561353557613535613683565b60405290565b6040516101a081016001600160401b038111828210171561353557613535613683565b60405161018081016001600160401b038111828210171561353557613535613683565b6040516101c081016001600160401b038111828210171561353557613535613683565b60405160e081016001600160401b038111828210171561353557613535613683565b60405161012081016001600160401b038111828210171561353557613535613683565b60008261360657634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156136255761362561366d565b500290565b60008282101561363c5761363c61366d565b500390565b60005b8381101561365c578181015183820152602001613644565b83811115611dd25750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220fcdad98624acab229be434c6667b768c9d9875bb20ed6d5236ab483c5c76fadf64736f6c63430008070033
Deployed Bytecode Sourcemap
24864:18238:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41123:1481;;;;;;:::i;:::-;;:::i;30292:1852::-;;;;;;:::i;:::-;;:::i;42610:117::-;;;;;;;;;;;;;:::i;11154:200::-;;;;;;;;;;-1:-1:-1;11154:200:0;;;;;:::i;:::-;;:::i;39389:816::-;;;;;;;;;;-1:-1:-1;39389:816:0;;;;;:::i;:::-;;:::i;36050:2053::-;;;;;;:::i;:::-;;:::i;11360:225::-;;;;;;:::i;:::-;;:::i;11015:133::-;;;;;;;;;;;;;:::i;:::-;;;18652:25:1;;;18640:2;18625:18;11015:133:0;;;;;;;;12884:103;;;;;;;;;;;;;:::i;28444:108::-;;;;;;;;;;;;;:::i;32150:1887::-;;;;;;:::i;:::-;;:::i;12651:87::-;;;;;;;;;;-1:-1:-1;12724:6:0;;12651:87;;-1:-1:-1;;;;;12724:6:0;;;16823:51:1;;16811:2;16796:18;12651:87:0;16677:203:1;38109:629:0;;;;;;:::i;:::-;;:::i;38744:639::-;;;;;;:::i;:::-;;:::i;40211:862::-;;;;;;;;;;-1:-1:-1;40211:862:0;;;;;:::i;:::-;;:::i;34043:2001::-;;;;;;:::i;:::-;;:::i;12995:201::-;;;;;;;;;;-1:-1:-1;12995:201:0;;;;;:::i;:::-;;:::i;42733:293::-;;;;;;;;;;-1:-1:-1;42733:293:0;;;;;:::i;:::-;;:::i;41123:1481::-;12612:13;:11;:13::i;:::-;10674:4:::1;-1:-1:-1::0;;;;;10683:6:0::1;10666:23;;;10658:80;;;;-1:-1:-1::0;;;10658:80:0::1;;;;;;;:::i;:::-;;;;;;;;;10781:6;-1:-1:-1::0;;;;;10757:30:0::1;:20;:18;:20::i;:::-;-1:-1:-1::0;;;;;10757:30:0::1;;10749:87;;;;-1:-1:-1::0;;;10749:87:0::1;;;;;;;:::i;:::-;41241:21:::2;::::0;::::2;::::0;41276:26;41273:271:::2;;41349:141;::::0;;::::2;::::0;::::2;::::0;;41379:22;;41349:141;;41428:10:::2;41349:141;::::0;::::2;::::0;41458:17:::2;::::0;::::2;::::0;-1:-1:-1;;;;;41349:141:0::2;::::0;;;;;;;41515:17:::2;41349:141:::0;41515:7:::2;:17::i;:::-;41505:27;;41304:240;41273:271;41583:20;::::0;::::2;::::0;41617:21:::2;::::0;::::2;::::0;:25;41614:337:::2;;41659:28;41690:66;41712:13;:20;;;41734:13;:21;;;41690;:66::i;:::-;41659:97:::0;-1:-1:-1;41790:37:0::2;41659:97:::0;41790:16;:37:::2;:::i;:::-;41771:56;;41842:97;41853:13;:22;;;41885:4;41892:20;41914:13;:24;;;41842:10;:97::i;:::-;41644:307;41614:337;42007:21;::::0;::::2;::::0;41971:22:::2;::::0;42007:25;42004:319:::2;;42066:66;42088:13;:20;;;42110:13;:21;;;42066;:66::i;:::-;42049:83:::0;-1:-1:-1;42166:31:0::2;42049:83:::0;42166:16;:31:::2;:::i;:::-;42147:50;;42212:99;42223:13;:22;;;42247:13;:21;;;42270:14;42286:13;:24;;;42212:10;:99::i;:::-;42335:106;42346:13;:22;;;42370:13;:26;;;42398:16;42416:13;:24;;;42335:10;:106::i;:::-;42452:91;42464:13;:17;;;42483:13;:26;;;42511:13;:22;;;42535:7;42452:11;:91::i;:::-;42572:7;42559:37;42581:14;42559:37;;;;18652:25:1::0;;18640:2;18625:18;;18506:177;42559:37:0::2;;;;;;;;41212:1392;;;41123:1481:::0;:::o;30292:1852::-;10674:4;-1:-1:-1;;;;;10683:6:0;10666:23;;;10658:80;;;;-1:-1:-1;;;10658:80:0;;;;;;;:::i;:::-;10781:6;-1:-1:-1;;;;;10757:30:0;:20;:18;:20::i;:::-;-1:-1:-1;;;;;10757:30:0;;10749:87;;;;-1:-1:-1;;;10749:87:0;;;;;;;:::i;:::-;30419:21:::1;::::0;;::::1;::::0;30471:10:::1;30401:15;30460:22:::0;;;:10:::1;:22:::0;;;;;;30483:19:::1;::::0;::::1;::::0;30460:43;;;;;;;;;;::::1;;30459:44;30451:72;;;;-1:-1:-1::0;;;30451:72:0::1;;;;;;;:::i;:::-;30545:10;30534:22;::::0;;;:10:::1;:22;::::0;;;;;;;30557:19:::1;::::0;::::1;::::0;;30534:43;;;;;;;:50;;-1:-1:-1;;30534:50:0::1;30580:4;30534:50;::::0;;30634:20:::1;::::0;::::1;::::0;30656:23:::1;::::0;::::1;::::0;30681:19;;30702:23:::1;::::0;::::1;::::0;30603:123:::1;::::0;30545:10;;;30634:20;30656:23;;30603:6:::1;:123::i;:::-;30595:153;;;;-1:-1:-1::0;;;30595:153:0::1;;;;;;;:::i;:::-;30762:21;::::0;::::1;::::0;30759:271:::1;;30835:141;::::0;;::::1;::::0;::::1;::::0;;30865:22;;30835:141;;30914:10:::1;30835:141;::::0;::::1;::::0;30944:17:::1;::::0;::::1;::::0;-1:-1:-1;;;;;30835:141:0::1;::::0;;;;;;;31001:17:::1;30835:141:::0;31001:7:::1;:17::i;:::-;30991:27;;30790:240;30759:271;31067:20;::::0;::::1;::::0;31101:21:::1;::::0;::::1;::::0;:25;31098:337:::1;;31143:28;31174:66;31196:13;:20;;;31218:13;:21;;;31174;:66::i;:::-;31143:97:::0;-1:-1:-1;31274:37:0::1;31143:97:::0;31274:16;:37:::1;:::i;:::-;31255:56;;31326:97;31337:13;:22;;;31369:4;31376:20;31398:13;:24;;;31326:10;:97::i;:::-;31128:307;31098:337;31445:22;31505:1:::0;31481:13:::1;:21;;;:25;:64;;;;-1:-1:-1::0;31510:21:0::1;::::0;::::1;::::0;-1:-1:-1;;;;;31510:35:0::1;31535:10;31510:35;;31481:64;31478:358;;;31579:66;31601:13;:20;;;31623:13;:21;;;31579;:66::i;:::-;31562:83:::0;-1:-1:-1;31679:31:0::1;31562:83:::0;31679:16;:31:::1;:::i;:::-;31660:50;;31725:99;31736:13;:22;;;31760:13;:21;;;31783:14;31799:13;:24;;;31725:10;:99::i;:::-;31856:90;31867:13;:22;;;31891:10;31903:16;31921:13;:24;;;31856:10;:90::i;:::-;31957:75;31969:13;:17;;;31988:10;32000:13;:22;;;32024:7;31957:11;:75::i;:::-;32048:88;32065:7;32074:9;32085:10;32097:13;:22;;;32121:14;32048:88;;;;;;;;;;:::i;:::-;;;;;;;;30390:1754;;;30292:1852:::0;:::o;42610:117::-;12612:13;:11;:13::i;:::-;10674:4:::1;-1:-1:-1::0;;;;;10683:6:0::1;10666:23;;;10658:80;;;;-1:-1:-1::0;;;10658:80:0::1;;;;;;;:::i;:::-;10781:6;-1:-1:-1::0;;;;;10757:30:0::1;:20;:18;:20::i;:::-;-1:-1:-1::0;;;;;10757:30:0::1;;10749:87;;;;-1:-1:-1::0;;;10749:87:0::1;;;;;;;:::i;:::-;12724:6:::0;;42671:48:::2;::::0;-1:-1:-1;;;;;12724:6:0;;;;42697:21:::2;42671:48:::0;::::2;;;::::0;::::2;::::0;;;42697:21;12724:6;42671:48;::::2;;;;;;;;;;;;;::::0;::::2;;;;;;42610:117::o:0;11154:200::-;10674:4;-1:-1:-1;;;;;10683:6:0;10666:23;;;10658:80;;;;-1:-1:-1;;;10658:80:0;;;;;;;:::i;:::-;10781:6;-1:-1:-1;;;;;10757:30:0;:20;:18;:20::i;:::-;-1:-1:-1;;;;;10757:30:0;;10749:87;;;;-1:-1:-1;;;10749:87:0;;;;;;;:::i;:::-;11238:36:::1;11256:17;11238;:36::i;:::-;11326:12;::::0;;11336:1:::1;11326:12:::0;;;::::1;::::0;::::1;::::0;;;11285:61:::1;::::0;11307:17;;11326:12;11285:21:::1;:61::i;39389:816::-:0;10674:4;-1:-1:-1;;;;;10683:6:0;10666:23;;;10658:80;;;;-1:-1:-1;;;10658:80:0;;;;;;;:::i;:::-;10781:6;-1:-1:-1;;;;;10757:30:0;:20;:18;:20::i;:::-;-1:-1:-1;;;;;10757:30:0;;10749:87;;;;-1:-1:-1;;;10749:87:0;;;;;;;:::i;:::-;39503:10:::1;39492:22;::::0;;;:10:::1;:22;::::0;;;;;;;39515:19:::1;::::0;::::1;::::0;39492:43;;;;;;;;::::1;;39491:44;39483:72;;;;-1:-1:-1::0;;;39483:72:0::1;;;;;;;:::i;:::-;39577:10;39566:22;::::0;;;:10:::1;:22;::::0;;;;;;;39589:19:::1;::::0;::::1;::::0;;39566:43;;;;;;;:50;;-1:-1:-1;;39566:50:0::1;39612:4;39566:50;::::0;;39666:20:::1;::::0;::::1;::::0;39688:23:::1;::::0;::::1;::::0;39713:19;;39734:23:::1;::::0;::::1;::::0;39635:123:::1;::::0;39577:10;;;39666:20;39688:23;;39635:6:::1;:123::i;:::-;39627:153;;;;-1:-1:-1::0;;;39627:153:0::1;;;;;;;:::i;:::-;39809:21;::::0;::::1;::::0;39844:26;39841:271:::1;;39917:141;::::0;;::::1;::::0;;::::1;::::0;;39947:22;;39917:141;;39996:10:::1;39917:141;::::0;::::1;::::0;40026:17;::::1;::::0;-1:-1:-1;;;;;39917:141:0::1;::::0;;;;;;;40083:17:::1;39917:141:::0;40083:7:::1;:17::i;:::-;40073:27;;39872:240;39841:271;40122:75;40134:13;:17;;;40153:10;40165:13;:22;;;40189:7;40122:11;:75::i;:::-;39472:733;39389:816:::0;:::o;36050:2053::-;10674:4;-1:-1:-1;;;;;10683:6:0;10666:23;;;10658:80;;;;-1:-1:-1;;;10658:80:0;;;;;;;:::i;:::-;10781:6;-1:-1:-1;;;;;10757:30:0;:20;:18;:20::i;:::-;-1:-1:-1;;;;;10757:30:0;;10749:87;;;;-1:-1:-1;;;10749:87:0;;;;;;;:::i;:::-;36152:16;;36199:10:::1;36134:15;36188:22:::0;;;:10:::1;:22;::::0;;;;;;;36211:14:::1;::::0;::::1;::::0;36188:38;;;;;;;;::::1;;36187:39;36179:67;;;;-1:-1:-1::0;;;36179:67:0::1;;;;;;;:::i;:::-;36268:10;36257:22;::::0;;;:10:::1;:22;::::0;;;;;;;36280:14:::1;::::0;::::1;::::0;;36257:38;;;;;;;:45;;-1:-1:-1;;36257:45:0::1;36298:4;36257:45;::::0;;36352:15:::1;::::0;::::1;::::0;36369:18:::1;::::0;::::1;::::0;36389:14;;36405:18:::1;::::0;::::1;::::0;36321:103:::1;::::0;36268:10;;;36352:15;36369:18;;36321:6:::1;:103::i;:::-;36313:133;;;;-1:-1:-1::0;;;36313:133:0::1;;;;;;;:::i;:::-;36460:16:::0;;36457:268:::1;;36498:28;36529:141;;;;;;;;36568:8;:14;;;-1:-1:-1::0;;;;;36529:141:0::1;;;;;36602:8;:12;;;-1:-1:-1::0;;;;;36529:141:0::1;;;;;36633:8;:22;;;36529:141;;::::0;36498:172:::1;;36695:18;36704:8;36695;:18::i;:::-;36685:28;;36483:242;36457:268;36772:15;::::0;::::1;::::0;36801:16:::1;::::0;::::1;::::0;:20;36798:364:::1;;36838:28;36869:56;36891:8;:15;;;36908:8;:16;;;36869:21;:56::i;:::-;36838:87:::0;-1:-1:-1;36959:37:0::1;36838:87:::0;36959:16;:37:::1;:::i;:::-;36940:56;;37014:8;:17;;;:20;;37033:1;37014:20;37011:140;;37055:80;37066:10;37086:4;37093:20;37115:8;:19;;;37055:10;:80::i;:::-;36823:339;36798:364;37174:22;37229:1:::0;37210:8:::1;:16;;;:20;:58;;;;;37254:8;:14;;;-1:-1:-1::0;;;;;37234:34:0::1;:8;:16;;;-1:-1:-1::0;;;;;37234:34:0::1;;;37210:58;37207:470;;;37302:56;37324:8;:15;;;37341:8;:16;;;37302:21;:56::i;:::-;37285:73:::0;-1:-1:-1;37392:31:0::1;37285:73:::0;37392:16;:31:::1;:::i;:::-;37373:50;;37441:8;:17;;;:20;;37460:1;37441:20;37438:228;;;37490:8;:16;;;-1:-1:-1::0;;;;;37482:34:0::1;:50;37517:14;37482:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37438:228;;;37573:77;37584:10;37596:8;:16;;;37614:14;37630:8;:19;;;37573:10;:77::i;:::-;37687:82;37700:8;:12;;;37714:8;:14;;;37730:10;37742:8;:17;;;37761:7;37687:12;:82::i;:::-;37793:8;:17;;;:20;;37812:1;37793:20;37790:212;;;37838:8;:14;;;-1:-1:-1::0;;;;;37830:32:0::1;:50;37863:16;37830:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37790:212;;;37913:77;37924:10;37936:8;:14;;;37952:16;37970:8;:19;;;37913:10;:77::i;:::-;38017:78;38032:7;38041:9;38052:8;:14;;;38068:10;38080:14;38017:78;;;;;;;;;;:::i;11360:225::-:0;10674:4;-1:-1:-1;;;;;10683:6:0;10666:23;;;10658:80;;;;-1:-1:-1;;;10658:80:0;;;;;;;:::i;:::-;10781:6;-1:-1:-1;;;;;10757:30:0;:20;:18;:20::i;:::-;-1:-1:-1;;;;;10757:30:0;;10749:87;;;;-1:-1:-1;;;10749:87:0;;;;;;;:::i;:::-;11478:36:::1;11496:17;11478;:36::i;:::-;11525:52;11547:17;11566:4;11572;11525:21;:52::i;11015:133::-:0;11093:7;10913:4;-1:-1:-1;;;;;10922:6:0;10905:23;;10897:92;;;;-1:-1:-1;;;10897:92:0;;21640:2:1;10897:92:0;;;21622:21:1;21679:2;21659:18;;;21652:30;21718:34;21698:18;;;21691:62;21789:26;21769:18;;;21762:54;21833:19;;10897:92:0;21438:420:1;10897:92:0;-1:-1:-1;;;;;;;;;;;;11015:133:0;:::o;12884:103::-;12612:13;:11;:13::i;:::-;12949:30:::1;12976:1;12949:18;:30::i;:::-;12884:103::o:0;28444:108::-;3287:19;3310:13;;;;;;3309:14;;3357:34;;;;-1:-1:-1;3375:12:0;;3390:1;3375:12;;;;:16;3357:34;3356:108;;;-1:-1:-1;3436:4:0;176:19;:23;;;3397:66;;-1:-1:-1;3446:12:0;;;;;:17;3397:66;3334:204;;;;-1:-1:-1;;;3334:204:0;;22475:2:1;3334:204:0;;;22457:21:1;22514:2;22494:18;;;22487:30;22553:34;22533:18;;;22526:62;-1:-1:-1;;;22604:18:1;;;22597:44;22658:19;;3334:204:0;22273:410:1;3334:204:0;3549:12;:16;;-1:-1:-1;;3549:16:0;3564:1;3549:16;;;3576:67;;;;3611:13;:20;;-1:-1:-1;;3611:20:0;;;;;3576:67;28496:16:::1;:14;:16::i;:::-;28523:24;:22;:24::i;:::-;3669:14:::0;3665:102;;;3716:5;3700:21;;-1:-1:-1;;3700:21:0;;;3741:14;;-1:-1:-1;19243:36:1;;3741:14:0;;19231:2:1;19216:18;3741:14:0;;;;;;;3276:498;28444:108::o;32150:1887::-;10674:4;-1:-1:-1;;;;;10683:6:0;10666:23;;;10658:80;;;;-1:-1:-1;;;10658:80:0;;;;;;;:::i;:::-;10781:6;-1:-1:-1;;;;;10757:30:0;:20;:18;:20::i;:::-;-1:-1:-1;;;;;10757:30:0;;10749:87;;;;-1:-1:-1;;;10749:87:0;;;;;;;:::i;:::-;32279:21;;32331:10:::1;32261:15;32320:22:::0;;;:10:::1;:22;::::0;;;;;;;32343:19:::1;::::0;::::1;::::0;32320:43;;;;;;;;::::1;;32319:44;32311:72;;;;-1:-1:-1::0;;;32311:72:0::1;;;;;;;:::i;:::-;32405:10;32394:22;::::0;;;:10:::1;:22;::::0;;;;;;;32417:19:::1;::::0;::::1;::::0;;32394:43;;;;;;;:50;;-1:-1:-1;;32394:50:0::1;32440:4;32394:50;::::0;;32494:20:::1;::::0;::::1;::::0;32516:23:::1;::::0;::::1;::::0;32541:19;;32562:23:::1;::::0;::::1;::::0;32463:123:::1;::::0;32405:10;;;32494:20;32516:23;;32463:6:::1;:123::i;:::-;32455:153;;;;-1:-1:-1::0;;;32455:153:0::1;;;;;;;:::i;:::-;32622:21:::0;;32619:279:::1;;32696:147;::::0;;::::1;::::0;::::1;::::0;;32735:10:::1;32696:147:::0;;32765:17:::1;::::0;::::1;::::0;-1:-1:-1;;;;;32696:147:0::1;;::::0;::::1;::::0;-1:-1:-1;32801:27:0;::::1;::::0;32696:147;;;;;;;32868:18:::1;32696:147:::0;32868:8:::1;:18::i;:::-;32858:28;;32650:248;32619:279;32935:20;::::0;::::1;::::0;32969:21:::1;::::0;::::1;::::0;:25;32966:337:::1;;33011:28;33042:66;33064:13;:20;;;33086:13;:21;;;33042;:66::i;:::-;33011:97:::0;-1:-1:-1;33142:37:0::1;33011:97:::0;33142:16;:37:::1;:::i;:::-;33123:56;;33194:97;33205:13;:22;;;33237:4;33244:20;33266:13;:24;;;33194:10;:97::i;:::-;32996:307;32966:337;33313:22;33373:1:::0;33349:13:::1;:21;;;:25;:64;;;;-1:-1:-1::0;33378:21:0::1;::::0;::::1;::::0;-1:-1:-1;;;;;33378:35:0::1;33403:10;33378:35;;33349:64;33346:358;;;33447:66;33469:13;:20;;;33491:13;:21;;;33447;:66::i;:::-;33430:83:::0;-1:-1:-1;33547:31:0::1;33430:83:::0;33547:16;:31:::1;:::i;:::-;33528:50;;33593:99;33604:13;:22;;;33628:13;:21;;;33651:14;33667:13;:24;;;33593:10;:99::i;:::-;33724:90;33735:13;:22;;;33759:10;33771:16;33789:13;:24;;;33724:10;:90::i;:::-;33825:100;33838:13;:17;;;33857:10;33869:13;:22;;;33893:13;:22;;;33917:7;33825:12;:100::i;:::-;33941:88;33958:7;33967:9;33978:10;33990:13;:22;;;34014:14;33941:88;;;;;;;;;;:::i;38109:629::-:0;10674:4;-1:-1:-1;;;;;10683:6:0;10666:23;;;10658:80;;;;-1:-1:-1;;;10658:80:0;;;;;;;:::i;:::-;10781:6;-1:-1:-1;;;;;10757:30:0;:20;:18;:20::i;:::-;-1:-1:-1;;;;;10757:30:0;;10749:87;;;;-1:-1:-1;;;10749:87:0;;;;;;;:::i;:::-;38220:10:::1;38209:22;::::0;;;:10:::1;:22;::::0;;;;;;;38232:17:::1;::::0;::::1;::::0;38209:41;;;;;;;;::::1;;38208:42;38200:70;;;;-1:-1:-1::0;;;38200:70:0::1;;;;;;;:::i;:::-;38292:10;38281:22;::::0;;;:10:::1;:22;::::0;;;;;;;38304:17:::1;::::0;::::1;::::0;;38281:41;;;;;;;:48;;-1:-1:-1;;38281:48:0::1;38325:4;38281:48;::::0;;38379:18:::1;::::0;::::1;::::0;38399:21:::1;::::0;::::1;::::0;38422:17;;38441:21:::1;::::0;::::1;::::0;38348:115:::1;::::0;38292:10;;;38379:18;38399:21;;38348:6:::1;:115::i;:::-;38340:145;;;;-1:-1:-1::0;;;38340:145:0::1;;;;;;;:::i;:::-;38526:121;::::0;;::::1;::::0;::::1;::::0;;38552:20;;38526:121;;38595:10:::1;38526:121;::::0;::::1;::::0;38621:15;;::::1;::::0;-1:-1:-1;;;;;38526:121:0::1;::::0;;;;;;;38496:27:::1;38676:17;38526:121:::0;38676:7:::1;:17::i;:::-;38658:35;;38711:19;38722:7;38711:19;;;;18652:25:1::0;;18640:2;18625:18;;18506:177;38711:19:0::1;;;;;;;;38189:549;;38109:629:::0;:::o;38744:639::-;10674:4;-1:-1:-1;;;;;10683:6:0;10666:23;;;10658:80;;;;-1:-1:-1;;;10658:80:0;;;;;;;:::i;:::-;10781:6;-1:-1:-1;;;;;10757:30:0;:20;:18;:20::i;:::-;-1:-1:-1;;;;;10757:30:0;;10749:87;;;;-1:-1:-1;;;10749:87:0;;;;;;;:::i;:::-;38857:10:::1;38846:22;::::0;;;:10:::1;:22;::::0;;;;;;;38869:17:::1;::::0;::::1;::::0;38846:41;;;;;;;;::::1;;38845:42;38837:70;;;;-1:-1:-1::0;;;38837:70:0::1;;;;;;;:::i;:::-;38929:10;38918:22;::::0;;;:10:::1;:22;::::0;;;;;;;38941:17:::1;::::0;::::1;::::0;;38918:41;;;;;;;;:48;;-1:-1:-1;;38918:48:0::1;38962:4;38918:48;::::0;;39016:18:::1;::::0;::::1;::::0;39036:21:::1;::::0;::::1;::::0;39059:17;;39078:21;;::::1;::::0;38985:115:::1;::::0;38929:10;;;39036:21;38985:6:::1;:115::i;:::-;38977:145;;;;-1:-1:-1::0;;;38977:145:0::1;;;;;;;:::i;:::-;39164:127;::::0;;::::1;::::0;::::1;::::0;;39199:10:::1;39164:127:::0;;::::1;39225:15:::0;;::::1;::::0;-1:-1:-1;;;;;39164:127:0::1;::::0;;::::1;::::0;39255:25:::1;::::0;::::1;::::0;39164:127;;;;;;;39133:28:::1;39320:18;39164:127:::0;39320:8:::1;:18::i;40211:862::-:0;10674:4;-1:-1:-1;;;;;10683:6:0;10666:23;;;10658:80;;;;-1:-1:-1;;;10658:80:0;;;;;;;:::i;:::-;10781:6;-1:-1:-1;;;;;10757:30:0;:20;:18;:20::i;:::-;-1:-1:-1;;;;;10757:30:0;;10749:87;;;;-1:-1:-1;;;10749:87:0;;;;;;;:::i;:::-;40327:10:::1;40316:22;::::0;;;:10:::1;:22;::::0;;;;;;;40339:19:::1;::::0;::::1;::::0;40316:43;;;;;;;;::::1;;40315:44;40307:72;;;;-1:-1:-1::0;;;40307:72:0::1;;;;;;;:::i;:::-;40401:10;40390:22;::::0;;;:10:::1;:22;::::0;;;;;;;40413:19:::1;::::0;::::1;::::0;;40390:43;;;;;;;:50;;-1:-1:-1;;40390:50:0::1;40436:4;40390:50;::::0;;40490:20:::1;::::0;::::1;::::0;40390:50:::1;40512:23:::0;::::1;::::0;40537:19;;40558:23:::1;::::0;::::1;::::0;40459:123:::1;::::0;40401:10;;;40490:20;40512:23;;40459:6:::1;:123::i;:::-;40451:153;;;;-1:-1:-1::0;;;40451:153:0::1;;;;;;;:::i;:::-;40633:21;::::0;::::1;::::0;40668:26;40665:274:::1;;40742:142;::::0;;::::1;::::0;;::::1;::::0;;40781:10:::1;40742:142:::0;;40811:17;::::1;::::0;-1:-1:-1;;;;;40742:142:0::1;;::::0;::::1;::::0;40847:22:::1;::::0;::::1;::::0;40742:142;;;;;;;40909:18:::1;40742:142:::0;40909:8:::1;:18::i;:::-;40899:28;;40696:243;40665:274;40949:116;40962:13;:17;;;40981:13;:26;;;41009:13;:22;;;41033:13;:22;;;41057:7;40949:12;:116::i;34043:2001::-:0;10674:4;-1:-1:-1;;;;;10683:6:0;10666:23;;;10658:80;;;;-1:-1:-1;;;10658:80:0;;;;;;;:::i;:::-;10781:6;-1:-1:-1;;;;;10757:30:0;:20;:18;:20::i;:::-;-1:-1:-1;;;;;10757:30:0;;10749:87;;;;-1:-1:-1;;;10749:87:0;;;;;;;:::i;:::-;34143:16:::1;::::0;;::::1;::::0;34190:10:::1;34125:15;34179:22:::0;;;:10:::1;:22:::0;;;;;;34202:14:::1;::::0;::::1;::::0;34179:38;;;;;;;;;;::::1;;34178:39;34170:67;;;;-1:-1:-1::0;;;34170:67:0::1;;;;;;;:::i;:::-;34259:10;34248:22;::::0;;;:10:::1;:22;::::0;;;;;;;34271:14:::1;::::0;::::1;::::0;;34248:38;;;;;;;:45;;-1:-1:-1;;34248:45:0::1;34289:4;34248:45;::::0;;34343:15:::1;::::0;::::1;::::0;34360:18:::1;::::0;::::1;::::0;34380:14;;34396:18:::1;::::0;::::1;::::0;34312:103:::1;::::0;34259:10;;;34343:15;34360:18;;34312:6:::1;:103::i;:::-;34304:133;;;;-1:-1:-1::0;;;34304:133:0::1;;;;;;;:::i;:::-;34451:16;::::0;::::1;::::0;34448:260:::1;;34519:135;::::0;;::::1;::::0;::::1;::::0;;34549:17;;34519:135;;34593:14;;::::1;::::0;-1:-1:-1;;;;;34519:135:0;;::::1;;::::0;::::1;::::0;34627:12:::1;::::0;::::1;::::0;34519:135:::1;::::0;;;;;;;34679:17:::1;34519:135:::0;34679:7:::1;:17::i;:::-;34669:27;;34474:234;34448:260;34745:15;::::0;::::1;::::0;34774:16:::1;::::0;::::1;::::0;:20;34771:364:::1;;34811:28;34842:56;34864:8;:15;;;34881:8;:16;;;34842:21;:56::i;:::-;34811:87:::0;-1:-1:-1;34932:37:0::1;34811:87:::0;34932:16;:37:::1;:::i;:::-;34913:56;;34987:8;:17;;;:20;;35006:1;34987:20;34984:140;;35028:80;35039:10;35059:4;35066:20;35088:8;:19;;;35028:10;:80::i;:::-;34796:339;34771:364;35145:22;35200:1:::0;35181:8:::1;:16;;;:20;:58;;;;;35225:8;:14;;;-1:-1:-1::0;;;;;35205:34:0::1;:8;:16;;;-1:-1:-1::0;;;;;35205:34:0::1;;;35181:58;35178:470;;;35273:56;35295:8;:15;;;35312:8;:16;;;35273:21;:56::i;:::-;35256:73:::0;-1:-1:-1;35363:31:0::1;35256:73:::0;35363:16;:31:::1;:::i;:::-;35344:50;;35412:8;:17;;;:20;;35431:1;35412:20;35409:228;;;35461:8;:16;;;-1:-1:-1::0;;;;;35453:34:0::1;:50;35488:14;35453:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35409:228;;;35544:77;35555:10;35567:8;:16;;;35585:14;35601:8;:19;;;35544:10;:77::i;:::-;35658:62;35670:8;:12;;;35684:8;:14;;;35700:10;35712:7;35658:11;:62::i;:::-;35734:8;:17;;;:20;;35753:1;35734:20;35731:212;;;35779:8;:14;;;-1:-1:-1::0;;;;;35771:32:0::1;:50;35804:16;35771:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35731:212;;;35854:77;35865:10;35877:8;:14;;;35893:16;35911:8;:19;;;35854:10;:77::i;:::-;35958:78;35973:7;35982:9;35993:8;:14;;;36009:10;36021:14;35958:78;;;;;;;;;;:::i;12995:201::-:0;12612:13;:11;:13::i;:::-;-1:-1:-1;;;;;13084:22:0;::::1;13076:73;;;::::0;-1:-1:-1;;;13076:73:0;;20407:2:1;13076:73:0::1;::::0;::::1;20389:21:1::0;20446:2;20426:18;;;20419:30;20485:34;20465:18;;;20458:62;-1:-1:-1;;;20536:18:1;;;20529:36;20582:19;;13076:73:0::1;20205:402:1::0;13076:73:0::1;13160:28;13179:8;13160:18;:28::i;42733:293::-:0;12612:13;:11;:13::i;:::-;10674:4:::1;-1:-1:-1::0;;;;;10683:6:0::1;10666:23;;;10658:80;;;;-1:-1:-1::0;;;10658:80:0::1;;;;;;;:::i;:::-;10781:6;-1:-1:-1::0;;;;;10757:30:0::1;:20;:18;:20::i;:::-;-1:-1:-1::0;;;;;10757:30:0::1;;10749:87;;;;-1:-1:-1::0;;;10749:87:0::1;;;;;;;:::i;:::-;42888:30:::2;::::0;-1:-1:-1;;;42888:30:0;;42912:4:::2;42888:30;::::0;::::2;16823:51:1::0;42846:12:0;;42816:16:::2;::::0;-1:-1:-1;;;;;42888:15:0;::::2;::::0;::::2;::::0;16796:18:1;;42888:30:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42870:48:::0;-1:-1:-1;42986:5:0::2;-1:-1:-1::0;;;;;42986:14:0::2;;43001:7;12724:6:::0;;-1:-1:-1;;;;;12724:6:0;;12651:87;43001:7:::2;42986:32;::::0;-1:-1:-1;;;;;;42986:32:0::2;::::0;;;;;;-1:-1:-1;;;;;18419:32:1;;;42986::0::2;::::0;::::2;18401:51:1::0;18468:18;;;18461:34;;;18374:18;;42986:32:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42805:221;;42733:293:::0;:::o;12744:132::-;12724:6;;-1:-1:-1;;;;;12724:6:0;11986:10;12808:23;12800:68;;;;-1:-1:-1;;;12800:68:0;;23719:2:1;12800:68:0;;;23701:21:1;;;23738:18;;;23731:30;23797:34;23777:18;;;23770:62;23849:18;;12800:68:0;23517:356:1;6311:153:0;-1:-1:-1;;;;;;;;;;;6391:65:0;-1:-1:-1;;;;;6391:65:0;;6311:153::o;28718:248::-;28839:12;;;;;28899:14;;;;28915:17;;28881:52;;-1:-1:-1;;;28881:52:0;;28782:7;;;;-1:-1:-1;;;;;28881:17:0;;;;;:52;;28899:14;28881:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28863:70;28718:248;-1:-1:-1;;;;28718:248:0:o;30001:244::-;30085:7;;30124:18;:5;30134:7;30124:9;:18::i;:::-;30105:37;-1:-1:-1;30153:20:0;30176:19;30105:37;30189:5;30176:12;:19::i;:::-;30153:42;30001:244;-1:-1:-1;;;;;30001:244:0:o;29681:314::-;29857:21;;-1:-1:-1;;;29857:21:0;;-1:-1:-1;;;;;16841:32:1;;;29857:21:0;;;16823:51:1;29815:12:0;;29785:16;;29857:15;;;;;16796:18:1;;29857:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29839:39;;29908:6;29897:7;:17;;29889:51;;;;-1:-1:-1;;;29889:51:0;;24080:2:1;29889:51:0;;;24062:21:1;24119:2;24099:18;;;24092:30;-1:-1:-1;;;24138:18:1;;;24131:50;24198:18;;29889:51:0;23878:344:1;29889:51:0;29951:36;;-1:-1:-1;;;29951:36:0;;-1:-1:-1;;;;;17473:15:1;;;29951:36:0;;;17455:34:1;17525:15;;;17505:18;;;17498:43;17557:18;;;17550:34;;;29951:18:0;;;;;17390::1;;29951:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29774:221;;29681:314;;;;:::o;29224:207::-;29381:42;;-1:-1:-1;;;29381:42:0;;-1:-1:-1;;;;;17473:15:1;;;29381:42:0;;;17455:34:1;17525:15;;;17505:18;;;17498:43;17557:18;;;17550:34;;;29361:8:0;;29381:25;;;;;;17390:18:1;;29381:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29313:118;29224:207;;;;:::o;15102:397::-;15253:4;15270:19;15292:46;15307:3;15312:7;15321:8;15331:6;15292:14;:46::i;:::-;15270:68;;15349:28;15380:36;15404:11;15869:66;;16534::1;15869::0;;;16522:79:1;16617:12;;;16610:28;;;15801:7:0;;16654:12:1;;15869:66:0;;;;;;;;;;;;15841:109;;;;;;15821:129;;15723:235;;;;15380:36;15349:67;;15484:7;-1:-1:-1;;;;;15434:57:0;:46;15448:20;15470:9;15434:13;:46::i;:::-;-1:-1:-1;;;;;15434:57:0;;;15102:397;-1:-1:-1;;;;;;;;;15102:397:0:o;28558:65::-;12612:13;:11;:13::i;7224:689::-;6063:66;7375:59;;;7371:535;;;7451:37;7470:17;7451:18;:37::i;:::-;7224:689;;;:::o;7371:535::-;7554:17;-1:-1:-1;;;;;7525:61:0;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7525:63:0;;;;;;;;-1:-1:-1;;7525:63:0;;;;;;;;;;;;:::i;:::-;;;7521:306;;7755:56;;-1:-1:-1;;;7755:56:0;;22890:2:1;7755:56:0;;;22872:21:1;22929:2;22909:18;;;22902:30;22968:34;22948:18;;;22941:62;-1:-1:-1;;;23019:18:1;;;23012:44;23073:19;;7755:56:0;22688:410:1;7521:306:0;-1:-1:-1;;;;;;;;;;;7639:28:0;;7631:82;;;;-1:-1:-1;;;7631:82:0;;22065:2:1;7631:82:0;;;22047:21:1;22104:2;22084:18;;;22077:30;22143:34;22123:18;;;22116:62;-1:-1:-1;;;22194:18:1;;;22187:39;22243:19;;7631:82:0;21863:405:1;7631:82:0;7589:140;7841:53;7859:17;7878:4;7884:9;7841:17;:53::i;28972:246::-;29097:12;;;;29153:15;;;;;29170:14;;29139:46;;-1:-1:-1;;;29139:46:0;;29038:7;;29097:12;29038:7;;-1:-1:-1;;;;;29139:13:0;;;;;:46;;29153:15;29139:46;;25763:25:1;;;-1:-1:-1;;;;;25824:32:1;25819:2;25804:18;;25797:60;25751:2;25736:18;;25581:282;29437:238:0;29613:54;;-1:-1:-1;;;29613:54:0;;-1:-1:-1;;;;;17946:15:1;;;29613:54:0;;;17928:34:1;17998:15;;;17978:18;;;17971:43;18030:18;;;18023:34;;;18073:18;;;18066:34;;;17908:3;18116:19;;;18109:32;-1:-1:-1;18157:19:1;;;18150:30;29593:8:0;;29613:25;;;;;;18197:19:1;;29613:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29543:132;29437:238;;;;;:::o;13204:191::-;13297:6;;;-1:-1:-1;;;;;13314:17:0;;;-1:-1:-1;;;;;;13314:17:0;;;;;;;13347:40;;13297:6;;;13314:17;13297:6;;13347:40;;13278:16;;13347:40;13267:128;13204:191;:::o;12354:97::-;4133:13;;;;;;;4125:69;;;;-1:-1:-1;;;4125:69:0;;;;;;;:::i;:::-;12417:26:::1;:24;:26::i;10318:68::-:0;4133:13;;;;;;;4125:69;;;;-1:-1:-1;;;4125:69:0;;;;;;;:::i;23756:98::-;23814:7;23841:5;23845:1;23841;:5;:::i;:::-;23834:12;23756:98;-1:-1:-1;;;23756:98:0:o;23860:::-;23918:7;23945:5;23949:1;23945;:5;:::i;15505:212::-;15623:7;15677:3;15682:7;15691:8;15701:6;15660:48;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15650:59;;;;;;15643:66;;15505:212;;;;;;:::o;15964:249::-;16066:7;16087:9;16098;16109:7;16120:26;16135:10;16120:14;:26::i;:::-;16164:41;;;;;;;;;;;;18915:25:1;;;18988:4;18976:17;;18956:18;;;18949:45;;;;19010:18;;;19003:34;;;19053:18;;;19046:34;;;16086:60:0;;-1:-1:-1;16086:60:0;;-1:-1:-1;16086:60:0;-1:-1:-1;16164:41:0;;18887:19:1;;16164:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16164:41:0;;-1:-1:-1;;16164:41:0;;;15964:249;-1:-1:-1;;;;;;;15964:249:0:o;6470:284::-;-1:-1:-1;;;;;176:19:0;;;6544:106;;;;-1:-1:-1;;;6544:106:0;;23305:2:1;6544:106:0;;;23287:21:1;23344:2;23324:18;;;23317:30;23383:34;23363:18;;;23356:62;-1:-1:-1;;;23434:18:1;;;23427:43;23487:19;;6544:106:0;23103:409:1;6544:106:0;-1:-1:-1;;;;;;;;;;;6661:85:0;;-1:-1:-1;;;;;;6661:85:0;-1:-1:-1;;;;;6661:85:0;;;;;;;;;;6470:284::o;6921:297::-;7064:29;7075:17;7064:10;:29::i;:::-;7122:1;7108:4;:11;:15;:28;;;;7127:9;7108:28;7104:107;;;7153:46;7175:17;7194:4;7153:21;:46::i;12459:113::-;4133:13;;;;;;;4125:69;;;;-1:-1:-1;;;4125:69:0;;;;;;;:::i;:::-;12532:32:::1;11986:10:::0;12532:18:::1;:32::i;16219:324::-:0;16285:9;16296;16307:7;16336:3;:10;16350:2;16336:16;16328:53;;;;-1:-1:-1;;;16328:53:0;;25248:2:1;16328:53:0;;;25230:21:1;25287:2;25267:18;;;25260:30;25326:26;25306:18;;;25299:54;25370:18;;16328:53:0;25046:348:1;16328:53:0;-1:-1:-1;;;16436:2:0;16427:12;;16421:19;16474:2;16465:12;;16459:19;16520:2;16511:12;;;16505:19;16421;;16502:1;16497:28;;;;;16219:324::o;6760:155::-;6827:37;6846:17;6827:18;:37::i;:::-;6880:27;;-1:-1:-1;;;;;6880:27:0;;;;;;;;6760:155;:::o;9703:461::-;9786:12;-1:-1:-1;;;;;176:19:0;;;9811:88;;;;-1:-1:-1;;;9811:88:0;;24429:2:1;9811:88:0;;;24411:21:1;24468:2;24448:18;;;24441:30;24507:34;24487:18;;;24480:62;-1:-1:-1;;;24558:18:1;;;24551:36;24604:19;;9811:88:0;24227:402:1;9811:88:0;9973:12;9987:23;10014:6;-1:-1:-1;;;;;10014:19:0;10034:4;10014:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9972:67;;;;10057:99;10093:7;10102:10;10057:99;;;;;;;;;;;;;;;;;2490:12;2519:7;2515:580;;;-1:-1:-1;2550:10:0;2543:17;;2515:580;2664:17;;:21;2660:424;;2912:10;2906:17;2973:15;2960:10;2956:2;2952:19;2945:44;2660:424;3055:12;3048:20;;-1:-1:-1;;;3048:20:0;;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:718::-;234:5;287:3;280:4;272:6;268:17;264:27;254:55;;305:1;302;295:12;254:55;341:6;328:20;-1:-1:-1;;;;;404:2:1;400;397:10;394:36;;;410:18;;:::i;:::-;485:2;479:9;453:2;539:13;;-1:-1:-1;;535:22:1;;;559:2;531:31;527:40;515:53;;;583:18;;;603:22;;;580:46;577:72;;;629:18;;:::i;:::-;669:10;665:2;658:22;704:2;696:6;689:18;750:3;743:4;738:2;730:6;726:15;722:26;719:35;716:55;;;767:1;764;757:12;716:55;831:2;824:4;816:6;812:17;805:4;797:6;793:17;780:54;878:1;871:4;866:2;858:6;854:15;850:26;843:37;898:6;889:15;;;;;;192:718;;;;:::o;915:156::-;981:20;;1041:4;1030:16;;1020:27;;1010:55;;1061:1;1058;1051:12;1076:186;1135:6;1188:2;1176:9;1167:7;1163:23;1159:32;1156:52;;;1204:1;1201;1194:12;1156:52;1227:29;1246:9;1227:29;:::i;1267:394::-;1344:6;1352;1405:2;1393:9;1384:7;1380:23;1376:32;1373:52;;;1421:1;1418;1411:12;1373:52;1444:29;1463:9;1444:29;:::i;:::-;1434:39;;1524:2;1513:9;1509:18;1496:32;-1:-1:-1;;;;;1543:6:1;1540:30;1537:50;;;1583:1;1580;1573:12;1537:50;1606:49;1647:7;1638:6;1627:9;1623:22;1606:49;:::i;:::-;1596:59;;;1267:394;;;;;:::o;1666:277::-;1733:6;1786:2;1774:9;1765:7;1761:23;1757:32;1754:52;;;1802:1;1799;1792:12;1754:52;1834:9;1828:16;1887:5;1880:13;1873:21;1866:5;1863:32;1853:60;;1909:1;1906;1899:12;1948:184;2018:6;2071:2;2059:9;2050:7;2046:23;2042:32;2039:52;;;2087:1;2084;2077:12;2039:52;-1:-1:-1;2110:16:1;;1948:184;-1:-1:-1;1948:184:1:o;2137:1217::-;2224:6;2277:2;2265:9;2256:7;2252:23;2248:32;2245:52;;;2293:1;2290;2283:12;2245:52;2333:9;2320:23;-1:-1:-1;;;;;2403:2:1;2395:6;2392:14;2389:34;;;2419:1;2416;2409:12;2389:34;2442:22;;;;2498:6;2480:16;;;2476:29;2473:49;;;2518:1;2515;2508:12;2473:49;2544:22;;:::i;:::-;2604:2;2591:16;2632:2;2622:8;2619:16;2616:36;;;2648:1;2645;2638:12;2616:36;2675:44;2711:7;2700:8;2696:2;2692:17;2675:44;:::i;:::-;2668:5;2661:59;;2773:2;2769;2765:11;2752:25;2747:2;2740:5;2736:14;2729:49;2810:31;2837:2;2833;2829:11;2810:31;:::i;:::-;2805:2;2798:5;2794:14;2787:55;2874:31;2901:2;2897;2893:11;2874:31;:::i;:::-;2869:2;2862:5;2858:14;2851:55;2939:32;2966:3;2962:2;2958:12;2939:32;:::i;:::-;2933:3;2926:5;2922:15;2915:57;3026:3;3022:2;3018:12;3005:26;2999:3;2992:5;2988:15;2981:51;3086:3;3082:2;3078:12;3065:26;3059:3;3052:5;3048:15;3041:51;3146:3;3142:2;3138:12;3125:26;3119:3;3112:5;3108:15;3101:51;3171:3;3161:13;;3206:31;3233:2;3229;3225:11;3206:31;:::i;:::-;3201:2;3194:5;3190:14;3183:55;3257:3;3247:13;;3292:31;3319:2;3315;3311:11;3292:31;:::i;:::-;3276:14;;;3269:55;;;;3280:5;2137:1217;-1:-1:-1;;;;2137:1217:1:o;3359:1577::-;3458:6;3511:2;3499:9;3490:7;3486:23;3482:32;3479:52;;;3527:1;3524;3517:12;3479:52;3567:9;3554:23;-1:-1:-1;;;;;3637:2:1;3629:6;3626:14;3623:34;;;3653:1;3650;3643:12;3623:34;3676:22;;;;3732:6;3714:16;;;3710:29;3707:49;;;3752:1;3749;3742:12;3707:49;3778:22;;:::i;:::-;3836:2;3823:16;3816:5;3809:31;3872;3899:2;3895;3891:11;3872:31;:::i;:::-;3867:2;3860:5;3856:14;3849:55;3936:31;3963:2;3959;3955:11;3936:31;:::i;:::-;3931:2;3924:5;3920:14;3913:55;4021:2;4017;4013:11;4000:25;3995:2;3988:5;3984:14;3977:49;4080:3;4076:2;4072:12;4059:26;4053:3;4046:5;4042:15;4035:51;4119:32;4146:3;4142:2;4138:12;4119:32;:::i;:::-;4113:3;4106:5;4102:15;4095:57;4198:3;4194:2;4190:12;4177:26;4228:2;4218:8;4215:16;4212:36;;;4244:1;4241;4234:12;4212:36;4281:44;4317:7;4306:8;4302:2;4298:17;4281:44;:::i;:::-;4275:3;4264:15;;4257:69;-1:-1:-1;4380:3:1;4372:12;;;4359:26;4342:15;;;4335:51;4405:3;4453:11;;;4440:25;4424:14;;;4417:49;4485:3;4533:11;;;4520:25;4504:14;;;4497:49;4565:3;4606:11;;;4593:25;4630:16;;;4627:36;;;4659:1;4656;4649:12;4627:36;4695:44;4731:7;4720:8;4716:2;4712:17;4695:44;:::i;:::-;4690:2;4683:5;4679:14;4672:68;;;4759:3;4749:13;;4815:2;4811;4807:11;4794:25;4789:2;4782:5;4778:14;4771:49;4839:3;4829:13;;4874:31;4901:2;4897;4893:11;4874:31;:::i;4941:1610::-;5039:6;5092:2;5080:9;5071:7;5067:23;5063:32;5060:52;;;5108:1;5105;5098:12;5060:52;5148:9;5135:23;-1:-1:-1;;;;;5218:2:1;5210:6;5207:14;5204:34;;;5234:1;5231;5224:12;5204:34;5257:22;;;;5313:6;5295:16;;;5291:29;5288:49;;;5333:1;5330;5323:12;5288:49;5359:22;;:::i;:::-;5419:2;5406:16;5447:2;5437:8;5434:16;5431:36;;;5463:1;5460;5453:12;5431:36;5490:44;5526:7;5515:8;5511:2;5507:17;5490:44;:::i;:::-;5483:5;5476:59;;5588:2;5584;5580:11;5567:25;5562:2;5555:5;5551:14;5544:49;5625:31;5652:2;5648;5644:11;5625:31;:::i;:::-;5620:2;5613:5;5609:14;5602:55;5689:31;5716:2;5712;5708:11;5689:31;:::i;:::-;5684:2;5677:5;5673:14;5666:55;5754:32;5781:3;5777:2;5773:12;5754:32;:::i;:::-;5748:3;5741:5;5737:15;5730:57;5833:3;5829:2;5825:12;5812:26;5863:2;5853:8;5850:16;5847:36;;;5879:1;5876;5869:12;5847:36;5916:44;5952:7;5941:8;5937:2;5933:17;5916:44;:::i;:::-;5910:3;5903:5;5899:15;5892:69;;6015:3;6011:2;6007:12;5994:26;5988:3;5981:5;5977:15;5970:51;6075:3;6071:2;6067:12;6054:26;6048:3;6041:5;6037:15;6030:51;6100:3;6156:2;6152;6148:11;6135:25;6130:2;6123:5;6119:14;6112:49;;6180:3;6229:2;6225;6221:11;6208:25;6258:2;6248:8;6245:16;6242:36;;;6274:1;6271;6264:12;6242:36;6310:44;6346:7;6335:8;6331:2;6327:17;6310:44;:::i;:::-;6305:2;6298:5;6294:14;6287:68;;;6374:3;6364:13;;6430:2;6426;6422:11;6409:25;6404:2;6397:5;6393:14;6386:49;6454:3;6444:13;;6489:31;6516:2;6512;6508:11;6489:31;:::i;6556:1650::-;6644:6;6697:2;6685:9;6676:7;6672:23;6668:32;6665:52;;;6713:1;6710;6703:12;6665:52;6753:9;6740:23;-1:-1:-1;;;;;6823:2:1;6815:6;6812:14;6809:34;;;6839:1;6836;6829:12;6809:34;6862:22;;;;6918:6;6900:16;;;6896:29;6893:49;;;6938:1;6935;6928:12;6893:49;6964:22;;:::i;:::-;7022:2;7009:16;7002:5;6995:31;7058;7085:2;7081;7077:11;7058:31;:::i;:::-;7053:2;7046:5;7042:14;7035:55;7122:31;7149:2;7145;7141:11;7122:31;:::i;:::-;7117:2;7110:5;7106:14;7099:55;7207:2;7203;7199:11;7186:25;7181:2;7174:5;7170:14;7163:49;7266:3;7262:2;7258:12;7245:26;7239:3;7232:5;7228:15;7221:51;7305:32;7332:3;7328:2;7324:12;7305:32;:::i;:::-;7299:3;7292:5;7288:15;7281:57;7384:3;7380:2;7376:12;7363:26;7414:2;7404:8;7401:16;7398:36;;;7430:1;7427;7420:12;7398:36;7467:44;7503:7;7492:8;7488:2;7484:17;7467:44;:::i;:::-;7461:3;7450:15;;7443:69;-1:-1:-1;7566:3:1;7558:12;;;7545:26;7528:15;;;7521:51;7591:3;7639:11;;;7626:25;7610:14;;;7603:49;7671:3;7719:11;;;7706:25;7690:14;;;7683:49;7751:3;7792:11;;;7779:25;7816:16;;;7813:36;;;7845:1;7842;7835:12;7813:36;7881:44;7917:7;7906:8;7902:2;7898:17;7881:44;:::i;:::-;7876:2;7869:5;7865:14;7858:68;;;7945:3;7935:13;;8001:2;7997;7993:11;7980:25;7975:2;7968:5;7964:14;7957:49;8025:3;8015:13;;8060:31;8087:2;8083;8079:11;8060:31;:::i;:::-;8055:2;8048:5;8044:14;8037:55;8111:3;8101:13;;8146:29;8171:2;8167;8163:11;8146:29;:::i;8211:1683::-;8298:6;8351:2;8339:9;8330:7;8326:23;8322:32;8319:52;;;8367:1;8364;8357:12;8319:52;8407:9;8394:23;-1:-1:-1;;;;;8477:2:1;8469:6;8466:14;8463:34;;;8493:1;8490;8483:12;8463:34;8516:22;;;;8572:6;8554:16;;;8550:29;8547:49;;;8592:1;8589;8582:12;8547:49;8618:22;;:::i;:::-;8678:2;8665:16;8706:2;8696:8;8693:16;8690:36;;;8722:1;8719;8712:12;8690:36;8749:44;8785:7;8774:8;8770:2;8766:17;8749:44;:::i;:::-;8742:5;8735:59;;8847:2;8843;8839:11;8826:25;8821:2;8814:5;8810:14;8803:49;8884:31;8911:2;8907;8903:11;8884:31;:::i;:::-;8879:2;8872:5;8868:14;8861:55;8948:31;8975:2;8971;8967:11;8948:31;:::i;:::-;8943:2;8936:5;8932:14;8925:55;9013:32;9040:3;9036:2;9032:12;9013:32;:::i;:::-;9007:3;9000:5;8996:15;8989:57;9092:3;9088:2;9084:12;9071:26;9122:2;9112:8;9109:16;9106:36;;;9138:1;9135;9128:12;9106:36;9175:44;9211:7;9200:8;9196:2;9192:17;9175:44;:::i;:::-;9169:3;9162:5;9158:15;9151:69;;9274:3;9270:2;9266:12;9253:26;9247:3;9240:5;9236:15;9229:51;9334:3;9330:2;9326:12;9313:26;9307:3;9300:5;9296:15;9289:51;9359:3;9415:2;9411;9407:11;9394:25;9389:2;9382:5;9378:14;9371:49;;9439:3;9488:2;9484;9480:11;9467:25;9517:2;9507:8;9504:16;9501:36;;;9533:1;9530;9523:12;9501:36;9569:44;9605:7;9594:8;9590:2;9586:17;9569:44;:::i;:::-;9564:2;9557:5;9553:14;9546:68;;;9633:3;9623:13;;9689:2;9685;9681:11;9668:25;9663:2;9656:5;9652:14;9645:49;9713:3;9703:13;;9748:31;9775:2;9771;9767:11;9748:31;:::i;:::-;9743:2;9736:5;9732:14;9725:55;9799:3;9789:13;;9834:29;9859:2;9855;9851:11;9834:29;:::i;9899:1090::-;9990:6;10043:2;10031:9;10022:7;10018:23;10014:32;10011:52;;;10059:1;10056;10049:12;10011:52;10099:9;10086:23;-1:-1:-1;;;;;10169:2:1;10161:6;10158:14;10155:34;;;10185:1;10182;10175:12;10155:34;10208:22;;;;10264:4;10246:16;;;10242:27;10239:47;;;10282:1;10279;10272:12;10239:47;10308:17;;:::i;:::-;10348:22;10367:2;10348:22;:::i;:::-;10341:5;10334:37;10403:31;10430:2;10426;10422:11;10403:31;:::i;:::-;10398:2;10391:5;10387:14;10380:55;10481:2;10477;10473:11;10460:25;10510:2;10500:8;10497:16;10494:36;;;10526:1;10523;10516:12;10494:36;10562:44;10598:7;10587:8;10583:2;10579:17;10562:44;:::i;:::-;10557:2;10550:5;10546:14;10539:68;;10660:2;10656;10652:11;10639:25;10634:2;10627:5;10623:14;10616:49;10711:3;10707:2;10703:12;10690:26;10741:2;10731:8;10728:16;10725:36;;;10757:1;10754;10747:12;10725:36;10794:44;10830:7;10819:8;10815:2;10811:17;10794:44;:::i;:::-;10788:3;10781:5;10777:15;10770:69;;10893:3;10889:2;10885:12;10872:26;10866:3;10859:5;10855:15;10848:51;10953:3;10949:2;10945:12;10932:26;10926:3;10919:5;10915:15;10908:51;10978:5;10968:15;;;;;9899:1090;;;;:::o;10994:1203::-;11084:6;11137:2;11125:9;11116:7;11112:23;11108:32;11105:52;;;11153:1;11150;11143:12;11105:52;11193:9;11180:23;-1:-1:-1;;;;;11263:2:1;11255:6;11252:14;11249:34;;;11279:1;11276;11269:12;11249:34;11302:22;;;;11358:4;11340:16;;;11336:27;11333:47;;;11376:1;11373;11366:12;11333:47;11402:17;;:::i;:::-;11457:2;11444:16;11485:2;11475:8;11472:16;11469:36;;;11501:1;11498;11491:12;11469:36;11528:44;11564:7;11553:8;11549:2;11545:17;11528:44;:::i;:::-;11521:5;11514:59;;11605:31;11632:2;11628;11624:11;11605:31;:::i;:::-;11600:2;11593:5;11589:14;11582:55;11669:31;11696:2;11692;11688:11;11669:31;:::i;:::-;11664:2;11657:5;11653:14;11646:55;11747:2;11743;11739:11;11726:25;11776:2;11766:8;11763:16;11760:36;;;11792:1;11789;11782:12;11760:36;11828:44;11864:7;11853:8;11849:2;11845:17;11828:44;:::i;:::-;11823:2;11816:5;11812:14;11805:68;;11927:3;11923:2;11919:12;11906:26;11900:3;11893:5;11889:15;11882:51;11979:3;11975:2;11971:12;11958:26;12009:2;11999:8;11996:16;11993:36;;;12025:1;12022;12015:12;11993:36;12062:44;12098:7;12087:8;12083:2;12079:17;12062:44;:::i;:::-;12056:3;12049:5;12045:15;12038:69;;12161:3;12157:2;12153:12;12140:26;12134:3;12127:5;12123:15;12116:51;12186:5;12176:15;;;;;10994:1203;;;;:::o;12202:1439::-;12295:6;12348:2;12336:9;12327:7;12323:23;12319:32;12316:52;;;12364:1;12361;12354:12;12316:52;12404:9;12391:23;-1:-1:-1;;;;;12474:2:1;12466:6;12463:14;12460:34;;;12490:1;12487;12480:12;12460:34;12513:22;;;;12569:6;12551:16;;;12547:29;12544:49;;;12589:1;12586;12579:12;12544:49;12615:22;;:::i;:::-;12675:2;12662:16;12703:2;12693:8;12690:16;12687:36;;;12719:1;12716;12709:12;12687:36;12746:44;12782:7;12771:8;12767:2;12763:17;12746:44;:::i;:::-;12739:5;12732:59;;12844:2;12840;12836:11;12823:25;12818:2;12811:5;12807:14;12800:49;12881:31;12908:2;12904;12900:11;12881:31;:::i;:::-;12876:2;12869:5;12865:14;12858:55;12945:31;12972:2;12968;12964:11;12945:31;:::i;:::-;12940:2;12933:5;12929:14;12922:55;13031:3;13027:2;13023:12;13010:26;13004:3;12997:5;12993:15;12986:51;13091:3;13087:2;13083:12;13070:26;13064:3;13057:5;13053:15;13046:51;13143:3;13139:2;13135:12;13122:26;13173:2;13163:8;13160:16;13157:36;;;13189:1;13186;13179:12;13157:36;13226:44;13262:7;13251:8;13247:2;13243:17;13226:44;:::i;:::-;13220:3;13213:5;13209:15;13202:69;;13304:32;13331:3;13327:2;13323:12;13304:32;:::i;:::-;13298:3;13291:5;13287:15;13280:57;13356:3;13405:2;13401;13397:11;13384:25;13434:2;13424:8;13421:16;13418:36;;;13450:1;13447;13440:12;13418:36;13486:44;13522:7;13511:8;13507:2;13503:17;13486:44;:::i;:::-;13470:14;;;13463:68;;;;-1:-1:-1;13550:3:1;13598:11;;;13585:25;13569:14;;;13562:49;;;;-1:-1:-1;13474:5:1;12202:1439;-1:-1:-1;;;12202:1439:1:o;13646:1358::-;13738:6;13791:2;13779:9;13770:7;13766:23;13762:32;13759:52;;;13807:1;13804;13797:12;13759:52;13847:9;13834:23;-1:-1:-1;;;;;13917:2:1;13909:6;13906:14;13903:34;;;13933:1;13930;13923:12;13903:34;13956:22;;;;14012:6;13994:16;;;13990:29;13987:49;;;14032:1;14029;14022:12;13987:49;14058:22;;:::i;:::-;14118:2;14105:16;14146:2;14136:8;14133:16;14130:36;;;14162:1;14159;14152:12;14130:36;14189:44;14225:7;14214:8;14210:2;14206:17;14189:44;:::i;:::-;14182:5;14175:59;;14287:2;14283;14279:11;14266:25;14261:2;14254:5;14250:14;14243:49;14324:31;14351:2;14347;14343:11;14324:31;:::i;:::-;14319:2;14312:5;14308:14;14301:55;14388:31;14415:2;14411;14407:11;14388:31;:::i;:::-;14383:2;14376:5;14372:14;14365:55;14474:3;14470:2;14466:12;14453:26;14447:3;14440:5;14436:15;14429:51;14526:3;14522:2;14518:12;14505:26;14556:2;14546:8;14543:16;14540:36;;;14572:1;14569;14562:12;14540:36;14609:44;14645:7;14634:8;14630:2;14626:17;14609:44;:::i;:::-;14603:3;14596:5;14592:15;14585:69;;14687:32;14714:3;14710:2;14706:12;14687:32;:::i;:::-;14681:3;14674:5;14670:15;14663:57;14766:3;14762:2;14758:12;14745:26;14796:2;14786:8;14783:16;14780:36;;;14812:1;14809;14802:12;14780:36;14849:44;14885:7;14874:8;14870:2;14866:17;14849:44;:::i;:::-;14843:3;14832:15;;14825:69;-1:-1:-1;14913:3:1;14961:11;;;14948:25;14932:14;;;14925:49;;;;-1:-1:-1;14836:5:1;13646:1358;-1:-1:-1;;;13646:1358:1:o;15198:258::-;15240:3;15278:5;15272:12;15305:6;15300:3;15293:19;15321:63;15377:6;15370:4;15365:3;15361:14;15354:4;15347:5;15343:16;15321:63;:::i;:::-;15438:2;15417:15;-1:-1:-1;;15413:29:1;15404:39;;;;15445:4;15400:50;;15198:258;-1:-1:-1;;15198:258:1:o;15461:547::-;15731:26;15727:31;15718:6;15714:2;15710:15;15706:53;15701:3;15694:66;15790:6;15785:2;15780:3;15776:12;15769:28;15676:3;15826:6;15820:13;15842:62;15897:6;15892:2;15887:3;15883:12;15876:4;15868:6;15864:17;15842:62;:::i;:::-;15963:2;15923:16;;15955:11;;;15948:27;;;;15999:2;15991:11;;15461:547;-1:-1:-1;;;;15461:547:1:o;16013:274::-;16142:3;16180:6;16174:13;16196:53;16242:6;16237:3;16230:4;16222:6;16218:17;16196:53;:::i;:::-;16265:16;;;;;16013:274;-1:-1:-1;;16013:274:1:o;16885:325::-;-1:-1:-1;;;;;17070:32:1;;17052:51;;17139:2;17134;17119:18;;17112:30;;;-1:-1:-1;;17159:45:1;;17185:18;;17177:6;17159:45;:::i;19290:220::-;19439:2;19428:9;19421:21;19402:4;19459:45;19500:2;19489:9;19485:18;19477:6;19459:45;:::i;19515:339::-;19717:2;19699:21;;;19756:2;19736:18;;;19729:30;-1:-1:-1;;;19790:2:1;19775:18;;19768:45;19845:2;19830:18;;19515:339::o;19859:341::-;20061:2;20043:21;;;20100:2;20080:18;;;20073:30;-1:-1:-1;;;20134:2:1;20119:18;;20112:47;20191:2;20176:18;;19859:341::o;20612:408::-;20814:2;20796:21;;;20853:2;20833:18;;;20826:30;20892:34;20887:2;20872:18;;20865:62;-1:-1:-1;;;20958:2:1;20943:18;;20936:42;21010:3;20995:19;;20612:408::o;21025:::-;21227:2;21209:21;;;21266:2;21246:18;;;21239:30;21305:34;21300:2;21285:18;;21278:62;-1:-1:-1;;;21371:2:1;21356:18;;21349:42;21423:3;21408:19;;21025:408::o;24634:407::-;24836:2;24818:21;;;24875:2;24855:18;;;24848:30;24914:34;24909:2;24894:18;;24887:62;-1:-1:-1;;;24980:2:1;24965:18;;24958:41;25031:3;25016:19;;24634:407::o;25868:519::-;26127:25;;;26183:2;26168:18;;26161:34;;;;-1:-1:-1;;;;;26269:15:1;;;26264:2;26249:18;;26242:43;26321:15;26316:2;26301:18;;26294:43;26368:3;26353:19;;26346:35;26114:3;26099:19;;25868:519::o;26392:255::-;26464:2;26458:9;26506:6;26494:19;;-1:-1:-1;;;;;26528:34:1;;26564:22;;;26525:62;26522:88;;;26590:18;;:::i;:::-;26626:2;26619:22;26392:255;:::o;26652:::-;26724:2;26718:9;26766:6;26754:19;;-1:-1:-1;;;;;26788:34:1;;26824:22;;;26785:62;26782:88;;;26850:18;;:::i;26912:255::-;26984:2;26978:9;27026:6;27014:19;;-1:-1:-1;;;;;27048:34:1;;27084:22;;;27045:62;27042:88;;;27110:18;;:::i;27172:255::-;27244:2;27238:9;27286:6;27274:19;;-1:-1:-1;;;;;27308:34:1;;27344:22;;;27305:62;27302:88;;;27370:18;;:::i;27432:248::-;27499:2;27493:9;27541:4;27529:17;;-1:-1:-1;;;;;27561:34:1;;27597:22;;;27558:62;27555:88;;;27623:18;;:::i;27685:255::-;27757:2;27751:9;27799:6;27787:19;;-1:-1:-1;;;;;27821:34:1;;27857:22;;;27818:62;27815:88;;;27883:18;;:::i;27945:217::-;27985:1;28011;28001:132;;28055:10;28050:3;28046:20;28043:1;28036:31;28090:4;28087:1;28080:15;28118:4;28115:1;28108:15;28001:132;-1:-1:-1;28147:9:1;;27945:217::o;28167:168::-;28207:7;28273:1;28269;28265:6;28261:14;28258:1;28255:21;28250:1;28243:9;28236:17;28232:45;28229:71;;;28280:18;;:::i;:::-;-1:-1:-1;28320:9:1;;28167:168::o;28340:125::-;28380:4;28408:1;28405;28402:8;28399:34;;;28413:18;;:::i;:::-;-1:-1:-1;28450:9:1;;28340:125::o;28470:258::-;28542:1;28552:113;28566:6;28563:1;28560:13;28552:113;;;28642:11;;;28636:18;28623:11;;;28616:39;28588:2;28581:10;28552:113;;;28683:6;28680:1;28677:13;28674:48;;;-1:-1:-1;;28718:1:1;28700:16;;28693:27;28470:258::o;28733:127::-;28794:10;28789:3;28785:20;28782:1;28775:31;28825:4;28822:1;28815:15;28849:4;28846:1;28839:15;28865:127;28926:10;28921:3;28917:20;28914:1;28907:31;28957:4;28954:1;28947:15;28981:4;28978:1;28971:15
Swarm Source
ipfs://fcdad98624acab229be434c6667b768c9d9875bb20ed6d5236ab483c5c76fadf
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.