ERC-20
Overview
Max Total Supply
863,181,377.835759 toona
Holders
309
Market
Price
-
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
151,515 toonaValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x5759ca0c...c82FF8667 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
Oft
Compiler Version
v0.8.25+commit.b61c2a91
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314// SPDX-License-Identifier: UNLICENSEDpragma solidity ^0.8.22;import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";import { OFT } from "@layerzerolabs/oft-evm/contracts/OFT.sol";contract Oft is OFT {constructor(string memory _name,string memory _symbol,address _lzEndpoint,address _delegate) OFT(_name, _symbol, _lzEndpoint, _delegate) Ownable(_delegate) {}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)pragma solidity ^0.8.20;import {Context} from "../utils/Context.sol";/*** @dev Contract module which provides a basic access control mechanism, where* there is an account (an owner) that can be granted exclusive access to* specific functions.** The initial owner is set to the address provided by the deployer. This can* later be changed with {transferOwnership}.** This module is used through inheritance. It will make available the modifier* `onlyOwner`, which can be applied to your functions to restrict their use to* the owner.*/abstract contract Ownable is Context {address private _owner;/*** @dev The caller account is not authorized to perform an operation.*/error OwnableUnauthorizedAccount(address account);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";import { IOFT, OFTCore } from "./OFTCore.sol";/*** @title OFT Contract* @dev OFT is an ERC-20 token that extends the functionality of the OFTCore contract.*/abstract contract OFT is OFTCore, ERC20 {/*** @dev Constructor for the OFT contract.* @param _name The name of the OFT.* @param _symbol The symbol of the OFT.* @param _lzEndpoint The LayerZero endpoint address.* @param _delegate The delegate capable of making OApp configurations inside of the endpoint.*/constructor(string memory _name,string memory _symbol,address _lzEndpoint,address _delegate) ERC20(_name, _symbol) OFTCore(decimals(), _lzEndpoint, _delegate) {}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)pragma solidity ^0.8.20;/*** @dev Provides information about the current execution context, including the* sender of the transaction and its data. While these are generally available* via msg.sender and msg.data, they should not be accessed in such a direct* manner, since when dealing with meta-transactions the account sending and* paying for execution may not be the actual sender (as far as an application* is concerned).** This contract is only required for intermediate, library-like contracts.*/abstract contract Context {function _msgSender() internal view virtual returns (address) {return msg.sender;}function _msgData() internal view virtual returns (bytes calldata) {return msg.data;}function _contextSuffixLength() internal view virtual returns (uint256) {return 0;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/ERC20.sol)pragma solidity ^0.8.20;import {IERC20} from "./IERC20.sol";import {IERC20Metadata} from "./extensions/IERC20Metadata.sol";import {Context} from "../../utils/Context.sol";import {IERC20Errors} from "../../interfaces/draft-IERC6093.sol";/*** @dev Implementation of the {IERC20} interface.** This implementation is agnostic to the way tokens are created. This means* that a supply mechanism has to be added in a derived contract using {_mint}.** TIP: For a detailed writeup see our guide* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How* to implement supply mechanisms].** The default value of {decimals} is 18. To change this, you should override* this function so it returns a different value.** We have followed general OpenZeppelin Contracts guidelines: functions revert* instead returning `false` on failure. This behavior is nonetheless* conventional and does not conflict with the expectations of ERC-20
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { OApp, Origin } from "@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol";import { OAppOptionsType3 } from "@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol";import { IOAppMsgInspector } from "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol";import { OAppPreCrimeSimulator } from "@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol";import { IOFT, SendParam, OFTLimit, OFTReceipt, OFTFeeDetail, MessagingReceipt, MessagingFee } from "./interfaces/IOFT.sol";import { OFTMsgCodec } from "./libs/OFTMsgCodec.sol";import { OFTComposeMsgCodec } from "./libs/OFTComposeMsgCodec.sol";/*** @title OFTCore* @dev Abstract contract for the OftChain (OFT) token.*/abstract contract OFTCore is IOFT, OApp, OAppPreCrimeSimulator, OAppOptionsType3 {using OFTMsgCodec for bytes;using OFTMsgCodec for bytes32;// @notice Provides a conversion rate when swapping between denominations of SD and LD// - shareDecimals == SD == shared Decimals// - localDecimals == LD == local decimals// @dev Considers that tokens have different decimal amounts on various chains.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC-20 standard as defined in the ERC.*/interface IERC20 {/*** @dev Emitted when `value` tokens are moved from one account (`from`) to* another (`to`).** Note that `value` may be zero.*/event Transfer(address indexed from, address indexed to, uint256 value);/*** @dev Emitted when the allowance of a `spender` for an `owner` is set by* a call to {approve}. `value` is the new allowance.*/event Approval(address indexed owner, address indexed spender, uint256 value);/*** @dev Returns the value of tokens in existence.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)pragma solidity ^0.8.20;import {IERC20} from "../IERC20.sol";/*** @dev Interface for the optional metadata functions from the ERC-20 standard.*/interface IERC20Metadata is IERC20 {/*** @dev Returns the name of the token.*/function name() external view returns (string memory);/*** @dev Returns the symbol of the token.*/function symbol() external view returns (string memory);/*** @dev Returns the decimals places of the token.*/function decimals() external view returns (uint8);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)pragma solidity ^0.8.20;/*** @dev Standard ERC-20 Errors* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.*/interface IERC20Errors {/*** @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.* @param sender Address whose tokens are being transferred.* @param balance Current balance for the interacting account.* @param needed Minimum amount required to perform a transfer.*/error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);/*** @dev Indicates a failure with the token `sender`. Used in transfers.* @param sender Address whose tokens are being transferred.*/error ERC20InvalidSender(address sender);/*** @dev Indicates a failure with the token `receiver`. Used in transfers.* @param receiver Address to which tokens are being transferred.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers// solhint-disable-next-line no-unused-importimport { OAppSender, MessagingFee, MessagingReceipt } from "./OAppSender.sol";// @dev Import the 'Origin' so it's exposed to OApp implementers// solhint-disable-next-line no-unused-importimport { OAppReceiver, Origin } from "./OAppReceiver.sol";import { OAppCore } from "./OAppCore.sol";/*** @title OApp* @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.*/abstract contract OApp is OAppSender, OAppReceiver {/*** @dev Constructor to initialize the OApp with the provided endpoint and owner.* @param _endpoint The address of the LOCAL LayerZero endpoint.* @param _delegate The delegate capable of making OApp configurations inside of the endpoint.*/constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}/*** @notice Retrieves the OApp version information.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";import { IOAppOptionsType3, EnforcedOptionParam } from "../interfaces/IOAppOptionsType3.sol";/*** @title OAppOptionsType3* @dev Abstract contract implementing the IOAppOptionsType3 interface with type 3 options.*/abstract contract OAppOptionsType3 is IOAppOptionsType3, Ownable {uint16 internal constant OPTION_TYPE_3 = 3;// @dev The "msgType" should be defined in the child contract.mapping(uint32 eid => mapping(uint16 msgType => bytes enforcedOption)) public enforcedOptions;/*** @dev Sets the enforced options for specific endpoint and message type combinations.* @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.** @dev Only the owner/admin of the OApp can call this function.* @dev Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.* @dev These enforced options can vary as the potential options/execution on the remote may differ as per the msgType.* eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay* if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().
12345678910111213141516171819202122// SPDX-License-Identifier: MITpragma solidity ^0.8.20;/*** @title IOAppMsgInspector* @dev Interface for the OApp Message Inspector, allowing examination of message and options contents.*/interface IOAppMsgInspector {// Custom error message for inspection failureerror InspectionFailed(bytes message, bytes options);/*** @notice Allows the inspector to examine LayerZero message contents and optionally throw a revert if invalid.* @param _message The message payload to be inspected.* @param _options Additional options or parameters for inspection.* @return valid A boolean indicating whether the inspection passed (true) or failed (false).** @dev Optionally done as a revert, OR use the boolean provided to handle the failure.*/function inspect(bytes calldata _message, bytes calldata _options) external view returns (bool valid);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";import { IPreCrime } from "./interfaces/IPreCrime.sol";import { IOAppPreCrimeSimulator, InboundPacket, Origin } from "./interfaces/IOAppPreCrimeSimulator.sol";/*** @title OAppPreCrimeSimulator* @dev Abstract contract serving as the base for preCrime simulation functionality in an OApp.*/abstract contract OAppPreCrimeSimulator is IOAppPreCrimeSimulator, Ownable {// The address of the preCrime implementation.address public preCrime;/*** @dev Retrieves the address of the OApp contract.* @return The address of the OApp contract.** @dev The simulator contract is the base contract for the OApp by default.* @dev If the simulator is a separate contract, override this function.*/function oApp() external view virtual returns (address) {return address(this);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { MessagingReceipt, MessagingFee } from "@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol";/*** @dev Struct representing token parameters for the OFT send() operation.*/struct SendParam {uint32 dstEid; // Destination endpoint ID.bytes32 to; // Recipient address.uint256 amountLD; // Amount to send in local decimals.uint256 minAmountLD; // Minimum amount to send in local decimals.bytes extraOptions; // Additional options supplied by the caller to be used in the LayerZero message.bytes composeMsg; // The composed message for the send() operation.bytes oftCmd; // The OFT command to be executed, unused in default OFT implementations.}/*** @dev Struct representing OFT limit information.* @dev These amounts can change dynamically and are up the specific oft implementation.*/struct OFTLimit {uint256 minAmountLD; // Minimum amount in local decimals that can be sent to the recipient.uint256 maxAmountLD; // Maximum amount in local decimals that can be sent to the recipient.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;library OFTMsgCodec {// Offset constants for encoding and decoding OFT messagesuint8 private constant SEND_TO_OFFSET = 32;uint8 private constant SEND_AMOUNT_SD_OFFSET = 40;/*** @dev Encodes an OFT LayerZero message.* @param _sendTo The recipient address.* @param _amountShared The amount in shared decimals.* @param _composeMsg The composed message.* @return _msg The encoded message.* @return hasCompose A boolean indicating whether the message has a composed payload.*/function encode(bytes32 _sendTo,uint64 _amountShared,bytes memory _composeMsg) internal view returns (bytes memory _msg, bool hasCompose) {hasCompose = _composeMsg.length > 0;// @dev Remote chains will want to know the composed function caller ie. msg.sender on the src._msg = hasCompose? abi.encodePacked(_sendTo, _amountShared, addressToBytes32(msg.sender), _composeMsg)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;library OFTComposeMsgCodec {// Offset constants for decoding composed messagesuint8 private constant NONCE_OFFSET = 8;uint8 private constant SRC_EID_OFFSET = 12;uint8 private constant AMOUNT_LD_OFFSET = 44;uint8 private constant COMPOSE_FROM_OFFSET = 76;/*** @dev Encodes a OFT composed message.* @param _nonce The nonce value.* @param _srcEid The source endpoint ID.* @param _amountLD The amount in local decimals.* @param _composeMsg The composed message.* @return _msg The encoded Composed message.*/function encode(uint64 _nonce,uint32 _srcEid,uint256 _amountLD,bytes memory _composeMsg // 0x[composeFrom][composeMsg]) internal pure returns (bytes memory _msg) {_msg = abi.encodePacked(_nonce, _srcEid, _amountLD, _composeMsg);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { SafeERC20, IERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";import { MessagingParams, MessagingFee, MessagingReceipt } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol";import { OAppCore } from "./OAppCore.sol";/*** @title OAppSender* @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.*/abstract contract OAppSender is OAppCore {using SafeERC20 for IERC20;// Custom error messageserror NotEnoughNative(uint256 msgValue);error LzTokenUnavailable();// @dev The version of the OAppSender implementation.// @dev Version is bumped when changes are made to this contract.uint64 internal constant SENDER_VERSION = 1;/*** @notice Retrieves the OApp version information.* @return senderVersion The version of the OAppSender.sol contract.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { IOAppReceiver, Origin } from "./interfaces/IOAppReceiver.sol";import { OAppCore } from "./OAppCore.sol";/*** @title OAppReceiver* @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.*/abstract contract OAppReceiver is IOAppReceiver, OAppCore {// Custom error message for when the caller is not the registered endpoint/error OnlyEndpoint(address addr);// @dev The version of the OAppReceiver implementation.// @dev Version is bumped when changes are made to this contract.uint64 internal constant RECEIVER_VERSION = 2;/*** @notice Retrieves the OApp version information.* @return senderVersion The version of the OAppSender.sol contract.* @return receiverVersion The version of the OAppReceiver.sol contract.** @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.* ie. this is a RECEIVE only OApp.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";import { IOAppCore, ILayerZeroEndpointV2 } from "./interfaces/IOAppCore.sol";/*** @title OAppCore* @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.*/abstract contract OAppCore is IOAppCore, Ownable {// The LayerZero endpoint associated with the given OAppILayerZeroEndpointV2 public immutable endpoint;// Mapping to store peers associated with corresponding endpointsmapping(uint32 eid => bytes32 peer) public peers;/*** @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.* @param _endpoint The address of the LOCAL Layer Zero endpoint.* @param _delegate The delegate capable of making OApp configurations inside of the endpoint.** @dev The delegate typically should be set as the owner of the contract.*/constructor(address _endpoint, address _delegate) {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;/*** @dev Struct representing enforced option parameters.*/struct EnforcedOptionParam {uint32 eid; // Endpoint IDuint16 msgType; // Message Typebytes options; // Additional options}/*** @title IOAppOptionsType3* @dev Interface for the OApp with Type 3 Options, allowing the setting and combining of enforced options.*/interface IOAppOptionsType3 {// Custom error message for invalid optionserror InvalidOptions(bytes options);// Event emitted when enforced options are setevent EnforcedOptionSet(EnforcedOptionParam[] _enforcedOptions);/*** @notice Sets enforced options for specific endpoint and message type combinations.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;struct PreCrimePeer {uint32 eid;bytes32 preCrime;bytes32 oApp;}// TODO not done yetinterface IPreCrime {error OnlyOffChain();// for simulate()error PacketOversize(uint256 max, uint256 actual);error PacketUnsorted();error SimulationFailed(bytes reason);// for preCrime()error SimulationResultNotFound(uint32 eid);error InvalidSimulationResult(uint32 eid, bytes reason);error CrimeFound(bytes crime);function getConfig(bytes[] calldata _packets, uint256[] calldata _packetMsgValues) external returns (bytes memory);function simulate(
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;// @dev Import the Origin so it's exposed to OAppPreCrimeSimulator implementers.// solhint-disable-next-line no-unused-importimport { InboundPacket, Origin } from "../libs/Packet.sol";/*** @title IOAppPreCrimeSimulator Interface* @dev Interface for the preCrime simulation functionality in an OApp.*/interface IOAppPreCrimeSimulator {// @dev simulation result used in PreCrime implementationerror SimulationResult(bytes result);error OnlySelf();/*** @dev Emitted when the preCrime contract address is set.* @param preCrimeAddress The address of the preCrime contract.*/event PreCrimeSet(address preCrimeAddress);/*** @dev Retrieves the address of the preCrime contract implementation.* @return The address of the preCrime contract.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)pragma solidity ^0.8.20;import {IERC20} from "../IERC20.sol";import {IERC1363} from "../../../interfaces/IERC1363.sol";import {Address} from "../../../utils/Address.sol";/*** @title SafeERC20* @dev Wrappers around ERC-20 operations that throw on failure (when the token* contract returns false). Tokens that return no value (and instead revert or* throw on failure) are also supported, non-reverting calls are assumed to be* successful.* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.*/library SafeERC20 {/*** @dev An operation with an ERC-20 token failed.*/error SafeERC20FailedOperation(address token);/*** @dev Indicates a failed `decreaseAllowance` request.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.8.0;import { IMessageLibManager } from "./IMessageLibManager.sol";import { IMessagingComposer } from "./IMessagingComposer.sol";import { IMessagingChannel } from "./IMessagingChannel.sol";import { IMessagingContext } from "./IMessagingContext.sol";struct MessagingParams {uint32 dstEid;bytes32 receiver;bytes message;bytes options;bool payInLzToken;}struct MessagingReceipt {bytes32 guid;uint64 nonce;MessagingFee fee;}struct MessagingFee {uint256 nativeFee;uint256 lzTokenFee;
12345678910111213141516171819202122232425// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { ILayerZeroReceiver, Origin } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol";interface IOAppReceiver is ILayerZeroReceiver {/*** @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.* @param _origin The origin information containing the source endpoint and sender address.* - srcEid: The source chain endpoint ID.* - sender: The sender address on the src chain.* - nonce: The nonce of the message.* @param _message The lzReceive payload.* @param _sender The sender address.* @return isSender Is a valid sender.** @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.* @dev The default sender IS the OAppReceiver implementer.*/function isComposeMsgSender(Origin calldata _origin,bytes calldata _message,address _sender) external view returns (bool isSender);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { ILayerZeroEndpointV2 } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol";/*** @title IOAppCore*/interface IOAppCore {// Custom error messageserror OnlyPeer(uint32 eid, bytes32 sender);error NoPeer(uint32 eid);error InvalidEndpointCall();error InvalidDelegate();// Event emitted when a peer (OApp) is set for a corresponding endpointevent PeerSet(uint32 eid, bytes32 peer);/*** @notice Retrieves the OApp version information.* @return senderVersion The version of the OAppSender.sol contract.* @return receiverVersion The version of the OAppReceiver.sol contract.*/function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.20;import { Origin } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol";import { PacketV1Codec } from "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol";/*** @title InboundPacket* @dev Structure representing an inbound packet received by the contract.*/struct InboundPacket {Origin origin; // Origin information of the packet.uint32 dstEid; // Destination endpointId of the packet.address receiver; // Receiver address for the packet.bytes32 guid; // Unique identifier of the packet.uint256 value; // msg.value of the packet.address executor; // Executor address for the packet.bytes message; // Message payload of the packet.bytes extraData; // Additional arbitrary data for the packet.}/*** @title PacketDecoder* @dev Library for decoding LayerZero packets.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)pragma solidity ^0.8.20;import {IERC20} from "./IERC20.sol";import {IERC165} from "./IERC165.sol";/*** @title IERC1363* @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].** Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract* after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.*/interface IERC1363 is IERC20, IERC165 {/** Note: the ERC-165 identifier for this interface is 0xb0202a11.* 0xb0202a11 ===* bytes4(keccak256('transferAndCall(address,uint256)')) ^* bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^* bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^* bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^* bytes4(keccak256('approveAndCall(address,uint256)')) ^* bytes4(keccak256('approveAndCall(address,uint256,bytes)'))*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)pragma solidity ^0.8.20;import {Errors} from "./Errors.sol";/*** @dev Collection of functions related to the address type*/library Address {/*** @dev There's no code at `target` (it is not a contract).*/error AddressEmptyCode(address target);/*** @dev Replacement for Solidity's `transfer`: sends `amount` wei to* `recipient`, forwarding all available gas and reverting on errors.** https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost* of certain opcodes, possibly making contracts go over the 2300 gas limit* imposed by `transfer`, making them unable to receive funds via* `transfer`. {sendValue} removes this limitation.** https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.8.0;struct SetConfigParam {uint32 eid;uint32 configType;bytes config;}interface IMessageLibManager {struct Timeout {address lib;uint256 expiry;}event LibraryRegistered(address newLib);event DefaultSendLibrarySet(uint32 eid, address newLib);event DefaultReceiveLibrarySet(uint32 eid, address newLib);event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);event SendLibrarySet(address sender, uint32 eid, address newLib);event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);function registerLibrary(address _lib) external;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.8.0;interface IMessagingComposer {event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);event LzComposeAlert(address indexed from,address indexed to,address indexed executor,bytes32 guid,uint16 index,uint256 gas,uint256 value,bytes message,bytes extraData,bytes reason);function composeQueue(address _from,address _to,bytes32 _guid,uint16 _index) external view returns (bytes32 messageHash);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.8.0;interface IMessagingChannel {event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);function eid() external view returns (uint32);// this is an emergency function if a message cannot be verified for some reasons// required to provide _nextNonce to avoid race conditionfunction skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);function inboundPayloadHash(
123456789// SPDX-License-Identifier: MITpragma solidity >=0.8.0;interface IMessagingContext {function isSendingMessage() external view returns (bool);function getSendContext() external view returns (uint32 dstEid, address sender);}
12345678910111213141516171819// SPDX-License-Identifier: MITpragma solidity >=0.8.0;import { Origin } from "./ILayerZeroEndpointV2.sol";interface ILayerZeroReceiver {function allowInitializePath(Origin calldata _origin) external view returns (bool);function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);function lzReceive(Origin calldata _origin,bytes32 _guid,bytes calldata _message,address _executor,bytes calldata _extraData) external payable;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LZBL-1.2pragma solidity ^0.8.20;import { Packet } from "../../interfaces/ISendLib.sol";import { AddressCast } from "../../libs/AddressCast.sol";library PacketV1Codec {using AddressCast for address;using AddressCast for bytes32;uint8 internal constant PACKET_VERSION = 1;// header (version + nonce + path)// versionuint256 private constant PACKET_VERSION_OFFSET = 0;// nonceuint256 private constant NONCE_OFFSET = 1;// pathuint256 private constant SRC_EID_OFFSET = 9;uint256 private constant SENDER_OFFSET = 13;uint256 private constant DST_EID_OFFSET = 45;uint256 private constant RECEIVER_OFFSET = 49;// payload (guid + message)uint256 private constant GUID_OFFSET = 81; // keccak256(nonce + path)uint256 private constant MESSAGE_OFFSET = 113;
123456// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)pragma solidity ^0.8.20;import {IERC20} from "../token/ERC20/IERC20.sol";
123456// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)pragma solidity ^0.8.20;import {IERC165} from "../utils/introspection/IERC165.sol";
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)pragma solidity ^0.8.20;/*** @dev Collection of common custom errors used in multiple contracts** IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.* It is recommended to avoid relying on the error API for critical functionality.** _Available since v5.1._*/library Errors {/*** @dev The ETH balance of the account is not enough to perform the operation.*/error InsufficientBalance(uint256 balance, uint256 needed);/*** @dev A call to an address target failed. The target may have reverted.*/error FailedCall();/*** @dev The deployment failed.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.8.0;import { MessagingFee } from "./ILayerZeroEndpointV2.sol";import { IMessageLib } from "./IMessageLib.sol";struct Packet {uint64 nonce;uint32 srcEid;address sender;uint32 dstEid;bytes32 receiver;bytes32 guid;bytes message;}interface ISendLib is IMessageLib {function send(Packet calldata _packet,bytes calldata _options,bool _payInLzToken) external returns (MessagingFee memory, bytes memory encodedPacket);function quote(Packet calldata _packet,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LZBL-1.2pragma solidity ^0.8.20;library AddressCast {error AddressCast_InvalidSizeForAddress();error AddressCast_InvalidAddress();function toBytes32(bytes calldata _addressBytes) internal pure returns (bytes32 result) {if (_addressBytes.length > 32) revert AddressCast_InvalidAddress();result = bytes32(_addressBytes);unchecked {uint256 offset = 32 - _addressBytes.length;result = result >> (offset * 8);}}function toBytes32(address _address) internal pure returns (bytes32 result) {result = bytes32(uint256(uint160(_address)));}function toBytes(bytes32 _addressBytes32, uint256 _size) internal pure returns (bytes memory result) {if (_size == 0 || _size > 32) revert AddressCast_InvalidSizeForAddress();result = new bytes(_size);unchecked {uint256 offset = 256 - _size * 8;
12345678910111213141516171819202122232425// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC-165 standard, as defined in the* https://eips.ethereum.org/EIPS/eip-165[ERC].** Implementers can declare support of contract interfaces, which can then be* queried by others ({ERC165Checker}).** For an implementation, see {ERC165}.*/interface IERC165 {/*** @dev Returns true if this contract implements the interface defined by* `interfaceId`. See the corresponding* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]* to learn more about how these ids are created.** This function call must use less than 30 000 gas.*/function supportsInterface(bytes4 interfaceId) external view returns (bool);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.8.0;import { IERC165 } from "@openzeppelin/contracts/utils/introspection/IERC165.sol";import { SetConfigParam } from "./IMessageLibManager.sol";enum MessageLibType {Send,Receive,SendAndReceive}interface IMessageLib is IERC165 {function setConfig(address _oapp, SetConfigParam[] calldata _config) external;function getConfig(uint32 _eid, address _oapp, uint32 _configType) external view returns (bytes memory config);function isSupportedEid(uint32 _eid) external view returns (bool);// message libs of same major version are compatiblefunction version() external view returns (uint64 major, uint8 minor, uint8 endpointVersion);function messageLibType() external view returns (MessageLibType);}
1234567891011121314151617181920212223242526{"remappings": ["@layerzerolabs/oft-evm/=lib/devtools/packages/oft-evm/","@layerzerolabs/oapp-evm/=lib/devtools/packages/oapp-evm/","@layerzerolabs/lz-evm-protocol-v2/=lib/layerzero-v2/packages/layerzero-v2/evm/protocol/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","layerzero-v2/=lib/layerzero-v2/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer": {"enabled": true,"runs": 200},"metadata": {"useLiteralContent": false,"bytecodeHash": "ipfs","appendCBOR": true},"outputSelection": {"*": {"*": ["evm.bytecode",
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_lzEndpoint","type":"address"},{"internalType":"address","name":"_delegate","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"InvalidDelegate","type":"error"},{"inputs":[],"name":"InvalidEndpointCall","type":"error"},{"inputs":[],"name":"InvalidLocalDecimals","type":"error"},{"inputs":[{"internalType":"bytes","name":"options","type":"bytes"}],"name":"InvalidOptions","type":"error"},{"inputs":[],"name":"LzTokenUnavailable","type":"error"},{"inputs":[{"internalType":"uint32","name":"eid","type":"uint32"}],"name":"NoPeer","type":"error"},{"inputs":[{"internalType":"uint256","name":"msgValue","type":"uint256"}],"name":"NotEnoughNative","type":"error"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"OnlyEndpoint","type":"error"},{"inputs":[{"internalType":"uint32","name":"eid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"}],"name":"OnlyPeer","type":"error"},{"inputs":[],"name":"OnlySelf","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"SimulationResult","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountLD","type":"uint256"},{"internalType":"uint256","name":"minAmountLD","type":"uint256"}],"name":"SlippageExceeded","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint32","name":"eid","type":"uint32"},{"internalType":"uint16","name":"msgType","type":"uint16"},{"internalType":"bytes","name":"options","type":"bytes"}],"indexed":false,"internalType":"struct EnforcedOptionParam[]","name":"_enforcedOptions","type":"tuple[]"}],"name":"EnforcedOptionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"inspector","type":"address"}],"name":"MsgInspectorSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"guid","type":"bytes32"},{"indexed":false,"internalType":"uint32","name":"srcEid","type":"uint32"},{"indexed":true,"internalType":"address","name":"toAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountReceivedLD","type":"uint256"}],"name":"OFTReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"guid","type":"bytes32"},{"indexed":false,"internalType":"uint32","name":"dstEid","type":"uint32"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountSentLD","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountReceivedLD","type":"uint256"}],"name":"OFTSent","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":false,"internalType":"uint32","name":"eid","type":"uint32"},{"indexed":false,"internalType":"bytes32","name":"peer","type":"bytes32"}],"name":"PeerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"preCrimeAddress","type":"address"}],"name":"PreCrimeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"SEND","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SEND_AND_CALL","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"origin","type":"tuple"}],"name":"allowInitializePath","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"approvalRequired","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_eid","type":"uint32"},{"internalType":"uint16","name":"_msgType","type":"uint16"},{"internalType":"bytes","name":"_extraOptions","type":"bytes"}],"name":"combineOptions","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimalConversionRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endpoint","outputs":[{"internalType":"contract ILayerZeroEndpointV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"eid","type":"uint32"},{"internalType":"uint16","name":"msgType","type":"uint16"}],"name":"enforcedOptions","outputs":[{"internalType":"bytes","name":"enforcedOption","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"","type":"tuple"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"address","name":"_sender","type":"address"}],"name":"isComposeMsgSender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_eid","type":"uint32"},{"internalType":"bytes32","name":"_peer","type":"bytes32"}],"name":"isPeer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"_origin","type":"tuple"},{"internalType":"bytes32","name":"_guid","type":"bytes32"},{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"address","name":"_executor","type":"address"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"origin","type":"tuple"},{"internalType":"uint32","name":"dstEid","type":"uint32"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"bytes32","name":"guid","type":"bytes32"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address","name":"executor","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct InboundPacket[]","name":"_packets","type":"tuple[]"}],"name":"lzReceiveAndRevert","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"_origin","type":"tuple"},{"internalType":"bytes32","name":"_guid","type":"bytes32"},{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"address","name":"_executor","type":"address"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"name":"lzReceiveSimulate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"msgInspector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"nextNonce","outputs":[{"internalType":"uint64","name":"nonce","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oApp","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oAppVersion","outputs":[{"internalType":"uint64","name":"senderVersion","type":"uint64"},{"internalType":"uint64","name":"receiverVersion","type":"uint64"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"oftVersion","outputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"},{"internalType":"uint64","name":"version","type":"uint64"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"eid","type":"uint32"}],"name":"peers","outputs":[{"internalType":"bytes32","name":"peer","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preCrime","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"dstEid","type":"uint32"},{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"uint256","name":"amountLD","type":"uint256"},{"internalType":"uint256","name":"minAmountLD","type":"uint256"},{"internalType":"bytes","name":"extraOptions","type":"bytes"},{"internalType":"bytes","name":"composeMsg","type":"bytes"},{"internalType":"bytes","name":"oftCmd","type":"bytes"}],"internalType":"struct SendParam","name":"_sendParam","type":"tuple"}],"name":"quoteOFT","outputs":[{"components":[{"internalType":"uint256","name":"minAmountLD","type":"uint256"},{"internalType":"uint256","name":"maxAmountLD","type":"uint256"}],"internalType":"struct OFTLimit","name":"oftLimit","type":"tuple"},{"components":[{"internalType":"int256","name":"feeAmountLD","type":"int256"},{"internalType":"string","name":"description","type":"string"}],"internalType":"struct OFTFeeDetail[]","name":"oftFeeDetails","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"amountSentLD","type":"uint256"},{"internalType":"uint256","name":"amountReceivedLD","type":"uint256"}],"internalType":"struct OFTReceipt","name":"oftReceipt","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"dstEid","type":"uint32"},{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"uint256","name":"amountLD","type":"uint256"},{"internalType":"uint256","name":"minAmountLD","type":"uint256"},{"internalType":"bytes","name":"extraOptions","type":"bytes"},{"internalType":"bytes","name":"composeMsg","type":"bytes"},{"internalType":"bytes","name":"oftCmd","type":"bytes"}],"internalType":"struct SendParam","name":"_sendParam","type":"tuple"},{"internalType":"bool","name":"_payInLzToken","type":"bool"}],"name":"quoteSend","outputs":[{"components":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"lzTokenFee","type":"uint256"}],"internalType":"struct MessagingFee","name":"msgFee","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"dstEid","type":"uint32"},{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"uint256","name":"amountLD","type":"uint256"},{"internalType":"uint256","name":"minAmountLD","type":"uint256"},{"internalType":"bytes","name":"extraOptions","type":"bytes"},{"internalType":"bytes","name":"composeMsg","type":"bytes"},{"internalType":"bytes","name":"oftCmd","type":"bytes"}],"internalType":"struct SendParam","name":"_sendParam","type":"tuple"},{"components":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"lzTokenFee","type":"uint256"}],"internalType":"struct MessagingFee","name":"_fee","type":"tuple"},{"internalType":"address","name":"_refundAddress","type":"address"}],"name":"send","outputs":[{"components":[{"internalType":"bytes32","name":"guid","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"},{"components":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"lzTokenFee","type":"uint256"}],"internalType":"struct MessagingFee","name":"fee","type":"tuple"}],"internalType":"struct MessagingReceipt","name":"msgReceipt","type":"tuple"},{"components":[{"internalType":"uint256","name":"amountSentLD","type":"uint256"},{"internalType":"uint256","name":"amountReceivedLD","type":"uint256"}],"internalType":"struct OFTReceipt","name":"oftReceipt","type":"tuple"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_delegate","type":"address"}],"name":"setDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"eid","type":"uint32"},{"internalType":"uint16","name":"msgType","type":"uint16"},{"internalType":"bytes","name":"options","type":"bytes"}],"internalType":"struct EnforcedOptionParam[]","name":"_enforcedOptions","type":"tuple[]"}],"name":"setEnforcedOptions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_msgInspector","type":"address"}],"name":"setMsgInspector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_eid","type":"uint32"},{"internalType":"bytes32","name":"_peer","type":"bytes32"}],"name":"setPeer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_preCrime","type":"address"}],"name":"setPreCrime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sharedDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c060405234801561001057600080fd5b5060405161360b38038061360b83398101604081905261002f916102b0565b83838383838360128484818181818d6001600160a01b03811661006c57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61007581610181565b506001600160a01b0380831660805281166100a357604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b1580156100ea57600080fd5b505af11580156100fe573d6000803e3d6000fd5b50505050505050506101146101d160201b60201c565b60ff168360ff16101561013a576040516301e9714b60e41b815260040160405180910390fd5b61014560068461034a565b61015090600a61044d565b60a0525060089150610164905083826104ee565b50600961017182826104ee565b50505050505050505050506105ad565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126101fd57600080fd5b81516001600160401b0380821115610217576102176101d6565b604051601f8301601f19908116603f0116810190828211818310171561023f5761023f6101d6565b816040528381526020925086602085880101111561025c57600080fd5b600091505b8382101561027e5785820183015181830184015290820190610261565b6000602085830101528094505050505092915050565b80516001600160a01b03811681146102ab57600080fd5b919050565b600080600080608085870312156102c657600080fd5b84516001600160401b03808211156102dd57600080fd5b6102e9888389016101ec565b955060208701519150808211156102ff57600080fd5b5061030c878288016101ec565b93505061031b60408601610294565b915061032960608601610294565b905092959194509250565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561036357610363610334565b92915050565b600181815b808511156103a457816000190482111561038a5761038a610334565b8085161561039757918102915b93841c939080029061036e565b509250929050565b6000826103bb57506001610363565b816103c857506000610363565b81600181146103de57600281146103e857610404565b6001915050610363565b60ff8411156103f9576103f9610334565b50506001821b610363565b5060208310610133831016604e8410600b8410161715610427575081810a610363565b6104318383610369565b806000190482111561044557610445610334565b029392505050565b600061045c60ff8416836103ac565b9392505050565b600181811c9082168061047757607f821691505b60208210810361049757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156104e9576000816000526020600020601f850160051c810160208610156104c65750805b601f850160051c820191505b818110156104e5578281556001016104d2565b5050505b505050565b81516001600160401b03811115610507576105076101d6565b61051b816105158454610463565b8461049d565b602080601f83116001811461055057600084156105385750858301515b600019600386901b1c1916600185901b1785556104e5565b600085815260208120601f198616915b8281101561057f57888601518255948401946001909101908401610560565b508582101561059d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051612ff36106186000396000818161061e015281816119e001528181611a550152611c590152600081816104dd0152818161098d01528181610fdd01528181611254015281816115be01528181611d5101528181611ec10152611f780152612ff36000f3fe6080604052600436106102515760003560e01c80637d25a05e11610139578063bb0b6a53116100b6578063d045a0dc1161007a578063d045a0dc14610755578063d424388514610768578063dd62ed3e14610788578063f2fde38b146107ce578063fc0c546a14610461578063ff7bd03d146107ee57600080fd5b8063bb0b6a53146106b4578063bc70b354146106e1578063bd815db014610701578063c7c7f5b314610714578063ca5eb5e11461073557600080fd5b8063963efcaa116100fd578063963efcaa1461060c5780639f68b96414610640578063a9059cbb14610654578063b731ea0a14610674578063b98bd0701461069457600080fd5b80637d25a05e1461056a57806382413eac146105a5578063857749b0146105c55780638da5cb5b146105d957806395d89b41146105f757600080fd5b806323b872dd116101d25780635535d461116101965780635535d461146104745780635a0dfe4d146104945780635e280f11146104cb5780636fc1b31e146104ff57806370a082311461051f578063715018a61461055557600080fd5b806323b872dd146103d2578063313ce567146103f25780633400288b146104145780633b6f743b1461043457806352ae28791461046157600080fd5b8063134d4f2511610219578063134d4f251461032d578063156a0d0f1461035557806317442b701461037c57806318160ddd1461039e5780631f5e1334146103bd57600080fd5b806306fdde0314610256578063095ea7b3146102815780630d35b415146102b1578063111ecdad146102e057806313137d6514610318575b600080fd5b34801561026257600080fd5b5061026b61080e565b60405161027891906120f0565b60405180910390f35b34801561028d57600080fd5b506102a161029c366004612118565b6108a0565b6040519015158152602001610278565b3480156102bd57600080fd5b506102d16102cc36600461215c565b6108ba565b60405161027893929190612190565b3480156102ec57600080fd5b50600454610300906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b61032b610326366004612283565b61098b565b005b34801561033957600080fd5b50610342600281565b60405161ffff9091168152602001610278565b34801561036157600080fd5b506040805162b9270b60e21b81526001602082015201610278565b34801561038857600080fd5b5060408051600181526002602082015201610278565b3480156103aa57600080fd5b506007545b604051908152602001610278565b3480156103c957600080fd5b50610342600181565b3480156103de57600080fd5b506102a16103ed366004612322565b610a4b565b3480156103fe57600080fd5b5060125b60405160ff9091168152602001610278565b34801561042057600080fd5b5061032b61042f36600461237c565b610a71565b34801561044057600080fd5b5061045461044f3660046123a6565b610a87565b60405161027891906123f7565b34801561046d57600080fd5b5030610300565b34801561048057600080fd5b5061026b61048f366004612420565b610aee565b3480156104a057600080fd5b506102a16104af36600461237c565b63ffffffff919091166000908152600160205260409020541490565b3480156104d757600080fd5b506103007f000000000000000000000000000000000000000000000000000000000000000081565b34801561050b57600080fd5b5061032b61051a366004612453565b610b93565b34801561052b57600080fd5b506103af61053a366004612453565b6001600160a01b031660009081526005602052604090205490565b34801561056157600080fd5b5061032b610bf0565b34801561057657600080fd5b5061058d61058536600461237c565b600092915050565b6040516001600160401b039091168152602001610278565b3480156105b157600080fd5b506102a16105c0366004612470565b610c04565b3480156105d157600080fd5b506006610402565b3480156105e557600080fd5b506000546001600160a01b0316610300565b34801561060357600080fd5b5061026b610c19565b34801561061857600080fd5b506103af7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064c57600080fd5b5060006102a1565b34801561066057600080fd5b506102a161066f366004612118565b610c28565b34801561068057600080fd5b50600254610300906001600160a01b031681565b3480156106a057600080fd5b5061032b6106af36600461251a565b610c36565b3480156106c057600080fd5b506103af6106cf36600461255b565b60016020526000908152604090205481565b3480156106ed57600080fd5b5061026b6106fc366004612576565b610c50565b61032b61070f36600461251a565b610df8565b6107276107223660046125d6565b610f82565b604051610278929190612643565b34801561074157600080fd5b5061032b610750366004612453565b610fb6565b61032b610763366004612283565b61103c565b34801561077457600080fd5b5061032b610783366004612453565b61106b565b34801561079457600080fd5b506103af6107a3366004612695565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156107da57600080fd5b5061032b6107e9366004612453565b6110c1565b3480156107fa57600080fd5b506102a16108093660046126c3565b6110ff565b60606008805461081d906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610849906126df565b80156108965780601f1061086b57610100808354040283529160200191610896565b820191906000526020600020905b81548152906001019060200180831161087957829003601f168201915b5050505050905090565b6000336108ae818585611135565b60019150505b92915050565b604080518082019091526000808252602082015260606108ed604051806040016040528060008152602001600081525090565b60408051808201825260008082526001600160401b03602080840182905284518381529081019094529195509182610948565b6040805180820190915260008152606060208201528152602001906001900390816109205790505b50935060008061096d604089013560608a013561096860208c018c61255b565b611147565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146109db576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b602087018035906109f5906109f0908a61255b565b611183565b14610a3357610a07602088018861255b565b60405163309afaf360e21b815263ffffffff9091166004820152602088013560248201526044016109d2565b610a42878787878787876111bf565b50505050505050565b600033610a59858285611326565b610a648585856113a4565b60019150505b9392505050565b610a79611403565b610a838282611430565b5050565b60408051808201909152600080825260208201526000610ab760408501356060860135610968602088018861255b565b915050600080610ac78684611485565b9092509050610ae4610adc602088018861255b565b8383886115a8565b9695505050505050565b600360209081526000928352604080842090915290825290208054610b12906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3e906126df565b8015610b8b5780601f10610b6057610100808354040283529160200191610b8b565b820191906000526020600020905b815481529060010190602001808311610b6e57829003601f168201915b505050505081565b610b9b611403565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610bf8611403565b610c026000611689565b565b6001600160a01b03811630145b949350505050565b60606009805461081d906126df565b6000336108ae8185856113a4565b610c3e611403565b610a83610c4b82846127ca565b6116d9565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610c84906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb0906126df565b8015610cfd5780601f10610cd257610100808354040283529160200191610cfd565b820191906000526020600020905b815481529060010190602001808311610ce057829003601f168201915b505050505090508051600003610d4d5783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610c119350505050565b6000839003610d5d579050610c11565b60028310610ddb57610da484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117e092505050565b80610db284600281886128df565b604051602001610dc493929190612909565b604051602081830303815290604052915050610c11565b8383604051639a6d49cd60e01b81526004016109d292919061295a565b60005b81811015610f015736838383818110610e1657610e1661296e565b9050602002810190610e289190612984565b9050610e5b610e3a602083018361255b565b602083013563ffffffff919091166000908152600160205260409020541490565b610e655750610ef9565b3063d045a0dc60c08301358360a0810135610e846101008301836129a5565b610e95610100890160e08a01612453565b610ea36101208a018a6129a5565b6040518963ffffffff1660e01b8152600401610ec59796959493929190612a00565b6000604051808303818588803b158015610ede57600080fd5b505af1158015610ef2573d6000803e3d6000fd5b5050505050505b600101610dfb565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f40573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f689190810190612a86565b604051638351eea760e01b81526004016109d291906120f0565b610f8a612059565b6040805180820190915260008082526020820152610fa985858561180c565b915091505b935093915050565b610fbe611403565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561102157600080fd5b505af1158015611035573d6000803e3d6000fd5b5050505050565b33301461105c5760405163029a949d60e31b815260040160405180910390fd5b610a4287878787878787610a33565b611073611403565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610be5565b6110c9611403565b6001600160a01b0381166110f357604051631e4fbdf760e01b8152600060048201526024016109d2565b6110fc81611689565b50565b6000602082018035906001908390611117908661255b565b63ffffffff1681526020810191909152604001600020541492915050565b6111428383836001611907565b505050565b600080611153856119dc565b915081905083811015610fae576040516371c4efed60e01b815260048101829052602481018590526044016109d2565b63ffffffff8116600090815260016020526040812054806108b45760405163f6ff4fb760e01b815263ffffffff841660048201526024016109d2565b60006111d16111ce8787611a13565b90565b905060006111fd826111eb6111e68a8a611a2b565b611a4e565b6111f860208d018d61255b565b611a83565b905060288611156112c457600061123a61121d60608c0160408d01612af3565b61122a60208d018d61255b565b846112358c8c611aab565b611af6565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906112909086908d906000908790600401612b10565b600060405180830381600087803b1580156112aa57600080fd5b505af11580156112be573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c6112fd60208d018d61255b565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6001600160a01b03838116600090815260066020908152604080832093861683529290522054600019811461139e578181101561138f57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016109d2565b61139e84848484036000611907565b50505050565b6001600160a01b0383166113ce57604051634b637e8f60e11b8152600060048201526024016109d2565b6001600160a01b0382166113f85760405163ec442f0560e01b8152600060048201526024016109d2565b611142838383611b28565b6000546001600160a01b03163314610c025760405163118cdaa760e01b81523360048201526024016109d2565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b60608060006114e2856020013561149b86611c52565b6114a860a08901896129a5565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c7e92505050565b90935090506000816114f55760016114f8565b60025b905061151861150a602088018861255b565b826106fc60808a018a6129a5565b6004549093506001600160a01b0316801561159e5760405163043a78eb60e01b81526001600160a01b0382169063043a78eb9061155b9088908890600401612b41565b602060405180830381865afa158015611578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159c9190612b66565b505b5050509250929050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161160b89611183565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611640929190612b83565b6040805180830381865afa15801561165c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116809190612c2c565b95945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b81518110156117b05761170b8282815181106116fa576116fa61296e565b6020026020010151604001516117e0565b81818151811061171d5761171d61296e565b6020026020010151604001516003600084848151811061173f5761173f61296e565b60200260200101516000015163ffffffff1663ffffffff16815260200190815260200160002060008484815181106117795761177961296e565b60200260200101516020015161ffff1661ffff16815260200190815260200160002090816117a79190612c98565b506001016116dc565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610be59190612d57565b600281015161ffff8116600314610a835781604051639a6d49cd60e01b81526004016109d291906120f0565b611814612059565b604080518082019091526000808252602082015260008061184b33604089013560608a013561184660208c018c61255b565b611cf8565b9150915060008061185c8984611485565b909250905061188861187160208b018b61255b565b8383611882368d90038d018d612de2565b8b611d1e565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a906118d6908d018d61255b565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6001600160a01b0384166119315760405163e602df0560e01b8152600060048201526024016109d2565b6001600160a01b03831661195b57604051634a1406b160e11b8152600060048201526024016109d2565b6001600160a01b038085166000908152600660209081526040808320938716835292905220829055801561139e57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516119ce91815260200190565b60405180910390a350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000611a098184612e2a565b6108b49190612e4c565b6000611a2260208284866128df565b610a6a91612e63565b6000611a3b6028602084866128df565b611a4491612e81565b60c01c9392505050565b60006108b47f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416612e4c565b60006001600160a01b038416611a995761dead93505b611aa38484611e29565b509092915050565b6060611aba82602881866128df565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b606084848484604051602001611b0f9493929190612eb1565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611b53578060076000828254611b489190612f00565b90915550611bc59050565b6001600160a01b03831660009081526005602052604090205481811015611ba65760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016109d2565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216611be157600780548290039055611c00565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c4591815260200190565b60405180910390a3505050565b60006108b47f000000000000000000000000000000000000000000000000000000000000000083612e2a565b8051606090151580611cc7578484604051602001611cb392919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611cee565b84843385604051602001611cde9493929190612f13565b6040516020818303038152906040525b9150935093915050565b600080611d06858585611147565b9092509050611d158683611e5f565b94509492505050565b611d26612059565b6000611d358460000151611e95565b602085015190915015611d4f57611d4f8460200151611ebd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611d9f8c611183565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611ddb929190612b83565b60806040518083038185885af1158015611df9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e1e9190612f56565b979650505050505050565b6001600160a01b038216611e535760405163ec442f0560e01b8152600060048201526024016109d2565b610a8360008383611b28565b6001600160a01b038216611e8957604051634b637e8f60e11b8152600060048201526024016109d2565b610a8382600083611b28565b6000813414611eb9576040516304fb820960e51b81523460048201526024016109d2565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f419190612fa0565b90506001600160a01b038116611f6a576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610a8396881695899361139e93889360009283929091839182885af18061200b576040513d6000823e3d81fd5b50506000513d91508115612023578060011415612030565b6001600160a01b0384163b155b1561139e57604051635274afe760e01b81526001600160a01b03851660048201526024016109d2565b60405180606001604052806000801916815260200160006001600160401b0316815260200161209b604051806040016040528060008152602001600081525090565b905290565b60005b838110156120bb5781810151838201526020016120a3565b50506000910152565b600081518084526120dc8160208601602086016120a0565b601f01601f19169290920160200192915050565b602081526000610a6a60208301846120c4565b6001600160a01b03811681146110fc57600080fd5b6000806040838503121561212b57600080fd5b823561213681612103565b946020939093013593505050565b600060e0828403121561215657600080fd5b50919050565b60006020828403121561216e57600080fd5b81356001600160401b0381111561218457600080fd5b610c1184828501612144565b8351815260208085015190820152600060a08201604060a0604085015281865180845260c08601915060c08160051b8701019350602080890160005b8381101561220b5788870360bf190185528151805188528301518388018790526121f8878901826120c4565b97505093820193908201906001016121cc565b50508751606088015250505060208501516080850152509050610c11565b60006060828403121561215657600080fd5b60008083601f84011261224d57600080fd5b5081356001600160401b0381111561226457600080fd5b60208301915083602082850101111561227c57600080fd5b9250929050565b600080600080600080600060e0888a03121561229e57600080fd5b6122a88989612229565b96506060880135955060808801356001600160401b03808211156122cb57600080fd5b6122d78b838c0161223b565b909750955060a08a013591506122ec82612103565b90935060c0890135908082111561230257600080fd5b5061230f8a828b0161223b565b989b979a50959850939692959293505050565b60008060006060848603121561233757600080fd5b833561234281612103565b9250602084013561235281612103565b929592945050506040919091013590565b803563ffffffff8116811461237757600080fd5b919050565b6000806040838503121561238f57600080fd5b61213683612363565b80151581146110fc57600080fd5b600080604083850312156123b957600080fd5b82356001600160401b038111156123cf57600080fd5b6123db85828601612144565b92505060208301356123ec81612398565b809150509250929050565b8151815260208083015190820152604081016108b4565b803561ffff8116811461237757600080fd5b6000806040838503121561243357600080fd5b61243c83612363565b915061244a6020840161240e565b90509250929050565b60006020828403121561246557600080fd5b8135610a6a81612103565b60008060008060a0858703121561248657600080fd5b6124908686612229565b935060608501356001600160401b038111156124ab57600080fd5b6124b78782880161223b565b90945092505060808501356124cb81612103565b939692955090935050565b60008083601f8401126124e857600080fd5b5081356001600160401b038111156124ff57600080fd5b6020830191508360208260051b850101111561227c57600080fd5b6000806020838503121561252d57600080fd5b82356001600160401b0381111561254357600080fd5b61254f858286016124d6565b90969095509350505050565b60006020828403121561256d57600080fd5b610a6a82612363565b6000806000806060858703121561258c57600080fd5b61259585612363565b93506125a36020860161240e565b925060408501356001600160401b038111156125be57600080fd5b6125ca8782880161223b565b95989497509550505050565b600080600083850360808112156125ec57600080fd5b84356001600160401b0381111561260257600080fd5b61260e87828801612144565b9450506040601f198201121561262357600080fd5b50602084019150606084013561263881612103565b809150509250925092565b600060c082019050835182526001600160401b036020850151166020830152604084015161267e604084018280518252602090810151910152565b5082516080830152602083015160a0830152610a6a565b600080604083850312156126a857600080fd5b82356126b381612103565b915060208301356123ec81612103565b6000606082840312156126d557600080fd5b610a6a8383612229565b600181811c908216806126f357607f821691505b60208210810361215657634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561274b5761274b612713565b60405290565b604080519081016001600160401b038111828210171561274b5761274b612713565b604051601f8201601f191681016001600160401b038111828210171561279b5761279b612713565b604052919050565b60006001600160401b038211156127bc576127bc612713565b50601f01601f191660200190565b60006001600160401b03808411156127e4576127e4612713565b8360051b60206127f5818301612773565b86815291850191818101903684111561280d57600080fd5b865b848110156128d3578035868111156128275760008081fd5b8801606036829003121561283b5760008081fd5b612843612729565b61284c82612363565b815261285986830161240e565b86820152604080830135898111156128715760008081fd5b929092019136601f8401126128865760008081fd5b8235612899612894826127a3565b612773565b81815236898387010111156128ae5760008081fd5b818986018a83013760009181018901919091529082015284525091830191830161280f565b50979650505050505050565b600080858511156128ef57600080fd5b838611156128fc57600080fd5b5050820193919092039150565b6000845161291b8184602089016120a0565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610c11602083018486612931565b634e487b7160e01b600052603260045260246000fd5b6000823561013e1983360301811261299b57600080fd5b9190910192915050565b6000808335601e198436030181126129bc57600080fd5b8301803591506001600160401b038211156129d657600080fd5b60200191503681900382131561227c57600080fd5b6001600160401b03811681146110fc57600080fd5b63ffffffff612a0e89612363565b1681526020880135602082015260006040890135612a2b816129eb565b6001600160401b03811660408401525087606083015260e06080830152612a5660e083018789612931565b6001600160a01b03861660a084015282810360c0840152612a78818587612931565b9a9950505050505050505050565b600060208284031215612a9857600080fd5b81516001600160401b03811115612aae57600080fd5b8201601f81018413612abf57600080fd5b8051612acd612894826127a3565b818152856020838501011115612ae257600080fd5b6116808260208301602086016120a0565b600060208284031215612b0557600080fd5b8135610a6a816129eb565b60018060a01b038516815283602082015261ffff83166040820152608060608201526000610ae460808301846120c4565b604081526000612b5460408301856120c4565b828103602084015261168081856120c4565b600060208284031215612b7857600080fd5b8151610a6a81612398565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152612bb960e08401826120c4565b90506060850151603f198483030160a0850152612bd682826120c4565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215612c0e57600080fd5b612c16612751565b9050815181526020820151602082015292915050565b600060408284031215612c3e57600080fd5b610a6a8383612bfc565b601f821115611142576000816000526020600020601f850160051c81016020861015612c715750805b601f850160051c820191505b81811015612c9057828155600101612c7d565b505050505050565b81516001600160401b03811115612cb157612cb1612713565b612cc581612cbf84546126df565b84612c48565b602080601f831160018114612cfa5760008415612ce25750858301515b600019600386901b1c1916600185901b178555612c90565b600085815260208120601f198616915b82811015612d2957888601518255948401946001909101908401612d0a565b5085821015612d475787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015612dd457888303603f190185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612dc0818601836120c4565b968901969450505090860190600101612d80565b509098975050505050505050565b600060408284031215612df457600080fd5b612dfc612751565b82358152602083013560208201528091505092915050565b634e487b7160e01b600052601160045260246000fd5b600082612e4757634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108b4576108b4612e14565b803560208310156108b457600019602084900360031b1b1692915050565b6001600160c01b03198135818116916008851015612ea95780818660080360031b1b83161692505b505092915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c82015260008251612ef081602c8501602087016120a0565b91909101602c0195945050505050565b808201808211156108b4576108b4612e14565b8481526001600160401b0360c01b8460c01b16602082015282602882015260008251612f468160488501602087016120a0565b9190910160480195945050505050565b600060808284031215612f6857600080fd5b612f70612729565b825181526020830151612f82816129eb565b6020820152612f948460408501612bfc565b60408201529392505050565b600060208284031215612fb257600080fd5b8151610a6a8161210356fea2646970667358221220eba3b4b5a2f52f3a20bb62dba366151a8feec4e3776f5d2ad929cd4457fca9bf64736f6c63430008190033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b000000000000000000000000b1ade4d54a1dbff321ea5db9e161e44f9fd08d2c0000000000000000000000000000000000000000000000000000000000000006506f74696f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006504f54494f4e0000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102515760003560e01c80637d25a05e11610139578063bb0b6a53116100b6578063d045a0dc1161007a578063d045a0dc14610755578063d424388514610768578063dd62ed3e14610788578063f2fde38b146107ce578063fc0c546a14610461578063ff7bd03d146107ee57600080fd5b8063bb0b6a53146106b4578063bc70b354146106e1578063bd815db014610701578063c7c7f5b314610714578063ca5eb5e11461073557600080fd5b8063963efcaa116100fd578063963efcaa1461060c5780639f68b96414610640578063a9059cbb14610654578063b731ea0a14610674578063b98bd0701461069457600080fd5b80637d25a05e1461056a57806382413eac146105a5578063857749b0146105c55780638da5cb5b146105d957806395d89b41146105f757600080fd5b806323b872dd116101d25780635535d461116101965780635535d461146104745780635a0dfe4d146104945780635e280f11146104cb5780636fc1b31e146104ff57806370a082311461051f578063715018a61461055557600080fd5b806323b872dd146103d2578063313ce567146103f25780633400288b146104145780633b6f743b1461043457806352ae28791461046157600080fd5b8063134d4f2511610219578063134d4f251461032d578063156a0d0f1461035557806317442b701461037c57806318160ddd1461039e5780631f5e1334146103bd57600080fd5b806306fdde0314610256578063095ea7b3146102815780630d35b415146102b1578063111ecdad146102e057806313137d6514610318575b600080fd5b34801561026257600080fd5b5061026b61080e565b60405161027891906120f0565b60405180910390f35b34801561028d57600080fd5b506102a161029c366004612118565b6108a0565b6040519015158152602001610278565b3480156102bd57600080fd5b506102d16102cc36600461215c565b6108ba565b60405161027893929190612190565b3480156102ec57600080fd5b50600454610300906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b61032b610326366004612283565b61098b565b005b34801561033957600080fd5b50610342600281565b60405161ffff9091168152602001610278565b34801561036157600080fd5b506040805162b9270b60e21b81526001602082015201610278565b34801561038857600080fd5b5060408051600181526002602082015201610278565b3480156103aa57600080fd5b506007545b604051908152602001610278565b3480156103c957600080fd5b50610342600181565b3480156103de57600080fd5b506102a16103ed366004612322565b610a4b565b3480156103fe57600080fd5b5060125b60405160ff9091168152602001610278565b34801561042057600080fd5b5061032b61042f36600461237c565b610a71565b34801561044057600080fd5b5061045461044f3660046123a6565b610a87565b60405161027891906123f7565b34801561046d57600080fd5b5030610300565b34801561048057600080fd5b5061026b61048f366004612420565b610aee565b3480156104a057600080fd5b506102a16104af36600461237c565b63ffffffff919091166000908152600160205260409020541490565b3480156104d757600080fd5b506103007f0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b81565b34801561050b57600080fd5b5061032b61051a366004612453565b610b93565b34801561052b57600080fd5b506103af61053a366004612453565b6001600160a01b031660009081526005602052604090205490565b34801561056157600080fd5b5061032b610bf0565b34801561057657600080fd5b5061058d61058536600461237c565b600092915050565b6040516001600160401b039091168152602001610278565b3480156105b157600080fd5b506102a16105c0366004612470565b610c04565b3480156105d157600080fd5b506006610402565b3480156105e557600080fd5b506000546001600160a01b0316610300565b34801561060357600080fd5b5061026b610c19565b34801561061857600080fd5b506103af7f000000000000000000000000000000000000000000000000000000e8d4a5100081565b34801561064c57600080fd5b5060006102a1565b34801561066057600080fd5b506102a161066f366004612118565b610c28565b34801561068057600080fd5b50600254610300906001600160a01b031681565b3480156106a057600080fd5b5061032b6106af36600461251a565b610c36565b3480156106c057600080fd5b506103af6106cf36600461255b565b60016020526000908152604090205481565b3480156106ed57600080fd5b5061026b6106fc366004612576565b610c50565b61032b61070f36600461251a565b610df8565b6107276107223660046125d6565b610f82565b604051610278929190612643565b34801561074157600080fd5b5061032b610750366004612453565b610fb6565b61032b610763366004612283565b61103c565b34801561077457600080fd5b5061032b610783366004612453565b61106b565b34801561079457600080fd5b506103af6107a3366004612695565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156107da57600080fd5b5061032b6107e9366004612453565b6110c1565b3480156107fa57600080fd5b506102a16108093660046126c3565b6110ff565b60606008805461081d906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610849906126df565b80156108965780601f1061086b57610100808354040283529160200191610896565b820191906000526020600020905b81548152906001019060200180831161087957829003601f168201915b5050505050905090565b6000336108ae818585611135565b60019150505b92915050565b604080518082019091526000808252602082015260606108ed604051806040016040528060008152602001600081525090565b60408051808201825260008082526001600160401b03602080840182905284518381529081019094529195509182610948565b6040805180820190915260008152606060208201528152602001906001900390816109205790505b50935060008061096d604089013560608a013561096860208c018c61255b565b611147565b60408051808201909152918252602082015296989597505050505050565b7f0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b6001600160a01b031633146109db576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b602087018035906109f5906109f0908a61255b565b611183565b14610a3357610a07602088018861255b565b60405163309afaf360e21b815263ffffffff9091166004820152602088013560248201526044016109d2565b610a42878787878787876111bf565b50505050505050565b600033610a59858285611326565b610a648585856113a4565b60019150505b9392505050565b610a79611403565b610a838282611430565b5050565b60408051808201909152600080825260208201526000610ab760408501356060860135610968602088018861255b565b915050600080610ac78684611485565b9092509050610ae4610adc602088018861255b565b8383886115a8565b9695505050505050565b600360209081526000928352604080842090915290825290208054610b12906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3e906126df565b8015610b8b5780601f10610b6057610100808354040283529160200191610b8b565b820191906000526020600020905b815481529060010190602001808311610b6e57829003601f168201915b505050505081565b610b9b611403565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610bf8611403565b610c026000611689565b565b6001600160a01b03811630145b949350505050565b60606009805461081d906126df565b6000336108ae8185856113a4565b610c3e611403565b610a83610c4b82846127ca565b6116d9565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610c84906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb0906126df565b8015610cfd5780601f10610cd257610100808354040283529160200191610cfd565b820191906000526020600020905b815481529060010190602001808311610ce057829003601f168201915b505050505090508051600003610d4d5783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610c119350505050565b6000839003610d5d579050610c11565b60028310610ddb57610da484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117e092505050565b80610db284600281886128df565b604051602001610dc493929190612909565b604051602081830303815290604052915050610c11565b8383604051639a6d49cd60e01b81526004016109d292919061295a565b60005b81811015610f015736838383818110610e1657610e1661296e565b9050602002810190610e289190612984565b9050610e5b610e3a602083018361255b565b602083013563ffffffff919091166000908152600160205260409020541490565b610e655750610ef9565b3063d045a0dc60c08301358360a0810135610e846101008301836129a5565b610e95610100890160e08a01612453565b610ea36101208a018a6129a5565b6040518963ffffffff1660e01b8152600401610ec59796959493929190612a00565b6000604051808303818588803b158015610ede57600080fd5b505af1158015610ef2573d6000803e3d6000fd5b5050505050505b600101610dfb565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f40573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f689190810190612a86565b604051638351eea760e01b81526004016109d291906120f0565b610f8a612059565b6040805180820190915260008082526020820152610fa985858561180c565b915091505b935093915050565b610fbe611403565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b169063ca5eb5e190602401600060405180830381600087803b15801561102157600080fd5b505af1158015611035573d6000803e3d6000fd5b5050505050565b33301461105c5760405163029a949d60e31b815260040160405180910390fd5b610a4287878787878787610a33565b611073611403565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610be5565b6110c9611403565b6001600160a01b0381166110f357604051631e4fbdf760e01b8152600060048201526024016109d2565b6110fc81611689565b50565b6000602082018035906001908390611117908661255b565b63ffffffff1681526020810191909152604001600020541492915050565b6111428383836001611907565b505050565b600080611153856119dc565b915081905083811015610fae576040516371c4efed60e01b815260048101829052602481018590526044016109d2565b63ffffffff8116600090815260016020526040812054806108b45760405163f6ff4fb760e01b815263ffffffff841660048201526024016109d2565b60006111d16111ce8787611a13565b90565b905060006111fd826111eb6111e68a8a611a2b565b611a4e565b6111f860208d018d61255b565b611a83565b905060288611156112c457600061123a61121d60608c0160408d01612af3565b61122a60208d018d61255b565b846112358c8c611aab565b611af6565b604051633e5ac80960e11b81529091506001600160a01b037f0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b1690637cb59012906112909086908d906000908790600401612b10565b600060405180830381600087803b1580156112aa57600080fd5b505af11580156112be573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c6112fd60208d018d61255b565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6001600160a01b03838116600090815260066020908152604080832093861683529290522054600019811461139e578181101561138f57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016109d2565b61139e84848484036000611907565b50505050565b6001600160a01b0383166113ce57604051634b637e8f60e11b8152600060048201526024016109d2565b6001600160a01b0382166113f85760405163ec442f0560e01b8152600060048201526024016109d2565b611142838383611b28565b6000546001600160a01b03163314610c025760405163118cdaa760e01b81523360048201526024016109d2565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b60608060006114e2856020013561149b86611c52565b6114a860a08901896129a5565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c7e92505050565b90935090506000816114f55760016114f8565b60025b905061151861150a602088018861255b565b826106fc60808a018a6129a5565b6004549093506001600160a01b0316801561159e5760405163043a78eb60e01b81526001600160a01b0382169063043a78eb9061155b9088908890600401612b41565b602060405180830381865afa158015611578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159c9190612b66565b505b5050509250929050565b60408051808201909152600080825260208201527f0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b6001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161160b89611183565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611640929190612b83565b6040805180830381865afa15801561165c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116809190612c2c565b95945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b81518110156117b05761170b8282815181106116fa576116fa61296e565b6020026020010151604001516117e0565b81818151811061171d5761171d61296e565b6020026020010151604001516003600084848151811061173f5761173f61296e565b60200260200101516000015163ffffffff1663ffffffff16815260200190815260200160002060008484815181106117795761177961296e565b60200260200101516020015161ffff1661ffff16815260200190815260200160002090816117a79190612c98565b506001016116dc565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610be59190612d57565b600281015161ffff8116600314610a835781604051639a6d49cd60e01b81526004016109d291906120f0565b611814612059565b604080518082019091526000808252602082015260008061184b33604089013560608a013561184660208c018c61255b565b611cf8565b9150915060008061185c8984611485565b909250905061188861187160208b018b61255b565b8383611882368d90038d018d612de2565b8b611d1e565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a906118d6908d018d61255b565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6001600160a01b0384166119315760405163e602df0560e01b8152600060048201526024016109d2565b6001600160a01b03831661195b57604051634a1406b160e11b8152600060048201526024016109d2565b6001600160a01b038085166000908152600660209081526040808320938716835292905220829055801561139e57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516119ce91815260200190565b60405180910390a350505050565b60007f000000000000000000000000000000000000000000000000000000e8d4a51000611a098184612e2a565b6108b49190612e4c565b6000611a2260208284866128df565b610a6a91612e63565b6000611a3b6028602084866128df565b611a4491612e81565b60c01c9392505050565b60006108b47f000000000000000000000000000000000000000000000000000000e8d4a510006001600160401b038416612e4c565b60006001600160a01b038416611a995761dead93505b611aa38484611e29565b509092915050565b6060611aba82602881866128df565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b606084848484604051602001611b0f9493929190612eb1565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611b53578060076000828254611b489190612f00565b90915550611bc59050565b6001600160a01b03831660009081526005602052604090205481811015611ba65760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016109d2565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216611be157600780548290039055611c00565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c4591815260200190565b60405180910390a3505050565b60006108b47f000000000000000000000000000000000000000000000000000000e8d4a5100083612e2a565b8051606090151580611cc7578484604051602001611cb392919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611cee565b84843385604051602001611cde9493929190612f13565b6040516020818303038152906040525b9150935093915050565b600080611d06858585611147565b9092509050611d158683611e5f565b94509492505050565b611d26612059565b6000611d358460000151611e95565b602085015190915015611d4f57611d4f8460200151611ebd565b7f0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b6001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611d9f8c611183565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611ddb929190612b83565b60806040518083038185885af1158015611df9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e1e9190612f56565b979650505050505050565b6001600160a01b038216611e535760405163ec442f0560e01b8152600060048201526024016109d2565b610a8360008383611b28565b6001600160a01b038216611e8957604051634b637e8f60e11b8152600060048201526024016109d2565b610a8382600083611b28565b6000813414611eb9576040516304fb820960e51b81523460048201526024016109d2565b5090565b60007f0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b6001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f419190612fa0565b90506001600160a01b038116611f6a576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b6001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610a8396881695899361139e93889360009283929091839182885af18061200b576040513d6000823e3d81fd5b50506000513d91508115612023578060011415612030565b6001600160a01b0384163b155b1561139e57604051635274afe760e01b81526001600160a01b03851660048201526024016109d2565b60405180606001604052806000801916815260200160006001600160401b0316815260200161209b604051806040016040528060008152602001600081525090565b905290565b60005b838110156120bb5781810151838201526020016120a3565b50506000910152565b600081518084526120dc8160208601602086016120a0565b601f01601f19169290920160200192915050565b602081526000610a6a60208301846120c4565b6001600160a01b03811681146110fc57600080fd5b6000806040838503121561212b57600080fd5b823561213681612103565b946020939093013593505050565b600060e0828403121561215657600080fd5b50919050565b60006020828403121561216e57600080fd5b81356001600160401b0381111561218457600080fd5b610c1184828501612144565b8351815260208085015190820152600060a08201604060a0604085015281865180845260c08601915060c08160051b8701019350602080890160005b8381101561220b5788870360bf190185528151805188528301518388018790526121f8878901826120c4565b97505093820193908201906001016121cc565b50508751606088015250505060208501516080850152509050610c11565b60006060828403121561215657600080fd5b60008083601f84011261224d57600080fd5b5081356001600160401b0381111561226457600080fd5b60208301915083602082850101111561227c57600080fd5b9250929050565b600080600080600080600060e0888a03121561229e57600080fd5b6122a88989612229565b96506060880135955060808801356001600160401b03808211156122cb57600080fd5b6122d78b838c0161223b565b909750955060a08a013591506122ec82612103565b90935060c0890135908082111561230257600080fd5b5061230f8a828b0161223b565b989b979a50959850939692959293505050565b60008060006060848603121561233757600080fd5b833561234281612103565b9250602084013561235281612103565b929592945050506040919091013590565b803563ffffffff8116811461237757600080fd5b919050565b6000806040838503121561238f57600080fd5b61213683612363565b80151581146110fc57600080fd5b600080604083850312156123b957600080fd5b82356001600160401b038111156123cf57600080fd5b6123db85828601612144565b92505060208301356123ec81612398565b809150509250929050565b8151815260208083015190820152604081016108b4565b803561ffff8116811461237757600080fd5b6000806040838503121561243357600080fd5b61243c83612363565b915061244a6020840161240e565b90509250929050565b60006020828403121561246557600080fd5b8135610a6a81612103565b60008060008060a0858703121561248657600080fd5b6124908686612229565b935060608501356001600160401b038111156124ab57600080fd5b6124b78782880161223b565b90945092505060808501356124cb81612103565b939692955090935050565b60008083601f8401126124e857600080fd5b5081356001600160401b038111156124ff57600080fd5b6020830191508360208260051b850101111561227c57600080fd5b6000806020838503121561252d57600080fd5b82356001600160401b0381111561254357600080fd5b61254f858286016124d6565b90969095509350505050565b60006020828403121561256d57600080fd5b610a6a82612363565b6000806000806060858703121561258c57600080fd5b61259585612363565b93506125a36020860161240e565b925060408501356001600160401b038111156125be57600080fd5b6125ca8782880161223b565b95989497509550505050565b600080600083850360808112156125ec57600080fd5b84356001600160401b0381111561260257600080fd5b61260e87828801612144565b9450506040601f198201121561262357600080fd5b50602084019150606084013561263881612103565b809150509250925092565b600060c082019050835182526001600160401b036020850151166020830152604084015161267e604084018280518252602090810151910152565b5082516080830152602083015160a0830152610a6a565b600080604083850312156126a857600080fd5b82356126b381612103565b915060208301356123ec81612103565b6000606082840312156126d557600080fd5b610a6a8383612229565b600181811c908216806126f357607f821691505b60208210810361215657634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561274b5761274b612713565b60405290565b604080519081016001600160401b038111828210171561274b5761274b612713565b604051601f8201601f191681016001600160401b038111828210171561279b5761279b612713565b604052919050565b60006001600160401b038211156127bc576127bc612713565b50601f01601f191660200190565b60006001600160401b03808411156127e4576127e4612713565b8360051b60206127f5818301612773565b86815291850191818101903684111561280d57600080fd5b865b848110156128d3578035868111156128275760008081fd5b8801606036829003121561283b5760008081fd5b612843612729565b61284c82612363565b815261285986830161240e565b86820152604080830135898111156128715760008081fd5b929092019136601f8401126128865760008081fd5b8235612899612894826127a3565b612773565b81815236898387010111156128ae5760008081fd5b818986018a83013760009181018901919091529082015284525091830191830161280f565b50979650505050505050565b600080858511156128ef57600080fd5b838611156128fc57600080fd5b5050820193919092039150565b6000845161291b8184602089016120a0565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610c11602083018486612931565b634e487b7160e01b600052603260045260246000fd5b6000823561013e1983360301811261299b57600080fd5b9190910192915050565b6000808335601e198436030181126129bc57600080fd5b8301803591506001600160401b038211156129d657600080fd5b60200191503681900382131561227c57600080fd5b6001600160401b03811681146110fc57600080fd5b63ffffffff612a0e89612363565b1681526020880135602082015260006040890135612a2b816129eb565b6001600160401b03811660408401525087606083015260e06080830152612a5660e083018789612931565b6001600160a01b03861660a084015282810360c0840152612a78818587612931565b9a9950505050505050505050565b600060208284031215612a9857600080fd5b81516001600160401b03811115612aae57600080fd5b8201601f81018413612abf57600080fd5b8051612acd612894826127a3565b818152856020838501011115612ae257600080fd5b6116808260208301602086016120a0565b600060208284031215612b0557600080fd5b8135610a6a816129eb565b60018060a01b038516815283602082015261ffff83166040820152608060608201526000610ae460808301846120c4565b604081526000612b5460408301856120c4565b828103602084015261168081856120c4565b600060208284031215612b7857600080fd5b8151610a6a81612398565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152612bb960e08401826120c4565b90506060850151603f198483030160a0850152612bd682826120c4565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215612c0e57600080fd5b612c16612751565b9050815181526020820151602082015292915050565b600060408284031215612c3e57600080fd5b610a6a8383612bfc565b601f821115611142576000816000526020600020601f850160051c81016020861015612c715750805b601f850160051c820191505b81811015612c9057828155600101612c7d565b505050505050565b81516001600160401b03811115612cb157612cb1612713565b612cc581612cbf84546126df565b84612c48565b602080601f831160018114612cfa5760008415612ce25750858301515b600019600386901b1c1916600185901b178555612c90565b600085815260208120601f198616915b82811015612d2957888601518255948401946001909101908401612d0a565b5085821015612d475787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015612dd457888303603f190185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612dc0818601836120c4565b968901969450505090860190600101612d80565b509098975050505050505050565b600060408284031215612df457600080fd5b612dfc612751565b82358152602083013560208201528091505092915050565b634e487b7160e01b600052601160045260246000fd5b600082612e4757634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108b4576108b4612e14565b803560208310156108b457600019602084900360031b1b1692915050565b6001600160c01b03198135818116916008851015612ea95780818660080360031b1b83161692505b505092915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c82015260008251612ef081602c8501602087016120a0565b91909101602c0195945050505050565b808201808211156108b4576108b4612e14565b8481526001600160401b0360c01b8460c01b16602082015282602882015260008251612f468160488501602087016120a0565b9190910160480195945050505050565b600060808284031215612f6857600080fd5b612f70612729565b825181526020830151612f82816129eb565b6020820152612f948460408501612bfc565b60408201529392505050565b600060208284031215612fb257600080fd5b8151610a6a8161210356fea2646970667358221220eba3b4b5a2f52f3a20bb62dba366151a8feec4e3776f5d2ad929cd4457fca9bf64736f6c63430008190033
Deployed Bytecode Sourcemap
200:227:41:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1779:89:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3998:186;;;;;;;;;;-1:-1:-1;3998:186:33;;;;;:::i;:::-;;:::i;:::-;;;1391:14:42;;1384:22;1366:41;;1354:2;1339:18;3998:186:33;1226:187:42;5102:1258:14;;;;;;;;;;-1:-1:-1;5102:1258:14;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;2256:27::-;;;;;;;;;;-1:-1:-1;2256:27:14;;;;-1:-1:-1;;;;;2256:27:14;;;;;;-1:-1:-1;;;;;3605:32:42;;;3587:51;;3575:2;3560:18;2256:27:14;3441:203:42;4368:708:2;;;;;;:::i;:::-;;:::i;:::-;;2130:40:14;;;;;;;;;;;;2169:1;2130:40;;;;;5387:6:42;5375:19;;;5357:38;;5345:2;5330:18;2130:40:14;5213:188:42;3401:140:14;;;;;;;;;;-1:-1:-1;3401:140:14;;;-1:-1:-1;;;5576:52:42;;3532:1:14;5659:2:42;5644:18;;5637:59;5549:18;3401:140:14;5406:296:42;1287:235:0;;;;;;;;;;-1:-1:-1;1287:235:0;;;843:1:3;5914:34:42;;678:1:2;5979:2:42;5964:18;;5957:43;5850:18;1287:235:0;5707:299:42;2849:97:33;;;;;;;;;;-1:-1:-1;2927:12:33;;2849:97;;;6157:25:42;;;6145:2;6130:18;2849:97:33;6011:177:42;2093:31:14;;;;;;;;;;;;2123:1;2093:31;;4776:244:33;;;;;;;;;;-1:-1:-1;4776:244:33;;;;;:::i;:::-;;:::i;2707:82::-;;;;;;;;;;-1:-1:-1;2780:2:33;2707:82;;;6826:4:42;6814:17;;;6796:36;;6784:2;6769:18;2707:82:33;6654:184:42;1724:108:1;;;;;;;;;;-1:-1:-1;1724:108:1;;;;;:::i;:::-;;:::i;6811:774:14:-;;;;;;;;;;-1:-1:-1;6811:774:14;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;875:93:9:-;;;;;;;;;;-1:-1:-1;956:4:9;875:93;;538::8;;;;;;;;;;-1:-1:-1;538:93:8;;;;;:::i;:::-;;:::i;16059:132:14:-;;;;;;;;;;-1:-1:-1;16059:132:14;;;;;:::i;:::-;16164:11;;;;;16141:4;16164:11;;;:5;:11;;;;;;:20;;16059:132;446:46:1;;;;;;;;;;;;;;;4583:163:14;;;;;;;;;;-1:-1:-1;4583:163:14;;;;;:::i;:::-;;:::i;3004:116:33:-;;;;;;;;;;-1:-1:-1;3004:116:33;;;;;:::i;:::-;-1:-1:-1;;;;;3095:18:33;3069:7;3095:18;;;:9;:18;;;;;;;3004:116;2293:101:28;;;;;;;;;;;;;:::i;3507:128:2:-;;;;;;;;;;-1:-1:-1;3507:128:2;;;;;:::i;:::-;3596:12;3507:128;;;;;;;;-1:-1:-1;;;;;9446:31:42;;;9428:50;;9416:2;9401:18;3507:128:2;9284:200:42;2013:216:2;;;;;;;;;;-1:-1:-1;2013:216:2;;;;;:::i;:::-;;:::i;4148:87:14:-;;;;;;;;;;-1:-1:-1;4227:1:14;4148:87;;1638:85:28;;;;;;;;;;-1:-1:-1;1684:7:28;1710:6;-1:-1:-1;;;;;1710:6:28;1638:85;;1981:93:33;;;;;;;;;;;;;:::i;1787:46:14:-;;;;;;;;;;;;;;;1460:94:13;;;;;;;;;;-1:-1:-1;1519:4:13;1460:94;;3315:178:33;;;;;;;;;;-1:-1:-1;3315:178:33;;;;;:::i;:::-;;:::i;559:23:9:-;;;;;;;;;;-1:-1:-1;559:23:9;;;;-1:-1:-1;;;;;559:23:9;;;1391:156:8;;;;;;;;;;-1:-1:-1;1391:156:8;;;;;:::i;:::-;;:::i;569:48:1:-;;;;;;;;;;-1:-1:-1;569:48:1;;;;;:::i;:::-;;;;;;;;;;;;;;3510:981:8;;;;;;;;;;-1:-1:-1;3510:981:8;;;;;:::i;:::-;;:::i;1698:1333:9:-;;;;;;:::i;:::-;;:::i;8273:290:14:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;3252:105:1:-;;;;;;;;;;-1:-1:-1;3252:105:1;;;;;:::i;:::-;;:::i;3679:409:9:-;;;;;;:::i;:::-;;:::i;1100:139::-;;;;;;;;;;-1:-1:-1;1100:139:9;;;;;:::i;:::-;;:::i;3551:140:33:-;;;;;;;;;;-1:-1:-1;3551:140:33;;;;;:::i;:::-;-1:-1:-1;;;;;3657:18:33;;;3631:7;3657:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3551:140;2543:215:28;;;;;;;;;;-1:-1:-1;2543:215:28;;;;;:::i;:::-;;:::i;2771:149:2:-;;;;;;;;;;-1:-1:-1;2771:149:2;;;;;:::i;:::-;;:::i;1779:89:33:-;1824:13;1856:5;1849:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1779:89;:::o;3998:186::-;4071:4;735:10:38;4125:31:33;735:10:38;4141:7:33;4150:5;4125:8;:31::i;:::-;4173:4;4166:11;;;3998:186;;;;;:::o;5102:1258:14:-;-1:-1:-1;;;;;;;;;;;;;;;;;5254:35:14;5291:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;5291:28:14;5509:34;;;;;;;;-1:-1:-1;5509:34:14;;;-1:-1:-1;;;;;5509:34:14;;;;;;;5660:21;;;;;;;;;;;5509:34;;-1:-1:-1;;;5660:21:14;;;-1:-1:-1;;;;;;;;;;;;;;;;;5660:21:14;;;;;;;;;;;;;;;-1:-1:-1;5644:37:14;-1:-1:-1;6118:20:14;;6168:120;6192:19;;;;6225:22;;;;6261:17;;;;6192:10;6261:17;:::i;:::-;6168:10;:120::i;:::-;6311:42;;;;;;;;;;;;;;;;5102:1258;;;;-1:-1:-1;;;;;;5102:1258:14:o;4368:708:2:-;4681:8;-1:-1:-1;;;;;4673:31:2;4694:10;4673:31;4669:68;;4713:24;;-1:-1:-1;;;4713:24:2;;4726:10;4713:24;;;3587:51:42;3560:18;;4713:24:2;;;;;;;;4669:68;4873:14;;;;;;4837:32;;4854:14;;4873:7;4854:14;:::i;:::-;4837:16;:32::i;:::-;:50;4833:103;;4905:14;;;;:7;:14;:::i;:::-;4896:40;;-1:-1:-1;;;4896:40:2;;15137:10:42;15125:23;;;4896:40:2;;;15107:42:42;4921:14:2;;;;15165:18:42;;;15158:34;15080:18;;4896:40:2;14935:263:42;4833:103:2;5010:59;5021:7;5030:5;5037:8;;5047:9;5058:10;;5010;:59::i;:::-;4368:708;;;;;;;:::o;4776:244:33:-;4863:4;735:10:38;4919:37:33;4935:4;735:10:38;4950:5:33;4919:15;:37::i;:::-;4966:26;4976:4;4982:2;4986:5;4966:9;:26::i;:::-;5009:4;5002:11;;;4776:244;;;;;;:::o;1724:108:1:-;1531:13:28;:11;:13::i;:::-;1804:21:1::1;1813:4;1819:5;1804:8;:21::i;:::-;1724:108:::0;;:::o;6811:774:14:-;-1:-1:-1;;;;;;;;;;;;;;;;;7145:24:14;7173:74;7184:19;;;;7205:22;;;;7229:17;;;;7184:10;7229:17;:::i;7173:74::-;7142:105;;;7336:20;7358;7382:49;7402:10;7414:16;7382:19;:49::i;:::-;7335:96;;-1:-1:-1;7335:96:14;-1:-1:-1;7520:58:14;7527:17;;;;:10;:17;:::i;:::-;7546:7;7555;7564:13;7520:6;:58::i;:::-;7513:65;6811:774;-1:-1:-1;;;;;;6811:774:14:o;538:93:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4583:163:14:-;1531:13:28;:11;:13::i;:::-;4666:12:14::1;:28:::0;;-1:-1:-1;;;;;;4666:28:14::1;-1:-1:-1::0;;;;;4666:28:14;::::1;::::0;;::::1;::::0;;;4709:30:::1;::::0;3587:51:42;;;4709:30:14::1;::::0;3575:2:42;3560:18;4709:30:14::1;;;;;;;;4583:163:::0;:::o;2293:101:28:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;2013:216:2:-;-1:-1:-1;;;;;2198:24:2;;2217:4;2198:24;2013:216;;;;;;;:::o;1981:93:33:-;2028:13;2060:7;2053:14;;;;;:::i;3315:178::-;3384:4;735:10:38;3438:27:33;735:10:38;3455:2:33;3459:5;3438:9;:27::i;1391:156:8:-;1531:13:28;:11;:13::i;:::-;1503:37:8::1;;1523:16:::0;;1503:37:::1;:::i;:::-;:19;:37::i;3510:981::-:0;3701:21;;;3677;3701;;;:15;:21;;;;;;;;:31;;;;;;;;;;3677:55;;3653:12;;3677:21;3701:31;3677:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3861:8;:15;3880:1;3861:20;3857:46;;3890:13;;3883:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3883:20:8;;-1:-1:-1;3883:20:8;;-1:-1:-1;;;;3883:20:8;3857:46;3988:1;3964:25;;;3960:46;;3998:8;-1:-1:-1;3991:15:8;;3960:46;4153:1;4129:25;;4125:267;;4170:34;4190:13;;4170:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4170:19:8;;-1:-1:-1;;;4170:34:8:i;:::-;4353:8;4363:17;:13;4377:1;4363:13;;:17;:::i;:::-;4340:41;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4333:48;;;;;4125:267;4470:13;;4455:29;;-1:-1:-1;;;4455:29:8;;;;;;;;;:::i;1698:1333:9:-;1799:9;1794:1037;1814:19;;;1794:1037;;;1854:29;1886:8;;1895:1;1886:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1854:43;-1:-1:-1;1980:50:9;1987:20;;;;1854:43;1987:20;:::i;:::-;2009;;;;16164:11:14;;;;;16141:4;16164:11;;;:5;:11;;;;;;:20;;16059:132;1980:50:9;1975:65;;2032:8;;;1975:65;2602:4;:22;2633:12;;;;:6;2696:11;;;;2725:14;;;;2633:6;2725:14;:::i;:::-;2757:15;;;;;;;;:::i;:::-;2790:16;;;;:6;:16;:::i;:::-;2602:218;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1840:991;1794:1037;1835:3;;1794:1037;;;;2988:10;-1:-1:-1;;;;;2978:43:9;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2978:45:9;;;;;;;;;;;;:::i;:::-;2961:63;;-1:-1:-1;;;2961:63:9;;;;;;;;:::i;8273:290:14:-;8434:34;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;8517:39:14;8523:10;8535:4;8541:14;8517:5;:39::i;:::-;8510:46;;;;8273:290;;;;;;;:::o;3252:105:1:-;1531:13:28;:11;:13::i;:::-;3319:31:1::1;::::0;-1:-1:-1;;;3319:31:1;;-1:-1:-1;;;;;3605:32:42;;;3319:31:1::1;::::0;::::1;3587:51:42::0;3319:8:1::1;:20;::::0;::::1;::::0;3560:18:42;;3319:31:1::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3252:105:::0;:::o;3679:409:9:-;3958:10;3980:4;3958:27;3954:50;;3994:10;;-1:-1:-1;;;3994:10:9;;;;;;;;;;;3954:50;4014:67;4033:7;4042:5;4049:8;;4059:9;4070:10;;4014:18;:67::i;1100:139::-;1531:13:28;:11;:13::i;:::-;1175:8:9::1;:20:::0;;-1:-1:-1;;;;;;1175:20:9::1;-1:-1:-1::0;;;;;1175:20:9;::::1;::::0;;::::1;::::0;;;1210:22:::1;::::0;3587:51:42;;;1210:22:9::1;::::0;3575:2:42;3560:18;1210:22:9::1;3441:203:42::0;2543:215:28;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:28;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:28;;2700:1:::1;2672:31;::::0;::::1;3587:51:42::0;3560:18;;2672:31:28::1;3441:203:42::0;2623:91:28::1;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;2771:149:2:-;2853:4;2900:13;;;;;;2876:5;;2853:4;;2882:13;;2900:6;2882:13;:::i;:::-;2876:20;;;;;;;;;;;;;-1:-1:-1;2876:20:2;;:37;;2771:149;-1:-1:-1;;2771:149:2:o;8726:128:33:-;8810:37;8819:5;8826:7;8835:5;8842:4;8810:8;:37::i;:::-;8726:128;;;:::o;18076:668:14:-;18218:20;18240:24;18414:22;18426:9;18414:11;:22::i;:::-;18399:37;;18562:12;18543:31;;18644:12;18625:16;:31;18621:117;;;18679:48;;-1:-1:-1;;;18679:48:14;;;;;22602:25:42;;;22643:18;;;22636:34;;;22575:18;;18679:48:14;22428:248:42;2718:196:1;2822:11;;;2788:7;2822:11;;;:5;:11;;;;;;;2843:43;;2874:12;;-1:-1:-1;;;2874:12:1;;22855:10:42;22843:23;;2874:12:1;;;22825:42:42;22798:18;;2874:12:1;22681:192:42;12852:1806:14;13329:17;13349:36;:17;:8;;:15;:17::i;:::-;2891:2:17;2780:123;13349:36:14;13329:56;;13518:24;13545:62;13553:9;13564:26;13570:19;:8;;:17;:19::i;:::-;13564:5;:26::i;:::-;13592:14;;;;:7;:14;:::i;:::-;13545:7;:62::i;:::-;13518:89;-1:-1:-1;243:2:17;-1:-1:-1;;13618:955:14;;;13722:23;13748:175;13791:13;;;;;;;;:::i;:::-;13822:14;;;;:7;:14;:::i;:::-;13854:16;13888:21;:8;;:19;:21::i;:::-;13748:25;:175::i;:::-;14470:92;;-1:-1:-1;;;14470:92:14;;13722:201;;-1:-1:-1;;;;;;14470:8:14;:20;;;;:92;;14491:9;;14502:5;;14509:1;;13722:201;;14470:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13645:928;13618:955;-1:-1:-1;;;;;14588:63:14;;14600:5;14588:63;14607:14;;;;:7;:14;:::i;:::-;14588:63;;;15137:10:42;15125:23;;;15107:42;;15180:2;15165:18;;15158:34;;;15080:18;14588:63:14;;;;;;;13155:1503;;12852:1806;;;;;;;:::o;10415:477:33:-;-1:-1:-1;;;;;3657:18:33;;;10514:24;3657:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;10580:37:33;;10576:310;;10656:5;10637:16;:24;10633:130;;;10688:60;;-1:-1:-1;;;10688:60:33;;-1:-1:-1;;;;;24100:32:42;;10688:60:33;;;24082:51:42;24149:18;;;24142:34;;;24192:18;;;24185:34;;;24055:18;;10688:60:33;23880:345:42;10633:130:33;10804:57;10813:5;10820:7;10848:5;10829:16;:24;10855:5;10804:8;:57::i;:::-;10504:388;10415:477;;;:::o;5393:300::-;-1:-1:-1;;;;;5476:18:33;;5472:86;;5517:30;;-1:-1:-1;;;5517:30:33;;5544:1;5517:30;;;3587:51:42;3560:18;;5517:30:33;3441:203:42;5472:86:33;-1:-1:-1;;;;;5571:16:33;;5567:86;;5610:32;;-1:-1:-1;;;5610:32:33;;5639:1;5610:32;;;3587:51:42;3560:18;;5610:32:33;3441:203:42;5567:86:33;5662:24;5670:4;5676:2;5680:5;5662:7;:24::i;1796:162:28:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:28;735:10:38;1855:23:28;1851:101;;1901:40;;-1:-1:-1;;;1901:40:28;;735:10:38;1901:40:28;;;3587:51:42;3560:18;;1901:40:28;3441:203:42;2286:134:1;2359:11;;;;;;;:5;:11;;;;;;;;;:19;;;2393:20;;15107:42:42;;;15165:18;;15158:34;;;2393:20:1;;15080:18:42;2393:20:1;;;;;;;2286:134;;:::o;10898:1436:14:-;11030:20;11052;11084:15;11255:324;11287:10;:13;;;11314:16;11320:9;11314:5;:16::i;:::-;11548:21;;;;:10;:21;:::i;:::-;11255:324;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11255:18:14;;-1:-1:-1;;;11255:324:14:i;:::-;11231:348;;-1:-1:-1;11231:348:14;-1:-1:-1;11659:14:14;11231:348;11676:33;;2123:1;11676:33;;;2169:1;11676:33;11659:50;-1:-1:-1;11831:67:14;11846:17;;;;:10;:17;:::i;:::-;11865:7;11874:23;;;;:10;:23;:::i;11831:67::-;12156:12;;11821:77;;-1:-1:-1;;;;;;12156:12:14;12248:23;;12244:83;;12273:54;;-1:-1:-1;;;12273:54:14;;-1:-1:-1;;;;;12273:36:14;;;;;:54;;12310:7;;12319;;12273:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12244:83;11074:1260;;;10898:1436;;;;;:::o;2038:391:3:-;-1:-1:-1;;;;;;;;;;;;;;;;;2259:8:3;-1:-1:-1;;;;;2259:14:3;;2291:86;;;;;;;;2307:7;2291:86;;;;;;2316:25;2333:7;2316:16;:25::i;:::-;2291:86;;;;2343:8;2291:86;;;;2353:8;2291:86;;;;2363:13;2291:86;;;;;2403:4;2259:163;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2240:182;2038:391;-1:-1:-1;;;;;2038:391:3:o;2912:187:28:-;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:28;;;-1:-1:-1;;;;;;3020:17:28;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;2237:514:8:-;2345:9;2340:354;2364:16;:23;2360:1;:27;2340:354;;;2522:48;2542:16;2559:1;2542:19;;;;;;;;:::i;:::-;;;;;;;:27;;;2522:19;:48::i;:::-;2656:16;2673:1;2656:19;;;;;;;;:::i;:::-;;;;;;;:27;;;2584:15;:40;2600:16;2617:1;2600:19;;;;;;;;:::i;:::-;;;;;;;:23;;;2584:40;;;;;;;;;;;;;;;:69;2625:16;2642:1;2625:19;;;;;;;;:::i;:::-;;;;;;;:27;;;2584:69;;;;;;;;;;;;;;;:99;;;;;;:::i;:::-;-1:-1:-1;2389:3:8;;2340:354;;;;2709:35;2727:16;2709:35;;;;;;:::i;4631:264::-;4801:1;4787:16;;4781:23;4827:28;;;463:1;4827:28;4823:65;;4879:8;4864:24;;-1:-1:-1;;;4864:24:8;;;;;;;;:::i;9271:1333:14:-;9425:34;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;9823:20:14;;9873:140;9893:10;9917:19;;;;9950:22;;;;9986:17;;;;9917:10;9986:17;:::i;:::-;9873:6;:140::i;:::-;9822:191;;;;10102:20;10124;10148:49;10168:10;10180:16;10148:19;:49::i;:::-;10101:96;;-1:-1:-1;10101:96:14;-1:-1:-1;10320:66:14;10328:17;;;;:10;:17;:::i;:::-;10347:7;10356;10320:66;;;;;;;10365:4;10320:66;:::i;:::-;10371:14;10320:7;:66::i;:::-;10452:42;;;;;;;;;;;;;;;;;;;10518:15;;10307:79;;-1:-1:-1;10452:42:14;;-1:-1:-1;10554:10:14;;10518:15;10510:87;;10535:17;;;;:10;:17;:::i;:::-;10510:87;;;30252:10:42;30240:23;;;30222:42;;30295:2;30280:18;;30273:34;;;30323:18;;30316:34;;;30210:2;30195:18;10510:87:14;;;;;;;9491:1113;;;;9271:1333;;;;;;:::o;9701:432:33:-;-1:-1:-1;;;;;9813:19:33;;9809:89;;9855:32;;-1:-1:-1;;;9855:32:33;;9884:1;9855:32;;;3587:51:42;3560:18;;9855:32:33;3441:203:42;9809:89:33;-1:-1:-1;;;;;9911:21:33;;9907:90;;9955:31;;-1:-1:-1;;;9955:31:33;;9983:1;9955:31;;;3587:51:42;3560:18;;9955:31:33;3441:203:42;9907:90:33;-1:-1:-1;;;;;10006:18:33;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;10051:76;;;;10101:7;-1:-1:-1;;;;;10085:31:33;10094:5;-1:-1:-1;;;;;10085:31:33;;10110:5;10085:31;;;;6157:25:42;;6145:2;6130:18;;6011:177;10085:31:33;;;;;;;;9701:432;;;;:::o;16585:172:14:-;16656:16;16729:21;16692:33;16729:21;16692:9;:33;:::i;:::-;16691:59;;;;:::i;1573:123:17:-;1633:7;1667:21;188:2;1633:7;1667:4;;:21;:::i;:::-;1659:30;;;:::i;1874:152::-;1936:6;1975:42;243:2;188;1975:4;;:42;:::i;:::-;1968:50;;;:::i;:::-;1961:58;;;1874:152;-1:-1:-1;;;1874:152:17:o;16981:139:14:-;17045:16;17080:33;17092:21;-1:-1:-1;;;;;17080:33:14;;;:::i;2939:462:13:-;3073:24;-1:-1:-1;;;;;3113:19:13;;3109:46;;3148:6;3134:21;;3109:46;3251:21;3257:3;3262:9;3251:5;:21::i;:::-;-1:-1:-1;3385:9:13;;2939:462;-1:-1:-1;;2939:462:13:o;2186:130:17:-;2250:12;2281:28;:4;243:2;2281:4;;:28;:::i;:::-;2274:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2274:35:17;;2186:130;-1:-1:-1;;;;;;2186:130:17:o;640:284:16:-;824:17;877:6;885:7;894:9;905:11;860:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;853:64;;640:284;;;;;;:::o;6008:1107:33:-;-1:-1:-1;;;;;6097:18:33;;6093:540;;6249:5;6233:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;6093:540:33;;-1:-1:-1;6093:540:33;;-1:-1:-1;;;;;6307:15:33;;6285:19;6307:15;;;:9;:15;;;;;;6340:19;;;6336:115;;;6386:50;;-1:-1:-1;;;6386:50:33;;-1:-1:-1;;;;;24100:32:42;;6386:50:33;;;24082:51:42;24149:18;;;24142:34;;;24192:18;;;24185:34;;;24055:18;;6386:50:33;23880:345:42;6336:115:33;-1:-1:-1;;;;;6571:15:33;;;;;;:9;:15;;;;;6589:19;;;;6571:37;;6093:540;-1:-1:-1;;;;;6647:16:33;;6643:425;;6810:12;:21;;;;;;;6643:425;;;-1:-1:-1;;;;;7021:13:33;;;;;;:9;:13;;;;;:22;;;;;;6643:425;7098:2;-1:-1:-1;;;;;7083:25:33;7092:4;-1:-1:-1;;;;;7083:25:33;;7102:5;7083:25;;;;6157::42;;6145:2;6130:18;;6011:177;7083:25:33;;;;;;;;6008:1107;;;:::o;17344:147:14:-;17409:15;17450:33;17462:21;17450:9;:33;:::i;598:506:17:-;791:18;;732:17;;791:22;;;934:163;;1074:7;1083:13;1057:40;;;;;;;;32342:19:42;;;32417:3;32395:16;-1:-1:-1;;;;;;32391:51:42;32386:2;32377:12;;32370:73;32468:2;32459:12;;32187:290;1057:40:17;;;;;;;;;;;;;934:163;;;976:7;985:13;1017:10;1030:11;959:83;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;934:163;927:170;;598:506;;;;;;:::o;2037:567:13:-;2198:20;2220:24;2291:44;2302:9;2313:12;2327:7;2291:10;:44::i;:::-;2256:79;;-1:-1:-1;2256:79:13;-1:-1:-1;2571:26:13;2577:5;2256:79;2571:5;:26::i;:::-;2037:567;;;;;;;:::o;3188:766:3:-;3389:31;;:::i;:::-;3554:20;3577:26;3588:4;:14;;;3577:10;:26::i;:::-;3617:15;;;;3554:49;;-1:-1:-1;3617:19:3;3613:53;;3638:28;3650:4;:15;;;3638:11;:28::i;:::-;3755:8;-1:-1:-1;;;;;3755:13:3;;3777:12;3809:92;;;;;;;;3825:7;3809:92;;;;;;3834:25;3851:7;3834:16;:25::i;:::-;3809:92;;;;3861:8;3809:92;;;;3871:8;3809:92;;;;3899:1;3881:4;:15;;;:19;3809:92;;;;;3919:14;3755:192;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3677:270;3188:766;-1:-1:-1;;;;;;;3188:766:3:o;7458:208:33:-;-1:-1:-1;;;;;7528:21:33;;7524:91;;7572:32;;-1:-1:-1;;;7572:32:33;;7601:1;7572:32;;;3587:51:42;3560:18;;7572:32:33;3441:203:42;7524:91:33;7624:35;7640:1;7644:7;7653:5;7624:7;:35::i;7984:206::-;-1:-1:-1;;;;;8054:21:33;;8050:89;;8098:30;;-1:-1:-1;;;8098:30:33;;8125:1;8098:30;;;3587:51:42;3560:18;;8098:30:33;3441:203:42;8050:89:33;8148:35;8156:7;8173:1;8177:5;8148:7;:35::i;4650:191:3:-;4716:17;4762:10;4749:9;:23;4745:62;;4781:26;;-1:-1:-1;;;4781:26:3;;4797:9;4781:26;;;6157:25:42;6130:18;;4781:26:3;6011:177:42;4745:62:3;-1:-1:-1;4824:10:3;4650:191::o;5218:410::-;5371:15;5389:8;-1:-1:-1;;;;;5389:16:3;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5371:36;-1:-1:-1;;;;;;5421:21:3;;5417:54;;5451:20;;-1:-1:-1;;;5451:20:3;;;;;;;;;;;5417:54;1797:53:36;;;5578:10:3;1797:53:36;;;34045:34:42;;;5598:8:3;-1:-1:-1;;;;;34115:15:42;;;34095:18;;;34088:43;34147:18;;;;34140:34;;;1797:53:36;;;;;;;;;;33980:18:42;;;;1797:53:36;;;;;;;;;-1:-1:-1;;;;;1797:53:36;-1:-1:-1;;;1797:53:36;;;7968:11;;5545:76:3;;:32;;;5609:11;;1770:81:36;;5545:32:3;;-1:-1:-1;;;;1797:53:36;;-1:-1:-1;;;5545:32:3;7934:5:36;7929:60;8041:7;8031:176;;8085:4;8079:11;8130:16;8127:1;8122:3;8107:40;8176:16;8171:3;8164:29;8031:176;-1:-1:-1;;8284:1:36;8278:8;8234:16;;-1:-1:-1;8310:15:36;;:68;;8362:11;8377:1;8362:16;;8310:68;;;-1:-1:-1;;;;;8328:26:36;;;:31;8310:68;8306:146;;;8401:40;;-1:-1:-1;;;8401:40:36;;-1:-1:-1;;;;;3605:32:42;;8401:40:36;;;3587:51:42;3560:18;;8401:40:36;3441:203:42;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:250:42:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:42;238:16;;231:27;14:250::o;269:271::-;311:3;349:5;343:12;376:6;371:3;364:19;392:76;461:6;454:4;449:3;445:14;438:4;431:5;427:16;392:76;:::i;:::-;522:2;501:15;-1:-1:-1;;497:29:42;488:39;;;;529:4;484:50;;269:271;-1:-1:-1;;269:271:42:o;545:220::-;694:2;683:9;676:21;657:4;714:45;755:2;744:9;740:18;732:6;714:45;:::i;770:131::-;-1:-1:-1;;;;;845:31:42;;835:42;;825:70;;891:1;888;881:12;906:315;974:6;982;1035:2;1023:9;1014:7;1010:23;1006:32;1003:52;;;1051:1;1048;1041:12;1003:52;1090:9;1077:23;1109:31;1134:5;1109:31;:::i;:::-;1159:5;1211:2;1196:18;;;;1183:32;;-1:-1:-1;;;906:315:42:o;1418:158::-;1480:5;1525:3;1516:6;1511:3;1507:16;1503:26;1500:46;;;1542:1;1539;1532:12;1500:46;-1:-1:-1;1564:6:42;1418:158;-1:-1:-1;1418:158:42:o;1581:360::-;1669:6;1722:2;1710:9;1701:7;1697:23;1693:32;1690:52;;;1738:1;1735;1728:12;1690:52;1778:9;1765:23;-1:-1:-1;;;;;1803:6:42;1800:30;1797:50;;;1843:1;1840;1833:12;1797:50;1866:69;1927:7;1918:6;1907:9;1903:22;1866:69;:::i;2100:1336::-;2020:12;;2008:25;;2082:4;2071:16;;;2065:23;2049:14;;;2042:47;2466:4;2514:3;2499:19;;2591:2;2629:3;2624:2;2613:9;2609:18;2602:31;2653:6;2688;2682:13;2719:6;2711;2704:22;2757:3;2746:9;2742:19;2735:26;;2820:3;2810:6;2807:1;2803:14;2792:9;2788:30;2784:40;2770:54;;2843:4;2882;2874:6;2870:17;2905:1;2915:429;2929:6;2926:1;2923:13;2915:429;;;2994:22;;;-1:-1:-1;;2990:37:42;2978:50;;3051:13;;3092:9;;3077:25;;3141:11;;3135:18;3173:15;;;3166:27;;;3216:48;3248:15;;;3135:18;3216:48;:::i;:::-;3206:58;-1:-1:-1;;3322:12:42;;;;3287:15;;;;2951:1;2944:9;2915:429;;;-1:-1:-1;;2020:12:42;;3426:2;3411:18;;2008:25;-1:-1:-1;;;2082:4:42;2071:16;;2065:23;2049:14;;;2042:47;-1:-1:-1;3361:6:42;-1:-1:-1;3376:54:42;1946:149;3649:154;3708:5;3753:2;3744:6;3739:3;3735:16;3731:25;3728:45;;;3769:1;3766;3759:12;3808:347;3859:8;3869:6;3923:3;3916:4;3908:6;3904:17;3900:27;3890:55;;3941:1;3938;3931:12;3890:55;-1:-1:-1;3964:20:42;;-1:-1:-1;;;;;3996:30:42;;3993:50;;;4039:1;4036;4029:12;3993:50;4076:4;4068:6;4064:17;4052:29;;4128:3;4121:4;4112:6;4104;4100:19;4096:30;4093:39;4090:59;;;4145:1;4142;4135:12;4090:59;3808:347;;;;;:::o;4160:1048::-;4303:6;4311;4319;4327;4335;4343;4351;4404:3;4392:9;4383:7;4379:23;4375:33;4372:53;;;4421:1;4418;4411:12;4372:53;4444;4489:7;4478:9;4444:53;:::i;:::-;4434:63;;4544:2;4533:9;4529:18;4516:32;4506:42;;4599:3;4588:9;4584:19;4571:33;-1:-1:-1;;;;;4664:2:42;4656:6;4653:14;4650:34;;;4680:1;4677;4670:12;4650:34;4719:58;4769:7;4760:6;4749:9;4745:22;4719:58;:::i;:::-;4796:8;;-1:-1:-1;4693:84:42;-1:-1:-1;4881:3:42;4866:19;;4853:33;;-1:-1:-1;4895:31:42;4853:33;4895:31;:::i;:::-;4945:5;;-1:-1:-1;5003:3:42;4988:19;;4975:33;;5020:16;;;5017:36;;;5049:1;5046;5039:12;5017:36;;5088:60;5140:7;5129:8;5118:9;5114:24;5088:60;:::i;:::-;4160:1048;;;;-1:-1:-1;4160:1048:42;;-1:-1:-1;4160:1048:42;;;;5062:86;;-1:-1:-1;;;4160:1048:42:o;6193:456::-;6270:6;6278;6286;6339:2;6327:9;6318:7;6314:23;6310:32;6307:52;;;6355:1;6352;6345:12;6307:52;6394:9;6381:23;6413:31;6438:5;6413:31;:::i;:::-;6463:5;-1:-1:-1;6520:2:42;6505:18;;6492:32;6533:33;6492:32;6533:33;:::i;:::-;6193:456;;6585:7;;-1:-1:-1;;;6639:2:42;6624:18;;;;6611:32;;6193:456::o;6843:163::-;6910:20;;6970:10;6959:22;;6949:33;;6939:61;;6996:1;6993;6986:12;6939:61;6843:163;;;:::o;7011:252::-;7078:6;7086;7139:2;7127:9;7118:7;7114:23;7110:32;7107:52;;;7155:1;7152;7145:12;7107:52;7178:28;7196:9;7178:28;:::i;7268:118::-;7354:5;7347:13;7340:21;7333:5;7330:32;7320:60;;7376:1;7373;7366:12;7391:489;7485:6;7493;7546:2;7534:9;7525:7;7521:23;7517:32;7514:52;;;7562:1;7559;7552:12;7514:52;7602:9;7589:23;-1:-1:-1;;;;;7627:6:42;7624:30;7621:50;;;7667:1;7664;7657:12;7621:50;7690:69;7751:7;7742:6;7731:9;7727:22;7690:69;:::i;:::-;7680:79;;;7809:2;7798:9;7794:18;7781:32;7822:28;7844:5;7822:28;:::i;:::-;7869:5;7859:15;;;7391:489;;;;;:::o;7885:257::-;2020:12;;2008:25;;2082:4;2071:16;;;2065:23;2049:14;;;2042:47;8079:2;8064:18;;8091:45;1946:149;8147:159;8214:20;;8274:6;8263:18;;8253:29;;8243:57;;8296:1;8293;8286:12;8311:256;8377:6;8385;8438:2;8426:9;8417:7;8413:23;8409:32;8406:52;;;8454:1;8451;8444:12;8406:52;8477:28;8495:9;8477:28;:::i;:::-;8467:38;;8524:37;8557:2;8546:9;8542:18;8524:37;:::i;:::-;8514:47;;8311:256;;;;;:::o;9032:247::-;9091:6;9144:2;9132:9;9123:7;9119:23;9115:32;9112:52;;;9160:1;9157;9150:12;9112:52;9199:9;9186:23;9218:31;9243:5;9218:31;:::i;9489:670::-;9603:6;9611;9619;9627;9680:3;9668:9;9659:7;9655:23;9651:33;9648:53;;;9697:1;9694;9687:12;9648:53;9720;9765:7;9754:9;9720:53;:::i;:::-;9710:63;;9824:2;9813:9;9809:18;9796:32;-1:-1:-1;;;;;9843:6:42;9840:30;9837:50;;;9883:1;9880;9873:12;9837:50;9922:58;9972:7;9963:6;9952:9;9948:22;9922:58;:::i;:::-;9999:8;;-1:-1:-1;9896:84:42;-1:-1:-1;;10084:3:42;10069:19;;10056:33;10098:31;10056:33;10098:31;:::i;:::-;9489:670;;;;-1:-1:-1;9489:670:42;;-1:-1:-1;;9489:670:42:o;10164:395::-;10255:8;10265:6;10319:3;10312:4;10304:6;10300:17;10296:27;10286:55;;10337:1;10334;10327:12;10286:55;-1:-1:-1;10360:20:42;;-1:-1:-1;;;;;10392:30:42;;10389:50;;;10435:1;10432;10425:12;10389:50;10472:4;10464:6;10460:17;10448:29;;10532:3;10525:4;10515:6;10512:1;10508:14;10500:6;10496:27;10492:38;10489:47;10486:67;;;10549:1;10546;10539:12;10564:503;10688:6;10696;10749:2;10737:9;10728:7;10724:23;10720:32;10717:52;;;10765:1;10762;10755:12;10717:52;10805:9;10792:23;-1:-1:-1;;;;;10830:6:42;10827:30;10824:50;;;10870:1;10867;10860:12;10824:50;10909:98;10999:7;10990:6;10979:9;10975:22;10909:98;:::i;:::-;11026:8;;10883:124;;-1:-1:-1;10564:503:42;-1:-1:-1;;;;10564:503:42:o;11072:184::-;11130:6;11183:2;11171:9;11162:7;11158:23;11154:32;11151:52;;;11199:1;11196;11189:12;11151:52;11222:28;11240:9;11222:28;:::i;11443:553::-;11529:6;11537;11545;11553;11606:2;11594:9;11585:7;11581:23;11577:32;11574:52;;;11622:1;11619;11612:12;11574:52;11645:28;11663:9;11645:28;:::i;:::-;11635:38;;11692:37;11725:2;11714:9;11710:18;11692:37;:::i;:::-;11682:47;;11780:2;11769:9;11765:18;11752:32;-1:-1:-1;;;;;11799:6:42;11796:30;11793:50;;;11839:1;11836;11829:12;11793:50;11878:58;11928:7;11919:6;11908:9;11904:22;11878:58;:::i;:::-;11443:553;;;;-1:-1:-1;11955:8:42;-1:-1:-1;;;;11443:553:42:o;12504:657::-;12642:6;12650;12658;12702:9;12693:7;12689:23;12732:3;12728:2;12724:12;12721:32;;;12749:1;12746;12739:12;12721:32;12789:9;12776:23;-1:-1:-1;;;;;12814:6:42;12811:30;12808:50;;;12854:1;12851;12844:12;12808:50;12877:69;12938:7;12929:6;12918:9;12914:22;12877:69;:::i;:::-;12867:79;-1:-1:-1;;12980:2:42;-1:-1:-1;;12962:16:42;;12958:25;12955:45;;;12996:1;12993;12986:12;12955:45;;13034:2;13023:9;13019:18;13009:28;;13087:2;13076:9;13072:18;13059:32;13100:31;13125:5;13100:31;:::i;:::-;13150:5;13140:15;;;12504:657;;;;;:::o;13166:613::-;13410:4;13452:3;13441:9;13437:19;13429:27;;13489:6;13483:13;13472:9;13465:32;-1:-1:-1;;;;;13557:4:42;13549:6;13545:17;13539:24;13535:49;13528:4;13517:9;13513:20;13506:79;13632:4;13624:6;13620:17;13614:24;13647:62;13703:4;13692:9;13688:20;13674:12;2020;;2008:25;;2082:4;2071:16;;;2065:23;2049:14;;2042:47;1946:149;13647:62;-1:-1:-1;2020:12:42;;13768:3;13753:19;;2008:25;2082:4;2071:16;;2065:23;2049:14;;;2042:47;13718:55;1946:149;13784:388;13852:6;13860;13913:2;13901:9;13892:7;13888:23;13884:32;13881:52;;;13929:1;13926;13919:12;13881:52;13968:9;13955:23;13987:31;14012:5;13987:31;:::i;:::-;14037:5;-1:-1:-1;14094:2:42;14079:18;;14066:32;14107:33;14066:32;14107:33;:::i;14177:236::-;14262:6;14315:2;14303:9;14294:7;14290:23;14286:32;14283:52;;;14331:1;14328;14321:12;14283:52;14354:53;14399:7;14388:9;14354:53;:::i;14418:380::-;14497:1;14493:12;;;;14540;;;14561:61;;14615:4;14607:6;14603:17;14593:27;;14561:61;14668:2;14660:6;14657:14;14637:18;14634:38;14631:161;;14714:10;14709:3;14705:20;14702:1;14695:31;14749:4;14746:1;14739:15;14777:4;14774:1;14767:15;14803:127;14864:10;14859:3;14855:20;14852:1;14845:31;14895:4;14892:1;14885:15;14919:4;14916:1;14909:15;15203:253;15275:2;15269:9;15317:4;15305:17;;-1:-1:-1;;;;;15337:34:42;;15373:22;;;15334:62;15331:88;;;15399:18;;:::i;:::-;15435:2;15428:22;15203:253;:::o;15461:257::-;15533:4;15527:11;;;15565:17;;-1:-1:-1;;;;;15597:34:42;;15633:22;;;15594:62;15591:88;;;15659:18;;:::i;15723:275::-;15794:2;15788:9;15859:2;15840:13;;-1:-1:-1;;15836:27:42;15824:40;;-1:-1:-1;;;;;15879:34:42;;15915:22;;;15876:62;15873:88;;;15941:18;;:::i;:::-;15977:2;15970:22;15723:275;;-1:-1:-1;15723:275:42:o;16003:186::-;16051:4;-1:-1:-1;;;;;16076:6:42;16073:30;16070:56;;;16106:18;;:::i;:::-;-1:-1:-1;16172:2:42;16151:15;-1:-1:-1;;16147:29:42;16178:4;16143:40;;16003:186::o;16194:2115::-;16384:9;-1:-1:-1;;;;;16459:2:42;16451:6;16448:14;16445:40;;;16465:18;;:::i;:::-;16511:6;16508:1;16504:14;16537:4;16561:28;16585:2;16581;16577:11;16561:28;:::i;:::-;16623:19;;;16693:14;;;;16658:12;;;;16730:14;16719:26;;16716:46;;;16758:1;16755;16748:12;16716:46;16782:5;16796:1480;16812:6;16807:3;16804:15;16796:1480;;;16898:3;16885:17;16934:2;16921:11;16918:19;16915:109;;;16978:1;17007:2;17003;16996:14;16915:109;17047:23;;17115:4;17094:14;17090:23;;;17086:34;17083:124;;;17161:1;17190:2;17186;17179:14;17083:124;17235:22;;:::i;:::-;17286:21;17304:2;17286:21;:::i;:::-;17277:7;17270:38;17346:30;17372:2;17368;17364:11;17346:30;:::i;:::-;17341:2;17332:7;17328:16;17321:56;17400:2;17450;17446;17442:11;17429:25;17481:2;17473:6;17470:14;17467:104;;;17525:1;17554:2;17550;17543:14;17467:104;17594:15;;;;;17651:14;17644:4;17636:13;;17632:34;17622:135;;17709:1;17739:3;17734;17727:16;17622:135;17794:2;17781:16;17823:49;17839:32;17867:3;17839:32;:::i;:::-;17823:49;:::i;:::-;17899:3;17892:5;17885:18;17945:14;17940:2;17934:3;17930:2;17926:12;17922:21;17919:41;17916:134;;;18002:1;18032:3;18027;18020:16;17916:134;18105:3;18100:2;18096;18092:11;18087:2;18080:5;18076:14;18063:46;18155:1;18133:15;;;18129:24;;18122:35;;;;18177:16;;;18170:31;18214:20;;-1:-1:-1;18254:12:42;;;;16829;;16796:1480;;;-1:-1:-1;18298:5:42;16194:2115;-1:-1:-1;;;;;;;16194:2115:42:o;18314:331::-;18419:9;18430;18472:8;18460:10;18457:24;18454:44;;;18494:1;18491;18484:12;18454:44;18523:6;18513:8;18510:20;18507:40;;;18543:1;18540;18533:12;18507:40;-1:-1:-1;;18569:23:42;;;18614:25;;;;;-1:-1:-1;18314:331:42:o;18650:476::-;18841:3;18879:6;18873:13;18895:66;18954:6;18949:3;18942:4;18934:6;18930:17;18895:66;:::i;:::-;18983:16;;19036:6;19028;18983:16;19008:35;19100:1;19062:18;;19089:13;;;-1:-1:-1;19062:18:42;;18650:476;-1:-1:-1;;;18650:476:42:o;19131:266::-;19219:6;19214:3;19207:19;19271:6;19264:5;19257:4;19252:3;19248:14;19235:43;-1:-1:-1;19323:1:42;19298:16;;;19316:4;19294:27;;;19287:38;;;;19379:2;19358:15;;;-1:-1:-1;;19354:29:42;19345:39;;;19341:50;;19131:266::o;19402:244::-;19559:2;19548:9;19541:21;19522:4;19579:61;19636:2;19625:9;19621:18;19613:6;19605;19579:61;:::i;19651:127::-;19712:10;19707:3;19703:20;19700:1;19693:31;19743:4;19740:1;19733:15;19767:4;19764:1;19757:15;19783:331;19882:4;19940:11;19927:25;20034:3;20030:8;20019;20003:14;19999:29;19995:44;19975:18;19971:69;19961:97;;20054:1;20051;20044:12;19961:97;20075:33;;;;;19783:331;-1:-1:-1;;19783:331:42:o;20119:521::-;20196:4;20202:6;20262:11;20249:25;20356:2;20352:7;20341:8;20325:14;20321:29;20317:43;20297:18;20293:68;20283:96;;20375:1;20372;20365:12;20283:96;20402:33;;20454:20;;;-1:-1:-1;;;;;;20486:30:42;;20483:50;;;20529:1;20526;20519:12;20483:50;20562:4;20550:17;;-1:-1:-1;20593:14:42;20589:27;;;20579:38;;20576:58;;;20630:1;20627;20620:12;20645:129;-1:-1:-1;;;;;20723:5:42;20719:30;20712:5;20709:41;20699:69;;20764:1;20761;20754:12;20779:992;21157:10;21130:25;21148:6;21130:25;:::i;:::-;21126:42;21115:9;21108:61;21232:4;21224:6;21220:17;21207:31;21200:4;21189:9;21185:20;21178:61;21089:4;21286;21278:6;21274:17;21261:31;21301:30;21325:5;21301:30;:::i;:::-;-1:-1:-1;;;;;21373:5:42;21369:30;21362:4;21351:9;21347:20;21340:60;;21436:6;21431:2;21420:9;21416:18;21409:34;21480:3;21474;21463:9;21459:19;21452:32;21507:62;21564:3;21553:9;21549:19;21541:6;21533;21507:62;:::i;:::-;-1:-1:-1;;;;;21606:32:42;;21626:3;21585:19;;21578:61;21676:22;;;21670:3;21655:19;;21648:51;21716:49;21680:6;21750;21742;21716:49;:::i;:::-;21708:57;20779:992;-1:-1:-1;;;;;;;;;;20779:992:42:o;21776:647::-;21855:6;21908:2;21896:9;21887:7;21883:23;21879:32;21876:52;;;21924:1;21921;21914:12;21876:52;21957:9;21951:16;-1:-1:-1;;;;;21982:6:42;21979:30;21976:50;;;22022:1;22019;22012:12;21976:50;22045:22;;22098:4;22090:13;;22086:27;-1:-1:-1;22076:55:42;;22127:1;22124;22117:12;22076:55;22156:2;22150:9;22181:48;22197:31;22225:2;22197:31;:::i;22181:48::-;22252:2;22245:5;22238:17;22292:7;22287:2;22282;22278;22274:11;22270:20;22267:33;22264:53;;;22313:1;22310;22303:12;22264:53;22326:67;22390:2;22385;22378:5;22374:14;22369:2;22365;22361:11;22326:67;:::i;22878:245::-;22936:6;22989:2;22977:9;22968:7;22964:23;22960:32;22957:52;;;23005:1;23002;22995:12;22957:52;23044:9;23031:23;23063:30;23087:5;23063:30;:::i;23128:479::-;23395:1;23391;23386:3;23382:11;23378:19;23370:6;23366:32;23355:9;23348:51;23435:6;23430:2;23419:9;23415:18;23408:34;23490:6;23482;23478:19;23473:2;23462:9;23458:18;23451:47;23534:3;23529:2;23518:9;23514:18;23507:31;23329:4;23555:46;23596:3;23585:9;23581:19;23573:6;23555:46;:::i;24230:379::-;24423:2;24412:9;24405:21;24386:4;24449:45;24490:2;24479:9;24475:18;24467:6;24449:45;:::i;:::-;24542:9;24534:6;24530:22;24525:2;24514:9;24510:18;24503:50;24570:33;24596:6;24588;24570:33;:::i;24614:245::-;24681:6;24734:2;24722:9;24713:7;24709:23;24705:32;24702:52;;;24750:1;24747;24740:12;24702:52;24782:9;24776:16;24801:28;24823:5;24801:28;:::i;24864:891::-;25087:2;25076:9;25069:21;25145:10;25136:6;25130:13;25126:30;25121:2;25110:9;25106:18;25099:58;25211:4;25203:6;25199:17;25193:24;25188:2;25177:9;25173:18;25166:52;25050:4;25265:2;25257:6;25253:15;25247:22;25306:4;25300:3;25289:9;25285:19;25278:33;25334:52;25381:3;25370:9;25366:19;25352:12;25334:52;:::i;:::-;25320:66;;25435:2;25427:6;25423:15;25417:22;25509:2;25505:7;25493:9;25485:6;25481:22;25477:36;25470:4;25459:9;25455:20;25448:66;25537:41;25571:6;25555:14;25537:41;:::i;:::-;25647:3;25635:16;;;;25629:23;25622:31;25615:39;25609:3;25594:19;;25587:68;-1:-1:-1;;;;;;;;25716:32:42;;;;25709:4;25694:20;;;25687:62;25523:55;24864:891::o;25760:284::-;25830:5;25878:4;25866:9;25861:3;25857:19;25853:30;25850:50;;;25896:1;25893;25886:12;25850:50;25918:22;;:::i;:::-;25909:31;;25969:9;25963:16;25956:5;25949:31;26033:2;26022:9;26018:18;26012:25;26007:2;26000:5;25996:14;25989:49;25760:284;;;;:::o;26049:259::-;26149:6;26202:2;26190:9;26181:7;26177:23;26173:32;26170:52;;;26218:1;26215;26208:12;26170:52;26241:61;26294:7;26283:9;26241:61;:::i;26438:542::-;26539:2;26534:3;26531:11;26528:446;;;26575:1;26599:5;26596:1;26589:16;26643:4;26640:1;26630:18;26713:2;26701:10;26697:19;26694:1;26690:27;26684:4;26680:38;26749:4;26737:10;26734:20;26731:47;;;-1:-1:-1;26772:4:42;26731:47;26827:2;26822:3;26818:12;26815:1;26811:20;26805:4;26801:31;26791:41;;26882:82;26900:2;26893:5;26890:13;26882:82;;;26945:17;;;26926:1;26915:13;26882:82;;;26886:3;;;26438:542;;;:::o;27156:1341::-;27280:3;27274:10;-1:-1:-1;;;;;27299:6:42;27296:30;27293:56;;;27329:18;;:::i;:::-;27358:96;27447:6;27407:38;27439:4;27433:11;27407:38;:::i;:::-;27401:4;27358:96;:::i;:::-;27509:4;;27566:2;27555:14;;27583:1;27578:662;;;;28284:1;28301:6;28298:89;;;-1:-1:-1;28353:19:42;;;28347:26;28298:89;-1:-1:-1;;27113:1:42;27109:11;;;27105:24;27101:29;27091:40;27137:1;27133:11;;;27088:57;28400:81;;27548:943;;27578:662;26385:1;26378:14;;;26422:4;26409:18;;-1:-1:-1;;27614:20:42;;;27731:236;27745:7;27742:1;27739:14;27731:236;;;27834:19;;;27828:26;27813:42;;27926:27;;;;27894:1;27882:14;;;;27761:19;;27731:236;;;27735:3;27995:6;27986:7;27983:19;27980:201;;;28056:19;;;28050:26;-1:-1:-1;;28139:1:42;28135:14;;;28151:3;28131:24;28127:37;28123:42;28108:58;28093:74;;27980:201;-1:-1:-1;;;;;28227:1:42;28211:14;;;28207:22;28194:36;;-1:-1:-1;27156:1341:42:o;28502:1162::-;28716:4;28745:2;28785;28774:9;28770:18;28815:2;28804:9;28797:21;28838:6;28873;28867:13;28904:6;28896;28889:22;28930:2;28920:12;;28963:2;28952:9;28948:18;28941:25;;29025:2;29015:6;29012:1;29008:14;28997:9;28993:30;28989:39;29063:2;29055:6;29051:15;29084:1;29094:541;29108:6;29105:1;29102:13;29094:541;;;29173:22;;;-1:-1:-1;;29169:36:42;29157:49;;29229:13;;29301:9;;29312:10;29297:26;29282:42;;29371:11;;;29365:18;29385:6;29361:31;29344:15;;;29337:56;29432:11;;29426:18;29265:4;29464:15;;;29457:27;;;29507:48;29539:15;;;29426:18;29507:48;:::i;:::-;29613:12;;;;29497:58;-1:-1:-1;;;29578:15:42;;;;29130:1;29123:9;29094:541;;;-1:-1:-1;29652:6:42;;28502:1162;-1:-1:-1;;;;;;;;28502:1162:42:o;29669:348::-;29758:6;29811:2;29799:9;29790:7;29786:23;29782:32;29779:52;;;29827:1;29824;29817:12;29779:52;29853:22;;:::i;:::-;29911:9;29898:23;29891:5;29884:38;29982:2;29971:9;29967:18;29954:32;29949:2;29942:5;29938:14;29931:56;30006:5;29996:15;;;29669:348;;;;:::o;30361:127::-;30422:10;30417:3;30413:20;30410:1;30403:31;30453:4;30450:1;30443:15;30477:4;30474:1;30467:15;30493:217;30533:1;30559;30549:132;;30603:10;30598:3;30594:20;30591:1;30584:31;30638:4;30635:1;30628:15;30666:4;30663:1;30656:15;30549:132;-1:-1:-1;30695:9:42;;30493:217::o;30715:168::-;30788:9;;;30819;;30836:15;;;30830:22;;30816:37;30806:71;;30857:18;;:::i;30888:255::-;31008:19;;31047:2;31039:11;;31036:101;;;-1:-1:-1;;31108:2:42;31104:12;;;31101:1;31097:20;31093:33;31082:45;30888:255;;;;:::o;31148:331::-;-1:-1:-1;;;;;;31268:19:42;;31352:11;;;;31383:1;31375:10;;31372:101;;;31460:2;31454;31447:3;31444:1;31440:11;31437:1;31433:19;31429:28;31425:2;31421:37;31417:46;31408:55;;31372:101;;;31148:331;;;;:::o;31484:568::-;-1:-1:-1;;;;;31749:3:42;31745:28;31736:6;31731:3;31727:16;31723:51;31718:3;31711:64;31835:10;31830:3;31826:20;31817:6;31812:3;31808:16;31804:43;31800:1;31795:3;31791:11;31784:64;31878:6;31873:2;31868:3;31864:12;31857:28;31693:3;31914:6;31908:13;31930:75;31998:6;31993:2;31988:3;31984:12;31977:4;31969:6;31965:17;31930:75;:::i;:::-;32025:16;;;;32043:2;32021:25;;31484:568;-1:-1:-1;;;;;31484:568:42:o;32057:125::-;32122:9;;;32143:10;;;32140:36;;;32156:18;;:::i;32482:532::-;32723:6;32718:3;32711:19;-1:-1:-1;;;;;32786:3:42;32782:28;32773:6;32768:3;32764:16;32760:51;32755:2;32750:3;32746:12;32739:73;32842:6;32837:2;32832:3;32828:12;32821:28;32693:3;32878:6;32872:13;32894:73;32960:6;32955:2;32950:3;32946:12;32941:2;32933:6;32929:15;32894:73;:::i;:::-;32987:16;;;;33005:2;32983:25;;32482:532;-1:-1:-1;;;;;32482:532:42:o;33019:525::-;33123:6;33176:3;33164:9;33155:7;33151:23;33147:33;33144:53;;;33193:1;33190;33183:12;33144:53;33219:22;;:::i;:::-;33270:9;33264:16;33257:5;33250:31;33326:2;33315:9;33311:18;33305:25;33339:32;33363:7;33339:32;:::i;:::-;33398:2;33387:14;;33380:31;33443:70;33505:7;33500:2;33485:18;;33443:70;:::i;:::-;33438:2;33427:14;;33420:94;33431:5;33019:525;-1:-1:-1;;;33019:525:42:o;33549:251::-;33619:6;33672:2;33660:9;33651:7;33647:23;33643:32;33640:52;;;33688:1;33685;33678:12;33640:52;33720:9;33714:16;33739:31;33764:5;33739:31;:::i
Swarm Source
ipfs://eba3b4b5a2f52f3a20bb62dba366151a8feec4e3776f5d2ad929cd4457fca9bf
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.