// This file was autogenerated by hardhat-viem, do not edit it. // prettier-ignore // tslint:disable // eslint-disable import type { Address } from "viem"; import type { AbiParameterToPrimitiveType, GetContractReturnType } from "@nomicfoundation/hardhat-viem/types"; import "@nomicfoundation/hardhat-viem/types"; export interface OFTImpl$Type { "_format": "hh-sol-artifact-1", "contractName": "OFTImpl", "sourceName": "contracts/cross-chain/oft/OFTImpl.sol", "abi": [ { "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" }, { "internalType": "address", "name": "_initialOwner", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "uint256", "name": "amountSD", "type": "uint256" } ], "name": "AmountSDOverflowed", "type": "error" }, { "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" } ], "bytecode": "0x60c060405234801561000f575f5ffd5b506040516134e03803806134e083398101604081905261002e9161028d565b84848484838360128484818181818d6001600160a01b03811661006f575f604051631e4fbdf760e01b81526004016100669190610322565b60405180910390fd5b61007881610181565b506001600160a01b0380831660805281166100a657604051632d618d8160e21b815260040160405180910390fd5b6080516001600160a01b031663ca5eb5e1826040518263ffffffff1660e01b81526004016100d49190610322565b5f604051808303815f87803b1580156100eb575f5ffd5b505af11580156100fd573d5f5f3e3d5ffd5b50505050505050506101136101d060201b60201c565b60ff168360ff161015610139576040516301e9714b60e41b815260040160405180910390fd5b61014460068461034a565b61014f90600a61044c565b60a0525060089150610163905083826104e5565b50600961017082826104e5565b50505050505050505050505061059f565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126101f8575f5ffd5b81516001600160401b03811115610211576102116101d5565b604051601f8201601f19908116603f011681016001600160401b038111828210171561023f5761023f6101d5565b604052818152838201602001851015610256575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b80516001600160a01b0381168114610288575f5ffd5b919050565b5f5f5f5f5f60a086880312156102a1575f5ffd5b85516001600160401b038111156102b6575f5ffd5b6102c2888289016101e9565b602088015190965090506001600160401b038111156102df575f5ffd5b6102eb888289016101e9565b9450506102fa60408701610272565b925061030860608701610272565b915061031660808701610272565b90509295509295909350565b6001600160a01b0391909116815260200190565b634e487b7160e01b5f52601160045260245ffd5b60ff828116828216039081111561036357610363610336565b92915050565b6001815b60018411156103a45780850481111561038857610388610336565b600184161561039657908102905b60019390931c92800261036d565b935093915050565b5f826103ba57506001610363565b816103c657505f610363565b81600181146103dc57600281146103e657610402565b6001915050610363565b60ff8411156103f7576103f7610336565b50506001821b610363565b5060208310610133831016604e8410600b8410161715610425575081810a610363565b6104315f198484610369565b805f190482111561044457610444610336565b029392505050565b5f61045a60ff8416836103ac565b9392505050565b600181811c9082168061047557607f821691505b60208210810361049357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156104e057805f5260205f20601f840160051c810160208510156104be5750805b601f840160051c820191505b818110156104dd575f81556001016104ca565b50505b505050565b81516001600160401b038111156104fe576104fe6101d5565b6105128161050c8454610461565b84610499565b6020601f821160018114610544575f831561052d5750848201515b5f19600385901b1c1916600184901b1784556104dd565b5f84815260208120601f198516915b828110156105735787850151825560209485019460019092019101610553565b508482101561059057868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60805160a051612eda6106065f395f81816105650152818161192b0152818161199d0152611b8801525f81816104380152818161094301528181610f66015281816112020152818161152401528181611caa01528181611e110152611ec60152612eda5ff3fe6080604052600436106101e0575f3560e01c806306fdde03146101e4578063095ea7b31461020e5780630d35b4151461023d578063111ecdad1461026b57806313137d6514610297578063134d4f25146102ac578063156a0d0f146102d357806317442b70146102f957806318160ddd1461031a5780631f5e13341461033857806323b872dd1461034c578063313ce5671461036b5780633400288b1461038c5780633b6f743b146103ab57806352ae2879146103d75780635535d461146103e95780635a0dfe4d146104085780635e280f11146104275780636fc1b31e1461045a57806370a0823114610479578063715018a6146104ad5780637d25a05e146104c157806382413eac146104fa578063857749b0146105195780638da5cb5b1461052c57806395d89b4114610540578063963efcaa146105545780639f68b96414610587578063a9059cbb14610599578063b731ea0a146105b8578063b98bd070146105d7578063bb0b6a53146105f6578063bc70b35414610621578063bd815db014610640578063c7c7f5b314610653578063ca5eb5e114610674578063d045a0dc14610693578063d4243885146106a6578063dd62ed3e146106c5578063f2fde38b146106e4578063fc0c546a146103d7578063ff7bd03d14610703575b5f5ffd5b3480156101ef575f5ffd5b506101f8610722565b6040516102059190612004565b60405180910390f35b348015610219575f5ffd5b5061022d61022836600461202a565b6107b2565b6040519015158152602001610205565b348015610248575f5ffd5b5061025c61025736600461206a565b6107cb565b604051610205939291906120aa565b348015610276575f5ffd5b5060045461028a906001600160a01b031681565b604051610205919061213a565b6102aa6102a53660046121a2565b610941565b005b3480156102b7575f5ffd5b506102c0600281565b60405161ffff9091168152602001610205565b3480156102de575f5ffd5b506040805162b9270b60e21b81526001602082015201610205565b348015610304575f5ffd5b5060408051600181526002602082015201610205565b348015610325575f5ffd5b506007545b604051908152602001610205565b348015610343575f5ffd5b506102c0600181565b348015610357575f5ffd5b5061022d61036636600461223c565b6109f9565b348015610376575f5ffd5b5060125b60405160ff9091168152602001610205565b348015610397575f5ffd5b506102aa6103a6366004612292565b610a1e565b3480156103b6575f5ffd5b506103ca6103c53660046122b9565b610a34565b6040516102059190612307565b3480156103e2575f5ffd5b503061028a565b3480156103f4575f5ffd5b506101f8610403366004612326565b610a8d565b348015610413575f5ffd5b5061022d610422366004612292565b610b2f565b348015610432575f5ffd5b5061028a7f000000000000000000000000000000000000000000000000000000000000000081565b348015610465575f5ffd5b506102aa610474366004612357565b610b4a565b348015610484575f5ffd5b5061032a610493366004612357565b6001600160a01b03165f9081526005602052604090205490565b3480156104b8575f5ffd5b506102aa610ba8565b3480156104cc575f5ffd5b506104e26104db366004612292565b5f92915050565b6040516001600160401b039091168152602001610205565b348015610505575f5ffd5b5061022d610514366004612372565b610bbb565b348015610524575f5ffd5b50600661037a565b348015610537575f5ffd5b5061028a610bd0565b34801561054b575f5ffd5b506101f8610bde565b34801561055f575f5ffd5b5061032a7f000000000000000000000000000000000000000000000000000000000000000081565b348015610592575f5ffd5b505f61022d565b3480156105a4575f5ffd5b5061022d6105b336600461202a565b610bed565b3480156105c3575f5ffd5b5060025461028a906001600160a01b031681565b3480156105e2575f5ffd5b506102aa6105f1366004612414565b610bfa565b348015610601575f5ffd5b5061032a610610366004612452565b60016020525f908152604090205481565b34801561062c575f5ffd5b506101f861063b36600461246b565b610c14565b6102aa61064e366004612414565b610db5565b6106666106613660046124c7565b610f1f565b60405161020592919061252f565b34801561067f575f5ffd5b506102aa61068e366004612357565b610f47565b6102aa6106a13660046121a2565b610fcb565b3480156106b1575f5ffd5b506102aa6106c0366004612357565b610ffa565b3480156106d0575f5ffd5b5061032a6106df36600461256b565b61104d565b3480156106ef575f5ffd5b506102aa6106fe366004612357565b611077565b34801561070e575f5ffd5b5061022d61071d366004612597565b6110b4565b606060088054610731906125b1565b80601f016020809104026020016040519081016040528092919081815260200182805461075d906125b1565b80156107a85780601f1061077f576101008083540402835291602001916107a8565b820191905f5260205f20905b81548152906001019060200180831161078b57829003601f168201915b5050505050905090565b5f336107bf8185856110e8565b60019150505b92915050565b604080518082019091525f808252602082015260606107e8611f9b565b5f5f90505f306001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610829573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061084d91906125e3565b6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610888573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ac91906125fe565b604080518082018252848152602080820184905282515f808252918101909352909750919250906108ff565b604080518082019091525f8152606060208201528152602001906001900390816108d85790505b5093505f80610923604089013560608a013561091e60208c018c612452565b6110fa565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316331461099557336040516391ac5e4f60e01b815260040161098c919061213a565b60405180910390fd5b602087018035906109af906109aa908a612452565b611135565b146109e1576109c16020880188612452565b876020013560405163309afaf360e21b815260040161098c929190612629565b6109f087878787878787611170565b50505050505050565b5f33610a068582856112c7565b610a11858585611318565b60019150505b9392505050565b610a26611375565b610a3082826113a7565b5050565b610a3c611f9b565b5f610a576040850135606086013561091e6020880188612452565b9150505f5f610a6686846113fc565b9092509050610a83610a7b6020880188612452565b83838861151a565b9695505050505050565b600360209081525f928352604080842090915290825290208054610ab0906125b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610adc906125b1565b8015610b275780601f10610afe57610100808354040283529160200191610b27565b820191905f5260205f20905b815481529060010190602001808311610b0a57829003601f168201915b505050505081565b63ffffffff919091165f908152600160205260409020541490565b610b52611375565b600480546001600160a01b0319166001600160a01b0383161790556040517ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d441419790610b9d90839061213a565b60405180910390a150565b610bb0611375565b610bb95f6115ed565b565b6001600160a01b03811630145b949350505050565b5f546001600160a01b031690565b606060098054610731906125b1565b5f336107bf818585611318565b610c02611375565b610a30610c0f82846126df565b61163c565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610c47906125b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610c73906125b1565b8015610cbe5780601f10610c9557610100808354040283529160200191610cbe565b820191905f5260205f20905b815481529060010190602001808311610ca157829003601f168201915b5050505050905080515f03610d0c5783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610bc89350505050565b5f839003610d1b579050610bc8565b60028310610d9857610d6184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061173d92505050565b80610d6f8460028188612800565b604051602001610d819392919061283e565b604051602081830303815290604052915050610bc8565b8383604051639a6d49cd60e01b815260040161098c929190612884565b5f5b81811015610ea25736838383818110610dd257610dd2612897565b9050602002810190610de491906128ab565b9050610e00610df66020830183612452565b6020830135610b2f565b610e0a5750610e9a565b3063d045a0dc60c08301358360a0810135610e296101008301836128ca565b610e3a610100890160e08a01612357565b610e486101208a018a6128ca565b6040518963ffffffff1660e01b8152600401610e6a9796959493929190612920565b5f604051808303818588803b158015610e81575f5ffd5b505af1158015610e93573d5f5f3e3d5ffd5b5050505050505b600101610db7565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa158015610ede573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f0591908101906129a5565b604051638351eea760e01b815260040161098c9190612004565b610f27611fb3565b610f2f611f9b565b610f3a858585611769565b915091505b935093915050565b610f4f611375565b60405163ca5eb5e160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190610f9b90849060040161213a565b5f604051808303815f87803b158015610fb2575f5ffd5b505af1158015610fc4573d5f5f3e3d5ffd5b5050505050565b333014610feb5760405163029a949d60e31b815260040160405180910390fd5b6109f0878787878787876109e1565b611002611375565b600280546001600160a01b0319166001600160a01b0383161790556040517fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090610b9d90839061213a565b6001600160a01b039182165f90815260066020908152604080832093909416825291909152205490565b61107f611375565b6001600160a01b0381166110a8575f604051631e4fbdf760e01b815260040161098c919061213a565b6110b1816115ed565b50565b5f6020820180359060019083906110cb9086612452565b63ffffffff16815260208101919091526040015f20541492915050565b6110f58383836001611856565b505050565b5f5f61110585611928565b915081905083811015610f3f576040516371c4efed60e01b8152600481018290526024810185905260440161098c565b63ffffffff81165f90815260016020526040812054806107c55760405163f6ff4fb760e01b815263ffffffff8416600482015260240161098c565b5f61118161117e878761195e565b90565b90505f6111ac8261119a6111958a8a611975565b611997565b6111a760208d018d612452565b6119cb565b9050602886111561126c575f6111e86111cb60608c0160408d01612a19565b6111d860208d018d612452565b846111e38c8c6119f2565b611a3c565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb590129061123d9086908d905f908790600401612a34565b5f604051808303815f87803b158015611254575f5ffd5b505af1158015611266573d5f5f3e3d5ffd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c6112a560208d018d612452565b846040516112b4929190612629565b60405180910390a3505050505050505050565b5f6112d2848461104d565b90505f19811015611312578181101561130457828183604051637dc7a0d960e11b815260040161098c93929190612a64565b61131284848484035f611856565b50505050565b6001600160a01b038316611341575f604051634b637e8f60e11b815260040161098c919061213a565b6001600160a01b03821661136a575f60405163ec442f0560e01b815260040161098c919061213a565b6110f5838383611a6e565b3361137e610bd0565b6001600160a01b031614610bb9573360405163118cdaa760e01b815260040161098c919061213a565b63ffffffff82165f9081526001602052604090819020829055517f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b906113f09084908490612629565b60405180910390a15050565b6060805f611457856020013561141186611b81565b61141e60a08901896128ca565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611bda92505050565b90935090505f8161146957600161146c565b60025b905061148c61147e6020880188612452565b8261063b60808a018a6128ca565b6004549093506001600160a01b031680156115105760405163043a78eb60e01b81526001600160a01b0382169063043a78eb906114cf9088908890600401612a85565b602060405180830381865afa1580156114ea573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150e9190612aa9565b505b5050509250929050565b611522611f9b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161157189611135565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016115a6929190612ac4565b6040805180830381865afa1580156115c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115e49190612b6b565b95945050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5b815181101561170d5761166d82828151811061165c5761165c612897565b60200260200101516040015161173d565b81818151811061167f5761167f612897565b60200260200101516040015160035f8484815181106116a0576116a0612897565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f8484815181106116d7576116d7612897565b60200260200101516020015161ffff1661ffff1681526020019081526020015f2090816117049190612bc9565b5060010161163e565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610b9d9190612c83565b600281015161ffff8116600314610a305781604051639a6d49cd60e01b815260040161098c9190612004565b611771611fb3565b611779611f9b565b5f8061179b33604089013560608a013561179660208c018c612452565b611c54565b915091505f5f6117ab89846113fc565b90925090506117d76117c060208b018b612452565b83836117d1368d90038d018d612d11565b8b611c79565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611825908d018d612452565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6001600160a01b03841661187f575f60405163e602df0560e01b815260040161098c919061213a565b6001600160a01b0383166118a8575f604051634a1406b160e11b815260040161098c919061213a565b6001600160a01b038085165f908152600660209081526040808320938716835292905220829055801561131257826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161191a91815260200190565b60405180910390a350505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006119548184612d56565b6107c59190612d75565b5f61196c6020828486612800565b610a1791612d8c565b5f611984602860208486612800565b61198d91612da9565b60c01c9392505050565b5f6107c57f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416612d75565b5f6001600160a01b0384166119e05761dead93505b6119ea8484611d7f565b509092915050565b6060611a018260288186612800565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b606084848484604051602001611a559493929190612de1565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611a98578060075f828254611a8d9190612e1b565b90915550611af59050565b6001600160a01b0383165f9081526005602052604090205481811015611ad75783818360405163391434e360e21b815260040161098c93929190612a64565b6001600160a01b0384165f9081526005602052604090209082900390555b6001600160a01b038216611b1157600780548290039055611b2f565b6001600160a01b0382165f9081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b7491815260200190565b60405180910390a3505050565b5f80611bad7f000000000000000000000000000000000000000000000000000000000000000084612d56565b90506001600160401b038111156107c55760405163e2ce941360e01b81526004810182905260240161098c565b8051606090151580611c23578484604051602001611c0f92919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611c4a565b84843385604051602001611c3a9493929190612e2e565b6040516020818303038152906040525b9150935093915050565b5f5f611c618585856110fa565b9092509050611c708683611db3565b94509492505050565b611c81611fb3565b5f611c8e845f0151611de7565b602085015190915015611ca857611ca88460200151611e0e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611cf88c611135565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b8152600401611d33929190612ac4565b60806040518083038185885af1158015611d4f573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611d749190612e5a565b979650505050505050565b6001600160a01b038216611da8575f60405163ec442f0560e01b815260040161098c919061213a565b610a305f8383611a6e565b6001600160a01b038216611ddc575f604051634b637e8f60e11b815260040161098c919061213a565b610a30825f83611a6e565b5f813414611e0a576040516304fb820960e51b815234600482015260240161098c565b5090565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e6b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e8f91906125e3565b90506001600160a01b038116611eb8576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610a309688169589936113129388935f9283929091839182885af180611f57576040513d5f823e3d81fd5b50505f513d91508115611f6e578060011415611f7b565b6001600160a01b0384163b155b156113125783604051635274afe760e01b815260040161098c919061213a565b60405180604001604052805f81526020015f81525090565b604080516060810182525f8082526020820152908101611fd1611f9b565b905290565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610a176020830184611fd6565b6001600160a01b03811681146110b1575f5ffd5b5f5f6040838503121561203b575f5ffd5b823561204681612016565b946020939093013593505050565b5f60e08284031215612064575f5ffd5b50919050565b5f6020828403121561207a575f5ffd5b81356001600160401b0381111561208f575f5ffd5b610bc884828501612054565b80518252602090810151910152565b5f60a082016120b9838761209b565b60a0604084015280855180835260c08501915060c08160051b8601019250602087015f5b828110156121255760bf19878603018452815180518652602081015190506040602087015261210f6040870182611fd6565b95505060209384019391909101906001016120dd565b5050505080915050610bc8606083018461209b565b6001600160a01b0391909116815260200190565b5f60608284031215612064575f5ffd5b5f5f83601f84011261216e575f5ffd5b5081356001600160401b03811115612184575f5ffd5b60208301915083602082850101111561219b575f5ffd5b9250929050565b5f5f5f5f5f5f5f60e0888a0312156121b8575f5ffd5b6121c2898961214e565b96506060880135955060808801356001600160401b038111156121e3575f5ffd5b6121ef8a828b0161215e565b90965094505060a088013561220381612016565b925060c08801356001600160401b0381111561221d575f5ffd5b6122298a828b0161215e565b989b979a50959850939692959293505050565b5f5f5f6060848603121561224e575f5ffd5b833561225981612016565b9250602084013561226981612016565b929592945050506040919091013590565b803563ffffffff8116811461228d575f5ffd5b919050565b5f5f604083850312156122a3575f5ffd5b6120468361227a565b80151581146110b1575f5ffd5b5f5f604083850312156122ca575f5ffd5b82356001600160401b038111156122df575f5ffd5b6122eb85828601612054565b92505060208301356122fc816122ac565b809150509250929050565b604081016107c5828461209b565b803561ffff8116811461228d575f5ffd5b5f5f60408385031215612337575f5ffd5b6123408361227a565b915061234e60208401612315565b90509250929050565b5f60208284031215612367575f5ffd5b8135610a1781612016565b5f5f5f5f60a08587031215612385575f5ffd5b61238f868661214e565b935060608501356001600160401b038111156123a9575f5ffd5b6123b58782880161215e565b90945092505060808501356123c981612016565b939692955090935050565b5f5f83601f8401126123e4575f5ffd5b5081356001600160401b038111156123fa575f5ffd5b6020830191508360208260051b850101111561219b575f5ffd5b5f5f60208385031215612425575f5ffd5b82356001600160401b0381111561243a575f5ffd5b612446858286016123d4565b90969095509350505050565b5f60208284031215612462575f5ffd5b610a178261227a565b5f5f5f5f6060858703121561247e575f5ffd5b6124878561227a565b935061249560208601612315565b925060408501356001600160401b038111156124af575f5ffd5b6124bb8782880161215e565b95989497509550505050565b5f5f5f83850360808112156124da575f5ffd5b84356001600160401b038111156124ef575f5ffd5b6124fb87828801612054565b9450506040601f198201121561250f575f5ffd5b50602084019150606084013561252481612016565b809150509250925092565b825181526020808401516001600160401b03169082015260408084015160c083019161255d9084018261209b565b50610a17608083018461209b565b5f5f6040838503121561257c575f5ffd5b823561258781612016565b915060208301356122fc81612016565b5f606082840312156125a7575f5ffd5b610a17838361214e565b600181811c908216806125c557607f821691505b60208210810361206457634e487b7160e01b5f52602260045260245ffd5b5f602082840312156125f3575f5ffd5b8151610a1781612016565b5f6020828403121561260e575f5ffd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b63ffffffff929092168252602082015260400190565b604051606081016001600160401b038111828210171561266157612661612615565b60405290565b604080519081016001600160401b038111828210171561266157612661612615565b604051601f8201601f191681016001600160401b03811182821017156126b1576126b1612615565b604052919050565b5f6001600160401b038211156126d1576126d1612615565b50601f01601f191660200190565b5f6001600160401b038311156126f7576126f7612615565b8260051b61270760208201612689565b8481529083019060208101903683111561271f575f5ffd5b845b838110156127f65780356001600160401b0381111561273e575f5ffd5b86016060368290031215612750575f5ffd5b61275861263f565b6127618261227a565b815261276f60208301612315565b602082015260408201356001600160401b0381111561278c575f5ffd5b919091019036601f83011261279f575f5ffd5b81356127b26127ad826126b9565b612689565b8181523660208386010111156127c6575f5ffd5b816020850160208301375f6020838301015280604084015250508085525050602083019250602081019050612721565b5095945050505050565b5f5f8585111561280e575f5ffd5b8386111561281a575f5ffd5b5050820193919092039150565b5f81518060208401855e5f93019283525090919050565b5f6128498286612827565b838582375f930192835250909392505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f610bc860208301848661285c565b634e487b7160e01b5f52603260045260245ffd5b5f823561013e198336030181126128c0575f5ffd5b9190910192915050565b5f5f8335601e198436030181126128df575f5ffd5b8301803591506001600160401b038211156128f8575f5ffd5b60200191503681900382131561219b575f5ffd5b6001600160401b03811681146110b1575f5ffd5b63ffffffff61292e8961227a565b168152602088810135908201525f604089013561294a8161290c565b6001600160401b031660408301526060820188905260e060808301819052612975908301878961285c565b6001600160a01b03861660a084015282810360c084015261299781858761285c565b9a9950505050505050505050565b5f602082840312156129b5575f5ffd5b81516001600160401b038111156129ca575f5ffd5b8201601f810184136129da575f5ffd5b80516129e86127ad826126b9565b8181528560208385010111156129fc575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f60208284031215612a29575f5ffd5b8135610a178161290c565b60018060a01b038516815283602082015261ffff83166040820152608060608201525f610a836080830184611fd6565b6001600160a01b039390931683526020830191909152604082015260600190565b604081525f612a976040830185611fd6565b82810360208401526115e48185611fd6565b5f60208284031215612ab9575f5ffd5b8151610a17816122ac565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a06080840152612af960e0840182611fd6565b90506060850151603f198483030160a0850152612b168282611fd6565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b5f60408284031215612b4c575f5ffd5b612b54612667565b825181526020928301519281019290925250919050565b5f60408284031215612b7b575f5ffd5b610a178383612b3c565b601f8211156110f557805f5260205f20601f840160051c81016020851015612baa5750805b601f840160051c820191505b81811015610fc4575f8155600101612bb6565b81516001600160401b03811115612be257612be2612615565b612bf681612bf084546125b1565b84612b85565b6020601f821160018114612c28575f8315612c115750848201515b5f19600385901b1c1916600184901b178455610fc4565b5f84815260208120601f198516915b82811015612c575787850151825560209485019460019092019101612c37565b5084821015612c7457868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612d0557603f19878603018452815163ffffffff815116865261ffff60208201511660208701526040810151905060606040870152612cef6060870182611fd6565b9550506020938401939190910190600101612ca9565b50929695505050505050565b5f6040828403128015612d22575f5ffd5b50612d2b612667565b823581526020928301359281019290925250919050565b634e487b7160e01b5f52601160045260245ffd5b5f82612d7057634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176107c5576107c5612d42565b803560208310156107c5575f19602084900360031b1b1692915050565b80356001600160c01b03198116906008841015612dda576001600160c01b0319600885900360031b81901b82161691505b5092915050565b60c085901b6001600160c01b031916815260e084901b6001600160e01b0319166008820152600c81018390525f610a83602c830184612827565b808201808211156107c5576107c5612d42565b84815260c084901b6001600160c01b0319166020820152602881018390525f610a836048830184612827565b5f6080828403128015612e6b575f5ffd5b50612e7461263f565b825181526020830151612e868161290c565b6020820152612e988460408501612b3c565b6040820152939250505056fea26469706673582212201c438a480c5ee90c68085c67af2b8693130b8481b58177ab71075404776b480364736f6c634300081c0033", "deployedBytecode": "0x6080604052600436106101e0575f3560e01c806306fdde03146101e4578063095ea7b31461020e5780630d35b4151461023d578063111ecdad1461026b57806313137d6514610297578063134d4f25146102ac578063156a0d0f146102d357806317442b70146102f957806318160ddd1461031a5780631f5e13341461033857806323b872dd1461034c578063313ce5671461036b5780633400288b1461038c5780633b6f743b146103ab57806352ae2879146103d75780635535d461146103e95780635a0dfe4d146104085780635e280f11146104275780636fc1b31e1461045a57806370a0823114610479578063715018a6146104ad5780637d25a05e146104c157806382413eac146104fa578063857749b0146105195780638da5cb5b1461052c57806395d89b4114610540578063963efcaa146105545780639f68b96414610587578063a9059cbb14610599578063b731ea0a146105b8578063b98bd070146105d7578063bb0b6a53146105f6578063bc70b35414610621578063bd815db014610640578063c7c7f5b314610653578063ca5eb5e114610674578063d045a0dc14610693578063d4243885146106a6578063dd62ed3e146106c5578063f2fde38b146106e4578063fc0c546a146103d7578063ff7bd03d14610703575b5f5ffd5b3480156101ef575f5ffd5b506101f8610722565b6040516102059190612004565b60405180910390f35b348015610219575f5ffd5b5061022d61022836600461202a565b6107b2565b6040519015158152602001610205565b348015610248575f5ffd5b5061025c61025736600461206a565b6107cb565b604051610205939291906120aa565b348015610276575f5ffd5b5060045461028a906001600160a01b031681565b604051610205919061213a565b6102aa6102a53660046121a2565b610941565b005b3480156102b7575f5ffd5b506102c0600281565b60405161ffff9091168152602001610205565b3480156102de575f5ffd5b506040805162b9270b60e21b81526001602082015201610205565b348015610304575f5ffd5b5060408051600181526002602082015201610205565b348015610325575f5ffd5b506007545b604051908152602001610205565b348015610343575f5ffd5b506102c0600181565b348015610357575f5ffd5b5061022d61036636600461223c565b6109f9565b348015610376575f5ffd5b5060125b60405160ff9091168152602001610205565b348015610397575f5ffd5b506102aa6103a6366004612292565b610a1e565b3480156103b6575f5ffd5b506103ca6103c53660046122b9565b610a34565b6040516102059190612307565b3480156103e2575f5ffd5b503061028a565b3480156103f4575f5ffd5b506101f8610403366004612326565b610a8d565b348015610413575f5ffd5b5061022d610422366004612292565b610b2f565b348015610432575f5ffd5b5061028a7f000000000000000000000000000000000000000000000000000000000000000081565b348015610465575f5ffd5b506102aa610474366004612357565b610b4a565b348015610484575f5ffd5b5061032a610493366004612357565b6001600160a01b03165f9081526005602052604090205490565b3480156104b8575f5ffd5b506102aa610ba8565b3480156104cc575f5ffd5b506104e26104db366004612292565b5f92915050565b6040516001600160401b039091168152602001610205565b348015610505575f5ffd5b5061022d610514366004612372565b610bbb565b348015610524575f5ffd5b50600661037a565b348015610537575f5ffd5b5061028a610bd0565b34801561054b575f5ffd5b506101f8610bde565b34801561055f575f5ffd5b5061032a7f000000000000000000000000000000000000000000000000000000000000000081565b348015610592575f5ffd5b505f61022d565b3480156105a4575f5ffd5b5061022d6105b336600461202a565b610bed565b3480156105c3575f5ffd5b5060025461028a906001600160a01b031681565b3480156105e2575f5ffd5b506102aa6105f1366004612414565b610bfa565b348015610601575f5ffd5b5061032a610610366004612452565b60016020525f908152604090205481565b34801561062c575f5ffd5b506101f861063b36600461246b565b610c14565b6102aa61064e366004612414565b610db5565b6106666106613660046124c7565b610f1f565b60405161020592919061252f565b34801561067f575f5ffd5b506102aa61068e366004612357565b610f47565b6102aa6106a13660046121a2565b610fcb565b3480156106b1575f5ffd5b506102aa6106c0366004612357565b610ffa565b3480156106d0575f5ffd5b5061032a6106df36600461256b565b61104d565b3480156106ef575f5ffd5b506102aa6106fe366004612357565b611077565b34801561070e575f5ffd5b5061022d61071d366004612597565b6110b4565b606060088054610731906125b1565b80601f016020809104026020016040519081016040528092919081815260200182805461075d906125b1565b80156107a85780601f1061077f576101008083540402835291602001916107a8565b820191905f5260205f20905b81548152906001019060200180831161078b57829003601f168201915b5050505050905090565b5f336107bf8185856110e8565b60019150505b92915050565b604080518082019091525f808252602082015260606107e8611f9b565b5f5f90505f306001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610829573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061084d91906125e3565b6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610888573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ac91906125fe565b604080518082018252848152602080820184905282515f808252918101909352909750919250906108ff565b604080518082019091525f8152606060208201528152602001906001900390816108d85790505b5093505f80610923604089013560608a013561091e60208c018c612452565b6110fa565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316331461099557336040516391ac5e4f60e01b815260040161098c919061213a565b60405180910390fd5b602087018035906109af906109aa908a612452565b611135565b146109e1576109c16020880188612452565b876020013560405163309afaf360e21b815260040161098c929190612629565b6109f087878787878787611170565b50505050505050565b5f33610a068582856112c7565b610a11858585611318565b60019150505b9392505050565b610a26611375565b610a3082826113a7565b5050565b610a3c611f9b565b5f610a576040850135606086013561091e6020880188612452565b9150505f5f610a6686846113fc565b9092509050610a83610a7b6020880188612452565b83838861151a565b9695505050505050565b600360209081525f928352604080842090915290825290208054610ab0906125b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610adc906125b1565b8015610b275780601f10610afe57610100808354040283529160200191610b27565b820191905f5260205f20905b815481529060010190602001808311610b0a57829003601f168201915b505050505081565b63ffffffff919091165f908152600160205260409020541490565b610b52611375565b600480546001600160a01b0319166001600160a01b0383161790556040517ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d441419790610b9d90839061213a565b60405180910390a150565b610bb0611375565b610bb95f6115ed565b565b6001600160a01b03811630145b949350505050565b5f546001600160a01b031690565b606060098054610731906125b1565b5f336107bf818585611318565b610c02611375565b610a30610c0f82846126df565b61163c565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610c47906125b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610c73906125b1565b8015610cbe5780601f10610c9557610100808354040283529160200191610cbe565b820191905f5260205f20905b815481529060010190602001808311610ca157829003601f168201915b5050505050905080515f03610d0c5783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610bc89350505050565b5f839003610d1b579050610bc8565b60028310610d9857610d6184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061173d92505050565b80610d6f8460028188612800565b604051602001610d819392919061283e565b604051602081830303815290604052915050610bc8565b8383604051639a6d49cd60e01b815260040161098c929190612884565b5f5b81811015610ea25736838383818110610dd257610dd2612897565b9050602002810190610de491906128ab565b9050610e00610df66020830183612452565b6020830135610b2f565b610e0a5750610e9a565b3063d045a0dc60c08301358360a0810135610e296101008301836128ca565b610e3a610100890160e08a01612357565b610e486101208a018a6128ca565b6040518963ffffffff1660e01b8152600401610e6a9796959493929190612920565b5f604051808303818588803b158015610e81575f5ffd5b505af1158015610e93573d5f5f3e3d5ffd5b5050505050505b600101610db7565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa158015610ede573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f0591908101906129a5565b604051638351eea760e01b815260040161098c9190612004565b610f27611fb3565b610f2f611f9b565b610f3a858585611769565b915091505b935093915050565b610f4f611375565b60405163ca5eb5e160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190610f9b90849060040161213a565b5f604051808303815f87803b158015610fb2575f5ffd5b505af1158015610fc4573d5f5f3e3d5ffd5b5050505050565b333014610feb5760405163029a949d60e31b815260040160405180910390fd5b6109f0878787878787876109e1565b611002611375565b600280546001600160a01b0319166001600160a01b0383161790556040517fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090610b9d90839061213a565b6001600160a01b039182165f90815260066020908152604080832093909416825291909152205490565b61107f611375565b6001600160a01b0381166110a8575f604051631e4fbdf760e01b815260040161098c919061213a565b6110b1816115ed565b50565b5f6020820180359060019083906110cb9086612452565b63ffffffff16815260208101919091526040015f20541492915050565b6110f58383836001611856565b505050565b5f5f61110585611928565b915081905083811015610f3f576040516371c4efed60e01b8152600481018290526024810185905260440161098c565b63ffffffff81165f90815260016020526040812054806107c55760405163f6ff4fb760e01b815263ffffffff8416600482015260240161098c565b5f61118161117e878761195e565b90565b90505f6111ac8261119a6111958a8a611975565b611997565b6111a760208d018d612452565b6119cb565b9050602886111561126c575f6111e86111cb60608c0160408d01612a19565b6111d860208d018d612452565b846111e38c8c6119f2565b611a3c565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb590129061123d9086908d905f908790600401612a34565b5f604051808303815f87803b158015611254575f5ffd5b505af1158015611266573d5f5f3e3d5ffd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c6112a560208d018d612452565b846040516112b4929190612629565b60405180910390a3505050505050505050565b5f6112d2848461104d565b90505f19811015611312578181101561130457828183604051637dc7a0d960e11b815260040161098c93929190612a64565b61131284848484035f611856565b50505050565b6001600160a01b038316611341575f604051634b637e8f60e11b815260040161098c919061213a565b6001600160a01b03821661136a575f60405163ec442f0560e01b815260040161098c919061213a565b6110f5838383611a6e565b3361137e610bd0565b6001600160a01b031614610bb9573360405163118cdaa760e01b815260040161098c919061213a565b63ffffffff82165f9081526001602052604090819020829055517f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b906113f09084908490612629565b60405180910390a15050565b6060805f611457856020013561141186611b81565b61141e60a08901896128ca565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611bda92505050565b90935090505f8161146957600161146c565b60025b905061148c61147e6020880188612452565b8261063b60808a018a6128ca565b6004549093506001600160a01b031680156115105760405163043a78eb60e01b81526001600160a01b0382169063043a78eb906114cf9088908890600401612a85565b602060405180830381865afa1580156114ea573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150e9190612aa9565b505b5050509250929050565b611522611f9b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161157189611135565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016115a6929190612ac4565b6040805180830381865afa1580156115c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115e49190612b6b565b95945050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5b815181101561170d5761166d82828151811061165c5761165c612897565b60200260200101516040015161173d565b81818151811061167f5761167f612897565b60200260200101516040015160035f8484815181106116a0576116a0612897565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f8484815181106116d7576116d7612897565b60200260200101516020015161ffff1661ffff1681526020019081526020015f2090816117049190612bc9565b5060010161163e565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610b9d9190612c83565b600281015161ffff8116600314610a305781604051639a6d49cd60e01b815260040161098c9190612004565b611771611fb3565b611779611f9b565b5f8061179b33604089013560608a013561179660208c018c612452565b611c54565b915091505f5f6117ab89846113fc565b90925090506117d76117c060208b018b612452565b83836117d1368d90038d018d612d11565b8b611c79565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611825908d018d612452565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6001600160a01b03841661187f575f60405163e602df0560e01b815260040161098c919061213a565b6001600160a01b0383166118a8575f604051634a1406b160e11b815260040161098c919061213a565b6001600160a01b038085165f908152600660209081526040808320938716835292905220829055801561131257826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161191a91815260200190565b60405180910390a350505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006119548184612d56565b6107c59190612d75565b5f61196c6020828486612800565b610a1791612d8c565b5f611984602860208486612800565b61198d91612da9565b60c01c9392505050565b5f6107c57f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416612d75565b5f6001600160a01b0384166119e05761dead93505b6119ea8484611d7f565b509092915050565b6060611a018260288186612800565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b606084848484604051602001611a559493929190612de1565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611a98578060075f828254611a8d9190612e1b565b90915550611af59050565b6001600160a01b0383165f9081526005602052604090205481811015611ad75783818360405163391434e360e21b815260040161098c93929190612a64565b6001600160a01b0384165f9081526005602052604090209082900390555b6001600160a01b038216611b1157600780548290039055611b2f565b6001600160a01b0382165f9081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b7491815260200190565b60405180910390a3505050565b5f80611bad7f000000000000000000000000000000000000000000000000000000000000000084612d56565b90506001600160401b038111156107c55760405163e2ce941360e01b81526004810182905260240161098c565b8051606090151580611c23578484604051602001611c0f92919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611c4a565b84843385604051602001611c3a9493929190612e2e565b6040516020818303038152906040525b9150935093915050565b5f5f611c618585856110fa565b9092509050611c708683611db3565b94509492505050565b611c81611fb3565b5f611c8e845f0151611de7565b602085015190915015611ca857611ca88460200151611e0e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611cf88c611135565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b8152600401611d33929190612ac4565b60806040518083038185885af1158015611d4f573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611d749190612e5a565b979650505050505050565b6001600160a01b038216611da8575f60405163ec442f0560e01b815260040161098c919061213a565b610a305f8383611a6e565b6001600160a01b038216611ddc575f604051634b637e8f60e11b815260040161098c919061213a565b610a30825f83611a6e565b5f813414611e0a576040516304fb820960e51b815234600482015260240161098c565b5090565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e6b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e8f91906125e3565b90506001600160a01b038116611eb8576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610a309688169589936113129388935f9283929091839182885af180611f57576040513d5f823e3d81fd5b50505f513d91508115611f6e578060011415611f7b565b6001600160a01b0384163b155b156113125783604051635274afe760e01b815260040161098c919061213a565b60405180604001604052805f81526020015f81525090565b604080516060810182525f8082526020820152908101611fd1611f9b565b905290565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610a176020830184611fd6565b6001600160a01b03811681146110b1575f5ffd5b5f5f6040838503121561203b575f5ffd5b823561204681612016565b946020939093013593505050565b5f60e08284031215612064575f5ffd5b50919050565b5f6020828403121561207a575f5ffd5b81356001600160401b0381111561208f575f5ffd5b610bc884828501612054565b80518252602090810151910152565b5f60a082016120b9838761209b565b60a0604084015280855180835260c08501915060c08160051b8601019250602087015f5b828110156121255760bf19878603018452815180518652602081015190506040602087015261210f6040870182611fd6565b95505060209384019391909101906001016120dd565b5050505080915050610bc8606083018461209b565b6001600160a01b0391909116815260200190565b5f60608284031215612064575f5ffd5b5f5f83601f84011261216e575f5ffd5b5081356001600160401b03811115612184575f5ffd5b60208301915083602082850101111561219b575f5ffd5b9250929050565b5f5f5f5f5f5f5f60e0888a0312156121b8575f5ffd5b6121c2898961214e565b96506060880135955060808801356001600160401b038111156121e3575f5ffd5b6121ef8a828b0161215e565b90965094505060a088013561220381612016565b925060c08801356001600160401b0381111561221d575f5ffd5b6122298a828b0161215e565b989b979a50959850939692959293505050565b5f5f5f6060848603121561224e575f5ffd5b833561225981612016565b9250602084013561226981612016565b929592945050506040919091013590565b803563ffffffff8116811461228d575f5ffd5b919050565b5f5f604083850312156122a3575f5ffd5b6120468361227a565b80151581146110b1575f5ffd5b5f5f604083850312156122ca575f5ffd5b82356001600160401b038111156122df575f5ffd5b6122eb85828601612054565b92505060208301356122fc816122ac565b809150509250929050565b604081016107c5828461209b565b803561ffff8116811461228d575f5ffd5b5f5f60408385031215612337575f5ffd5b6123408361227a565b915061234e60208401612315565b90509250929050565b5f60208284031215612367575f5ffd5b8135610a1781612016565b5f5f5f5f60a08587031215612385575f5ffd5b61238f868661214e565b935060608501356001600160401b038111156123a9575f5ffd5b6123b58782880161215e565b90945092505060808501356123c981612016565b939692955090935050565b5f5f83601f8401126123e4575f5ffd5b5081356001600160401b038111156123fa575f5ffd5b6020830191508360208260051b850101111561219b575f5ffd5b5f5f60208385031215612425575f5ffd5b82356001600160401b0381111561243a575f5ffd5b612446858286016123d4565b90969095509350505050565b5f60208284031215612462575f5ffd5b610a178261227a565b5f5f5f5f6060858703121561247e575f5ffd5b6124878561227a565b935061249560208601612315565b925060408501356001600160401b038111156124af575f5ffd5b6124bb8782880161215e565b95989497509550505050565b5f5f5f83850360808112156124da575f5ffd5b84356001600160401b038111156124ef575f5ffd5b6124fb87828801612054565b9450506040601f198201121561250f575f5ffd5b50602084019150606084013561252481612016565b809150509250925092565b825181526020808401516001600160401b03169082015260408084015160c083019161255d9084018261209b565b50610a17608083018461209b565b5f5f6040838503121561257c575f5ffd5b823561258781612016565b915060208301356122fc81612016565b5f606082840312156125a7575f5ffd5b610a17838361214e565b600181811c908216806125c557607f821691505b60208210810361206457634e487b7160e01b5f52602260045260245ffd5b5f602082840312156125f3575f5ffd5b8151610a1781612016565b5f6020828403121561260e575f5ffd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b63ffffffff929092168252602082015260400190565b604051606081016001600160401b038111828210171561266157612661612615565b60405290565b604080519081016001600160401b038111828210171561266157612661612615565b604051601f8201601f191681016001600160401b03811182821017156126b1576126b1612615565b604052919050565b5f6001600160401b038211156126d1576126d1612615565b50601f01601f191660200190565b5f6001600160401b038311156126f7576126f7612615565b8260051b61270760208201612689565b8481529083019060208101903683111561271f575f5ffd5b845b838110156127f65780356001600160401b0381111561273e575f5ffd5b86016060368290031215612750575f5ffd5b61275861263f565b6127618261227a565b815261276f60208301612315565b602082015260408201356001600160401b0381111561278c575f5ffd5b919091019036601f83011261279f575f5ffd5b81356127b26127ad826126b9565b612689565b8181523660208386010111156127c6575f5ffd5b816020850160208301375f6020838301015280604084015250508085525050602083019250602081019050612721565b5095945050505050565b5f5f8585111561280e575f5ffd5b8386111561281a575f5ffd5b5050820193919092039150565b5f81518060208401855e5f93019283525090919050565b5f6128498286612827565b838582375f930192835250909392505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f610bc860208301848661285c565b634e487b7160e01b5f52603260045260245ffd5b5f823561013e198336030181126128c0575f5ffd5b9190910192915050565b5f5f8335601e198436030181126128df575f5ffd5b8301803591506001600160401b038211156128f8575f5ffd5b60200191503681900382131561219b575f5ffd5b6001600160401b03811681146110b1575f5ffd5b63ffffffff61292e8961227a565b168152602088810135908201525f604089013561294a8161290c565b6001600160401b031660408301526060820188905260e060808301819052612975908301878961285c565b6001600160a01b03861660a084015282810360c084015261299781858761285c565b9a9950505050505050505050565b5f602082840312156129b5575f5ffd5b81516001600160401b038111156129ca575f5ffd5b8201601f810184136129da575f5ffd5b80516129e86127ad826126b9565b8181528560208385010111156129fc575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f60208284031215612a29575f5ffd5b8135610a178161290c565b60018060a01b038516815283602082015261ffff83166040820152608060608201525f610a836080830184611fd6565b6001600160a01b039390931683526020830191909152604082015260600190565b604081525f612a976040830185611fd6565b82810360208401526115e48185611fd6565b5f60208284031215612ab9575f5ffd5b8151610a17816122ac565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a06080840152612af960e0840182611fd6565b90506060850151603f198483030160a0850152612b168282611fd6565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b5f60408284031215612b4c575f5ffd5b612b54612667565b825181526020928301519281019290925250919050565b5f60408284031215612b7b575f5ffd5b610a178383612b3c565b601f8211156110f557805f5260205f20601f840160051c81016020851015612baa5750805b601f840160051c820191505b81811015610fc4575f8155600101612bb6565b81516001600160401b03811115612be257612be2612615565b612bf681612bf084546125b1565b84612b85565b6020601f821160018114612c28575f8315612c115750848201515b5f19600385901b1c1916600184901b178455610fc4565b5f84815260208120601f198516915b82811015612c575787850151825560209485019460019092019101612c37565b5084821015612c7457868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612d0557603f19878603018452815163ffffffff815116865261ffff60208201511660208701526040810151905060606040870152612cef6060870182611fd6565b9550506020938401939190910190600101612ca9565b50929695505050505050565b5f6040828403128015612d22575f5ffd5b50612d2b612667565b823581526020928301359281019290925250919050565b634e487b7160e01b5f52601160045260245ffd5b5f82612d7057634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176107c5576107c5612d42565b803560208310156107c5575f19602084900360031b1b1692915050565b80356001600160c01b03198116906008841015612dda576001600160c01b0319600885900360031b81901b82161691505b5092915050565b60c085901b6001600160c01b031916815260e084901b6001600160e01b0319166008820152600c81018390525f610a83602c830184612827565b808201808211156107c5576107c5612d42565b84815260c084901b6001600160c01b0319166020820152602881018390525f610a836048830184612827565b5f6080828403128015612e6b575f5ffd5b50612e7461263f565b825181526020830151612e868161290c565b6020820152612e988460408501612b3c565b6040820152939250505056fea26469706673582212201c438a480c5ee90c68085c67af2b8693130b8481b58177ab71075404776b480364736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } declare module "@nomicfoundation/hardhat-viem/types" { export function deployContract( contractName: "OFTImpl", constructorArgs: [_name: AbiParameterToPrimitiveType<{"name":"_name","type":"string"}>, _symbol: AbiParameterToPrimitiveType<{"name":"_symbol","type":"string"}>, _lzEndpoint: AbiParameterToPrimitiveType<{"name":"_lzEndpoint","type":"address"}>, _delegate: AbiParameterToPrimitiveType<{"name":"_delegate","type":"address"}>, _initialOwner: AbiParameterToPrimitiveType<{"name":"_initialOwner","type":"address"}>], config?: DeployContractConfig ): Promise>; export function deployContract( contractName: "contracts/cross-chain/oft/OFTImpl.sol:OFTImpl", constructorArgs: [_name: AbiParameterToPrimitiveType<{"name":"_name","type":"string"}>, _symbol: AbiParameterToPrimitiveType<{"name":"_symbol","type":"string"}>, _lzEndpoint: AbiParameterToPrimitiveType<{"name":"_lzEndpoint","type":"address"}>, _delegate: AbiParameterToPrimitiveType<{"name":"_delegate","type":"address"}>, _initialOwner: AbiParameterToPrimitiveType<{"name":"_initialOwner","type":"address"}>], config?: DeployContractConfig ): Promise>; export function sendDeploymentTransaction( contractName: "OFTImpl", constructorArgs: [_name: AbiParameterToPrimitiveType<{"name":"_name","type":"string"}>, _symbol: AbiParameterToPrimitiveType<{"name":"_symbol","type":"string"}>, _lzEndpoint: AbiParameterToPrimitiveType<{"name":"_lzEndpoint","type":"address"}>, _delegate: AbiParameterToPrimitiveType<{"name":"_delegate","type":"address"}>, _initialOwner: AbiParameterToPrimitiveType<{"name":"_initialOwner","type":"address"}>], config?: SendDeploymentTransactionConfig ): Promise<{ contract: GetContractReturnType; deploymentTransaction: GetTransactionReturnType; }>; export function sendDeploymentTransaction( contractName: "contracts/cross-chain/oft/OFTImpl.sol:OFTImpl", constructorArgs: [_name: AbiParameterToPrimitiveType<{"name":"_name","type":"string"}>, _symbol: AbiParameterToPrimitiveType<{"name":"_symbol","type":"string"}>, _lzEndpoint: AbiParameterToPrimitiveType<{"name":"_lzEndpoint","type":"address"}>, _delegate: AbiParameterToPrimitiveType<{"name":"_delegate","type":"address"}>, _initialOwner: AbiParameterToPrimitiveType<{"name":"_initialOwner","type":"address"}>], config?: SendDeploymentTransactionConfig ): Promise<{ contract: GetContractReturnType; deploymentTransaction: GetTransactionReturnType; }>; export function getContractAt( contractName: "OFTImpl", address: Address, config?: GetContractAtConfig ): Promise>; export function getContractAt( contractName: "contracts/cross-chain/oft/OFTImpl.sol:OFTImpl", address: Address, config?: GetContractAtConfig ): Promise>; }