@layerzerolabs/oapp-alt-evm
Version:
LayerZero Labs reference EVM OmniChain Application (OAppAlt) for EndpointV2Alt implementation
1 lines • 259 kB
JSON
{"abi":[{"type":"constructor","inputs":[{"name":"_verifyHelper","type":"address","internalType":"address payable"},{"name":"_endpoint","type":"address","internalType":"address"},{"name":"_treasuryGasCap","type":"uint256","internalType":"uint256"},{"name":"_treasuryGasForFeeCap","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"executorConfigs","inputs":[{"name":"oapp","type":"address","internalType":"address"},{"name":"eid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"maxMessageSize","type":"uint32","internalType":"uint32"},{"name":"executor","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"fees","inputs":[{"name":"worker","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAppUlnConfig","inputs":[{"name":"_oapp","type":"address","internalType":"address"},{"name":"_remoteEid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"tuple","internalType":"struct UlnConfig","components":[{"name":"confirmations","type":"uint64","internalType":"uint64"},{"name":"requiredDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNThreshold","type":"uint8","internalType":"uint8"},{"name":"requiredDVNs","type":"address[]","internalType":"address[]"},{"name":"optionalDVNs","type":"address[]","internalType":"address[]"}]}],"stateMutability":"view"},{"type":"function","name":"getConfig","inputs":[{"name":"_eid","type":"uint32","internalType":"uint32"},{"name":"_oapp","type":"address","internalType":"address"},{"name":"_configType","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"getExecutorConfig","inputs":[{"name":"_oapp","type":"address","internalType":"address"},{"name":"_remoteEid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"rtnConfig","type":"tuple","internalType":"struct ExecutorConfig","components":[{"name":"maxMessageSize","type":"uint32","internalType":"uint32"},{"name":"executor","type":"address","internalType":"address"}]}],"stateMutability":"view"},{"type":"function","name":"getUlnConfig","inputs":[{"name":"_oapp","type":"address","internalType":"address"},{"name":"_remoteEid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"rtnConfig","type":"tuple","internalType":"struct UlnConfig","components":[{"name":"confirmations","type":"uint64","internalType":"uint64"},{"name":"requiredDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNThreshold","type":"uint8","internalType":"uint8"},{"name":"requiredDVNs","type":"address[]","internalType":"address[]"},{"name":"optionalDVNs","type":"address[]","internalType":"address[]"}]}],"stateMutability":"view"},{"type":"function","name":"isSupportedEid","inputs":[{"name":"_eid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"messageLibType","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"enum MessageLibType"}],"stateMutability":"pure"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"quote","inputs":[{"name":"_packet","type":"tuple","internalType":"struct Packet","components":[{"name":"nonce","type":"uint64","internalType":"uint64"},{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"address","internalType":"address"},{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"receiver","type":"bytes32","internalType":"bytes32"},{"name":"guid","type":"bytes32","internalType":"bytes32"},{"name":"message","type":"bytes","internalType":"bytes"}]},{"name":"_options","type":"bytes","internalType":"bytes"},{"name":"_payInLzToken","type":"bool","internalType":"bool"}],"outputs":[{"name":"","type":"tuple","internalType":"struct MessagingFee","components":[{"name":"nativeFee","type":"uint256","internalType":"uint256"},{"name":"lzTokenFee","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"send","inputs":[{"name":"_packet","type":"tuple","internalType":"struct Packet","components":[{"name":"nonce","type":"uint64","internalType":"uint64"},{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"address","internalType":"address"},{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"receiver","type":"bytes32","internalType":"bytes32"},{"name":"guid","type":"bytes32","internalType":"bytes32"},{"name":"message","type":"bytes","internalType":"bytes"}]},{"name":"_options","type":"bytes","internalType":"bytes"},{"name":"_payInLzToken","type":"bool","internalType":"bool"}],"outputs":[{"name":"fee","type":"tuple","internalType":"struct MessagingFee","components":[{"name":"nativeFee","type":"uint256","internalType":"uint256"},{"name":"lzTokenFee","type":"uint256","internalType":"uint256"}]},{"name":"encodedPacket","type":"bytes","internalType":"bytes"}],"stateMutability":"nonpayable"},{"type":"function","name":"setConfig","inputs":[{"name":"_oapp","type":"address","internalType":"address"},{"name":"_params","type":"tuple[]","internalType":"struct SetConfigParam[]","components":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"configType","type":"uint32","internalType":"uint32"},{"name":"config","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultExecutorConfigs","inputs":[{"name":"_params","type":"tuple[]","internalType":"struct SetDefaultExecutorConfigParam[]","components":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"config","type":"tuple","internalType":"struct ExecutorConfig","components":[{"name":"maxMessageSize","type":"uint32","internalType":"uint32"},{"name":"executor","type":"address","internalType":"address"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultUlnConfigs","inputs":[{"name":"_params","type":"tuple[]","internalType":"struct SetDefaultUlnConfigParam[]","components":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"config","type":"tuple","internalType":"struct UlnConfig","components":[{"name":"confirmations","type":"uint64","internalType":"uint64"},{"name":"requiredDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNThreshold","type":"uint8","internalType":"uint8"},{"name":"requiredDVNs","type":"address[]","internalType":"address[]"},{"name":"optionalDVNs","type":"address[]","internalType":"address[]"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTreasury","inputs":[{"name":"_treasury","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTreasuryNativeFeeCap","inputs":[{"name":"_newTreasuryNativeFeeCap","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"_interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"testHelper","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract TestHelperOz5"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"treasury","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"major","type":"uint64","internalType":"uint64"},{"name":"minor","type":"uint8","internalType":"uint8"},{"name":"endpointVersion","type":"uint8","internalType":"uint8"}],"stateMutability":"pure"},{"type":"function","name":"withdrawFee","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawLzTokenFee","inputs":[{"name":"_lzToken","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"DVNFeePaid","inputs":[{"name":"requiredDVNs","type":"address[]","indexed":false,"internalType":"address[]"},{"name":"optionalDVNs","type":"address[]","indexed":false,"internalType":"address[]"},{"name":"fees","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"DefaultExecutorConfigsSet","inputs":[{"name":"params","type":"tuple[]","indexed":false,"internalType":"struct SetDefaultExecutorConfigParam[]","components":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"config","type":"tuple","internalType":"struct ExecutorConfig","components":[{"name":"maxMessageSize","type":"uint32","internalType":"uint32"},{"name":"executor","type":"address","internalType":"address"}]}]}],"anonymous":false},{"type":"event","name":"DefaultUlnConfigsSet","inputs":[{"name":"params","type":"tuple[]","indexed":false,"internalType":"struct SetDefaultUlnConfigParam[]","components":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"config","type":"tuple","internalType":"struct UlnConfig","components":[{"name":"confirmations","type":"uint64","internalType":"uint64"},{"name":"requiredDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNThreshold","type":"uint8","internalType":"uint8"},{"name":"requiredDVNs","type":"address[]","internalType":"address[]"},{"name":"optionalDVNs","type":"address[]","internalType":"address[]"}]}]}],"anonymous":false},{"type":"event","name":"ExecutorConfigSet","inputs":[{"name":"oapp","type":"address","indexed":false,"internalType":"address"},{"name":"eid","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"config","type":"tuple","indexed":false,"internalType":"struct ExecutorConfig","components":[{"name":"maxMessageSize","type":"uint32","internalType":"uint32"},{"name":"executor","type":"address","internalType":"address"}]}],"anonymous":false},{"type":"event","name":"ExecutorFeePaid","inputs":[{"name":"executor","type":"address","indexed":false,"internalType":"address"},{"name":"fee","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"LzTokenFeeWithdrawn","inputs":[{"name":"lzToken","type":"address","indexed":false,"internalType":"address"},{"name":"receiver","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"NativeFeeWithdrawn","inputs":[{"name":"worker","type":"address","indexed":false,"internalType":"address"},{"name":"receiver","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"TreasuryNativeFeeCapSet","inputs":[{"name":"newTreasuryNativeFeeCap","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TreasurySet","inputs":[{"name":"treasury","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"UlnConfigSet","inputs":[{"name":"oapp","type":"address","indexed":false,"internalType":"address"},{"name":"eid","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"config","type":"tuple","indexed":false,"internalType":"struct UlnConfig","components":[{"name":"confirmations","type":"uint64","internalType":"uint64"},{"name":"requiredDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNThreshold","type":"uint8","internalType":"uint8"},{"name":"requiredDVNs","type":"address[]","internalType":"address[]"},{"name":"optionalDVNs","type":"address[]","internalType":"address[]"}]}],"anonymous":false},{"type":"error","name":"DVN_InvalidDVNIdx","inputs":[]},{"type":"error","name":"DVN_InvalidDVNOptions","inputs":[{"name":"cursor","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"LZ_MessageLib_CannotWithdrawAltToken","inputs":[]},{"type":"error","name":"LZ_MessageLib_InvalidAmount","inputs":[{"name":"requested","type":"uint256","internalType":"uint256"},{"name":"available","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"LZ_MessageLib_InvalidExecutor","inputs":[]},{"type":"error","name":"LZ_MessageLib_InvalidMessageSize","inputs":[{"name":"actual","type":"uint256","internalType":"uint256"},{"name":"max","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"LZ_MessageLib_NotTreasury","inputs":[]},{"type":"error","name":"LZ_MessageLib_OnlyEndpoint","inputs":[]},{"type":"error","name":"LZ_MessageLib_TransferFailed","inputs":[]},{"type":"error","name":"LZ_MessageLib_ZeroMessageSize","inputs":[]},{"type":"error","name":"LZ_ULN_AtLeastOneDVN","inputs":[]},{"type":"error","name":"LZ_ULN_InvalidConfigType","inputs":[{"name":"configType","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"LZ_ULN_InvalidConfirmations","inputs":[]},{"type":"error","name":"LZ_ULN_InvalidLegacyType1Option","inputs":[]},{"type":"error","name":"LZ_ULN_InvalidLegacyType2Option","inputs":[]},{"type":"error","name":"LZ_ULN_InvalidOptionalDVNCount","inputs":[]},{"type":"error","name":"LZ_ULN_InvalidOptionalDVNThreshold","inputs":[]},{"type":"error","name":"LZ_ULN_InvalidRequiredDVNCount","inputs":[]},{"type":"error","name":"LZ_ULN_InvalidWorkerId","inputs":[{"name":"workerId","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"LZ_ULN_InvalidWorkerOptions","inputs":[{"name":"cursor","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"LZ_ULN_Unsorted","inputs":[]},{"type":"error","name":"LZ_ULN_UnsupportedEid","inputs":[{"name":"eid","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"LZ_ULN_UnsupportedOptionType","inputs":[{"name":"optionType","type":"uint16","internalType":"uint16"}]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"SafeCastOverflowedUintDowncast","inputs":[{"name":"bits","type":"uint8","internalType":"uint8"},{"name":"value","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"Transfer_NativeFailed","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_value","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"Transfer_ToAddressIsZero","inputs":[]}],"bytecode":{"object":"0x60e060405234801562000010575f80fd5b50604051620047f1380380620047f1833981016040819052620000339162000185565b82828282836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000074573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200009a9190620001cf565b6001600160a01b03821660805263ffffffff811660a05283833380620000d957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000e4816200011e565b5060c0919091526002555050600680546001600160a01b0319166001600160a01b03989098169790971790965550620001fb945050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811462000182575f80fd5b50565b5f805f806080858703121562000199575f80fd5b8451620001a6816200016d565b6020860151909450620001b9816200016d565b6040860151606090960151949790965092505050565b5f60208284031215620001e0575f80fd5b815163ffffffff81168114620001f4575f80fd5b9392505050565b60805160a05160c0516145b26200023f5f395f8181611ca60152611e0401525f50505f81816106740152818161077701528181611266015261178801526145b25ff3fe60806040526004361061014a575f3560e01c806361d027b3116100b3578063d15b0d491161006d578063d15b0d4914610434578063d80e9bd914610453578063f0f442601461047f578063f2fde38b1461049e578063faaebd21146104bd578063fd9be522146104f6575f80fd5b806361d027b31461037b5780636750cd4c1461039a578063715018a6146103b95780638da5cb5b146103cd5780639c33abf7146103e9578063c14c434914610415575f80fd5b806329460b0b1161010457806329460b0b1461024657806339e3f938146102655780634389e58f1461029157806343ea4fa9146102be5780634d963200146102dd57806354fd4d5014610350575f80fd5b806301ffc9a7146101555780630e97289b14610189578063188183f4146101c05780631881d94d146101ec578063200175f71461020657806320efd72214610227575f80fd5b3661015157005b5f80fd5b348015610160575f80fd5b5061017461016f3660046134f4565b610515565b60405190151581526020015b60405180910390f35b348015610194575f80fd5b506006546101a8906001600160a01b031681565b6040516001600160a01b039091168152602001610180565b3480156101cb575f80fd5b506101df6101da36600461355b565b610566565b6040516101809190613592565b3480156101f7575f80fd5b505f60405161018091906135b8565b348015610211575f80fd5b506102256102203660046135de565b61063d565b005b348015610232575f80fd5b5061022561024136600461365c565b610775565b348015610251575f80fd5b506102256102603660046136ac565b6108e9565b348015610270575f80fd5b5061028461027f36600461355b565b610a7f565b604051610180919061379d565b34801561029c575f80fd5b506102b06102ab3660046137be565b610bb5565b6040516101809291906138b1565b3480156102c9575f80fd5b506102846102d836600461355b565b610c44565b3480156102e8575f80fd5b5061032c6102f736600461355b565b600460209081525f928352604080842090915290825290205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201610180565b34801561035b575f80fd5b5060408051600381525f6020820152600291810191909152606001610180565b348015610386575f80fd5b506003546101a8906001600160a01b031681565b3480156103a5575f80fd5b506101746103b43660046138d4565b610f47565b3480156103c4575f80fd5b50610225610f51565b3480156103d8575f80fd5b505f546001600160a01b03166101a8565b3480156103f4575f80fd5b506104086104033660046138ef565b610f64565b6040516101809190613937565b348015610420575f80fd5b5061022561042f366004613949565b610ff5565b34801561043f575f80fd5b5061022561044e3660046139b7565b611129565b34801561045e575f80fd5b5061047261046d3660046137be565b61119e565b60405161018091906139ce565b34801561048a575f80fd5b506102256104993660046139e5565b61120c565b3480156104a9575f80fd5b506102256104b83660046139e5565b611220565b3480156104c8575f80fd5b506104e86104d73660046139e5565b60056020525f908152604090205481565b604051908152602001610180565b348015610501575f80fd5b50610225610510366004613a00565b61125a565b5f6001600160e01b031982166325fc096160e21b148061054557506001600160e01b0319821663b6e9ace360e01b145b8061056057506301ffc9a760e01b6001600160e01b03198316145b92915050565b604080518082019091525f808252602082015263ffffffff8083165f8181527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec602090815260408083206001600160a01b03891684526004835281842094845293909152812080549293909216908190036105e857825463ffffffff166105ea565b805b63ffffffff168452815464010000000090046001600160a01b03168061062257835464010000000090046001600160a01b0316610624565b805b6001600160a01b03166020860152509295945050505050565b6003546001600160a01b031633146106685760405163885762a760e01b815260040160405180910390fd5b826001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106f29190613a2a565b6001600160a01b031603610719576040516339a5741160e21b815260040160405180910390fd5b610724838383611337565b604080516001600160a01b038086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146107be5760405163467409c360e01b815260040160405180910390fd5b5f5b818110156108e357368383838181106107db576107db613a45565b90506020028101906107ed9190613a59565b90506108046107ff60208301836138d4565b611377565b600161081660408301602084016138d4565b63ffffffff16036108565761085161083160208301836138d4565b8661083f6040850185613a77565b81019061084c9190613b47565b6113a5565b6108da565b600261086860408301602084016138d4565b63ffffffff16036108a35761085161088360208301836138d4565b866108916040850185613a77565b81019061089e9190613cfc565b61142c565b6108b360408201602083016138d4565b604051635d4be0fd60e11b815263ffffffff90911660048201526024015b60405180910390fd5b506001016107c0565b50505050565b6108f1611475565b5f5b81811015610a41573683838381811061090e5761090e613a45565b90506020028101906109209190613d2d565b905060ff6109316020830183613d41565b610942906040810190602001613d55565b60ff1603610963576040516341d50bed60e11b815260040160405180910390fd5b60ff6109726020830183613d41565b610983906060810190604001613d55565b60ff16036109a45760405163211089b360e11b815260040160405180910390fd5b6001600160401b036109b96020830183613d41565b6109c7906020810190613d6e565b6001600160401b0316036109ee5760405163281b33d760e11b815260040160405180910390fd5b610a0c6109fe6020830183613d41565b610a0790613d87565b6114a1565b610a385f610a1d60208401846138d4565b610a2a6020850185613d41565b610a3390613d87565b6114d9565b506001016108f3565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610a73929190613e12565b60405180910390a15050565b610a87613442565b6001600160a01b0383165f90815260016020818152604080842063ffffffff87168552825292839020835160c08101855281546001600160401b038116825260ff600160401b8204811683860152600160481b8204811683880152600160501b9091041660608201529281018054855181850281018501909652808652939491936080860193830182828015610b4457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610b26575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610ba457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610b86575b505050505081525050905092915050565b604080518082019091525f80825260208201526060610bd686868686611771565b600654604051631f5dad8b60e31b81529294509092506001600160a01b03169063faed6c5890610c0e90849089908990600401613f54565b5f604051808303815f87803b158015610c25575f80fd5b505af1158015610c37573d5f803e3d5ffd5b5050505094509492505050565b610c4c613442565b63ffffffff82165f8181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083206001600160a01b03881684526001835281842094845293909152902080546001600160401b031680610cc05782546001600160401b03168452610cdd565b6001600160401b0381811614610cdd576001600160401b03811684525b8154600160401b900460ff16610d75578254600160401b900460ff1615610d705782600101805480602002602001604051908101604052809291908181526020018280548015610d5457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610d36575b505050505060808501528254600160401b900460ff1660208501525b610dfa565b8154600160401b900460ff90811614610dfa5781600101805480602002602001604051908101604052809291908181526020018280548015610dde57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610dc0575b505050505060808501528154600160401b900460ff1660208501525b8154600160481b900460ff16610ea1578254600160481b900460ff1615610e9c5782600201805480602002602001604051908101604052809291908181526020018280548015610e7157602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610e53575b505050505060a0850152825460ff600160481b820481166040870152600160501b9091041660608501525b610f35565b8154600160481b900460ff90811614610f355781600201805480602002602001604051908101604052809291908181526020018280548015610f0a57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610eec575b505050505060a0850152815460ff600160481b820481166040870152600160501b9091041660608501525b610f3e846114a1565b50505092915050565b5f61056082611842565b610f59611475565b610f625f61189c565b565b60605f1963ffffffff831601610fa457610f7e8385610566565b604051602001610f8e9190613592565b6040516020818303038152906040529050610fee565b60011963ffffffff831601610fcd57610fbd8385610c44565b604051602001610f8e919061379d565b604051635d4be0fd60e11b815263ffffffff831660048201526024016108d1565b9392505050565b610ffd611475565b5f5b818110156110f7573683838381811061101a5761101a613a45565b60609081029290920192505f9161103791508301604084016139e5565b6001600160a01b03160361105e57604051631074e82d60e11b815260040160405180910390fd5b61106e60408201602083016138d4565b63ffffffff165f03611093576040516349cfac4360e01b815260040160405180910390fd5b5f808052600460209081528201907f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec906110cd83856138d4565b63ffffffff16815260208101919091526040015f206110ec8282613f98565b505050600101610fff565b507f2b001e1c6683bf79cc52891bd7215b204c787d18134fc7f3d21b4f32a49e47de8282604051610a73929190613ff1565b611131611475565b6002548111156111625760025460405163068109f760e31b81526108d1918391600401918252602082015260400190565b60028190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091525f80825260208201525f806111ed6111c66060890160408a016139e5565b6111d660808a0160608b016138d4565b6111e360c08b018b613a77565b9050878a8a6118eb565b604080518082019091529182526020820152925050505b949350505050565b611214611475565b61121d816119dc565b50565b611228611475565b6001600160a01b03811661125157604051631e4fbdf760e01b81525f60048201526024016108d1565b61121d8161189c565b61126381611a2a565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e49190613a2a565b90506112f1818484611a79565b604080513381526001600160a01b03851660208201529081018390527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a666988390606001610768565b6001600160a01b03821661135e576040516306b7a93160e41b815260040160405180910390fd5b6113726001600160a01b0384168383611a9c565b505050565b61138081611842565b61121d57604051633c30434160e21b815263ffffffff821660048201526024016108d1565b6001600160a01b038083165f90815260046020908152604080832063ffffffff8089168552908352928190208551815493870151909516640100000000026001600160c01b03199093169490931693909317179055517f779cb2dd9d2bb1be1737d05435d744facbfb84a2a4912e21379d39beddcdc8059061076890849086908590614070565b6114378284836114d9565b6114418284610c44565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f5081828483604051610768939291906140b2565b5f546001600160a01b03163314610f625760405163118cdaa760e01b81523360048201526024016108d1565b602081015160ff161580156114bb5750606081015160ff16155b1561121d5760405163ce2c375160e01b815260040160405180910390fd5b602081015160ff90811614806114f45750602081015160ff16155b15611522576080810151511561151d576040516341d50bed60e11b815260040160405180910390fd5b611588565b806020015160ff1681608001515114158061155d57506002611546600160ff6140f5565b611550919061410e565b60ff16816020015160ff16115b1561157b576040516341d50bed60e11b815260040160405180910390fd5b6115888160800151611aee565b604081015160ff90811614806115a35750604081015160ff16155b156115f75760a081015151156115cc5760405163211089b360e11b815260040160405180910390fd5b606081015160ff16156115f2576040516338682fa960e01b815260040160405180910390fd5b61169c565b806040015160ff168160a00151511415806116325750600261161b600160ff6140f5565b611625919061410e565b60ff16816040015160ff16115b156116505760405163211089b360e11b815260040160405180910390fd5b606081015160ff1615806116715750806040015160ff16816060015160ff16115b1561168f576040516338682fa960e01b815260040160405180910390fd5b61169c8160a00151611aee565b6001600160a01b0383165f90815260016020818152604080842063ffffffff8716855282529283902084518154868401519587015160608801516001600160401b0390931668ffffffffffffffffff1990921691909117600160401b60ff97881602176affff0000000000000000001916600160481b9187169190910260ff60501b191617600160501b95909116949094029390931783556080840151805185949361174d93908501920190613486565b5060a08201518051611769916002840191602090910190613486565b505050505050565b604080518082019091525f808252602082015260607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146117cf5760405163467409c360e01b815260040160405180910390fd5b5f806117dc888888611b53565b90925090505f8061180d6117f660608c0160408d016139e5565b61180660808d0160608e016138d4565b858a611c1a565b909250905061181c828461413b565b604080518082019091529081526020810191909152945091925050505b94509492505050565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081208054600160401b900460ff16151580610fee575054600160501b900460ff16151592915050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f805f806118f98686611d24565b915091505f6119098b8b84611d3d565b90505f6119168c8c610566565b905061192b8a825f015163ffffffff16611d49565b80602001516001600160a01b031663709eb6648c8e8d886040518563ffffffff1660e01b8152600401611961949392919061414e565b602060405180830381865afa15801561197c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119a0919061418a565b6119aa908361413b565b91505f806119ba8e8e868e611d78565b90925090506119c9828561413b565b9e909d509b505050505050505050505050565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f90602001611193565b335f9081526005602052604090205480821115611a645760405163068109f760e31b815260048101839052602481018290526044016108d1565b335f9081526005602052604090209190039055565b6001600160a01b038316611a91576113728282611e46565b611372838383611337565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611372908490611eef565b5f805b8251811015611372575f838281518110611b0d57611b0d613a45565b60200260200101519050826001600160a01b0316816001600160a01b031611611b495760405163447516e160e01b815260040160405180910390fd5b9150600101611af1565b60605f805f611b628686611d24565b90925090505f611b8b611b7b60608a0160408b016139e5565b6101da60808b0160608c016138d4565b90505f611b9b60c08a018a613a77565b90509050611bb281835f015163ffffffff16611d49565b6020820151611be290611bcb60808c0160608d016138d4565b611bdb60608d0160408e016139e5565b8488611f5b565b611bec908661413b565b94505f80611bfa8b8661204f565b9092509050611c09828861413b565b909b909a5098505050505050505050565b6003545f9081906001600160a01b031615611839576040516001600160a01b038716602482015263ffffffff861660448201526064810185905283151560848201525f9060a40160408051601f19818403018152919052602080820180516001600160e01b0316636a8e2a4360e11b1790526003549192505f918291611cce916001600160a01b0316907f000000000000000000000000000000000000000000000000000000000000000090849087612071565b91509150611cde8787848461211b565b90955093508415611d18576003546001600160a01b03165f9081526005602052604081208054879290611d1290849061413b565b90915550505b50505094509492505050565b606080611d318484612192565b915091505b9250929050565b5f611204848484612278565b80821115611d7457604051636333d79f60e11b815260048101839052602481018290526044016108d1565b5050565b6003545f9081906001600160a01b031615611839576040516001600160a01b038716602482015263ffffffff861660448201526064810185905283151560848201525f9060a40160408051601f19818403018152919052602080820180516001600160e01b031663d424422160e01b1790526003549192505f918291611e2a916001600160a01b0316907f000000000000000000000000000000000000000000000000000000000000000090866122ec565b91509150611e3a8787848461211b565b94509450505050611839565b6001600160a01b038216611e6d576040516306b7a93160e41b815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611eb6576040519150601f19603f3d011682016040523d82523d5f602084013e611ebb565b606091505b505090508061137257604051631196f20d60e21b81526001600160a01b0384166004820152602481018390526044016108d1565b5f8060205f8451602086015f885af180611f0e576040513d5f823e3d81fd5b50505f513d91508115611f25578060011415611f32565b6001600160a01b0384163b155b156108e357604051635274afe760e01b81526001600160a01b03851660048201526024016108d1565b6040516338bf452160e11b81525f906001600160a01b0387169063717e8a4290611f8f90889088908890889060040161414e565b6020604051808303815f875af1158015611fab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fcf919061418a565b90508015612004576001600160a01b0386165f9081526005602052604081208054839290611ffe90849061413b565b90915550505b604080516001600160a01b0388168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a195945050505050565b5f606061206660056120608661420c565b85612392565b909590945092505050565b5f6060863b80830361209657604080515f808252602082019092529250925050612111565b5f805f8761ffff166001600160401b038111156120b5576120b5613ab9565b6040519080825280601f01601f1916602001820160405280156120df576020820181803683370190505b5090505f80885160208a018c8f8ff191503d9250878311156120ff578792505b828152825f602083013e909450925050505b9550959350505050565b5f8083158061212b575082516020115b1561213a57505f905080611839565b5f8380602001905181019061214f919061418a565b9050851561215f57809150612188565b5f600254881161217157600254612173565b875b90508082116121825781612184565b805b9350505b5094509492505050565b6060805f806121a186866124d7565b9150915080515f036121f657604080515f8082526020820190925283916121ea565b604080518082019091525f8152606060208201528152602001906001900390816121c35790505b50935093505050611d36565b6040805160018082528183019092525f91816020015b604080518082019091525f81526060602082015281526020019060019003908161220c5790505090506040518060400160405280600260ff16815260200183815250815f8151811061226057612260613a45565b60209081029190910101529196919550909350505050565b5f806122848585610c44565b90505f83515f146122b257835f815181106122a1576122a1613a45565b6020026020010151602001516122c2565b60405180602001604052805f8152505b90505f806122cf8361268b565b915091506122e084888a85856128e6565b98975050505050505050565b5f6060853b80830361231157604080515f808252602082019092529250925050611839565b5f805f8761ffff166001600160401b0381111561233057612330613ab9565b6040519080825280601f01601f19166020018201604052801561235a576020820181803683370190505b5090505f80885160208a018d8dfa91503d925087831115612379578792505b828152825f602083013e90999098509650505050505050565b5f60605f61239f85612a78565b90505f6123ab86612b05565b805160208201206060880151604089015192935090915f6123cc8284610c44565b90505f89515f146123fa57895f815181106123e9576123e9613a45565b60200260200101516020015161240a565b60405180602001604052805f8152505b9050606061245b8d846040518060a001604052808963ffffffff1681526020018c81526020018a8152602001875f01516001600160401b03168152602001886001600160a01b031681525085612b22565b604051919b50915061247390899089906020016142a6565b60405160208183030381529060405298507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464483608001518460a00151836040516124bf939291906142d4565b60405180910390a15050505050505050935093915050565b60608060028310156124fe5760405163196499c760e21b81525f60048201526024016108d1565b5f61250c6002828688614330565b61251591614357565b60f01c90506002600219820161267457805f5b8683101561261a575f61254060018501858a8c614330565b61254991614387565b60f81c90505f81900361257157604051636780cfaf60e01b81525f60048201526024016108d1565b8160ff165f03612583578091506125bf565b8160ff168160ff16146125bf57365f61259e86868c8e614330565b915091506125af8989868585612db3565b9099509750859450919250829150505b60018401935f906125d590600301868b8d614330565b6125de91614357565b60f01c90505f8190036126075760405163196499c760e21b8152600481018690526024016108d1565b8060020161ffff16850194505050612528565b82871461263d5760405163196499c760e21b8152600481018490526024016108d1565b600287111561266d57365f61265485858b8d614330565b915091506126658888858585612db3565b909850965050505b5050612682565b61267f828787612ed0565b93505b50509250929050565b60608082515f0361269b57915091565b5f6126a584613056565b90508060ff166001036127555760408051600180825281830190925290816020015b60608152602001906001900390816126c757905050925083835f815181106126f1576126f1613a45565b60209081029190910101526040805160018082528183019092529081602001602082028036833701905050915061272984600361312d565b825f8151811061273b5761273b613a45565b602002602001019060ff16908160ff168152505050915091565b8060ff166001600160401b0381111561277057612770613ab9565b604051908082528060200260200182016040528015612799578160200160208202803683370190505b5091508060ff166001600160401b038111156127b7576127b7613ab9565b6040519080825280602002602001820160405280156127ea57816020015b60608152602001906001900390816127d55790505b5092505f8060ff5b865183101561287c576001909201915f61280c8885613188565b6002949094019390505f612820898661312d565b90508260ff1660ff036128355780925061286d565b8260ff168160ff161461286d57600219848603015f6128558b87846131e4565b90506128638a8a87846132f0565b5093909301929150815b5061ffff1692909201916127f2565b8183035f61288b8985846131e4565b9050612899888885846132f0565b5f5b8660ff168160ff1610156128da57878160ff16815181106128be576128be613a45565b6020908102919091010180515f190160ff16905260010161289b565b50505050505050915091565b5f80866040015187602001516128fc91906143b5565b90505f5b8160ff168160ff161015612a6d575f886020015160ff168260ff16106129545760a089015160208a015161293490846140f5565b60ff168151811061294757612947613a45565b6020026020010151612976565b88608001518260ff168151811061296d5761296d613a45565b60200260200101515b60408051602081019091525f808252919250905b86518110156129e2578360ff168782815181106129a9576129a9613a45565b602002602001015160ff16036129da578781815181106129cb576129cb613a45565b602002602001015191506129e2565b60010161298a565b508951604051630c2eceab60e21b81526001600160a01b038416916330bb3aac91612a15918d918d9087906004016143ce565b602060405180830381865afa158015612a30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a54919061418a565b612a5e908661413b565b94505050806001019050612900565b505095945050505050565b805160208083015160408085015160608087015160808801519351600160f81b9681019690965260c09690961b6001600160c01b031916602186015260e093841b6001600160e01b031990811660298701526001600160a01b03909216602d8601529490921b909116604d83015260518201526071015b6040516020818303038152906040529050919050565b60608160a001518260c00151604051602001612aef92919061440c565b5f60605f80612b308561268b565b915091505f87604001518860200151612b4991906143b5565b90508060ff166001600160401b03811115612b6657612b66613ab9565b604051908082528060200260200182016040528015612b8f578160200160208202803683370190505b5093505f5b8160ff168160ff161015610c37575f896020015160ff168260ff1610612be85760a08a015160208b0151612bc890846140f5565b60ff1681518110612bdb57612bdb613a45565b6020026020010151612c0a565b89608001518260ff1681518110612c0157612c01613a45565b60200260200101515b60408051602081019091525f808252919250905b8551811015612c76578360ff16868281518110612c3d57612c3d613a45565b602002602001015160ff1603612c6e57868181518110612c5f57612c5f613a45565b60200260200101519150612c76565b600101612c1e565b506040516395d376d760e01b81526001600160a01b038316906395d376d790612ca5908d908590600401614431565b6020604051808303815f875af1158015612cc1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ce5919061418a565b878460ff1681518110612cfa57612cfa613a45565b6020026020010181815250505f878460ff1681518110612d1c57612d1c613a45565b60200260200101511115612da957868360ff1681518110612d3f57612d3f613a45565b60200260200101518c5f846001600160a01b03166001600160a01b031681526020019081526020015f205f828254612d77919061413b565b92505081905550868360ff1681518110612d9357612d93613a45565b602002602001015188612da6919061413b565b97505b5050600101612b94565b6060805f1960ff861601612e2e57865115612df157868484604051602001612ddd939291906144a2565b604051602081830303815290604052612e27565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9650612ec5565b60011960ff861601612ea757855115612e6a57858484604051602001612e56939291906144a2565b604051602081830303815290604052612ea0565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9550612ec5565b604051636780cfaf60e01b815260ff861660048201526024016108d1565b509495939450505050565b60605f1961ffff851601612f6e5760228214612eff576040516301b8ca5560e31b815260040160405180910390fd5b5f612f1f612f11602260028688614330565b612f1a916144c8565b613402565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b166024820152909150603401604051602081830303815290604052915050610fee565b60011961ffff85160161303757604282111580612f8b5750606282115b15612fa9576040516360493e2b60e11b815260040160405180910390fd5b5f612fbb612f11602260028688614330565b90505f612fcf612f11604260228789614330565b90505f6041198501612fe4866042818a614330565b612fed916144c8565b60405160086020938403029190911c925061301e916001916011918391889183916031916002918b918b91016144e5565b6040516020818303038152906040529350505050610fee565b604051630417051360e41b815261ffff851660048201526024016108d1565b5f80805b8351821015613102576001909101905f6130748584613188565b905060028301925060028161ffff1610156130a55760405163013adb8360e21b8152600481018490526024016108d1565b5f6130b0868561312d565b90508060ff1660ff036130d6576040516334f4f66f60e21b815260040160405180910390fd5b600160ff82161b83166130f35760019485019460ff82161b831792505b5061ffff16919091019061305a565b835182146131265760405163013adb8360e21b8152600481018390526024016108d1565b5050919050565b5f61313982600161413b565b8351101561317f5760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b60448201526064016108d1565b50016001015190565b5f61319482600261413b565b835110156131db5760405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b60448201526064016108d1565b50016002015190565b6060816131f281601f61413b565b10156132315760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016108d1565b61323b828461413b565b8451101561327f5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016108d1565b60608215801561329d5760405191505f8252602082016040526132e7565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156132d65780518352602092830192016132be565b5050858452601f01601f1916604052505b50949350505050565b8160ff1660ff03613314576040516334f4f66f60e21b815260040160405180910390fd5b5f6133208360016143b5565b90505f5b8451811015611769575f85828151811061334057613340613a45565b602002602001015190508060ff168360ff16036133b55786828151811061336957613369613a45565b6020026020010151846040516020016133839291906142a6565b6040516020818303038152906040528783815181106133a4576133a4613a45565b602002602001018190525050611769565b8060ff165f036133f957828683815181106133d2576133d2613a45565b602002602001019060ff16908160ff1681525050838783815181106133a4576133a4613a45565b50600101613324565b5f6fffffffffffffffffffffffffffffffff82111561343e576040516306dfcc6560e41b815260806004820152602481018390526044016108d1565b5090565b6040518060c001604052805f6001600160401b031681526020015f60ff1681526020015f60ff1681526020015f60ff16815260200160608152602001606081525090565b828054828255905f5260205f209081019282156134d9579160200282015b828111156134d957825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906134a4565b5061343e9291505b8082111561343e575f81556001016134e1565b5f60208284031215613504575f80fd5b81356001600160e01b031981168114610fee575f80fd5b6001600160a01b038116811461121d575f80fd5b803561353a8161351b565b919050565b63ffffffff8116811461121d575f80fd5b803561353a8161353f565b5f806040838503121561356c575f80fd5b82356135778161351b565b915060208301356135878161353f565b809150509250929050565b815163ffffffff1681526020808301516001600160a01b03169082015260408101610560565b60208101600383106135d857634e487b7160e01b5f52602160045260245ffd5b91905290565b5f805f606084860312156135f0575f80fd5b83356135fb8161351b565b9250602084013561360b8161351b565b929592945050506040919091013590565b5f8083601f84011261362c575f80fd5b5081356001600160401b03811115613642575f80fd5b6020830191508360208260051b8501011115611d36575f80fd5b5f805f6040848603121561366e575f80fd5b83356136798161351b565b925060208401356001600160401b03811115613693575f80fd5b61369f8682870161361c565b9497909650939450505050565b5f80602083850312156136bd575f80fd5b82356001600160401b038111156136d2575f80fd5b6136de8582860161361c565b90969095509350505050565b5f815180845260208085019450602084015f5b838110156137225781516001600160a01b0316875295820195908201906001016136fd565b509495945050505050565b6001600160401b03815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c0608085015261377b60c08501826136ea565b905060a083015184820360a086015261379482826136ea565b95945050505050565b602081525f610fee602083018461372d565b8035801515811461353a575f80fd5b5f805f80606085870312156137d1575f80fd5b84356001600160401b03808211156137e7575f80fd5b9086019060e082890312156137fa575f80fd5b9094506020860135908082111561380f575f80fd5b818701915087601f830112613822575f80fd5b813581811115613830575f80fd5b886020828501011115613841575f80fd5b602083019550809450505050613859604086016137af565b905092959194509250565b5f5b8381101561387e578181015183820152602001613866565b50505f910152565b5f815180845261389d816020860160208601613864565b601f01601f19169290920160200192915050565b8251815260208084015190820152606060408201525f6112046060830184613886565b5f602082840312156138e4575f80fd5b8135610fee8161353f565b5f805f60608486031215613901575f80fd5b833561390c8161353f565b9250602084013561391c8161351b565b9150604084013561392c8161353f565b809150509250925092565b602081525f610fee6020830184613886565b5f806020838503121561395a575f80fd5b82356001600160401b0380821115613970575f80fd5b818501915085601f830112613983575f80fd5b813581811115613991575f80fd5b8660206060830285010111156139a5575f80fd5b60209290920196919550909350505050565b5f602082840312156139c7575f80fd5b5035919050565b815181526020808301519082015260408101610560565b5f602082840312156139f5575f80fd5b8135610fee8161351b565b5f8060408385031215613a11575f80fd5b8235613a1c8161351b565b946020939093013593505050565b5f60208284031215613a3a575f80fd5b8151610fee8161351b565b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112613a6d575f80fd5b9190910192915050565b5f808335601e19843603018112613a8c575f80fd5b8301803591506001600160401b03821115613aa5575f80fd5b602001915036819003821315611d36575f80fd5b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b0381118282101715613aef57613aef613ab9565b60405290565b60405160e081016001600160401b0381118282101715613aef57613aef613ab9565b604051601f8201601f191681016001600160401b0381118282101715613b3f57613b3f613ab9565b604052919050565b5f60408284031215613b57575f80fd5b604051604081018181106001600160401b0382111715613b7957613b79613ab9565b6040528235613b878161353f565b81526020830135613b978161351b565b60208201529392505050565b80356001600160401b038116811461353a575f80fd5b803560ff8116811461353a575f80fd5b5f82601f830112613bd8575f80fd5b813560206001600160401b03821115613bf357613bf3613ab9565b8160051b613c02828201613b17565b9283528481018201928281019087851115613c1b575f80fd5b83870192505b84831015613c43578235613c348161351b565b82529183019190830190613c21565b979650505050505050565b5f60c08284031215613c5e575f80fd5b613c66613acd565b9050613c7182613ba3565b8152613c7f60208301613bb9565b6020820152613c9060408301613bb9565b6040820152613ca160608301613bb9565b606082015260808201356001600160401b0380821115613cbf575f80fd5b613ccb85838601613bc9565b608084015260a0840135915080821115613ce3575f80fd5b50613cf084828501613bc9565b60a08301525092915050565b5f60208284031215613d0c575f80fd5b81356001600160401b03811115613d21575f80fd5b61120484828501613c4e565b5f8235603e19833603018112613a6d575f80fd5b5f823560be19833603018112613a6d575f80fd5b5f60208284031215613d65575f80fd5b610fee82613bb9565b5f60208284031215613d7e575f80fd5b610fee82613ba3565b5f6105603683613c4e565b5f808335601e19843603018112613da7575f80fd5b83016020810192503590506001600160401b03811115613dc5575f80fd5b8060051b3603821315611d36575f80fd5b8183525f60208085019450825f5b85811015613722578135613df78161351b565b6001600160a01b031687529582019590820190600101613de4565b60208082528181018390525f906040808401600586901b8501820187855b88811015613f4657603f19808985030185528235603e198c3603018112613e55575f80fd5b8b018035613e628161353f565b63ffffffff168552808801353682900360be19018112613e80575f80fd5b858901889052016001600160401b03613e9882613ba3565b1687860152613ea8888201613bb9565b606060ff80831682890152613ebe8a8501613bb9565b92506080818416818a0152613ed4838601613bb9565b935060a09250818416838a0152613eed81860186613d92565b60c08b81015294509150613f08905061010089018483613dd6565b925050613f1781840184613d92565b93509050838783030160e0880152613f30828483613dd6565b978a019796505050928701925050600101613e30565b509098975050505050505050565b604081525f613f666040830186613886565b8281036020840152838152838560208301375f602085830101526020601f19601f860116820101915050949350505050565b8135613fa38161353f565b63ffffffff8116905081548163ffffffff1982161783556020840135613fc88161351b565b6001600160c01b03199190911690911760209190911b640100000000600160c01b031617905550565b60208082528181018390525f90604080840186845b878110156140635781356140198161353f565b63ffffffff908116845282860135906140318261353f565b16838601528184013561404381