UNPKG

@layerzerolabs/oft-alt-evm

Version:

LayerZero Labs reference EVM OmniChain Fungible Token (OFT) implementation

1 lines 238 kB
{"abi":[{"type":"constructor","inputs":[{"name":"_name","type":"string","internalType":"string"},{"name":"_symbol","type":"string","internalType":"string"},{"name":"_lzEndpoint","type":"address","internalType":"address"},{"name":"_delegate","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"SEND","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"SEND_AND_CALL","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"allowInitializePath","inputs":[{"name":"origin","type":"tuple","internalType":"struct Origin","components":[{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"}]}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approvalRequired","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"buildMsgAndOptions","inputs":[{"name":"_sendParam","type":"tuple","internalType":"struct SendParam","components":[{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"amountLD","type":"uint256","internalType":"uint256"},{"name":"minAmountLD","type":"uint256","internalType":"uint256"},{"name":"extraOptions","type":"bytes","internalType":"bytes"},{"name":"composeMsg","type":"bytes","internalType":"bytes"},{"name":"oftCmd","type":"bytes","internalType":"bytes"}]},{"name":"_amountToCreditLD","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"message","type":"bytes","internalType":"bytes"},{"name":"options","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"combineOptions","inputs":[{"name":"_eid","type":"uint32","internalType":"uint32"},{"name":"_msgType","type":"uint16","internalType":"uint16"},{"name":"_extraOptions","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"credit","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_amountToCreditLD","type":"uint256","internalType":"uint256"},{"name":"_srcEid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"amountReceivedLD","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"debit","inputs":[{"name":"_amountToSendLD","type":"uint256","internalType":"uint256"},{"name":"_minAmountToCreditLD","type":"uint256","internalType":"uint256"},{"name":"_dstEid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"amountDebitedLD","type":"uint256","internalType":"uint256"},{"name":"amountToCreditLD","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"debitView","inputs":[{"name":"_amountToSendLD","type":"uint256","internalType":"uint256"},{"name":"_minAmountToCreditLD","type":"uint256","internalType":"uint256"},{"name":"_dstEid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"amountDebitedLD","type":"uint256","internalType":"uint256"},{"name":"amountToCreditLD","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"decimalConversionRate","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"endpoint","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ILayerZeroEndpointV2"}],"stateMutability":"view"},{"type":"function","name":"enforcedOptions","inputs":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"msgType","type":"uint16","internalType":"uint16"}],"outputs":[{"name":"enforcedOption","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"isComposeMsgSender","inputs":[{"name":"","type":"tuple","internalType":"struct Origin","components":[{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"}]},{"name":"","type":"bytes","internalType":"bytes"},{"name":"_sender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isPeer","inputs":[{"name":"_eid","type":"uint32","internalType":"uint32"},{"name":"_peer","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"lzReceive","inputs":[{"name":"_origin","type":"tuple","internalType":"struct Origin","components":[{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"}]},{"name":"_guid","type":"bytes32","internalType":"bytes32"},{"name":"_message","type":"bytes","internalType":"bytes"},{"name":"_executor","type":"address","internalType":"address"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"lzReceiveAndRevert","inputs":[{"name":"_packets","type":"tuple[]","internalType":"struct InboundPacket[]","components":[{"name":"origin","type":"tuple","internalType":"struct Origin","components":[{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"}]},{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"receiver","type":"address","internalType":"address"},{"name":"guid","type":"bytes32","internalType":"bytes32"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"executor","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"extraData","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"lzReceiveSimulate","inputs":[{"name":"_origin","type":"tuple","internalType":"struct Origin","components":[{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"}]},{"name":"_guid","type":"bytes32","internalType":"bytes32"},{"name":"_message","type":"bytes","internalType":"bytes"},{"name":"_executor","type":"address","internalType":"address"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"mint","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"msgInspector","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"nativeToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"nextNonce","inputs":[{"name":"","type":"uint32","internalType":"uint32"},{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"nonce","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"oApp","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"oAppVersion","inputs":[],"outputs":[{"name":"senderVersion","type":"uint64","internalType":"uint64"},{"name":"receiverVersion","type":"uint64","internalType":"uint64"}],"stateMutability":"pure"},{"type":"function","name":"oftVersion","inputs":[],"outputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"},{"name":"version","type":"uint64","internalType":"uint64"}],"stateMutability":"pure"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"peers","inputs":[{"name":"eid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"peer","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"preCrime","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"quoteOFT","inputs":[{"name":"_sendParam","type":"tuple","internalType":"struct SendParam","components":[{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"amountLD","type":"uint256","internalType":"uint256"},{"name":"minAmountLD","type":"uint256","internalType":"uint256"},{"name":"extraOptions","type":"bytes","internalType":"bytes"},{"name":"composeMsg","type":"bytes","internalType":"bytes"},{"name":"oftCmd","type":"bytes","internalType":"bytes"}]}],"outputs":[{"name":"oftLimit","type":"tuple","internalType":"struct OFTLimit","components":[{"name":"minAmountLD","type":"uint256","internalType":"uint256"},{"name":"maxAmountLD","type":"uint256","internalType":"uint256"}]},{"name":"oftFeeDetails","type":"tuple[]","internalType":"struct OFTFeeDetail[]","components":[{"name":"feeAmountLD","type":"int256","internalType":"int256"},{"name":"description","type":"string","internalType":"string"}]},{"name":"oftReceipt","type":"tuple","internalType":"struct OFTReceipt","components":[{"name":"amountSentLD","type":"uint256","internalType":"uint256"},{"name":"amountReceivedLD","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"quoteSend","inputs":[{"name":"_sendParam","type":"tuple","internalType":"struct SendParam","components":[{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"amountLD","type":"uint256","internalType":"uint256"},{"name":"minAmountLD","type":"uint256","internalType":"uint256"},{"name":"extraOptions","type":"bytes","internalType":"bytes"},{"name":"composeMsg","type":"bytes","internalType":"bytes"},{"name":"oftCmd","type":"bytes","internalType":"bytes"}]},{"name":"_payInLzToken","type":"bool","internalType":"bool"}],"outputs":[{"name":"msgFee","type":"tuple","internalType":"struct MessagingFee","components":[{"name":"nativeFee","type":"uint256","internalType":"uint256"},{"name":"lzTokenFee","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"removeDust","inputs":[{"name":"_amountLD","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"amountLD","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"send","inputs":[{"name":"_sendParam","type":"tuple","internalType":"struct SendParam","components":[{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"amountLD","type":"uint256","internalType":"uint256"},{"name":"minAmountLD","type":"uint256","internalType":"uint256"},{"name":"extraOptions","type":"bytes","internalType":"bytes"},{"name":"composeMsg","type":"bytes","internalType":"bytes"},{"name":"oftCmd","type":"bytes","internalType":"bytes"}]},{"name":"_fee","type":"tuple","internalType":"struct MessagingFee","components":[{"name":"nativeFee","type":"uint256","internalType":"uint256"},{"name":"lzTokenFee","type":"uint256","internalType":"uint256"}]},{"name":"_refundAddress","type":"address","internalType":"address"}],"outputs":[{"name":"msgReceipt","type":"tuple","internalType":"struct MessagingReceipt","components":[{"name":"guid","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"},{"name":"fee","type":"tuple","internalType":"struct MessagingFee","components":[{"name":"nativeFee","type":"uint256","internalType":"uint256"},{"name":"lzTokenFee","type":"uint256","internalType":"uint256"}]}]},{"name":"oftReceipt","type":"tuple","internalType":"struct OFTReceipt","components":[{"name":"amountSentLD","type":"uint256","internalType":"uint256"},{"name":"amountReceivedLD","type":"uint256","internalType":"uint256"}]}],"stateMutability":"payable"},{"type":"function","name":"setDelegate","inputs":[{"name":"_delegate","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setEnforcedOptions","inputs":[{"name":"_enforcedOptions","type":"tuple[]","internalType":"struct EnforcedOptionParam[]","components":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"msgType","type":"uint16","internalType":"uint16"},{"name":"options","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMsgInspector","inputs":[{"name":"_msgInspector","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPeer","inputs":[{"name":"_eid","type":"uint32","internalType":"uint32"},{"name":"_peer","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPreCrime","inputs":[{"name":"_preCrime","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"sharedDecimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"toLD","inputs":[{"name":"_amountSD","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"amountLD","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"toSD","inputs":[{"name":"_amountLD","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"amountSD","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EnforcedOptionSet","inputs":[{"name":"_enforcedOptions","type":"tuple[]","indexed":false,"internalType":"struct EnforcedOptionParam[]","components":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"msgType","type":"uint16","internalType":"uint16"},{"name":"options","type":"bytes","internalType":"bytes"}]}],"anonymous":false},{"type":"event","name":"MsgInspectorSet","inputs":[{"name":"inspector","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"OFTReceived","inputs":[{"name":"guid","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"srcEid","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"toAddress","type":"address","indexed":true,"internalType":"address"},{"name":"amountReceivedLD","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OFTSent","inputs":[{"name":"guid","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"dstEid","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"fromAddress","type":"address","indexed":true,"internalType":"address"},{"name":"amountSentLD","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amountReceivedLD","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":"PeerSet","inputs":[{"name":"eid","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"peer","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"PreCrimeSet","inputs":[{"name":"preCrimeAddress","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AmountSDOverflowed","inputs":[{"name":"amountSD","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidDelegate","inputs":[]},{"type":"error","name":"InvalidEndpointCall","inputs":[]},{"type":"error","name":"InvalidLocalDecimals","inputs":[]},{"type":"error","name":"InvalidOptions","inputs":[{"name":"options","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"LzTokenUnavailable","inputs":[]},{"type":"error","name":"NativeTokenUnavailable","inputs":[]},{"type":"error","name":"NoPeer","inputs":[{"name":"eid","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"NotEnoughNative","inputs":[{"name":"msgValue","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OFTAltCore__msg_value_not_zero","inputs":[{"name":"_msg_value","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OnlyEndpoint","inputs":[{"name":"addr","type":"address","internalType":"address"}]},{"type":"error","name":"OnlyPeer","inputs":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"OnlySelf","inputs":[]},{"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":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"SimulationResult","inputs":[{"name":"result","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"SlippageExceeded","inputs":[{"name":"amountLD","type":"uint256","internalType":"uint256"},{"name":"minAmountLD","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60e060405234801562000010575f80fd5b50604051620042183803806200421883398101604081905262000033916200031d565b83838383838360128484818181818d6001600160a01b0381166200007057604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6200007b81620001f1565b506001600160a01b038083166080528116620000aa57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b158015620000ef575f80fd5b505af115801562000102573d5f803e3d5ffd5b5050505050506080516001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000147573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200016d9190620003a7565b6001600160a01b031660a0525050600660ff84161015620001a1576040516301e9714b60e41b815260040160405180910390fd5b620001ae600684620003de565b620001bb90600a620004f9565b60c0525060089150620001d19050838262000593565b506009620001e0828262000593565b50505050505050505050506200065f565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262000264575f80fd5b81516001600160401b038082111562000281576200028162000240565b604051601f8301601f19908116603f01168101908282118183101715620002ac57620002ac62000240565b8160405283815260209250866020858801011115620002c9575f80fd5b5f91505b83821015620002ec5785820183015181830184015290820190620002cd565b5f602085830101528094505050505092915050565b80516001600160a01b038116811462000318575f80fd5b919050565b5f805f806080858703121562000331575f80fd5b84516001600160401b038082111562000348575f80fd5b620003568883890162000254565b955060208701519150808211156200036c575f80fd5b506200037b8782880162000254565b9350506200038c6040860162000301565b91506200039c6060860162000301565b905092959194509250565b5f60208284031215620003b8575f80fd5b620003c38262000301565b9392505050565b634e487b7160e01b5f52601160045260245ffd5b60ff8281168282160390811115620003fa57620003fa620003ca565b92915050565b600181815b808511156200044057815f1904821115620004245762000424620003ca565b808516156200043257918102915b93841c939080029062000405565b509250929050565b5f826200045857506001620003fa565b816200046657505f620003fa565b81600181146200047f57600281146200048a57620004aa565b6001915050620003fa565b60ff8411156200049e576200049e620003ca565b50506001821b620003fa565b5060208310610133831016604e8410600b8410161715620004cf575081810a620003fa565b620004db838362000400565b805f1904821115620004f157620004f1620003ca565b029392505050565b5f620003c360ff84168362000448565b600181811c908216806200051e57607f821691505b6020821081036200053d57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200058e57805f5260205f20601f840160051c810160208510156200056a5750805b601f840160051c820191505b818110156200058b575f815560010162000576565b50505b505050565b81516001600160401b03811115620005af57620005af62000240565b620005c781620005c0845462000509565b8462000543565b602080601f831160018114620005fd575f8415620005e55750858301515b5f19600386901b1c1916600185901b17855562000657565b5f85815260208120601f198616915b828110156200062d578886015182559484019460019091019084016200060c565b50858210156200064b57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b60805160a05160c051613b33620006e55f395f81816107fb0152818161172001528181611d5e0152611ed601525f8181610a0801528181612593015261261801525f81816106a801528181610c21015281816113a20152818161185101528181611b5b015281816124bb0152818161263b01528181612667015261275e0152613b335ff3fe608060405260043610610324575f3560e01c8063715018a6116101a7578063bc70b354116100e7578063d424388511610092578063f01630231161006d578063f016302314610a2a578063f2fde38b14610a49578063fc0c546a146105fd578063ff7bd03d14610a68575f80fd5b8063d424388514610987578063dd62ed3e146109a6578063e1758bd8146109f7575f80fd5b8063c7c7f5b3116100c2578063c7c7f5b314610934578063ca5eb5e114610955578063d045a0dc14610974575f80fd5b8063bc70b354146108e3578063bd815db014610902578063c077998814610915575f80fd5b8063963efcaa11610152578063b3a5abeb1161012d578063b3a5abeb1461084e578063b731ea0a1461086d578063b98bd07014610899578063bb0b6a53146108b8575f80fd5b8063963efcaa146107ea5780639f68b9641461081d578063a9059cbb1461082f575f80fd5b8063857749b011610182578063857749b01461079a5780638da5cb5b146107ad57806395d89b41146107d6575f80fd5b8063715018a61461072a5780637d25a05e1461073e57806382413eac1461075f575f80fd5b806323b872dd1161027257806352ae28791161021d5780635a0dfe4d116101f85780635a0dfe4d146106625780635e280f11146106975780636fc1b31e146106ca57806370a08231146106e9575f80fd5b806352ae2879146105fd57806354f524141461060f5780635535d46114610643575f80fd5b80633b6f743b1161024d5780633b6f743b1461059357806340c10f19146105bf5780634dba701b146105de575f80fd5b806323b872dd14610534578063313ce567146105535780633400288b14610574575f80fd5b806313137d65116102d257806317442b70116102ad57806317442b70146104e157806318160ddd146105025780631f5e133414610520575f80fd5b806313137d6514610465578063134d4f251461047a578063156a0d0f146104a1575f80fd5b80630d35b415116103025780630d35b415146103ae5780630e78842c146103dc578063111ecdad14610414575f80fd5b8063056d62de1461032857806306fdde031461035e578063095ea7b31461037f575b5f80fd5b348015610333575f80fd5b5061034761034236600461290a565b610a87565b6040516103559291906129b7565b60405180910390f35b348015610369575f80fd5b50610372610aa0565b60405161035591906129db565b34801561038a575f80fd5b5061039e610399366004612a0e565b610b30565b6040519015158152602001610355565b3480156103b9575f80fd5b506103cd6103c8366004612a38565b610b49565b60405161035593929190612a6a565b3480156103e7575f80fd5b506103fb6103f6366004612b1f565b610c15565b60405167ffffffffffffffff9091168152602001610355565b34801561041f575f80fd5b506004546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610355565b610478610473366004612b84565b610c1f565b005b348015610485575f80fd5b5061048e600281565b60405161ffff9091168152602001610355565b3480156104ac575f80fd5b50604080517f02e49c2c0000000000000000000000000000000000000000000000000000000081526001602082015201610355565b3480156104ec575f80fd5b5060408051600181526002602082015201610355565b34801561050d575f80fd5b506007545b604051908152602001610355565b34801561052b575f80fd5b5061048e600181565b34801561053f575f80fd5b5061039e61054e366004612c1d565b610d1e565b34801561055e575f80fd5b5060125b60405160ff9091168152602001610355565b34801561057f575f80fd5b5061047861058e366004612c73565b610d43565b34801561059e575f80fd5b506105b26105ad366004612c9a565b610d59565b6040516103559190612ce9565b3480156105ca575f80fd5b506104786105d9366004612a0e565b610dbd565b3480156105e9575f80fd5b506105126105f8366004612d00565b610dc7565b348015610608575f80fd5b5030610440565b34801561061a575f80fd5b5061062e610629366004612d3b565b610ddb565b60408051928352602083019190915201610355565b34801561064e575f80fd5b5061037261065d366004612d75565b610df6565b34801561066d575f80fd5b5061039e61067c366004612c73565b63ffffffff919091165f908152600160205260409020541490565b3480156106a2575f80fd5b506104407f000000000000000000000000000000000000000000000000000000000000000081565b3480156106d5575f80fd5b506104786106e4366004612da6565b610e98565b3480156106f4575f80fd5b50610512610703366004612da6565b73ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604090205490565b348015610735575f80fd5b50610478610f1a565b348015610749575f80fd5b506103fb610758366004612c73565b5f92915050565b34801561076a575f80fd5b5061039e610779366004612dc1565b73ffffffffffffffffffffffffffffffffffffffff81163014949350505050565b3480156107a5575f80fd5b506006610562565b3480156107b8575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610440565b3480156107e1575f80fd5b50610372610f2d565b3480156107f5575f80fd5b506105127f000000000000000000000000000000000000000000000000000000000000000081565b348015610828575f80fd5b505f61039e565b34801561083a575f80fd5b5061039e610849366004612a0e565b610f3c565b348015610859575f80fd5b50610512610868366004612e39565b610f49565b348015610878575f80fd5b506002546104409073ffffffffffffffffffffffffffffffffffffffff1681565b3480156108a4575f80fd5b506104786108b3366004612e95565b610f53565b3480156108c3575f80fd5b506105126108d2366004612ed4565b60016020525f908152604090205481565b3480156108ee575f80fd5b506103726108fd366004612eed565b610f6d565b610478610910366004612e95565b611127565b348015610920575f80fd5b5061051261092f366004612b1f565b6112eb565b610947610942366004612f4a565b6112f5565b604051610355929190612fd1565b348015610960575f80fd5b5061047861096f366004612da6565b611355565b610478610982366004612b84565b6113fc565b348015610992575f80fd5b506104786109a1366004612da6565b611444565b3480156109b1575f80fd5b506105126109c0366004613023565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260066020908152604080832093909416825291909152205490565b348015610a02575f80fd5b506104407f000000000000000000000000000000000000000000000000000000000000000081565b348015610a35575f80fd5b5061062e610a44366004612d3b565b6114bf565b348015610a54575f80fd5b50610478610a63366004612da6565b6114cc565b348015610a73575f80fd5b5061039e610a8236600461304f565b61152f565b606080610a948484611563565b915091505b9250929050565b606060088054610aaf90613069565b80601f0160208091040260200160405190810160405280929190818152602001828054610adb90613069565b8015610b265780601f10610afd57610100808354040283529160200191610b26565b820191905f5260205f20905b815481529060010190602001808311610b0957829003601f168201915b5050505050905090565b5f33610b3d8185856116b4565b60019150505b92915050565b604080518082019091525f80825260208201526060610b7960405180604001604052805f81526020015f81525090565b6040805180820182525f80825267ffffffffffffffff602080840182905284518381529081019094529195509182610bd3565b604080518082019091525f815260606020820152815260200190600190039081610bac5790505b5093505f80610bf7604089013560608a0135610bf260208c018c612ed4565b6116c6565b60408051808201909152918252602082015296989597505050505050565b5f610b438261171a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610c95576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b60208701803590610caf90610caa908a612ed4565b611745565b14610d0657610cc16020880188612ed4565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260208801356024820152604401610c8c565b610d1587878787878787611799565b50505050505050565b5f33610d2b85828561192a565b610d368585856119f7565b60019150505b9392505050565b610d4b611aa0565b610d558282611af2565b5050565b604080518082019091525f80825260208201525f610d8760408501356060860135610bf26020880188612ed4565b9150505f80610d968684611563565b9092509050610db3610dab6020880188612ed4565b838388611b46565b9695505050505050565b610d558282611c31565b5f610dd3848484611c8b565b949350505050565b5f80610de933868686611cbf565b915091505b935093915050565b600360209081525f928352604080842090915290825290208054610e1990613069565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4590613069565b8015610e905780601f10610e6757610100808354040283529160200191610e90565b820191905f5260205f20905b815481529060010190602001808311610e7357829003601f168201915b505050505081565b610ea0611aa0565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610f22611aa0565b610f2b5f611ce4565b565b606060098054610aaf90613069565b5f33610b3d8185856119f7565b5f610b4382611d58565b610f5b611aa0565b610d55610f6882846131c1565b611d8d565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610fa090613069565b80601f0160208091040260200160405190810160405280929190818152602001828054610fcc90613069565b80156110175780601f10610fee57610100808354040283529160200191611017565b820191905f5260205f20905b815481529060010190602001808311610ffa57829003601f168201915b5050505050905080515f036110655783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610dd39350505050565b5f839003611074579050610dd3565b600283106110f1576110ba84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611e8e92505050565b806110c884600281886132ca565b6040516020016110da939291906132f1565b604051602081830303815290604052915050610dd3565b83836040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610c8c92919061335e565b5f5b8181101561122a573683838381811061114457611144613371565b9050602002810190611156919061339e565b90506111886111686020830183612ed4565b602083013563ffffffff919091165f908152600160205260409020541490565b6111925750611222565b3063d045a0dc60c08301358360a08101356111b16101008301836133da565b6111c2610100890160e08a01612da6565b6111d06101208a018a6133da565b6040518963ffffffff1660e01b81526004016111f2979695949392919061343b565b5f604051808303818588803b158015611209575f80fd5b505af115801561121b573d5f803e3d5ffd5b5050505050505b600101611129565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa158015611273573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526112b891908101906134ce565b6040517f8351eea7000000000000000000000000000000000000000000000000000000008152600401610c8c91906129db565b5f610b4382611ed3565b6112fd6128b0565b604080518082019091525f8082526020820152341561134a576040517f8036d4a3000000000000000000000000000000000000000000000000000000008152346004820152602401610c8c565b610de9858585611f09565b61135d611aa0565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b1580156113e3575f80fd5b505af11580156113f5573d5f803e3d5ffd5b5050505050565b333014611435576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d1587878787878787610d06565b61144c611aa0565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610f0f565b5f80610de98585856116c6565b6114d4611aa0565b73ffffffffffffffffffffffffffffffffffffffff8116611523576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610c8c565b61152c81611ce4565b50565b5f6020820180359060019083906115469086612ed4565b63ffffffff16815260208101919091526040015f20541492915050565b6060805f6115be85602001356115788661171a565b61158560a08901896133da565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061200192505050565b90935090505f816115d05760016115d3565b60025b90506115f36115e56020880188612ed4565b826108fd60808a018a6133da565b60045490935073ffffffffffffffffffffffffffffffffffffffff1680156116aa576040517f043a78eb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063043a78eb9061166990889088906004016129b7565b602060405180830381865afa158015611684573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116a89190613537565b505b5050509250929050565b6116c18383836001612093565b505050565b5f806116d185611ed3565b915081905083811015610dee576040517f71c4efed0000000000000000000000000000000000000000000000000000000081526004810182905260248101859052604401610c8c565b5f610b437f00000000000000000000000000000000000000000000000000000000000000008361357f565b63ffffffff81165f9081526001602052604081205480610b43576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff84166004820152602401610c8c565b5f6117aa6117a787876121d8565b90565b90505f6117d5826117c36117be8a8a6121ef565b611d58565b6117d060208d018d612ed4565b611c8b565b905060288611156118bb575f6118116117f460608c0160408d01612e39565b61180160208d018d612ed4565b8461180c8c8c612211565b61225b565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb590129061188c9086908d905f9087906004016135b7565b5f604051808303815f87803b1580156118a3575f80fd5b505af11580156118b5573d5f803e3d5ffd5b50505050505b73ffffffffffffffffffffffffffffffffffffffff8216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61190160208d018d612ed4565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600660209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119f157818110156119e3576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610c8c565b6119f184848484035f612093565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316611a46576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610c8c565b73ffffffffffffffffffffffffffffffffffffffff8216611a95576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610c8c565b6116c183838361228d565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610f2b576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c8c565b63ffffffff82165f81815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff168152602001611bb589611745565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611bea9291906135f5565b6040805180830381865afa158015611c04573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c2891906136c6565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611c80576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610c8c565b610d555f838361228d565b5f73ffffffffffffffffffffffffffffffffffffffff8416611cad5761dead93505b611cb78484611c31565b509092915050565b5f80611ccc8585856116c6565b9092509050611cdb8683612434565b94509492505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f610b437f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff84166136e0565b5f5b8151811015611e5e57611dbe828281518110611dad57611dad613371565b602002602001015160400151611e8e565b818181518110611dd057611dd0613371565b60200260200101516040015160035f848481518110611df157611df1613371565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f848481518110611e2857611e28613371565b60200260200101516020015161ffff1661ffff1681526020019081526020015f209081611e55919061373b565b50600101611d8f565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610f0f9190613857565b600281015161ffff8116600314610d5557816040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610c8c91906129db565b5f7f0000000000000000000000000000000000000000000000000000000000000000611eff818461357f565b610b4391906136e0565b611f116128b0565b604080518082019091525f80825260208201525f80611f4633604089013560608a0135611f4160208c018c612ed4565b611cbf565b915091505f80611f568984611563565b9092509050611f82611f6b60208b018b612ed4565b8383611f7c368d90038d018d6138fe565b8b61248e565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611fd0908d018d612ed4565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b805160609015158061206257848460405160200161204e92919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b604051602081830303815290604052612089565b84843385604051602001612079949392919061392e565b6040516020818303038152906040525b9150935093915050565b73ffffffffffffffffffffffffffffffffffffffff84166120e2576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610c8c565b73ffffffffffffffffffffffffffffffffffffffff8316612131576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610c8c565b73ffffffffffffffffffffffffffffffffffffffff8085165f90815260066020908152604080832093871683529290522082905580156119f1578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516121ca91815260200190565b60405180910390a350505050565b5f6121e660208284866132ca565b610d3c91613986565b5f6121fe6028602084866132ca565b612207916139c2565b60c01c9392505050565b606061222082602881866132ca565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b6060848484846040516020016122749493929190613a0a565b6040516020818303038152906040529050949350505050565b73ffffffffffffffffffffffffffffffffffffffff83166122c4578060075f8282546122b99190613a87565b909155506123749050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526005602052604090205481811015612349576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610c8c565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526005602052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661239d576007805482900390556123c8565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526005602052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161242791815260200190565b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216612483576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610c8c565b610d55825f8361228d565b6124966128b0565b82516124a190612590565b506020830151156124b9576124b98360200151612664565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a4506040518060a001604052808963ffffffff1681526020016125158a611745565b81526020018881526020018781526020015f8760200151111515815250846040518363ffffffff1660e01b81526004016125509291906135f5565b6080604051808303815f875af115801561256c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db39190613a9a565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166125fe576040517f8dce522700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61266073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016337f00000000000000000000000000000000000000000000000000000000000000008561277f565b5090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126f29190613ae2565b905073ffffffffffffffffffffffffffffffffffffffff8116612741576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d5573ffffffffffffffffffffffffffffffffffffffff8216337f0000000000000000000000000000000000000000000000000000000000000000855b6040805173ffffffffffffffffffffffffffffffffffffffff8581166024830152841660448201526064808201849052825180830390910181526084909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815282516119f193889390925f9283929183919082885af180612830576040513d5f823e3d81fd5b50505f513d91508115612847578060011415612861565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156119f1576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c8c565b60405180606001604052805f80191681526020015f67ffffffffffffffff1681526020016128ef60405180604001604052805f81526020015f81525090565b905290565b5f60e08284031215612904575f80fd5b50919050565b5f806040838503121561291b575f80fd5b823567ffffffffffffffff811115612931575f80fd5b61293d858286016128f4565b95602094909401359450505050565b5f5b8381101561296657818101518382015260200161294e565b50505f910152565b5f815180845261298581602086016020860161294c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081525f6129c9604083018561296e565b8281036020840152611c28818561296e565b602081525f610d3c602083018461296e565b73ffffffffffffffffffffffffffffffffffffffff8116811461152c575f80fd5b5f8060408385031215612a1f575f80fd5b8235612a2a816129ed565b946020939093013593505050565b5f60208284031215612a48575f80fd5b813567ffffffffffffffff811115612a5e575f80fd5b610dd3848285016128f4565b83518152602080850151908201525f60a08201604060a0604085015281865180845260c08601915060c08160051b870101935060208089015f5b83811015612b01578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40018552815180518852830151838801879052612aee8789018261296e565b9750509382019390820190600101612aa4565b50508751606088015250505060208501516080850152509050610dd3565b5f60208284031215612b2f575f80fd5b5035919050565b5f60608284031215612904575f80fd5b5f8083601f840112612b56575f80fd5b50813567ffffffffffffffff811115612b6d575f80fd5b602083019150836020828501011115610a99575f80fd5b5f805f805f805f60e0888a031215612b9a575f80fd5b612ba48989612b36565b965060608801359550608088013567ffffffffffffffff80821115612bc7575f80fd5b612bd38b838c01612b46565b909750955060a08a01359150612be8826129ed565b90935060c08901359080821115612bfd575f80fd5b50612c0a8a828b01612b46565b989b979a50959850939692959293505050565b5f805f60608486031215612c2f575f80fd5b8335612c3a816129ed565b92506020840135612c4a816129ed565b929592945050506040919091013590565b803563ffffffff81168114612c6e575f80fd5b919050565b5f8060408385031215612c84575f80fd5b612a2a83612c5b565b801515811461152c575f80fd5b5f8060408385031215612cab575f80fd5b823567ffffffffffffffff811115612cc1575f80fd5b612ccd858286016128f4565b9250506020830135612cde81612c8d565b809150509250929050565b815181526020808301519082015260408101610b43565b5f805f60608486031215612d12575f80fd5b8335612d1d816129ed565b925060208401359150612d3260408501612c5b565b90509250925092565b5f805f60608486031215612d4d575f80fd5b8335925060208401359150612d3260408501612c5b565b803561ffff81168114612c6e575f80fd5b5f8060408385031215612d86575f80fd5b612d8f83612c5b565b9150612d9d60208401612d64565b90509250929050565b5f60208284031215612db6575f80fd5b8135610d3c816129ed565b5f805f8060a08587031215612dd4575f80fd5b612dde8686612b36565b9350606085013567ffffffffffffffff811115612df9575f80fd5b612e0587828801612b46565b9094509250506080850135612e19816129ed565b939692955090935050565b67ffffffffffffffff8116811461152c575f80fd5b5f60208284031215612e49575f80fd5b8135610d3c81612e24565b5f8083601f840112612e64575f80fd5b50813567ffffffffffffffff811115612e7b575f80fd5b6020830191508360208260051b8501011115610a99575f80fd5b5f8060208385031215612ea6575f80fd5b823567ffffffffffffffff811115612ebc575f80fd5b612ec885828601612e54565b90969095509350505050565b5f60208284031215612ee4575f80fd5b610d3c82612c5b565b5f805f8060608587031215612f00575f80fd5b612f0985612c5b565b9350612f1760208601612d64565b9250604085013567ffffffffffffffff811115612f32575f80fd5b612f3e87828801612b46565b95989497509550505050565b5f805f8385036080811215612f5d575f80fd5b843567ffffffffffffffff811115612f73575f80fd5b612f7f878288016128f4565b94505060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215612fb1575f80fd5b506020840191506060840135612fc6816129ed565b809150509250925092565b5f60c0820190508351825267ffffffffffffffff6020850151166020830152604084015161300c604084018280518252602090810151910152565b5082516080830152602083015160a0830152610d3c565b5f8060408385031215613034575f80fd5b823561303f816129ed565b91506020830135612cde816129ed565b5f6060828403121561305f575f80fd5b610d3c8383612b36565b600181811c