@layerzerolabs/hyperliquid-composer
Version:
LayerZero Labs reference EVM OmniChain Fungible Token (OFT) implementation for Hyperliquid
1 lines • 125 kB
JSON
{"abi":[{"type":"constructor","inputs":[{"name":"_oft","type":"address","internalType":"address"},{"name":"_coreIndexId","type":"uint64","internalType":"uint64"},{"name":"_assetDecimalDiff","type":"int8","internalType":"int8"}],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"ENDPOINT","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"ERC20","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"ERC20_ASSET_BRIDGE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"ERC20_CORE_INDEX_ID","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"ERC20_DECIMAL_DIFF","inputs":[],"outputs":[{"name":"","type":"int8","internalType":"int8"}],"stateMutability":"view"},{"type":"function","name":"MAX_DECIMAL_DIFF","inputs":[],"outputs":[{"name":"","type":"int8","internalType":"int8"}],"stateMutability":"view"},{"type":"function","name":"MIN_DECIMAL_DIFF","inputs":[],"outputs":[{"name":"","type":"int8","internalType":"int8"}],"stateMutability":"view"},{"type":"function","name":"MIN_GAS","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"MIN_GAS_WITH_VALUE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"NATIVE_ASSET_BRIDGE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"NATIVE_CORE_INDEX_ID","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"NATIVE_DECIMAL_DIFF","inputs":[],"outputs":[{"name":"","type":"int8","internalType":"int8"}],"stateMutability":"view"},{"type":"function","name":"OFT","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"SPOT_SEND_HEADER","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"VALID_COMPOSE_MSG_LEN","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"coreUserExists","inputs":[{"name":"user","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct CoreUserExists","components":[{"name":"exists","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"decodeMessage","inputs":[{"name":"_composeMessage","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"minMsgValue","type":"uint256","internalType":"uint256"},{"name":"to","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"function","name":"failedMessages","inputs":[{"name":"guid","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"refundSendParam","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":"msgValue","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"handleTransfersToHyperCore","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_amountLD","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"lzCompose","inputs":[{"name":"_oft","type":"address","internalType":"address"},{"name":"_guid","type":"bytes32","internalType":"bytes32"},{"name":"_message","type":"bytes","internalType":"bytes"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"quoteHyperCoreAmount","inputs":[{"name":"_coreIndexId","type":"uint64","internalType":"uint64"},{"name":"_decimalDiff","type":"int8","internalType":"int8"},{"name":"_bridgeAddress","type":"address","internalType":"address"},{"name":"_amountLD","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct IHyperAssetAmount","components":[{"name":"evm","type":"uint256","internalType":"uint256"},{"name":"core","type":"uint64","internalType":"uint64"},{"name":"coreBalanceAssetBridge","type":"uint64","internalType":"uint64"}]}],"stateMutability":"view"},{"type":"function","name":"refundToSrc","inputs":[{"name":"_guid","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"spotBalance","inputs":[{"name":"user","type":"address","internalType":"address"},{"name":"token","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"tuple","internalType":"struct SpotBalance","components":[{"name":"total","type":"uint64","internalType":"uint64"},{"name":"hold","type":"uint64","internalType":"uint64"},{"name":"entryNtl","type":"uint64","internalType":"uint64"}]}],"stateMutability":"view"},{"type":"event","name":"CompleteRefund","inputs":[],"anonymous":false},{"type":"event","name":"FailedMessageDecode","inputs":[{"name":"guid","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"sender","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"msgValue","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"composeMessage","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"RefundHyperEVM","inputs":[{"name":"receiver","type":"address","indexed":true,"internalType":"address"},{"name":"amountERC20","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"amountHYPE","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RefundSuccessful","inputs":[{"name":"guid","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"error","name":"ComposeMsgLengthNot64Bytes","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"CoreUserNotActivated","inputs":[]},{"type":"error","name":"FailedMessageNotFound","inputs":[{"name":"guid","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"InsufficientGas","inputs":[{"name":"gasLeft","type":"uint256","internalType":"uint256"},{"name":"minGas","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InsufficientMsgValue","inputs":[{"name":"msgValue","type":"uint256","internalType":"uint256"},{"name":"requiredValue","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidComposeCaller","inputs":[{"name":"internalOFTAddress","type":"address","internalType":"address"},{"name":"receivedOFTAddress","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidDecimalDiff","inputs":[{"name":"decimalDiff","type":"int8","internalType":"int8"},{"name":"minDecimalDiff","type":"int8","internalType":"int8"},{"name":"maxDecimalDiff","type":"int8","internalType":"int8"}]},{"type":"error","name":"InvalidOFTAddress","inputs":[]},{"type":"error","name":"NativeTransferFailed","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OnlyEndpoint","inputs":[]},{"type":"error","name":"OnlySelf","inputs":[{"name":"caller","type":"address","internalType":"address"}]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"SpotBalanceReadFailed","inputs":[{"name":"user","type":"address","internalType":"address"},{"name":"tokenId","type":"uint64","internalType":"uint64"}]},{"type":"error","name":"TransferAmtExceedsAssetBridgeBalance","inputs":[{"name":"amt","type":"uint256","internalType":"uint256"},{"name":"maxAmt","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x6101a060405234801562000011575f80fd5b5060405162002c4138038062002c41833981016040819052620000349162000259565b60015f556001600160a01b038316620000605760405163c23419a560e01b815260040160405180910390fd5b6001195f82900b128062000077575060125f82900b135b15620000ae5760405163470eb46160e01b81525f82900b600482015260011960248201526012604482015260640160405180910390fd5b826001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000eb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001119190620002b8565b6001600160a01b03908116608052831660a0525f466103e71462000138576104516200013b565b60965b73222222222222222222222222222222222222222260c052600a60e0526001600160401b0381166101005260a05160408051637e062a3560e11b815290519293506001600160a01b039091169163fc0c546a916004808201926020929091908290030181865afa158015620001b2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001d89190620002b8565b6001600160a01b031661012052620001f96001600160401b03841662000221565b6001600160a01b031661014052505f0b610160526001600160401b03166101805250620002fd565b5f6200023b6001600160401b0383166001609d1b620002dd565b92915050565b6001600160a01b038116811462000256575f80fd5b50565b5f805f606084860312156200026c575f80fd5b8351620002798162000241565b60208501519093506001600160401b038116811462000296575f80fd5b809250506040840151805f0b8114620002ad575f80fd5b809150509250925092565b5f60208284031215620002c9575f80fd5b8151620002d68162000241565b9392505050565b808201808211156200023b57634e487b7160e01b5f52601160045260245ffd5b60805160a05160c05160e051610100516101205161014051610160516101805161286e620003d35f395f81816105fd01528181611737015261182501525f8181610496015261175801525f81816105ca0152818161177901526117fa01525f818161052a0152818161170a01526117d701525f81816104c901528181611857015261198901525f81816103b4015261187801525f81816103050152818161189901526118e601525f818161022a0152818161095e01528181611008015261107f01525f81816103810152610f98015261286e5ff3fe60806040526004361061017b575f3560e01c8063a4e7f8bd116100d1578063cebb51201161007c578063f2f7141f11610057578063f2f7141f146105a6578063f34ec5e0146105b9578063fa69dc7b146105ec575f80fd5b8063cebb51201461054c578063d0a1026014610560578063d3af0cc114610573575f80fd5b8063b20bffdc116100ac578063b20bffdc146104b8578063c37bcb4c14610504578063cc4aa20414610519575f80fd5b8063a4e7f8bd14610406578063a69610d114610433578063a754403e14610485575f80fd5b806320d2c951116101315780636fad06f51161010c5780636fad06f51461037057806371139d6c146103a35780639dbfb13f146103d6575f80fd5b806320d2c951146102d5578063574ad4a8146102f4578063634d45b214610327575f80fd5b80631cd66690116101615780631cd66690146101c65780631ed0993d146102195780631f8164d914610271575f80fd5b806303a9437e1461018657806319180904146101b1575f80fd5b3661018257005b5f80fd5b348015610191575f80fd5b5061019a601281565b6040515f9190910b81526020015b60405180910390f35b6101c46101bf366004611dbf565b61061f565b005b3480156101d1575f80fd5b506101e56101e0366004611e0c565b610a07565b604080518251815260208084015167ffffffffffffffff9081169183019190915292820151909216908201526060016101a8565b348015610224575f80fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a8565b34801561027c575f80fd5b506102a47f010000060000000000000000000000000000000000000000000000000000000081565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101a8565b3480156102e0575f80fd5b50620249f05b6040519081526020016101a8565b3480156102ff575f80fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b348015610332575f80fd5b50610346610341366004611ea4565b610a45565b6040805192835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101a8565b34801561037b575f80fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ae575f80fd5b5061019a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103e1575f80fd5b506103f56103f0366004611ee3565b610a9b565b6040519051151581526020016101a8565b348015610411575f80fd5b50610425610420366004611dbf565b610bf5565b6040516101a8929190611fde565b34801561043e575f80fd5b5061045261044d366004611fff565b610df9565b60408051825167ffffffffffffffff908116825260208085015182169083015292820151909216908201526060016101a8565b348015610490575f80fd5b5061019a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104c3575f80fd5b506104eb7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff90911681526020016101a8565b34801561050f575f80fd5b5062030d406102e6565b348015610524575f80fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b348015610557575f80fd5b506102e6604081565b6101c461056e366004612036565b610f78565b34801561057e575f80fd5b5061019a7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81565b6101c46105b43660046120d0565b611423565b3480156105c4575f80fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105f7575f80fd5b506104eb7f000000000000000000000000000000000000000000000000000000000000000081565b5f818152600160208190526040808320815161012081018352815463ffffffff1692810192835292810154606084015260028101546080840152600381015460a0840152600481018054919284929091849160c085019190610680906120fa565b80601f01602080910402602001604051908101604052809291908181526020018280546106ac906120fa565b80156106f75780601f106106ce576101008083540402835291602001916106f7565b820191905f5260205f20905b8154815290600101906020018083116106da57829003601f168201915b50505050508152602001600582018054610710906120fa565b80601f016020809104026020016040519081016040528092919081815260200182805461073c906120fa565b80156107875780601f1061075e57610100808354040283529160200191610787565b820191905f5260205f20905b81548152906001019060200180831161076a57829003601f168201915b505050505081526020016006820180546107a0906120fa565b80601f01602080910402602001604051908101604052809291908181526020018280546107cc906120fa565b80156108175780601f106107ee57610100808354040283529160200191610817565b820191905f5260205f20905b8154815290600101906020018083116107fa57829003601f168201915b5050509190925250505081526007919091015460209091015280515190915063ffffffff165f0361087c576040517f0b948634000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b5f828152600160208190526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000016815590810182905560028101829055600381018290559081816108d56004830182611d6d565b6108e2600583015f611d6d565b6108ef600683015f611d6d565b5050600782015f905550505f34826020015161090b9190612172565b82516040805180820182528381525f602082015290517fc7c7f5b300000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263c7c7f5b3928592610995923290600401612185565b60c06040518083038185885af11580156109b1573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906109d69190612271565b505060405183907fd41d02272333251e6367f747c63d5cc227dcac6b0c799067569e80a30f9da369905f90a2505050565b604080516060810182525f8082526020820181905291810182905290610a2d8487610df9565b519050610a3b83828761147b565b9695505050505050565b5f8060408314610a84576040517f2b701db100000000000000000000000000000000000000000000000000000000815260048101849052602401610873565b610a90838501856122da565b909590945092505050565b60408051602081019091525f81526040805173ffffffffffffffffffffffffffffffffffffffff841660208201525f9182916108109101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610b0a916122fd565b5f60405180830381855afa9150503d805f8114610b42576040519150601f19603f3d011682016040523d82523d5f602084013e610b47565b606091505b509150915081610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f436f726520757365722065786973747320707265636f6d70696c652063616c6c60448201527f206661696c6564000000000000000000000000000000000000000000000000006064820152608401610873565b80806020019051810190610bed9190612318565b949350505050565b600160208181525f928352604092839020835160e081018552815463ffffffff16815292810154918301919091526002810154928201929092526003820154606082015260048201805483916080840191610c4f906120fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7b906120fa565b8015610cc65780601f10610c9d57610100808354040283529160200191610cc6565b820191905f5260205f20905b815481529060010190602001808311610ca957829003601f168201915b50505050508152602001600582018054610cdf906120fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0b906120fa565b8015610d565780601f10610d2d57610100808354040283529160200191610d56565b820191905f5260205f20905b815481529060010190602001808311610d3957829003601f168201915b50505050508152602001600682018054610d6f906120fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9b906120fa565b8015610de65780601f10610dbd57610100808354040283529160200191610de6565b820191905f5260205f20905b815481529060010190602001808311610dc957829003601f168201915b5050509190925250505060079091015482565b604080516060810182525f80825260208201819052918101919091526040805173ffffffffffffffffffffffffffffffffffffffff8516602082015267ffffffffffffffff8416918101919091525f90819061080190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610e8a916122fd565b5f60405180830381855afa9150503d805f8114610ec2576040519150601f19603f3d011682016040523d82523d5f602084013e610ec7565b606091505b509150915081610f59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53706f7442616c616e636520707265636f6d70696c652063616c6c206661696c60448201527f65640000000000000000000000000000000000000000000000000000000000006064820152608401610873565b80806020019051810190610f6d9190612366565b925050505b92915050565b610f80611520565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610fef576040517f7eb966c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146110b4576040517fc8b356c600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015288166024820152604401610873565b5f6110bf8686611561565b90505f6110cc8787611580565b6040517f634d45b2000000000000000000000000000000000000000000000000000000008152909150309063634d45b29061110b9084906004016123b8565b6040805180830381865afa925050508015611161575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261115e918101906123ca565b60015b6112dd576111aa6040518060e001604052805f63ffffffff1681526020015f80191681526020015f81526020015f81526020016060815260200160608152602001606081525090565b6111b488886115ca565b63ffffffff1681526111c688886115ec565b60208281019190915260408083018590528051808201825283815234818401525f8c81526001808552908390208251805182547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff90911617825594850151918101919091559183015160028301556060830151600383015560808301519092908290600482019061125d9082612438565b5060a082015160058201906112729082612438565b5060c082015160068201906112879082612438565b50505060208201518160070155905050887f387fc8f821460fa8221428c9f4dc1f6d5db4f6a0a01f33dbeaa8cebd95e5d144826020015134856040516112cf93929190612554565b60405180910390a25061140f565b81341015611320576040517f7cb769dc00000000000000000000000000000000000000000000000000000000815234600482015260248101839052604401610873565b5f80341161133157620249f0611336565b62030d405b9050805a101561137e575a6040517f23e228cb000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604401610873565b6040517ff2f7141f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260248101869052309063f2f7141f9034906044015f604051808303818588803b1580156113eb575f80fd5b505af1935050505080156113fd575060015b61140b5761140b82866115fb565b5050505b505061141a60015f55565b50505050505050565b33301461145e576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610873565b6114688282611731565b34156114775761147782611851565b5050565b604080516060810182525f80825260208201819052918101919091525f805f845f0b13156114b8576114ae8686866119b2565b90925090506114f2565b6114ec86866114e7877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61257b565b611a4d565b90925090505b6040805160608101825292835267ffffffffffffffff91821660208401529085169082015290509392505050565b60025f540361155b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f55565b5f611570602c600c848661259e565b611579916125c5565b9392505050565b606061158f82604c818661259e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b5f6115d9600c6008848661259e565b6115e291612601565b60e01c9392505050565b5f611570604c602c848661259e565b34156116ea575f8273ffffffffffffffffffffffffffffffffffffffff16346040515f6040518083038185875af1925050503d805f8114611657576040519150601f19603f3d011682016040523d82523d5f602084013e61165c565b606091505b50509050806116e8576040515f90329034908381818185875af1925050503d805f81146116a4576040519150601f19603f3d011682016040523d82523d5f602084013e6116a9565b606091505b50509050806116e6576040517f77479d32000000000000000000000000000000000000000000000000000000008152346004820152602401610873565b505b505b80156114775761147773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168383611aca565b5f61179e7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000085610a07565b80519091501561184c575f6117b7848360200151611b57565b825190915061181f9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016907f000000000000000000000000000000000000000000000000000000000000000090611aca565b61184a847f000000000000000000000000000000000000000000000000000000000000000083611b9e565b505b505050565b5f6118be7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000034610a07565b8051909150156114775780516040515f9173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016918381818185875af1925050503d805f811461193d576040519150601f19603f3d011682016040523d82523d5f602084013e611942565b606091505b50509050806119835781516040517f77479d320000000000000000000000000000000000000000000000000000000081526004810191909152602401610873565b61184c837f00000000000000000000000000000000000000000000000000000000000000008460200151611b9e565b5f80806119c084600a612767565b90505f6119d78267ffffffffffffffff8816612775565b90508187816119e8576119e861278c565b068703935080841115611a31576040517f9a0c830f0000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610873565b818481611a4057611a4061278c565b0492505050935093915050565b5f8080611a5b84600a612767565b90505f611a728267ffffffffffffffff88166127b9565b905086935080871115611abb576040517f9a0c830f0000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610873565b81840292505050935093915050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261184c908490611cce565b5f611b6183610a9b565b51611b98576040517fbdcf14ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50919050565b6040805173ffffffffffffffffffffffffffffffffffffffff8516602082015267ffffffffffffffff84811682840152831660608083019190915282518083039091018152608082019092525f90611c1c907f010000060000000000000000000000000000000000000000000000000000000090849060a0016127f1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f17938e130000000000000000000000000000000000000000000000000000000082529150733333333333333333333333333333333333333333906317938e1390611c9a9084906004016123b8565b5f604051808303815f87803b158015611cb1575f80fd5b505af1158015611cc3573d5f803e3d5ffd5b505050505050505050565b5f8060205f8451602086015f885af180611ced576040513d5f823e3d81fd5b50505f513d91508115611d04578060011415611d1e565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561184a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610873565b508054611d79906120fa565b5f825580601f10611d88575050565b601f0160209004905f5260205f2090810190611da49190611da7565b50565b5b80821115611dbb575f8155600101611da8565b5090565b5f60208284031215611dcf575f80fd5b5035919050565b67ffffffffffffffff81168114611da4575f80fd5b73ffffffffffffffffffffffffffffffffffffffff81168114611da4575f80fd5b5f805f8060808587031215611e1f575f80fd5b8435611e2a81611dd6565b935060208501355f81900b8114611e3f575f80fd5b92506040850135611e4f81611deb565b9396929550929360600135925050565b5f8083601f840112611e6f575f80fd5b50813567ffffffffffffffff811115611e86575f80fd5b602083019150836020828501011115611e9d575f80fd5b9250929050565b5f8060208385031215611eb5575f80fd5b823567ffffffffffffffff811115611ecb575f80fd5b611ed785828601611e5f565b90969095509350505050565b5f60208284031215611ef3575f80fd5b813561157981611deb565b5f5b83811015611f18578181015183820152602001611f00565b50505f910152565b5f8151808452611f37816020860160208601611efe565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301525f608082015160e06080850152611fab60e0850182611f20565b905060a083015184820360a0860152611fc48282611f20565b91505060c083015184820360c0860152610f6d8282611f20565b604081525f611ff06040830185611f69565b90508260208301529392505050565b5f8060408385031215612010575f80fd5b823561201b81611deb565b9150602083013561202b81611dd6565b809150509250929050565b5f805f805f805f60a0888a03121561204c575f80fd5b873561205781611deb565b965060208801359550604088013567ffffffffffffffff8082111561207a575f80fd5b6120868b838c01611e5f565b909750955060608a0135915061209b82611deb565b909350608089013590808211156120b0575f80fd5b506120bd8a828b01611e5f565b989b979a50959850939692959293505050565b5f80604083850312156120e1575f80fd5b82356120ec81611deb565b946020939093013593505050565b600181811c9082168061210e57607f821691505b602082108103611b98577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610f7257610f72612145565b608081525f6121976080830186611f69565b9050835160208301526020840151604083015273ffffffffffffffffffffffffffffffffffffffff83166060830152949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff8111828210171561221e5761221e6121ce565b60405290565b5f60408284031215612234575f80fd5b6040516040810181811067ffffffffffffffff82111715612257576122576121ce565b604052825181526020928301519281019290925250919050565b5f8082840360c0811215612283575f80fd5b6080811215612290575f80fd5b506122996121fb565b8351815260208401516122ab81611dd6565b60208201526122bd8560408601612224565b604082015291506122d18460808501612224565b90509250929050565b5f80604083850312156122eb575f80fd5b82359150602083013561202b81611deb565b5f825161230e818460208701611efe565b9190910192915050565b5f60208284031215612328575f80fd5b6040516020810181811067ffffffffffffffff8211171561234b5761234b6121ce565b6040528251801515811461235d575f80fd5b81529392505050565b5f60608284031215612376575f80fd5b61237e6121fb565b825161238981611dd6565b8152602083015161239981611dd6565b602082015260408301516123ac81611dd6565b60408201529392505050565b602081525f6115796020830184611f20565b5f80604083850312156123db575f80fd5b82519150602083015161202b81611deb565b601f82111561184c57805f5260205f20601f840160051c810160208510156124125750805b601f840160051c820191505b81811015612431575f815560010161241e565b5050505050565b815167ffffffffffffffff811115612452576124526121ce565b6124668161246084546120fa565b846123ed565b602080601f8311600181146124b8575f84156124825750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561254c565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612504578886015182559484019460019091019084016124e5565b508582101561254057878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b838152826020820152606060408201525f6125726060830184611f20565b95945050505050565b5f825f0b825f0b02805f0b915080821461259757612597612145565b5092915050565b5f80858511156125ac575f80fd5b838611156125b8575f80fd5b5050820193919092039150565b80356020831015610f72577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156126415780818660040360031b1b83161692505b505092915050565b600181815b808511156126a257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561268857612688612145565b8085161561269557918102915b93841c939080029061264e565b509250929050565b5f826126b857506001610f72565b816126c457505f610f72565b81600181146126da57600281146126e457612700565b6001915050610f72565b60ff8411156126f5576126f5612145565b50506001821b610f72565b5060208310610133831016604e8410600b8410161715612723575081810a610f72565b61272d8383612649565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561275f5761275f612145565b029392505050565b5f61157960ff8416836126aa565b8082028115828204841417610f7257610f72612145565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826127ec577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7fffffffff00000000000000000000000000000000000000000000000000000000831681525f825161282a816004850160208701611efe565b91909101600401939250505056fea2646970667358221220fbe41ab5dde3ab127430270ac8ef869c81db9dfb65538c79af44b669a55f48db64736f6c63430008160033","sourceMap":"1816:12879:0:-:0;;;3107:891;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1857:1:73;2061:7;:21;-1:-1:-1;;;;;3192:18:0;;3188:50;;3219:19;;-1:-1:-1;;;3219:19:0;;;;;;;;;;;3188:50;-1:-1:-1;;3253:36:0;;;;;;:76;;-1:-1:-1;2334:2:0;3293:36;;;;;3253:76;3249:174;;;3350:73;;-1:-1:-1;;;3350:73:0;;870:4:91;942:21;;;3350:73:0;;;924:40:91;-1:-1:-1;;980:18:91;;;973:49;2334:2:0;1038:18:91;;;1031:49;897:18;;3350:73:0;;;;;;;3249:174;3463:4;-1:-1:-1;;;;;3453:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3434:46:0;;;;;3491:10;;;;3512:20;3535:13;715:3:1;3535:38:0;:114;;889:4:1;3535:114:0;;;1035:3:1;3535:114:0;1263:42:1;3660:39:0;;1174:2:1;3709:39:0;;-1:-1:-1;;;;;3758:36:0;;;;3818:3;;3813:17;;;-1:-1:-1;;;3813:17:0;;;;3758:36;;-1:-1:-1;;;;;;3813:15:0;;;;;;:17;;;;;;;;;;;;;;;:15;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3805:25:0;;;3861:38;-1:-1:-1;;;;;3861:36:0;;;:38::i;:::-;-1:-1:-1;;;;;3840:59:0;;;-1:-1:-1;3909:38:0;;;;-1:-1:-1;;;;;3957:34:0;;;-1:-1:-1;1816:12879:0;;1300:176:10;1377:7;1419:48;-1:-1:-1;;;;;1419:48:10;;-1:-1:-1;;;1419:48:10;:::i;:::-;1396:73;1300:176;-1:-1:-1;;1300:176:10:o;14:131:91:-;-1:-1:-1;;;;;89:31:91;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:585::-;234:6;242;250;303:2;291:9;282:7;278:23;274:32;271:52;;;319:1;316;309:12;271:52;351:9;345:16;370:31;395:5;370:31;:::i;:::-;470:2;455:18;;449:25;420:5;;-1:-1:-1;;;;;;505:32:91;;493:45;;483:73;;552:1;549;542:12;483:73;575:7;565:17;;;627:2;616:9;612:18;606:25;676:7;673:1;662:22;653:7;650:35;640:63;;699:1;696;689:12;640:63;722:7;712:17;;;150:585;;;;;:::o;1091:280::-;1190:6;1243:2;1231:9;1222:7;1218:23;1214:32;1211:52;;;1259:1;1256;1249:12;1211:52;1291:9;1285:16;1310:31;1335:5;1310:31;:::i;:::-;1360:5;1091:280;-1:-1:-1;;;1091:280:91:o;1632:222::-;1697:9;;;1718:10;;;1715:133;;;1770:10;1765:3;1761:20;1758:1;1751:31;1805:4;1802:1;1795:15;1833:4;1830:1;1823:15;1632:222;1816:12879:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061017b575f3560e01c8063a4e7f8bd116100d1578063cebb51201161007c578063f2f7141f11610057578063f2f7141f146105a6578063f34ec5e0146105b9578063fa69dc7b146105ec575f80fd5b8063cebb51201461054c578063d0a1026014610560578063d3af0cc114610573575f80fd5b8063b20bffdc116100ac578063b20bffdc146104b8578063c37bcb4c14610504578063cc4aa20414610519575f80fd5b8063a4e7f8bd14610406578063a69610d114610433578063a754403e14610485575f80fd5b806320d2c951116101315780636fad06f51161010c5780636fad06f51461037057806371139d6c146103a35780639dbfb13f146103d6575f80fd5b806320d2c951146102d5578063574ad4a8146102f4578063634d45b214610327575f80fd5b80631cd66690116101615780631cd66690146101c65780631ed0993d146102195780631f8164d914610271575f80fd5b806303a9437e1461018657806319180904146101b1575f80fd5b3661018257005b5f80fd5b348015610191575f80fd5b5061019a601281565b6040515f9190910b81526020015b60405180910390f35b6101c46101bf366004611dbf565b61061f565b005b3480156101d1575f80fd5b506101e56101e0366004611e0c565b610a07565b604080518251815260208084015167ffffffffffffffff9081169183019190915292820151909216908201526060016101a8565b348015610224575f80fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a8565b34801561027c575f80fd5b506102a47f010000060000000000000000000000000000000000000000000000000000000081565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101a8565b3480156102e0575f80fd5b50620249f05b6040519081526020016101a8565b3480156102ff575f80fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b348015610332575f80fd5b50610346610341366004611ea4565b610a45565b6040805192835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101a8565b34801561037b575f80fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ae575f80fd5b5061019a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103e1575f80fd5b506103f56103f0366004611ee3565b610a9b565b6040519051151581526020016101a8565b348015610411575f80fd5b50610425610420366004611dbf565b610bf5565b6040516101a8929190611fde565b34801561043e575f80fd5b5061045261044d366004611fff565b610df9565b60408051825167ffffffffffffffff908116825260208085015182169083015292820151909216908201526060016101a8565b348015610490575f80fd5b5061019a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104c3575f80fd5b506104eb7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff90911681526020016101a8565b34801561050f575f80fd5b5062030d406102e6565b348015610524575f80fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b348015610557575f80fd5b506102e6604081565b6101c461056e366004612036565b610f78565b34801561057e575f80fd5b5061019a7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81565b6101c46105b43660046120d0565b611423565b3480156105c4575f80fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105f7575f80fd5b506104eb7f000000000000000000000000000000000000000000000000000000000000000081565b5f818152600160208190526040808320815161012081018352815463ffffffff1692810192835292810154606084015260028101546080840152600381015460a0840152600481018054919284929091849160c085019190610680906120fa565b80601f01602080910402602001604051908101604052809291908181526020018280546106ac906120fa565b80156106f75780601f106106ce576101008083540402835291602001916106f7565b820191905f5260205f20905b8154815290600101906020018083116106da57829003601f168201915b50505050508152602001600582018054610710906120fa565b80601f016020809104026020016040519081016040528092919081815260200182805461073c906120fa565b80156107875780601f1061075e57610100808354040283529160200191610787565b820191905f5260205f20905b81548152906001019060200180831161076a57829003601f168201915b505050505081526020016006820180546107a0906120fa565b80601f01602080910402602001604051908101604052809291908181526020018280546107cc906120fa565b80156108175780601f106107ee57610100808354040283529160200191610817565b820191905f5260205f20905b8154815290600101906020018083116107fa57829003601f168201915b5050509190925250505081526007919091015460209091015280515190915063ffffffff165f0361087c576040517f0b948634000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b5f828152600160208190526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000016815590810182905560028101829055600381018290559081816108d56004830182611d6d565b6108e2600583015f611d6d565b6108ef600683015f611d6d565b5050600782015f905550505f34826020015161090b9190612172565b82516040805180820182528381525f602082015290517fc7c7f5b300000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263c7c7f5b3928592610995923290600401612185565b60c06040518083038185885af11580156109b1573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906109d69190612271565b505060405183907fd41d02272333251e6367f747c63d5cc227dcac6b0c799067569e80a30f9da369905f90a2505050565b604080516060810182525f8082526020820181905291810182905290610a2d8487610df9565b519050610a3b83828761147b565b9695505050505050565b5f8060408314610a84576040517f2b701db100000000000000000000000000000000000000000000000000000000815260048101849052602401610873565b610a90838501856122da565b909590945092505050565b60408051602081019091525f81526040805173ffffffffffffffffffffffffffffffffffffffff841660208201525f9182916108109101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610b0a916122fd565b5f60405180830381855afa9150503d805f8114610b42576040519150601f19603f3d011682016040523d82523d5f602084013e610b47565b606091505b509150915081610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f436f726520757365722065786973747320707265636f6d70696c652063616c6c60448201527f206661696c6564000000000000000000000000000000000000000000000000006064820152608401610873565b80806020019051810190610bed9190612318565b949350505050565b600160208181525f928352604092839020835160e081018552815463ffffffff16815292810154918301919091526002810154928201929092526003820154606082015260048201805483916080840191610c4f906120fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7b906120fa565b8015610cc65780601f10610c9d57610100808354040283529160200191610cc6565b820191905f5260205f20905b815481529060010190602001808311610ca957829003601f168201915b50505050508152602001600582018054610cdf906120fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0b906120fa565b8015610d565780601f10610d2d57610100808354040283529160200191610d56565b820191905f5260205f20905b815481529060010190602001808311610d3957829003601f168201915b50505050508152602001600682018054610d6f906120fa565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9b906120fa565b8015610de65780601f10610dbd57610100808354040283529160200191610de6565b820191905f5260205f20905b815481529060010190602001808311610dc957829003601f168201915b5050509190925250505060079091015482565b604080516060810182525f80825260208201819052918101919091526040805173ffffffffffffffffffffffffffffffffffffffff8516602082015267ffffffffffffffff8416918101919091525f90819061080190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610e8a916122fd565b5f60405180830381855afa9150503d805f8114610ec2576040519150601f19603f3d011682016040523d82523d5f602084013e610ec7565b606091505b509150915081610f59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53706f7442616c616e636520707265636f6d70696c652063616c6c206661696c60448201527f65640000000000000000000000000000000000000000000000000000000000006064820152608401610873565b80806020019051810190610f6d9190612366565b925050505b92915050565b610f80611520565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610fef576040517f7eb966c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146110b4576040517fc8b356c600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015288166024820152604401610873565b5f6110bf8686611561565b90505f6110cc8787611580565b6040517f634d45b2000000000000000000000000000000000000000000000000000000008152909150309063634d45b29061110b9084906004016123b8565b6040805180830381865afa925050508015611161575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261115e918101906123ca565b60015b6112dd576111aa6040518060e001604052805f63ffffffff1681526020015f80191681526020015f81526020015f81526020016060815260200160608152602001606081525090565b6111b488886115ca565b63ffffffff1681526111c688886115ec565b60208281019190915260408083018590528051808201825283815234818401525f8c81526001808552908390208251805182547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff90911617825594850151918101919091559183015160028301556060830151600383015560808301519092908290600482019061125d9082612438565b5060a082015160058201906112729082612438565b5060c082015160068201906112879082612438565b50505060208201518160070155905050887f387fc8f821460fa8221428c9f4dc1f6d5db4f6a0a01f33dbeaa8cebd95e5d144826020015134856040516112cf93929190612554565b60405180910390a25061140f565b81341015611320576040517f7cb769dc00000000000000000000000000000000000000000000000000000000815234600482015260248101839052604401610873565b5f80341161133157620249f0611336565b62030d405b9050805a101561137e575a6040517f23e228cb000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604401610873565b6040517ff2f7141f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260248101869052309063f2f7141f9034906044015f604051808303818588803b1580156113eb575f80fd5b505af1935050505080156113fd575060015b61140b5761140b82866115fb565b5050505b505061141a60015f55565b50505050505050565b33301461145e576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610873565b6114688282611731565b34156114775761147782611851565b5050565b604080516060810182525f80825260208201819052918101919091525f805f845f0b13156114b8576114ae8686866119b2565b90925090506114f2565b6114ec86866114e7877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61257b565b611a4d565b90925090505b6040805160608101825292835267ffffffffffffffff91821660208401529085169082015290509392505050565b60025f540361155b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f55565b5f611570602c600c848661259e565b611579916125c5565b9392505050565b606061158f82604c818661259e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b5f6115d9600c6008848661259e565b6115e291612601565b60e01c9392505050565b5f611570604c602c848661259e565b34156116ea575f8273ffffffffffffffffffffffffffffffffffffffff16346040515f6040518083038185875af1925050503d805f8114611657576040519150601f19603f3d011682016040523d82523d5f602084013e61165c565b606091505b50509050806116e8576040515f90329034908381818185875af1925050503d805f81146116a4576040519150601f19603f3d011682016040523d82523d5f602084013e6116a9565b606091505b50509050806116e6576040517f77479d32000000000000000000000000000000000000000000000000000000008152346004820152602401610873565b505b505b80156114775761147773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168383611aca565b5f61179e7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000085610a07565b80519091501561184c575f6117b7848360200151611b57565b825190915061181f9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016907f000000000000000000000000000000000000000000000000000000000000000090611aca565b61184a847f000000000000000000000000000000000000000000000000000000000000000083611b9e565b505b505050565b5f6118be7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000034610a07565b8051909150156114775780516040515f9173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016918381818185875af1925050503d805f811461193d576040519150601f19603f3d011682016040523d82523d5f602084013e611942565b606091505b50509050806119835781516040517f77479d320000000000000000000000000000000000000000000000000000000081526004810191909152602401610873565b61184c837f00000000000000000000000000000000000000000000000000000000000000008460200151611b9e565b5f80806119c084600a612767565b90505f6119d78267ffffffffffffffff8816612775565b90508187816119e8576119e861278c565b068703935080841115611a31576040517f9a0c830f0000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610873565b818481611a4057611a4061278c565b0492505050935093915050565b5f8080611a5b84600a612767565b90505f611a728267ffffffffffffffff88166127b9565b905086935080871115611abb576040517f9a0c830f0000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610873565b81840292505050935093915050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261184c908490611cce565b5f611b6183610a9b565b51611b98576040517fbdcf14ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50919050565b6040805173ffffffffffffffffffffffffffffffffffffffff8516602082015267ffffffffffffffff84811682840152831660608083019190915282518083039091018152608082019092525f90611c1c907f010000060000000000000000000000000000000000000000000000000000000090849060a0016127f1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f17938e130000000000000000000000000000000000000000000000000000000082529150733333333333333333333333333333333333333333906317938e1390611c9a9084906004016123b8565b5f604051808303815f87803b158015611cb1575f80fd5b505af1158015611cc3573d5f803e3d5ffd5b505050505050505050565b5f8060205f8451602086015f885af180611ced576040513d5f823e3d81fd5b50505f513d91508115611d04578060011415611d1e565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561184a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610873565b508054611d79906120fa565b5f825580601f10611d88575050565b601f0160209004905f5260205f2090810190611da49190611da7565b50565b5b80821115611dbb575f8155600101611da8565b5090565b5f60208284031215611dcf575f80fd5b5035919050565b67ffffffffffffffff81168114611da4575f80fd5b73ffffffffffffffffffffffffffffffffffffffff81168114611da4575f80fd5b5f805f8060808587031215611e1f575f80fd5b8435611e2a81611dd6565b935060208501355f81900b8114611e3f575f80fd5b92506040850135611e4f81611deb565b9396929550929360600135925050565b5f8083601f840112611e6f575f80fd5b50813567ffffffffffffffff811115611e86575f80fd5b602083019150836020828501011115611e9d575f80fd5b9250929050565b5f8060208385031215611eb5575f80fd5b823567ffffffffffffffff811115611ecb575f80fd5b611ed785828601611e5f565b90969095509350505050565b5f60208284031215611ef3575f80fd5b813561157981611deb565b5f5b83811015611f18578181015183820152602001611f00565b50505f910152565b5f8151808452611f37816020860160208601611efe565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301525f608082015160e06080850152611fab60e0850182611f20565b905060a083015184820360a0860152611fc48282611f20565b91505060c083015184820360c0860152610f6d8282611f20565b604081525f611ff06040830185611f69565b90508260208301529392505050565b5f8060408385031215612010575f80fd5b823561201b81611deb565b9150602083013561202b81611dd6565b809150509250929050565b5f805f805f805f60a0888a03121561204c575f80fd5b873561205781611deb565b965060208801359550604088013567ffffffffffffffff8082111561207a575f80fd5b6120868b838c01611e5f565b909750955060608a01359