Loading
[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "uint8", "name": "_sharedDecimals", "type": "uint8" }, { "internalType": "address", "name": "_lzEndpoint", "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": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "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": [ { "indexed": true, "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "indexed": false, "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "indexed": false, "internalType": "bytes32", "name": "_hash", "type": "bytes32" } ], "name": "CallOFTReceivedSuccess", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "indexed": false, "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "indexed": false, "internalType": "bytes", "name": "_payload", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "_reason", "type": "bytes" } ], "name": "MessageFailed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "_address", "type": "address" } ], "name": "NonContractAddress", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "indexed": true, "internalType": "address", "name": "_to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "ReceiveFromChain", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "indexed": false, "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "indexed": false, "internalType": "bytes32", "name": "_payloadHash", "type": "bytes32" } ], "name": "RetryMessageSuccess", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "indexed": true, "internalType": "address", "name": "_from", "type": "address" }, { "indexed": true, "internalType": "bytes32", "name": "_toAddress", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "SendToChain", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "feeBp", "type": "uint16" } ], "name": "SetDefaultFeeBp", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "dstchainId", "type": "uint16" }, { "indexed": false, "internalType": "bool", "name": "enabled", "type": "bool" }, { "indexed": false, "internalType": "uint16", "name": "feeBp", "type": "uint16" } ], "name": "SetFeeBp", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "feeOwner", "type": "address" } ], "name": "SetFeeOwner", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "indexed": false, "internalType": "uint16", "name": "_type", "type": "uint16" }, { "indexed": false, "internalType": "uint256", "name": "_minDstGas", "type": "uint256" } ], "name": "SetMinDstGas", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "precrime", "type": "address" } ], "name": "SetPrecrime", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_path", "type": "bytes" } ], "name": "SetTrustedRemote", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_remoteAddress", "type": "bytes" } ], "name": "SetTrustedRemoteAddress", "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": "BP_DENOMINATOR", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_PAYLOAD_SIZE_LIMIT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "NO_EXTRA_GAS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PT_SEND", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PT_SEND_AND_CALL", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "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": [ { "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": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "internalType": "bytes32", "name": "_from", "type": "bytes32" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" }, { "internalType": "uint256", "name": "_gasForCall", "type": "uint256" } ], "name": "callOnOFTReceived", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "chainIdToFeeBps", "outputs": [ { "internalType": "uint16", "name": "feeBP", "type": "uint16" }, { "internalType": "bool", "name": "enabled", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "circulatingSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" }, { "internalType": "bytes", "name": "", "type": "bytes" }, { "internalType": "uint64", "name": "", "type": "uint64" } ], "name": "creditedPackets", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "defaultFeeBp", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "bytes32", "name": "_toAddress", "type": "bytes32" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" }, { "internalType": "uint64", "name": "_dstGasForCall", "type": "uint64" }, { "internalType": "bool", "name": "_useZro", "type": "bool" }, { "internalType": "bytes", "name": "_adapterParams", "type": "bytes" } ], "name": "estimateSendAndCallFee", "outputs": [ { "internalType": "uint256", "name": "nativeFee", "type": "uint256" }, { "internalType": "uint256", "name": "zroFee", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "bytes32", "name": "_toAddress", "type": "bytes32" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "bool", "name": "_useZro", "type": "bool" }, { "internalType": "bytes", "name": "_adapterParams", "type": "bytes" } ], "name": "estimateSendFee", "outputs": [ { "internalType": "uint256", "name": "nativeFee", "type": "uint256" }, { "internalType": "uint256", "name": "zroFee", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" }, { "internalType": "bytes", "name": "", "type": "bytes" }, { "internalType": "uint64", "name": "", "type": "uint64" } ], "name": "failedMessages", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" } ], "name": "forceResumeReceive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" }, { "internalType": "uint16", "name": "_chainId", "type": "uint16" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "_configType", "type": "uint256" } ], "name": "getConfig", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" } ], "name": "getTrustedRemoteAddress", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" } ], "name": "isTrustedRemote", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lzEndpoint", "outputs": [ { "internalType": "contract ILayerZeroEndpoint", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "lzReceive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "minDstGasLookup", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "nonblockingLzReceive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "payloadSizeLimitLookup", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "precrime", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "quoteOFTFee", "outputs": [ { "internalType": "uint256", "name": "fee", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "retryMessage", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "bytes32", "name": "_toAddress", "type": "bytes32" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "uint256", "name": "_minAmount", "type": "uint256" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" }, { "internalType": "uint64", "name": "_dstGasForCall", "type": "uint64" }, { "components": [ { "internalType": "address payable", "name": "refundAddress", "type": "address" }, { "internalType": "address", "name": "zroPaymentAddress", "type": "address" }, { "internalType": "bytes", "name": "adapterParams", "type": "bytes" } ], "internalType": "struct ICommonOFT.LzCallParams", "name": "_callParams", "type": "tuple" } ], "name": "sendAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "bytes32", "name": "_toAddress", "type": "bytes32" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "uint256", "name": "_minAmount", "type": "uint256" }, { "components": [ { "internalType": "address payable", "name": "refundAddress", "type": "address" }, { "internalType": "address", "name": "zroPaymentAddress", "type": "address" }, { "internalType": "bytes", "name": "adapterParams", "type": "bytes" } ], "internalType": "struct ICommonOFT.LzCallParams", "name": "_callParams", "type": "tuple" } ], "name": "sendFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" }, { "internalType": "uint16", "name": "_chainId", "type": "uint16" }, { "internalType": "uint256", "name": "_configType", "type": "uint256" }, { "internalType": "bytes", "name": "_config", "type": "bytes" } ], "name": "setConfig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_feeBp", "type": "uint16" } ], "name": "setDefaultFeeBp", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "bool", "name": "_enabled", "type": "bool" }, { "internalType": "uint16", "name": "_feeBp", "type": "uint16" } ], "name": "setFeeBp", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_feeOwner", "type": "address" } ], "name": "setFeeOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "uint16", "name": "_packetType", "type": "uint16" }, { "internalType": "uint256", "name": "_minGas", "type": "uint256" } ], "name": "setMinDstGas", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "uint256", "name": "_size", "type": "uint256" } ], "name": "setPayloadSizeLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_precrime", "type": "address" } ], "name": "setPrecrime", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" } ], "name": "setReceiveVersion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" } ], "name": "setSendVersion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_path", "type": "bytes" } ], "name": "setTrustedRemote", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_remoteAddress", "type": "bytes" } ], "name": "setTrustedRemoteAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "sharedDecimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "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" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "trustedRemoteLookup", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" } ]
60e060405234801561001057600080fd5b50604051614a6b380380614a6b83398101604081905261002f91610286565b8383838381818080338061005e57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61006781610178565b506001600160a01b0316608052505060ff1660a05261008e6000546001600160a01b031690565b600880546001600160a01b0392909216620100000262010000600160b01b031990921691909117905550600c90506100c683826103b0565b50600d6100d382826103b0565b50505060006100e66101c860201b60201c565b90508060ff168360ff1611156101555760405162461bcd60e51b815260206004820152602e60248201527f4f4654576974684665653a20736861726564446563696d616c73206d7573742060448201526d6265203c3d20646563696d616c7360901b6064820152608401610055565b61015f8382610484565b61016a90600a61058a565b60c052506105a09350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b601290565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126101f457600080fd5b81516001600160401b0381111561020d5761020d6101cd565b604051601f8201601f19908116603f011681016001600160401b038111828210171561023b5761023b6101cd565b60405281815283820160200185101561025357600080fd5b60005b8281101561027257602081860181015183830182015201610256565b506000918101602001919091529392505050565b6000806000806080858703121561029c57600080fd5b84516001600160401b038111156102b257600080fd5b6102be878288016101e3565b602087015190955090506001600160401b038111156102dc57600080fd5b6102e8878288016101e3565b935050604085015160ff811681146102ff57600080fd5b60608601519092506001600160a01b038116811461031c57600080fd5b939692955090935050565b600181811c9082168061033b57607f821691505b60208210810361035b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156103ab57806000526020600020601f840160051c810160208510156103885750805b601f840160051c820191505b818110156103a85760008155600101610394565b50505b505050565b81516001600160401b038111156103c9576103c96101cd565b6103dd816103d78454610327565b84610361565b6020601f82116001811461041157600083156103f95750848201515b600019600385901b1c1916600184901b1784556103a8565b600084815260208120601f198516915b828110156104415787850151825560209485019460019092019101610421565b508482101561045f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561049d5761049d61046e565b92915050565b6001815b60018411156104de578085048111156104c2576104c261046e565b60018416156104d057908102905b60019390931c9280026104a7565b935093915050565b6000826104f55750600161049d565b816105025750600061049d565b816001811461051857600281146105225761053e565b600191505061049d565b60ff8411156105335761053361046e565b50506001821b61049d565b5060208310610133831016604e8410600b8410161715610561575081810a61049d565b61056e60001984846104a3565b80600019048211156105825761058261046e565b029392505050565b600061059960ff8416836104e6565b9392505050565b60805160a05160c05161444f61061c60003960008181612a2901528181612a9b015261318c015260006106ec0152600081816108bc01528181610b0c01528181610e2401528181610ee4015281816111220152818161189a01528181611dff015281816121ad015281816125460152612c42015261444f6000f3fe60806040526004361061034f5760003560e01c80638cfd8f5c116101c6578063c4461834116100f7578063e6a20ae611610095578063ecd8f2121161006f578063ecd8f21214610a96578063f2fde38b14610ab6578063f5ecbdbc14610ad6578063fc0c546a14610af657600080fd5b8063e6a20ae614610a41578063eaffd49a14610a56578063eb8d72b714610a7657600080fd5b8063d1deba1f116100d1578063d1deba1f1461099a578063d8882968146109ad578063dd62ed3e146109db578063df2a5b3b14610a2157600080fd5b8063c446183414610894578063c83330ce14610924578063cbed8b9c1461097a57600080fd5b8063a4c51df511610164578063abe685cd1161013e578063abe685cd14610894578063b353aaa7146108aa578063b9818be1146108de578063baf3292d1461090457600080fd5b8063a4c51df514610834578063a6c3d16514610854578063a9059cbb1461087457600080fd5b8063950c8a74116101a0578063950c8a741461078d57806395d89b41146107ad5780639bdb9812146107c25780639f38369a1461081457600080fd5b80638cfd8f5c1461070e5780638da5cb5b146107465780639358928b1461077857600080fd5b80633f1f4fa4116102a05780635b8c41e61161023e578063715018a611610218578063715018a6146106855780637533d7881461069a57806379c0ad4b146106ba578063857749b0146106da57600080fd5b80635b8c41e6146105e057806366ad5c8a1461062f57806370a082311461064f57600080fd5b8063455ba27d1161027a578063455ba27d146105785780634b104eff1461058b5780634c42899a146105ab5780635a359dc5146105c057600080fd5b80633f1f4fa41461051657806342d65a8d14610543578063447705151461056357600080fd5b806310ddb1371161030d5780632cdf0b95116102e75780632cdf0b951461048c578063313ce5671461049f578063365260b4146104c15780633d8b38f6146104f657600080fd5b806310ddb1371461042d57806318160ddd1461044d57806323b872dd1461046c57600080fd5b80621d35671461035457806301ffc9a71461037657806306fdde03146103ab57806307e0db17146103cd578063095ea7b3146103ed5780630df374831461040d575b600080fd5b34801561036057600080fd5b5061037461036f366004613449565b610b09565b005b34801561038257600080fd5b506103966103913660046134de565b610d3a565b60405190151581526020015b60405180910390f35b3480156103b757600080fd5b506103c0610d71565b6040516103a29190613558565b3480156103d957600080fd5b506103746103e836600461356b565b610e03565b3480156103f957600080fd5b5061039661040836600461359b565b610e8c565b34801561041957600080fd5b506103746104283660046135c7565b610ea4565b34801561043957600080fd5b5061037461044836600461356b565b610ec3565b34801561045957600080fd5b50600b545b6040519081526020016103a2565b34801561047857600080fd5b506103966104873660046135e3565b610f1b565b61037461049a36600461363c565b610f3f565b3480156104ab57600080fd5b5060125b60405160ff90911681526020016103a2565b3480156104cd57600080fd5b506104e16104dc3660046136c7565b610fe2565b604080519283526020830191909152016103a2565b34801561050257600080fd5b50610396610511366004613720565b611037565b34801561052257600080fd5b5061045e61053136600461356b565b60036020526000908152604090205481565b34801561054f57600080fd5b5061037461055e366004613720565b611103565b34801561056f57600080fd5b5061045e600081565b610374610586366004613772565b611189565b34801561059757600080fd5b506103746105a6366004613830565b61126a565b3480156105b757600080fd5b506104af600081565b3480156105cc57600080fd5b506103746105db36600461356b565b611327565b3480156105ec57600080fd5b5061045e6105fb3660046138ba565b6005602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b34801561063b57600080fd5b5061037461064a366004613449565b611399565b34801561065b57600080fd5b5061045e61066a366004613830565b6001600160a01b031660009081526009602052604090205490565b34801561069157600080fd5b5061037461146d565b3480156106a657600080fd5b506103c06106b536600461356b565b611481565b3480156106c657600080fd5b506103746106d536600461395a565b61151b565b3480156106e657600080fd5b506104af7f000000000000000000000000000000000000000000000000000000000000000081565b34801561071a57600080fd5b5061045e610729366004613994565b600260209081526000928352604080842090915290825290205481565b34801561075257600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103a2565b34801561078457600080fd5b5061045e6115d7565b34801561079957600080fd5b50600454610760906001600160a01b031681565b3480156107b957600080fd5b506103c06115e7565b3480156107ce57600080fd5b506103966107dd3660046138ba565b6006602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205460ff1681565b34801561082057600080fd5b506103c061082f36600461356b565b6115f6565b34801561084057600080fd5b506104e161084f3660046139c7565b61170c565b34801561086057600080fd5b5061037461086f366004613720565b61179b565b34801561088057600080fd5b5061039661088f36600461359b565b611817565b3480156108a057600080fd5b5061045e61271081565b3480156108b657600080fd5b506107607f000000000000000000000000000000000000000000000000000000000000000081565b3480156108ea57600080fd5b50600854610760906201000090046001600160a01b031681565b34801561091057600080fd5b5061037461091f366004613830565b611825565b34801561093057600080fd5b5061096061093f36600461356b565b60076020526000908152604090205461ffff81169062010000900460ff1682565b6040805161ffff90931683529015156020830152016103a2565b34801561098657600080fd5b50610374610995366004613a82565b61187b565b6103746109a8366004613449565b611905565b3480156109b957600080fd5b506008546109c89061ffff1681565b60405161ffff90911681526020016103a2565b3480156109e757600080fd5b5061045e6109f6366004613af0565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b348015610a2d57600080fd5b50610374610a3c366004613b29565b611b1b565b348015610a4d57600080fd5b506104af600181565b348015610a6257600080fd5b50610374610a71366004613b55565b611b85565b348015610a8257600080fd5b50610374610a91366004613720565b611ca4565b348015610aa257600080fd5b5061045e610ab13660046135c7565b611cfe565b348015610ac257600080fd5b50610374610ad1366004613830565b611d90565b348015610ae257600080fd5b506103c0610af1366004613c1d565b611dce565b348015610b0257600080fd5b5030610760565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610b865760405162461bcd60e51b815260206004820152601e60248201527f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c6572000060448201526064015b60405180910390fd5b61ffff861660009081526001602052604081208054610ba490613c6a565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd090613c6a565b8015610c1d5780601f10610bf257610100808354040283529160200191610c1d565b820191906000526020600020905b815481529060010190602001808311610c0057829003601f168201915b50505050509050805186869050148015610c38575060008151115b8015610c60575080516020820120604051610c569088908890613c9e565b6040518091039020145b610cbb5760405162461bcd60e51b815260206004820152602660248201527f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f6044820152651b9d1c9858dd60d21b6064820152608401610b7d565b610d318787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528a935091508890889081908401838280828437600092019190915250611e7f92505050565b50505050505050565b60006001600160e01b03198216630d30953d60e31b1480610d6b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600c8054610d8090613c6a565b80601f0160208091040260200160405190810160405280929190818152602001828054610dac90613c6a565b8015610df95780601f10610dce57610100808354040283529160200191610df9565b820191906000526020600020905b815481529060010190602001808311610ddc57829003601f168201915b5050505050905090565b610e0b611ef8565b6040516307e0db1760e01b815261ffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906307e0db17906024015b600060405180830381600087803b158015610e7157600080fd5b505af1158015610e85573d6000803e3d6000fd5b5050505050565b600033610e9a818585611f25565b5060019392505050565b610eac611ef8565b61ffff909116600090815260036020526040902055565b610ecb611ef8565b6040516310ddb13760e01b815261ffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906310ddb13790602401610e57565b600033610f29858285611f37565b610f34858585611fb5565b506001949350505050565b610f4a868685612014565b509250610fb886868686610f616020870187613830565b610f716040880160208901613830565b610f7e6040890189613cae565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061205d92505050565b925081831015610fda5760405162461bcd60e51b8152600401610b7d90613cf4565b505050505050565b6000806110288888888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061218192505050565b91509150965096945050505050565b61ffff83166000908152600160205260408120805482919061105890613c6a565b80601f016020809104026020016040519081016040528092919081815260200182805461108490613c6a565b80156110d15780601f106110a6576101008083540402835291602001916110d1565b820191906000526020600020905b8154815290600101906020018083116110b457829003601f168201915b5050505050905083836040516110e8929190613c9e565b60405180910390208180519060200120149150509392505050565b61110b611ef8565b6040516342d65a8d60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342d65a8d9061115b90869086908690600401613d6a565b600060405180830381600087803b15801561117557600080fd5b505af1158015610d31573d6000803e3d6000fd5b611194898988612014565b508096505061123d8989898988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92506111e69150506020890189613830565b6111f660408a0160208b01613830565b61120360408b018b613cae565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061223992505050565b95508486101561125f5760405162461bcd60e51b8152600401610b7d90613cf4565b505050505050505050565b611272611ef8565b6001600160a01b0381166112c85760405162461bcd60e51b815260206004820152601a60248201527f4665653a206665654f776e65722063616e6e6f742062652030780000000000006044820152606401610b7d565b6008805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040519081527f047912631afa564eebd3db2efe191a0dec62da1fede6bbbc1ffc89d87845b1b5906020015b60405180910390a150565b61132f611ef8565b6127108161ffff1611156113555760405162461bcd60e51b8152600401610b7d90613d88565b6008805461ffff191661ffff83169081179091556040519081527fd26030ef4a8c225ee12b646eb4466acb41fb96b6cd4660b22d0ba0124e7bdc749060200161131c565b3330146113f75760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d7573742062656044820152650204c7a4170760d41b6064820152608401610b7d565b610fda8686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781528993509150879087908190840183828082843760009201919091525061233592505050565b611475611ef8565b61147f60006123bc565b565b6001602052600090815260409020805461149a90613c6a565b80601f01602080910402602001604051908101604052809291908181526020018280546114c690613c6a565b80156115135780601f106114e857610100808354040283529160200191611513565b820191906000526020600020905b8154815290600101906020018083116114f657829003601f168201915b505050505081565b611523611ef8565b6127108161ffff1611156115495760405162461bcd60e51b8152600401610b7d90613d88565b60408051808201825261ffff83811680835285151560208085018281528985166000818152600784528890209651875492511515620100000262ffffff1990931696169590951717909455845192835292820192909252918201527fdd9c9685af3e6dcb56d8f4b88d2595d4add6837a150034e7781c46b6dcf8aaab906060015b60405180910390a1505050565b60006115e2600b5490565b905090565b6060600d8054610d8090613c6a565b61ffff811660009081526001602052604081208054606092919061161990613c6a565b80601f016020809104026020016040519081016040528092919081815260200182805461164590613c6a565b80156116925780601f1061166757610100808354040283529160200191611692565b820191906000526020600020905b81548152906001019060200180831161167557829003601f168201915b5050505050905080516000036116ea5760405162461bcd60e51b815260206004820152601d60248201527f4c7a4170703a206e6f20747275737465642070617468207265636f72640000006044820152606401610b7d565b6117056000601483516116fd9190613de3565b83919061240c565b9392505050565b6000806117898b8b8b8b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b81528e93508d9250908c908c908190840183828082843760009201919091525061251992505050565b91509150995099975050505050505050565b6117a3611ef8565b8181306040516020016117b893929190613df6565b60408051601f1981840301815291815261ffff85166000908152600160205220906117e39082613e63565b507f8c0400cfe2d1199b1a725c78960bcc2a344d869b80590d0f2bd005db15a572ce8383836040516115ca93929190613d6a565b600033610e9a818585611fb5565b61182d611ef8565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f5db758e995a17ec1ad84bdef7e8c3293a0bd6179bcce400dff5d4c3d87db726b9060200161131c565b611883611ef8565b6040516332fb62e760e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cbed8b9c906118d79088908890889088908890600401613f21565b600060405180830381600087803b1580156118f157600080fd5b505af115801561125f573d6000803e3d6000fd5b61ffff861660009081526005602052604080822090516119289088908890613c9e565b90815260408051602092819003830190206001600160401b038716600090815292529020549050806119a85760405162461bcd60e51b815260206004820152602360248201527f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360448201526261676560e81b6064820152608401610b7d565b8083836040516119b9929190613c9e565b604051809103902014611a185760405162461bcd60e51b815260206004820152602160248201527f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f616044820152601960fa1b6064820152608401610b7d565b61ffff87166000908152600560205260408082209051611a3b9089908990613c9e565b90815260408051602092819003830181206001600160401b038916600090815290845282902093909355601f88018290048202830182019052868252611ad3918991899089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a93509150889088908190840183828082843760009201919091525061233592505050565b7fc264d91f3adc5588250e1551f547752ca0cfa8f6b530d243b9f9f4cab10ea8e58787878785604051611b0a959493929190613f5a565b60405180910390a150505050505050565b611b23611ef8565b61ffff83811660008181526002602090815260408083209487168084529482529182902085905581519283528201929092529081018290527f9d5c7c0b934da8fefa9c7760c98383778a12dfbfc0c3b3106518f43fb9508ac0906060016115ca565b333014611bd45760405162461bcd60e51b815260206004820152601f60248201527f4f4654436f72653a2063616c6c6572206d757374206265204f4654436f7265006044820152606401610b7d565b611bdf3086866125d4565b9350846001600160a01b03168a61ffff167fbf551ec93859b170f9b2141bd9298bf3f64322c6f7beb2543a0cb669834118bf86604051611c2191815260200190565b60405180910390a3604051633fe79aed60e11b81526001600160a01b03861690637fcf35da908390611c65908e908e908e908e908e908d908d908d90600401613f95565b600060405180830381600088803b158015611c7f57600080fd5b5087f1158015611c93573d6000803e3d6000fd5b505050505050505050505050505050565b611cac611ef8565b61ffff83166000908152600160205260409020611cca828483613ff0565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab8383836040516115ca93929190613d6a565b61ffff828116600090815260076020908152604080832081518083019092525493841681526201000090930460ff1615801591840191909152909190611d6357805161271090611d529061ffff16856140af565b611d5c91906140dc565b9150611d89565b60085461ffff1615611d845760085461271090611d529061ffff16856140af565b600091505b5092915050565b611d98611ef8565b6001600160a01b038116611dc257604051631e4fbdf760e01b815260006004820152602401610b7d565b611dcb816123bc565b50565b604051633d7b2f6f60e21b815261ffff808616600483015284166024820152306044820152606481018290526060907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f5ecbdbc90608401600060405180830381865afa158015611e4e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e7691908101906140f0565b95945050505050565b600080611ee25a60966366ad5c8a60e01b89898989604051602401611ea7949392919061415d565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915230929190612626565b9150915081610fda57610fda86868686856126b0565b6000546001600160a01b0316331461147f5760405163118cdaa760e01b8152336004820152602401610b7d565b611f32838383600161274d565b505050565b6001600160a01b038381166000908152600a60209081526040808320938616835292905220546000198114611faf5781811015611fa057604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610b7d565b611faf8484848403600061274d565b50505050565b6001600160a01b038316611fdf57604051634b637e8f60e11b815260006004820152602401610b7d565b6001600160a01b0382166120095760405163ec442f0560e01b815260006004820152602401610b7d565b611f32838383612822565b6000806120218484611cfe565b905061202d8184613de3565b91508015612055576008546120539086906201000090046001600160a01b0316836125d4565b505b935093915050565b600061206b8782848161294c565b61207485612a21565b50905061208388888884612a61565b9050600081116120d15760405162461bcd60e51b815260206004820152601960248201527813d19510dbdc994e88185b5bdd5b9d081d1bdbc81cdb585b1b603a1b6044820152606401610b7d565b600061211c876120e084612a93565b6040805160006020820152602181019390935260c09190911b6001600160c01b0319166041830152805160298184030181526049909201905290565b905061212c888287878734612b19565b86896001600160a01b03168961ffff167fd81fc9b8523134ed613870ed029d6170cbb73aa6a6bc311b9a642689fb9df59a8560405161216d91815260200190565b60405180910390a450979650505050505050565b6000806000612193876120e088612a93565b60405163040a7bb160e41b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906340a7bb10906121ea908b90309086908b908b9060040161419b565b6040805180830381865afa158015612206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222a91906141ef565b92509250509550959350505050565b6000612251896001846001600160401b03891661294c565b61225a87612a21565b5090506122698a8a8a84612a61565b9050600081116122b75760405162461bcd60e51b815260206004820152601960248201527813d19510dbdc994e88185b5bdd5b9d081d1bdbc81cdb585b1b603a1b6044820152606401610b7d565b60006122ce338a6122c785612a93565b8a8a612cbe565b90506122de8a8287878734612b19565b888b6001600160a01b03168b61ffff167fd81fc9b8523134ed613870ed029d6170cbb73aa6a6bc311b9a642689fb9df59a8560405161231f91815260200190565b60405180910390a4509998505050505050505050565b60006123418282612cff565b905060ff811661235c5761235785858585612d5b565b610e85565b60001960ff8216016123745761235785858585612deb565b60405162461bcd60e51b815260206004820152601c60248201527f4f4654436f72653a20756e6b6e6f776e207061636b65742074797065000000006044820152606401610b7d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60608161241a81601f614213565b10156124595760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610b7d565b6124638284614213565b845110156124a75760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610b7d565b6060821580156124c65760405191506000825260208201604052612510565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156124ff5780518352602092830192016124e7565b5050858452601f01601f1916604052505b50949350505050565b600080600061252c338a6122c78b612a93565b60405163040a7bb160e41b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906340a7bb1090612583908d90309086908b908b9060040161419b565b6040805180830381865afa15801561259f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c391906141ef565b925092505097509795505050505050565b600033306001600160a01b038616148015906126025750806001600160a01b0316856001600160a01b031614155b1561261257612612858285611f37565b61261d858585611fb5565b50909392505050565b6000606060008060008661ffff166001600160401b0381111561264b5761264b61384d565b6040519080825280601f01601f191660200182016040528015612675576020820181803683370190505b50905060008087516020890160008d8df191503d925086831115612697578692505b828152826000602083013e909890975095505050505050565b8180519060200120600560008761ffff1661ffff168152602001908152602001600020856040516126e19190614226565b9081526040805191829003602090810183206001600160401b0388166000908152915220919091557fe183f33de2837795525b4792ca4cd60535bd77c53b7e7030060bfcf5734d6b0c9061273e9087908790879087908790614242565b60405180910390a15050505050565b6001600160a01b0384166127775760405163e602df0560e01b815260006004820152602401610b7d565b6001600160a01b0383166127a157604051634a1406b160e11b815260006004820152602401610b7d565b6001600160a01b038085166000908152600a602090815260408083209387168352929052208290558015611faf57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161281491815260200190565b60405180910390a350505050565b6001600160a01b03831661284d5780600b60008282546128429190614213565b909155506128bf9050565b6001600160a01b038316600090815260096020526040902054818110156128a05760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610b7d565b6001600160a01b03841660009081526009602052604090209082900390555b6001600160a01b0382166128db57600b805482900390556128fa565b6001600160a01b03821660009081526009602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161293f91815260200190565b60405180910390a3505050565b600061295783612ff9565b61ffff808716600090815260026020908152604080832093891683529290522054909150806129c85760405162461bcd60e51b815260206004820152601a60248201527f4c7a4170703a206d696e4761734c696d6974206e6f74207365740000000000006044820152606401610b7d565b6129d28382614213565b821015610fda5760405162461bcd60e51b815260206004820152601b60248201527f4c7a4170703a20676173206c696d697420697320746f6f206c6f7700000000006044820152606401610b7d565b600080612a4e7f000000000000000000000000000000000000000000000000000000000000000084614294565b9050612a5a8184613de3565b9150915091565b6000336001600160a01b0386168114612a7f57612a7f868285611f37565b612a898684613055565b5090949350505050565b600080612ac07f0000000000000000000000000000000000000000000000000000000000000000846140dc565b90506001600160401b03811115610d6b5760405162461bcd60e51b815260206004820152601a60248201527f4f4654436f72653a20616d6f756e745344206f766572666c6f770000000000006044820152606401610b7d565b61ffff861660009081526001602052604081208054612b3790613c6a565b80601f0160208091040260200160405190810160405280929190818152602001828054612b6390613c6a565b8015612bb05780601f10612b8557610100808354040283529160200191612bb0565b820191906000526020600020905b815481529060010190602001808311612b9357829003601f168201915b505050505090508051600003612c215760405162461bcd60e51b815260206004820152603060248201527f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060448201526f61207472757374656420736f7572636560801b6064820152608401610b7d565b612c2c87875161308f565b60405162c5803160e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5803100908490612c83908b9086908c908c908c908c906004016142a8565b6000604051808303818588803b158015612c9c57600080fd5b505af1158015612cb0573d6000803e3d6000fd5b505050505050505050505050565b6060600185856001600160a01b0389168587604051602001612ce59695949392919061430f565b604051602081830303815290604052905095945050505050565b6000612d0c826001614213565b83511015612d525760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b6044820152606401610b7d565b50016001015190565b600080612d6783613100565b90925090506001600160a01b038216612d805761dead91505b6000612d8b82613185565b9050612d988784836131ba565b9050826001600160a01b03168761ffff167fbf551ec93859b170f9b2141bd9298bf3f64322c6f7beb2543a0cb669834118bf83604051612dda91815260200190565b60405180910390a350505050505050565b6000806000806000612dfc866131c6565b945094509450945094506000600660008b61ffff1661ffff16815260200190815260200160002089604051612e319190614226565b90815260408051602092819003830190206001600160401b038b166000908152925281205460ff169150612e6485613185565b905081612ed257612e768b30836131ba565b61ffff8c16600090815260066020526040908190209051919250600191612e9e908d90614226565b90815260408051602092819003830190206001600160401b038d16600090815292529020805460ff19169115159190911790555b6001600160a01b0386163b612f29576040516001600160a01b03871681527f9aedf5fdba8716db3b6705ca00150643309995d4f818a249ed6dde6677e7792d9060200160405180910390a150505050505050611faf565b8a8a8a8a8a8a868a60008a612f47578b6001600160401b0316612f49565b5a5b9050600080612f7b5a609663eaffd49a60e01b8e8e8e8d8d8d8d8d604051602401611ea7989796959493929190614378565b915091508115612fd4578751602089012060405161ffff8d16907fb8890edbfc1c74692f527444645f95489c3703cc2df42e4a366f5d06fa6cd88490612fc6908e908e9086906143eb565b60405180910390a250612fe1565b612fe18b8b8b8b856126b0565b50505050505050505050505050505050505050505050565b600060228251101561304d5760405162461bcd60e51b815260206004820152601c60248201527f4c7a4170703a20696e76616c69642061646170746572506172616d73000000006044820152606401610b7d565b506022015190565b6001600160a01b03821661307f57604051634b637e8f60e11b815260006004820152602401610b7d565b61308b82600083612822565b5050565b61ffff8216600090815260036020526040812054908190036130b057506127105b80821115611f325760405162461bcd60e51b815260206004820181905260248201527f4c7a4170703a207061796c6f61642073697a6520697320746f6f206c617267656044820152606401610b7d565b6000808061310e8482612cff565b60ff1614801561311f575082516029145b6131665760405162461bcd60e51b815260206004820152601860248201527713d19510dbdc994e881a5b9d985b1a59081c185e5b1bd85960421b6044820152606401610b7d565b61317183600d61327d565b915061317e8360216132e2565b9050915091565b6000610d6b7f00000000000000000000000000000000000000000000000000000000000000006001600160401b0384166140af565b6000611d89838361333f565b6000808060608160016131d98783612cff565b60ff16146132245760405162461bcd60e51b815260206004820152601860248201527713d19510dbdc994e881a5b9d985b1a59081c185e5b1bd85960421b6044820152606401610b7d565b61322f86600d61327d565b935061323c8660216132e2565b9250613249866029613375565b94506132568660496132e2565b9050613272605180885161326a9190613de3565b88919061240c565b915091939590929450565b600061328a826014614213565b835110156132d25760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606401610b7d565b500160200151600160601b900490565b60006132ef826008614213565b835110156133365760405162461bcd60e51b8152602060048201526014602482015273746f55696e7436345f6f75744f66426f756e647360601b6044820152606401610b7d565b50016008015190565b6001600160a01b0382166133695760405163ec442f0560e01b815260006004820152602401610b7d565b61308b60008383612822565b6000613382826020614213565b835110156133ca5760405162461bcd60e51b8152602060048201526015602482015274746f427974657333325f6f75744f66426f756e647360581b6044820152606401610b7d565b50016020015190565b803561ffff811681146133e557600080fd5b919050565b60008083601f8401126133fc57600080fd5b5081356001600160401b0381111561341357600080fd5b60208301915083602082850101111561342b57600080fd5b9250929050565b80356001600160401b03811681146133e557600080fd5b6000806000806000806080878903121561346257600080fd5b61346b876133d3565b955060208701356001600160401b0381111561348657600080fd5b61349289828a016133ea565b90965094506134a5905060408801613432565b925060608701356001600160401b038111156134c057600080fd5b6134cc89828a016133ea565b979a9699509497509295939492505050565b6000602082840312156134f057600080fd5b81356001600160e01b03198116811461170557600080fd5b60005b8381101561352357818101518382015260200161350b565b50506000910152565b60008151808452613544816020860160208601613508565b601f01601f19169290920160200192915050565b602081526000611705602083018461352c565b60006020828403121561357d57600080fd5b611705826133d3565b6001600160a01b0381168114611dcb57600080fd5b600080604083850312156135ae57600080fd5b82356135b981613586565b946020939093013593505050565b600080604083850312156135da57600080fd5b6135b9836133d3565b6000806000606084860312156135f857600080fd5b833561360381613586565b9250602084013561361381613586565b929592945050506040919091013590565b60006060828403121561363657600080fd5b50919050565b60008060008060008060c0878903121561365557600080fd5b863561366081613586565b955061366e602088016133d3565b945060408701359350606087013592506080870135915060a08701356001600160401b0381111561369e57600080fd5b6136aa89828a01613624565b9150509295509295509295565b803580151581146133e557600080fd5b60008060008060008060a087890312156136e057600080fd5b6136e9876133d3565b95506020870135945060408701359350613705606088016136b7565b925060808701356001600160401b038111156134c057600080fd5b60008060006040848603121561373557600080fd5b61373e846133d3565b925060208401356001600160401b0381111561375957600080fd5b613765868287016133ea565b9497909650939450505050565b60008060008060008060008060006101008a8c03121561379157600080fd5b893561379c81613586565b98506137aa60208b016133d3565b975060408a0135965060608a0135955060808a0135945060a08a01356001600160401b038111156137da57600080fd5b6137e68c828d016133ea565b90955093506137f9905060c08b01613432565b915060e08a01356001600160401b0381111561381457600080fd5b6138208c828d01613624565b9150509295985092959850929598565b60006020828403121561384257600080fd5b813561170581613586565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561388b5761388b61384d565b604052919050565b60006001600160401b038211156138ac576138ac61384d565b50601f01601f191660200190565b6000806000606084860312156138cf57600080fd5b6138d8846133d3565b925060208401356001600160401b038111156138f357600080fd5b8401601f8101861361390457600080fd5b803561391761391282613893565b613863565b81815287602083850101111561392c57600080fd5b8160208401602083013760006020838301015280945050505061395160408501613432565b90509250925092565b60008060006060848603121561396f57600080fd5b613978846133d3565b9250613986602085016136b7565b9150613951604085016133d3565b600080604083850312156139a757600080fd5b6139b0836133d3565b91506139be602084016133d3565b90509250929050565b600080600080600080600080600060e08a8c0312156139e557600080fd5b6139ee8a6133d3565b985060208a0135975060408a0135965060608a01356001600160401b03811115613a1757600080fd5b613a238c828d016133ea565b9097509550613a36905060808b01613432565b9350613a4460a08b016136b7565b925060c08a01356001600160401b03811115613a5f57600080fd5b613a6b8c828d016133ea565b915080935050809150509295985092959850929598565b600080600080600060808688031215613a9a57600080fd5b613aa3866133d3565b9450613ab1602087016133d3565b93506040860135925060608601356001600160401b03811115613ad357600080fd5b613adf888289016133ea565b969995985093965092949392505050565b60008060408385031215613b0357600080fd5b8235613b0e81613586565b91506020830135613b1e81613586565b809150509250929050565b600080600060608486031215613b3e57600080fd5b613b47846133d3565b9250613613602085016133d3565b6000806000806000806000806000806101008b8d031215613b7557600080fd5b613b7e8b6133d3565b995060208b01356001600160401b03811115613b9957600080fd5b613ba58d828e016133ea565b909a509850613bb8905060408c01613432565b965060608b0135955060808b0135613bcf81613586565b945060a08b0135935060c08b01356001600160401b03811115613bf157600080fd5b613bfd8d828e016133ea565b9b9e9a9d50989b979a96999598949794969560e090950135949350505050565b60008060008060808587031215613c3357600080fd5b613c3c856133d3565b9350613c4a602086016133d3565b92506040850135613c5a81613586565b9396929550929360600135925050565b600181811c90821680613c7e57607f821691505b60208210810361363657634e487b7160e01b600052602260045260246000fd5b8183823760009101908152919050565b6000808335601e19843603018112613cc557600080fd5b8301803591506001600160401b03821115613cdf57600080fd5b60200191503681900382131561342b57600080fd5b6020808252602d908201527f426173654f4654576974684665653a20616d6f756e74206973206c657373207460408201526c1a185b881b5a5b905b5bdd5b9d609a1b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b61ffff84168152604060208201526000611e76604083018486613d41565b60208082526025908201527f4665653a20666565206270206d757374206265203c3d2042505f44454e4f4d496040820152642720aa27a960d91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610d6b57610d6b613dcd565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b601f821115611f3257806000526020600020601f840160051c81016020851015613e435750805b601f840160051c820191505b81811015610e855760008155600101613e4f565b81516001600160401b03811115613e7c57613e7c61384d565b613e9081613e8a8454613c6a565b84613e1c565b6020601f821160018114613ec45760008315613eac5750848201515b600019600385901b1c1916600184901b178455610e85565b600084815260208120601f198516915b82811015613ef45787850151825560209485019460019092019101613ed4565b5084821015613f125786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b61ffff8616815261ffff85166020820152836040820152608060608201526000613f4f608083018486613d41565b979650505050505050565b61ffff86168152608060208201526000613f78608083018688613d41565b6001600160401b0394909416604083015250606001529392505050565b61ffff8916815260c060208201526000613fb360c08301898b613d41565b6001600160401b038816604084015286606084015285608084015282810360a0840152613fe1818587613d41565b9b9a5050505050505050505050565b6001600160401b038311156140075761400761384d565b61401b836140158354613c6a565b83613e1c565b6000601f84116001811461404f57600085156140375750838201355b600019600387901b1c1916600186901b178355610e85565b600083815260209020601f19861690835b828110156140805786850135825560209485019460019092019101614060565b508682101561409d5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8082028115828204841417610d6b57610d6b613dcd565b634e487b7160e01b600052601260045260246000fd5b6000826140eb576140eb6140c6565b500490565b60006020828403121561410257600080fd5b81516001600160401b0381111561411857600080fd5b8201601f8101841361412957600080fd5b805161413761391282613893565b81815285602083850101111561414c57600080fd5b611e76826020830160208601613508565b61ffff8516815260806020820152600061417a608083018661352c565b6001600160401b03851660408401528281036060840152613f4f818561352c565b61ffff861681526001600160a01b038516602082015260a0604082018190526000906141c99083018661352c565b841515606084015282810360808401526141e3818561352c565b98975050505050505050565b6000806040838503121561420257600080fd5b505080516020909101519092909150565b80820180821115610d6b57610d6b613dcd565b60008251614238818460208701613508565b9190910192915050565b61ffff8616815260a06020820152600061425f60a083018761352c565b6001600160401b03861660408401528281036060840152614280818661352c565b905082810360808401526141e3818561352c565b6000826142a3576142a36140c6565b500690565b61ffff8716815260c0602082015260006142c560c083018861352c565b82810360408401526142d7818861352c565b6001600160a01b0387811660608601528616608085015283810360a08501529050614302818561352c565b9998505050505050505050565b60ff60f81b8760f81b1681528560018201526001600160401b0360c01b8560c01b1660218201528360298201526001600160401b0360c01b8360c01b16604982015260008251614366816051850160208701613508565b91909101605101979650505050505050565b61ffff891681526101006020820152600061439761010083018a61352c565b6001600160401b0389166040840152606083018890526001600160a01b038716608084015260a0830186905282810360c08401526143d5818661352c565b9150508260e08301529998505050505050505050565b6060815260006143fe606083018661352c565b6001600160401b03949094166020830152506040015291905056fea2646970667358221220e9866084a148275220bbfbfc333d16fd72d07223d9f5c65f989afcf7e8b4449764736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000008000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd700000000000000000000000000000000000000000000000000000000000000034d5354000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d53540000000000000000000000000000000000000000000000000000000000