@layerzerolabs/hyperliquid-composer
Version:
LayerZero Labs reference EVM OmniChain Fungible Token (OFT) implementation for Hyperliquid
1 lines • 94.8 kB
JSON
{"abi":[{"type":"constructor","inputs":[{"name":"_endpoint","type":"address","internalType":"address"},{"name":"_oft","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"CORE_WRITER_VERSION","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"HLP_CORE_WRITER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"HLP_PRECOMPILE_READ_SPOT_BALANCE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"HYPE_CHAIN_ID_MAINNET","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"HYPE_CHAIN_ID_TESTNET","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"HYPE_INDEX_MAINNET","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"HYPE_INDEX_TESTNET","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"SPOT_SEND_ACTION_ID","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"SPOT_SEND_HEADER","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"balanceOfHyperCore","inputs":[{"name":"_user","type":"address","internalType":"address"},{"name":"_tokenId","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"endpoint","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getErrorPayload","inputs":[{"name":"_err","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"getHypeAsset","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct IHyperAsset","components":[{"name":"assetBridgeAddress","type":"address","internalType":"address"},{"name":"coreIndexId","type":"uint64","internalType":"uint64"},{"name":"decimalDiff","type":"int64","internalType":"int64"}]}],"stateMutability":"view"},{"type":"function","name":"getOFTAsset","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct IHyperAsset","components":[{"name":"assetBridgeAddress","type":"address","internalType":"address"},{"name":"coreIndexId","type":"uint64","internalType":"uint64"},{"name":"decimalDiff","type":"int64","internalType":"int64"}]}],"stateMutability":"view"},{"type":"function","name":"hypeAsset","inputs":[],"outputs":[{"name":"assetBridgeAddress","type":"address","internalType":"address"},{"name":"coreIndexId","type":"uint64","internalType":"uint64"},{"name":"decimalDiff","type":"int64","internalType":"int64"}],"stateMutability":"view"},{"type":"function","name":"hypeIndexByChainId","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"oft","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IOFT"}],"stateMutability":"view"},{"type":"function","name":"oftAsset","inputs":[],"outputs":[{"name":"assetBridgeAddress","type":"address","internalType":"address"},{"name":"coreIndexId","type":"uint64","internalType":"uint64"},{"name":"decimalDiff","type":"int64","internalType":"int64"}],"stateMutability":"view"},{"type":"function","name":"quoteHyperCoreAmount","inputs":[{"name":"_amount","type":"uint256","internalType":"uint256"},{"name":"_isOFT","type":"bool","internalType":"bool"}],"outputs":[{"name":"","type":"tuple","internalType":"struct IHyperAssetAmount","components":[{"name":"evm","type":"uint256","internalType":"uint256"},{"name":"dust","type":"uint256","internalType":"uint256"},{"name":"core","type":"uint64","internalType":"uint64"}]}],"stateMutability":"view"},{"type":"function","name":"refundERC20","inputs":[{"name":"_refundAddress","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"refundNativeTokens","inputs":[{"name":"_refundAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"type":"function","name":"validate_message","inputs":[{"name":"_composeMessage","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes32","internalType":"bytes32"},{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"validate_msg_or_refund","inputs":[{"name":"_composeMsg","type":"bytes","internalType":"bytes"},{"name":"_senderBytes32","type":"bytes32","internalType":"bytes32"},{"name":"_amountLD","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"event","name":"ErrorERC20_Refund","inputs":[{"name":"refundTo","type":"address","indexed":false,"internalType":"address"},{"name":"refundAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ErrorHYPE_Refund","inputs":[{"name":"refundTo","type":"address","indexed":false,"internalType":"address"},{"name":"refundAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ErrorMessage","inputs":[{"name":"reason","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ErrorSpot_FailedToSend","inputs":[{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"tokenId","type":"uint64","indexed":false,"internalType":"uint64"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"errorMessage","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"ExcessHYPE_Refund","inputs":[{"name":"refundTo","type":"address","indexed":false,"internalType":"address"},{"name":"refundAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ErrorMsg","inputs":[{"name":"errorMessage","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"HyperLiquidComposerCore_SpotBalanceRead_Failed","inputs":[{"name":"user","type":"address","internalType":"address"},{"name":"tokenId","type":"uint64","internalType":"uint64"}]},{"type":"error","name":"HyperLiquidComposer_FailedToRefund_HYPE","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"HyperLiquidComposer_InvalidArgument_EndpointShouldNotBeZeroAddress","inputs":[{"name":"receivedEndpointAddress","type":"address","internalType":"address"}]},{"type":"error","name":"HyperLiquidComposer_InvalidCall_NotComposer","inputs":[{"name":"notComposerAddress","type":"address","internalType":"address"}]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x60e060405234801562000010575f80fd5b5060405162001c4538038062001c4583398101604081905262000033916200017c565b6001600160a01b0382166200006a5760405163fb82c1f160e01b81526001600160a01b038316600482015260240160405180910390fd5b6001600160a01b03808316608052811660a081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa158015620000b9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000df9190620001b2565b6001600160a01b031660c05250505f60208190527f2802b8ca0a4d9948ac89ce9ba15f4015f0f68c52469c4df23bbaf374f1d4604080546001600160401b0319908116610451179091556103e79091527f332eac5de6beffe8ee7761a0342c75594c3acb5fdde0a2555227e56aa65d414180549091166096179055620001d5565b80516001600160a01b038116811462000177575f80fd5b919050565b5f80604083850312156200018e575f80fd5b620001998362000160565b9150620001a96020840162000160565b90509250929050565b5f60208284031215620001c3575f80fd5b620001ce8262000160565b9392505050565b60805160a05160c051611a3e620002075f395f818161073f0152610b2f01525f61058301525f6103c30152611a3e5ff3fe608060405260043610610183575f3560e01c80638483bc00116100d1578063bc963bc71161007c578063f6e6b24011610057578063f6e6b2401461068b578063f9716faf146106e3578063fc0c546a1461072e575f80fd5b8063bc963bc714610643578063d00b1ad514610658578063ebaeefd61461066c575f80fd5b80639b5215f6116100ac5780639b5215f614610572578063aae12e46146105a5578063ba8726791461062e575f80fd5b80638483bc00146104e65780639180b744146104fb578063970e7f9d14610529575f80fd5b80634bd162df11610131578063765008a11161010c578063765008a11461040a5780637ecd9ac3146104a057806381e8dcb4146104c7575f80fd5b80634bd162df1461034f5780635b9a23731461039d5780635e280f11146103b2575f80fd5b806320d9af9a1161016157806320d9af9a1461021657806322dbe29c146102395780632d0e315c14610281575f80fd5b806303be2050146101875780630d1995e0146101bc5780631f8164d914610202575b5f80fd5b348015610192575f80fd5b506101a66101a136600461121d565b610761565b6040516101b391906112f4565b60405180910390f35b3480156101c7575f80fd5b506101a66040518060400160405280600381526020017d06000000000000000000000000000000000000000000000000000000000081525081565b34801561020d575f80fd5b506101a6610776565b348015610221575f80fd5b5061022b6103e681565b6040519081526020016101b3565b348015610244575f80fd5b506101a66040518060400160405280600181526020017f010000000000000000000000000000000000000000000000000000000000000081525081565b34801561028c575f80fd5b5061030a604080516060810182525f8082526020820181905291810191909152506040805160608101825260015473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff16602082015260025460070b9181019190915290565b60408051825173ffffffffffffffffffffffffffffffffffffffff16815260208084015167ffffffffffffffff16908201529181015160070b908201526060016101b3565b34801561035a575f80fd5b50610384610369366004611306565b5f6020819052908152604090205467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101b3565b3480156103a8575f80fd5b5061022b6103e781565b3480156103bd575f80fd5b506103e57f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b3565b348015610415575f80fd5b506001546002546104629173ffffffffffffffffffffffffffffffffffffffff8116917401000000000000000000000000000000000000000090910467ffffffffffffffff169060070b83565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845267ffffffffffffffff909216602084015260070b908201526060016101b3565b3480156104ab575f80fd5b506103e573333333333333333333333333333333333333333381565b3480156104d2575f80fd5b506103846104e136600461135a565b6107fa565b6104f96104f436600461138f565b610805565b005b348015610506575f80fd5b5061051a61051536600461121d565b610927565b6040516101b3939291906113a8565b348015610534575f80fd5b50610548610543366004611487565b61095f565b6040805192835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101b3565b34801561057d575f80fd5b506103e57f000000000000000000000000000000000000000000000000000000000000000081565b3480156105b0575f80fd5b5061030a604080516060810182525f8082526020820181905291810191909152506040805160608101825260035473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff16602082015260045460070b9181019190915290565b348015610639575f80fd5b506103e561080181565b34801561064e575f80fd5b5061038461045181565b348015610663575f80fd5b50610384609681565b348015610677575f80fd5b506104f9610686366004611513565b610ab1565b348015610696575f80fd5b506003546004546104629173ffffffffffffffffffffffffffffffffffffffff8116917401000000000000000000000000000000000000000090910467ffffffffffffffff169060070b83565b3480156106ee575f80fd5b506107026106fd36600461153b565b610b56565b6040805182518152602080840151908201529181015167ffffffffffffffff16908201526060016101b3565b348015610739575f80fd5b506103e57f000000000000000000000000000000000000000000000000000000000000000081565b606061076d8383610c95565b90505b92915050565b604080518082018252600181527f010000000000000000000000000000000000000000000000000000000000000060208083019190915282518084018452600381527d0600000000000000000000000000000000000000000000000000000000008183015292516107e8939101611562565b60405160208183030381529060405281565b5f61076d8383610cdf565b333014610845576040517f5950c85e0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b5f34118015610869575073ffffffffffffffffffffffffffffffffffffffff811615155b15610924575f8173ffffffffffffffffffffffffffffffffffffffff16346040515f6040518083038185875af1925050503d805f81146108c4576040519150601f19603f3d011682016040523d82523d5f602084013e6108c9565b606091505b5050905080610922576040517fc8ee485e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015234602482015260440161083c565b505b50565b5f8060605f6109368686610df3565b90505f6109438787610e0b565b90505f6109508888610e1a565b92989197509195509350505050565b5f805f80868060200190518101906109779190611590565b915091505f61098587610e29565b90505f61099183610e54565b905073ffffffffffffffffffffffffffffffffffffffff8116610aa25782516040515f917f09b3473100000000000000000000000000000000000000000000000000000000916109e591879160240161160e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050610a6f81848a610eb7565b6040517f4f95203300000000000000000000000000000000000000000000000000000000815260040161083c91906112f4565b92989297509195505050505050565b333014610aec576040517f5950c85e00000000000000000000000000000000000000000000000000000000815233600482015260240161083c565b5f81118015610b10575073ffffffffffffffffffffffffffffffffffffffff821615155b156109225761092273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168383610f12565b610b8160405180606001604052805f81526020015f81526020015f67ffffffffffffffff1681525090565b604080516060810182525f80825260208201819052918101829052908315610c14576040805160608101825260015473ffffffffffffffffffffffffffffffffffffffff81168083527401000000000000000000000000000000000000000090910467ffffffffffffffff166020830181905260025460070b93830193909352909350610c0d91610cdf565b9050610c81565b6040805160608101825260035473ffffffffffffffffffffffffffffffffffffffff81168083527401000000000000000000000000000000000000000090910467ffffffffffffffff166020830181905260045460070b93830193909352909350610c7e91610cdf565b90505b610c8c858284610fa4565b95945050505050565b6060610ca4826044818661162f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602082015267ffffffffffffffff8316818301528151808203830181526060918201928390525f9283929161080191610d339190611656565b5f60405180830381855afa9150503d805f8114610d6b576040519150601f19603f3d011682016040523d82523d5f602084013e610d70565b606091505b50909250905081610dd5576040517fa91ed72100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8616600482015267ffffffffffffffff8516602482015260440161083c565b80806020019051810190610de99190611671565b5195945050505050565b5f610e02602c600c848661162f565b61076d916116e1565b5f610e02604c602c848661162f565b6060610ca482604c818661162f565b5f8173ffffffffffffffffffffffffffffffffffffffff8111610e4c5792915050565b505f92915050565b80515f907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec8101610e9257610e888361171d565b60601c9392505050565b60208103610e4c575f610ea48461176c565b9050610eaf81610e29565b949350505050565b606060405180606001604052808473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200185815250604051602001610efa91906117ae565b60405160208183030381529060405290509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610f9f90849061107f565b505050565b610fcf60405180606001604052805f81526020015f81526020015f67ffffffffffffffff1681525090565b5f805f80610fe58767ffffffffffffffff611124565b90505f866040015160070b1315611011576110058882886040015161114c565b91955093509150611053565b61104b888288604001517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611046919061181f565b6111c5565b919550935091505b5060408051606081018252938452602084019290925267ffffffffffffffff1690820152949350505050565b5f8060205f8451602086015f885af18061109e576040513d5f823e3d81fd5b50505f513d915081156110b55780600114156110cf565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561111e576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161083c565b50505050565b5f8167ffffffffffffffff168367ffffffffffffffff1611611146578261076d565b50919050565b5f80808061115b85600a611963565b90505f6111728267ffffffffffffffff8916611978565b905061117e82896119bc565b935061118a84896119cf565b9750611196888261120f565b94506111a285896119cf565b6111ac90856119e2565b93506111b882866119f5565b9250505093509350939050565b5f8080806111d485600a611963565b90505f6111eb8267ffffffffffffffff89166119f5565b90506111f7888261120f565b945061120385896119cf565b93506111b88286611978565b5f818311611146578261076d565b5f806020838503121561122e575f80fd5b823567ffffffffffffffff80821115611245575f80fd5b818501915085601f830112611258575f80fd5b813581811115611266575f80fd5b866020828501011115611277575f80fd5b60209290920196919550909350505050565b5f5b838110156112a357818101518382015260200161128b565b50505f910152565b5f81518084526112c2816020860160208601611289565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f61076d60208301846112ab565b5f60208284031215611316575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611340575f80fd5b919050565b67ffffffffffffffff81168114610924575f80fd5b5f806040838503121561136b575f80fd5b6113748361131d565b9150602083013561138481611345565b809150509250929050565b5f6020828403121561139f575f80fd5b61076d8261131d565b838152826020820152606060408201525f610c8c60608301846112ab565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561143a5761143a6113c6565b604052919050565b5f67ffffffffffffffff82111561145b5761145b6113c6565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f805f60608486031215611499575f80fd5b833567ffffffffffffffff8111156114af575f80fd5b8401601f810186136114bf575f80fd5b80356114d26114cd82611442565b6113f3565b8181528760208385010111156114e6575f80fd5b816020840160208301375f6020838301015280955050505060208401359150604084013590509250925092565b5f8060408385031215611524575f80fd5b61152d8361131d565b946020939093013593505050565b5f806040838503121561154c575f80fd5b8235915060208301358015158114611384575f80fd5b5f8351611573818460208801611289565b835190830190611587818360208801611289565b01949350505050565b5f80604083850312156115a1575f80fd5b82519150602083015167ffffffffffffffff8111156115be575f80fd5b8301601f810185136115ce575f80fd5b80516115dc6114cd82611442565b8181528660208385010111156115f0575f80fd5b611601826020830160208601611289565b8093505050509250929050565b604081525f61162060408301856112ab565b90508260208301529392505050565b5f808585111561163d575f80fd5b83861115611649575f80fd5b5050820193919092039150565b5f8251611667818460208701611289565b9190910192915050565b5f60608284031215611681575f80fd5b6040516060810181811067ffffffffffffffff821117156116a4576116a46113c6565b60405282516116b281611345565b815260208301516116c281611345565b602082015260408301516116d581611345565b60408201529392505050565b80356020831015610770577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b5f815160208301517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808216935060148310156117645780818460140360031b1b83161693505b505050919050565b80516020808301519190811015611146577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6020815273ffffffffffffffffffffffffffffffffffffffff8251166020820152602082015160408201525f6040830151606080840152610eaf60808401826112ab565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8260070b8260070b028060070b915080821461183e5761183e6117f2565b5092915050565b600181815b8085111561189e57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115611884576118846117f2565b8085161561189157918102915b93841c939080029061184a565b509250929050565b5f826118b457506001610770565b816118c057505f610770565b81600181146118d657600281146118e0576118fc565b6001915050610770565b60ff8411156118f1576118f16117f2565b50506001821b610770565b5060208310610133831016604e8410600b841016171561191f575081810a610770565b6119298383611845565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561195b5761195b6117f2565b029392505050565b5f61076d67ffffffffffffffff8416836118a6565b8082028115828204841417610770576107706117f2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826119ca576119ca61198f565b500690565b81810381811115610770576107706117f2565b80820180821115610770576107706117f2565b5f82611a0357611a0361198f565b50049056fea2646970667358221220a2059ed36afd1e706ae31cfd3797e86811658a8ac5cd99cd50fe3a57b426f97b64736f6c63430008160033","sourceMap":"731:11020:1:-:0;;;2336:556;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2395:23:1;;2391:195;;2441:134;;-1:-1:-1;;;2441:134:1;;-1:-1:-1;;;;;658:32:80;;2441:134:1;;;640:51:80;613:18;;2441:134:1;;;;;;;2391:195;-1:-1:-1;;;;;2595:20:1;;;;;2687:16;;;;;;2728:11;;;-1:-1:-1;;;2728:11:1;;;;:9;;:11;;;;;;;;;;;;;;;2687:16;2728:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2713:27:1;;;-1:-1:-1;;2751:18:1;:41;;;;;:62;;-1:-1:-1;;;;;;2751:62:1;;;1953:4;2751:62;;;;1806:3;2823:41;;;;:62;;;;;2092:3;2823:62;;;731:11020;;14:177:80;93:13;;-1:-1:-1;;;;;135:31:80;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:293::-;275:6;283;336:2;324:9;315:7;311:23;307:32;304:52;;;352:1;349;342:12;304:52;375:40;405:9;375:40;:::i;:::-;365:50;;434:49;479:2;468:9;464:18;434:49;:::i;:::-;424:59;;196:293;;;;;:::o;702:208::-;772:6;825:2;813:9;804:7;800:23;796:32;793:52;;;841:1;838;831:12;793:52;864:40;894:9;864:40;:::i;:::-;854:50;702:208;-1:-1:-1;;;702:208:80:o;:::-;731:11020:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405260043610610183575f3560e01c80638483bc00116100d1578063bc963bc71161007c578063f6e6b24011610057578063f6e6b2401461068b578063f9716faf146106e3578063fc0c546a1461072e575f80fd5b8063bc963bc714610643578063d00b1ad514610658578063ebaeefd61461066c575f80fd5b80639b5215f6116100ac5780639b5215f614610572578063aae12e46146105a5578063ba8726791461062e575f80fd5b80638483bc00146104e65780639180b744146104fb578063970e7f9d14610529575f80fd5b80634bd162df11610131578063765008a11161010c578063765008a11461040a5780637ecd9ac3146104a057806381e8dcb4146104c7575f80fd5b80634bd162df1461034f5780635b9a23731461039d5780635e280f11146103b2575f80fd5b806320d9af9a1161016157806320d9af9a1461021657806322dbe29c146102395780632d0e315c14610281575f80fd5b806303be2050146101875780630d1995e0146101bc5780631f8164d914610202575b5f80fd5b348015610192575f80fd5b506101a66101a136600461121d565b610761565b6040516101b391906112f4565b60405180910390f35b3480156101c7575f80fd5b506101a66040518060400160405280600381526020017d06000000000000000000000000000000000000000000000000000000000081525081565b34801561020d575f80fd5b506101a6610776565b348015610221575f80fd5b5061022b6103e681565b6040519081526020016101b3565b348015610244575f80fd5b506101a66040518060400160405280600181526020017f010000000000000000000000000000000000000000000000000000000000000081525081565b34801561028c575f80fd5b5061030a604080516060810182525f8082526020820181905291810191909152506040805160608101825260015473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff16602082015260025460070b9181019190915290565b60408051825173ffffffffffffffffffffffffffffffffffffffff16815260208084015167ffffffffffffffff16908201529181015160070b908201526060016101b3565b34801561035a575f80fd5b50610384610369366004611306565b5f6020819052908152604090205467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101b3565b3480156103a8575f80fd5b5061022b6103e781565b3480156103bd575f80fd5b506103e57f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b3565b348015610415575f80fd5b506001546002546104629173ffffffffffffffffffffffffffffffffffffffff8116917401000000000000000000000000000000000000000090910467ffffffffffffffff169060070b83565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845267ffffffffffffffff909216602084015260070b908201526060016101b3565b3480156104ab575f80fd5b506103e573333333333333333333333333333333333333333381565b3480156104d2575f80fd5b506103846104e136600461135a565b6107fa565b6104f96104f436600461138f565b610805565b005b348015610506575f80fd5b5061051a61051536600461121d565b610927565b6040516101b3939291906113a8565b348015610534575f80fd5b50610548610543366004611487565b61095f565b6040805192835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101b3565b34801561057d575f80fd5b506103e57f000000000000000000000000000000000000000000000000000000000000000081565b3480156105b0575f80fd5b5061030a604080516060810182525f8082526020820181905291810191909152506040805160608101825260035473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff16602082015260045460070b9181019190915290565b348015610639575f80fd5b506103e561080181565b34801561064e575f80fd5b5061038461045181565b348015610663575f80fd5b50610384609681565b348015610677575f80fd5b506104f9610686366004611513565b610ab1565b348015610696575f80fd5b506003546004546104629173ffffffffffffffffffffffffffffffffffffffff8116917401000000000000000000000000000000000000000090910467ffffffffffffffff169060070b83565b3480156106ee575f80fd5b506107026106fd36600461153b565b610b56565b6040805182518152602080840151908201529181015167ffffffffffffffff16908201526060016101b3565b348015610739575f80fd5b506103e57f000000000000000000000000000000000000000000000000000000000000000081565b606061076d8383610c95565b90505b92915050565b604080518082018252600181527f010000000000000000000000000000000000000000000000000000000000000060208083019190915282518084018452600381527d0600000000000000000000000000000000000000000000000000000000008183015292516107e8939101611562565b60405160208183030381529060405281565b5f61076d8383610cdf565b333014610845576040517f5950c85e0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b5f34118015610869575073ffffffffffffffffffffffffffffffffffffffff811615155b15610924575f8173ffffffffffffffffffffffffffffffffffffffff16346040515f6040518083038185875af1925050503d805f81146108c4576040519150601f19603f3d011682016040523d82523d5f602084013e6108c9565b606091505b5050905080610922576040517fc8ee485e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015234602482015260440161083c565b505b50565b5f8060605f6109368686610df3565b90505f6109438787610e0b565b90505f6109508888610e1a565b92989197509195509350505050565b5f805f80868060200190518101906109779190611590565b915091505f61098587610e29565b90505f61099183610e54565b905073ffffffffffffffffffffffffffffffffffffffff8116610aa25782516040515f917f09b3473100000000000000000000000000000000000000000000000000000000916109e591879160240161160e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050610a6f81848a610eb7565b6040517f4f95203300000000000000000000000000000000000000000000000000000000815260040161083c91906112f4565b92989297509195505050505050565b333014610aec576040517f5950c85e00000000000000000000000000000000000000000000000000000000815233600482015260240161083c565b5f81118015610b10575073ffffffffffffffffffffffffffffffffffffffff821615155b156109225761092273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168383610f12565b610b8160405180606001604052805f81526020015f81526020015f67ffffffffffffffff1681525090565b604080516060810182525f80825260208201819052918101829052908315610c14576040805160608101825260015473ffffffffffffffffffffffffffffffffffffffff81168083527401000000000000000000000000000000000000000090910467ffffffffffffffff166020830181905260025460070b93830193909352909350610c0d91610cdf565b9050610c81565b6040805160608101825260035473ffffffffffffffffffffffffffffffffffffffff81168083527401000000000000000000000000000000000000000090910467ffffffffffffffff166020830181905260045460070b93830193909352909350610c7e91610cdf565b90505b610c8c858284610fa4565b95945050505050565b6060610ca4826044818661162f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602082015267ffffffffffffffff8316818301528151808203830181526060918201928390525f9283929161080191610d339190611656565b5f60405180830381855afa9150503d805f8114610d6b576040519150601f19603f3d011682016040523d82523d5f602084013e610d70565b606091505b50909250905081610dd5576040517fa91ed72100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8616600482015267ffffffffffffffff8516602482015260440161083c565b80806020019051810190610de99190611671565b5195945050505050565b5f610e02602c600c848661162f565b61076d916116e1565b5f610e02604c602c848661162f565b6060610ca482604c818661162f565b5f8173ffffffffffffffffffffffffffffffffffffffff8111610e4c5792915050565b505f92915050565b80515f907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec8101610e9257610e888361171d565b60601c9392505050565b60208103610e4c575f610ea48461176c565b9050610eaf81610e29565b949350505050565b606060405180606001604052808473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200185815250604051602001610efa91906117ae565b60405160208183030381529060405290509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610f9f90849061107f565b505050565b610fcf60405180606001604052805f81526020015f81526020015f67ffffffffffffffff1681525090565b5f805f80610fe58767ffffffffffffffff611124565b90505f866040015160070b1315611011576110058882886040015161114c565b91955093509150611053565b61104b888288604001517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611046919061181f565b6111c5565b919550935091505b5060408051606081018252938452602084019290925267ffffffffffffffff1690820152949350505050565b5f8060205f8451602086015f885af18061109e576040513d5f823e3d81fd5b50505f513d915081156110b55780600114156110cf565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561111e576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161083c565b50505050565b5f8167ffffffffffffffff168367ffffffffffffffff1611611146578261076d565b50919050565b5f80808061115b85600a611963565b90505f6111728267ffffffffffffffff8916611978565b905061117e82896119bc565b935061118a84896119cf565b9750611196888261120f565b94506111a285896119cf565b6111ac90856119e2565b93506111b882866119f5565b9250505093509350939050565b5f8080806111d485600a611963565b90505f6111eb8267ffffffffffffffff89166119f5565b90506111f7888261120f565b945061120385896119cf565b93506111b88286611978565b5f818311611146578261076d565b5f806020838503121561122e575f80fd5b823567ffffffffffffffff80821115611245575f80fd5b818501915085601f830112611258575f80fd5b813581811115611266575f80fd5b866020828501011115611277575f80fd5b60209290920196919550909350505050565b5f5b838110156112a357818101518382015260200161128b565b50505f910152565b5f81518084526112c2816020860160208601611289565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f61076d60208301846112ab565b5f60208284031215611316575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611340575f80fd5b919050565b67ffffffffffffffff81168114610924575f80fd5b5f806040838503121561136b575f80fd5b6113748361131d565b9150602083013561138481611345565b809150509250929050565b5f6020828403121561139f575f80fd5b61076d8261131d565b838152826020820152606060408201525f610c8c60608301846112ab565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561143a5761143a6113c6565b604052919050565b5f67ffffffffffffffff82111561145b5761145b6113c6565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f805f60608486031215611499575f80fd5b833567ffffffffffffffff8111156114af575f80fd5b8401601f810186136114bf575f80fd5b80356114d26114cd82611442565b6113f3565b8181528760208385010111156114e6575f80fd5b816020840160208301375f6020838301015280955050505060208401359150604084013590509250925092565b5f8060408385031215611524575f80fd5b61152d8361131d565b946020939093013593505050565b5f806040838503121561154c575f80fd5b8235915060208301358015158114611384575f80fd5b5f8351611573818460208801611289565b835190830190611587818360208801611289565b01949350505050565b5f80604083850312156115a1575f80fd5b82519150602083015167ffffffffffffffff8111156115be575f80fd5b8301601f810185136115ce575f80fd5b80516115dc6114cd82611442565b8181528660208385010111156115f0575f80fd5b611601826020830160208601611289565b8093505050509250929050565b604081525f61162060408301856112ab565b90508260208301529392505050565b5f808585111561163d575f80fd5b83861115611649575f80fd5b5050820193919092039150565b5f8251611667818460208701611289565b9190910192915050565b5f60608284031215611681575f80fd5b6040516060810181811067ffffffffffffffff821117156116a4576116a46113c6565b60405282516116b281611345565b815260208301516116c281611345565b602082015260408301516116d581611345565b60408201529392505050565b80356020831015610770577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b5f815160208301517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808216935060148310156117645780818460140360031b1b83161693505b505050919050565b80516020808301519190811015611146577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6020815273ffffffffffffffffffffffffffffffffffffffff8251166020820152602082015160408201525f6040830151606080840152610eaf60808401826112ab565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8260070b8260070b028060070b915080821461183e5761183e6117f2565b5092915050565b600181815b8085111561189e57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115611884576118846117f2565b8085161561189157918102915b93841c939080029061184a565b509250929050565b5f826118b457506001610770565b816118c057505f610770565b81600181146118d657600281146118e0576118fc565b6001915050610770565b60ff8411156118f1576118f16117f2565b50506001821b610770565b5060208310610133831016604e8410600b841016171561191f575081810a610770565b6119298383611845565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561195b5761195b6117f2565b029392505050565b5f61076d67ffffffffffffffff8416836118a6565b8082028115828204841417610770576107706117f2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826119ca576119ca61198f565b500690565b81810381811115610770576107706117f2565b80820180821115610770576107706117f2565b5f82611a0357611a0361198f565b50049056fea2646970667358221220a2059ed36afd1e706ae31cfd3797e86811658a8ac5cd99cd50fe3a57b426f97b64736f6c63430008160033","sourceMap":"731:11020:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11616:133;;;;;;;;;;-1:-1:-1;11616:133:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1235:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1296:99;;;;;;;;;;;;;:::i;1701:51::-;;;;;;;;;;;;1749:3;1701:51;;;;;1567:25:80;;;1555:2;1540:18;1701:51:1;1421:177:80;1178:51:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11018:98;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;11094:15:1;;;;;;;;11101:8;11094:15;;;;;;;;;;;;;;;;;;;;;;;;;;;11018:98;;;;;1829:13:80;;1844:42;1825:62;1807:81;;1948:4;1936:17;;;1930:24;1956:18;1926:49;1904:20;;;1897:79;2034:17;;;2028:24;2025:1;2014:39;1992:20;;;1985:69;1795:2;1780:18;11018:98:1;1603:457:80;2102:52:1;;;;;;;;;;-1:-1:-1;2102:52:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;2424:18:80;2412:31;;;2394:50;;2382:2;2367:18;2102:52:1;2250:200:80;1758:51:1;;;;;;;;;;;;1806:3;1758:51;;2161:33;;;;;;;;;;;;;;;;;;2631:42:80;2619:55;;;2601:74;;2589:2;2574:18;2161:33:1;2455:226:80;2268:27:1;;;;;;;;;;-1:-1:-1;2268:27:1;;;;;;;;;;;;;;;;;;;;;;;;;2912:42:80;2900:55;;;2882:74;;3004:18;2992:31;;;2987:2;2972:18;;2965:59;3071:1;3060:21;3040:18;;;3033:49;2870:2;2855:18;2268:27:1;2686:402:80;1416:84:1;;;;;;;;;;;;1458:42;1416:84;;6118:151;;;;;;;;;;-1:-1:-1;6118:151:1;;;;;:::i;:::-;;:::i;10616:396::-;;;;;;:::i;:::-;;:::i;:::-;;2898:726;;;;;;;;;;-1:-1:-1;2898:726:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;3630:1208::-;;;;;;;;;;-1:-1:-1;3630:1208:1;;;;;:::i;:::-;;:::i;:::-;;;;6081:25:80;;;6154:42;6142:55;;;6137:2;6122:18;;6115:83;6054:18;3630:1208:1;5907:297:80;2201:25:1;;;;;;;;;;;;;;;11122:100;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;11199:16:1;;;;;;;;11206:9;11199:16;;;;;;;;;;;;;;;;;;;;;;;;;;;11122:100;1506:101;;;;;;;;;;;;1565:42;1506:101;;1909:48;;;;;;;;;;;;1953:4;1909:48;;2048:47;;;;;;;;;;;;2092:3;2048:47;;9562:217;;;;;;;;;;-1:-1:-1;9562:217:1;;;;;:::i;:::-;;:::i;2301:28::-;;;;;;;;;;-1:-1:-1;2301:28:1;;;;;;;;;;;;;;;;;;;;;5253:604;;;;;;;;;;-1:-1:-1;5253:604:1;;;;;:::i;:::-;;:::i;:::-;;;;7292:13:80;;7274:32;;7362:4;7350:17;;;7344:24;7322:20;;;7315:54;7417:17;;;7411:24;7437:18;7407:49;7385:20;;;7378:79;7262:2;7247:18;5253:604:1;7058:405:80;2232:29:1;;;;;;;;;;;;;;;11616:133;11685:12;11716:26;:4;;:24;:26::i;:::-;11709:33;;11616:133;;;;;:::o;1296:99::-;1354:19;;;;;;;;;;;;;;;;;;;;1375;;;;;;;;;;;;;;;1337:58;;;;1375:19;1337:58;;:::i;:::-;;;;;;;;;;;;;1296:99;:::o;6118:151::-;6201:6;6226:36;6246:5;6253:8;6226:19;:36::i;10616:396::-;1012:10;1034:4;1012:27;1008:147;;1062:82;;;;;1133:10;1062:82;;;2601:74:80;2574:18;;1062:82:1;;;;;;;;1008:147;10724:1:::1;10712:9;:13;:45;;;;-1:-1:-1::0;10729:28:1::1;::::0;::::1;::::0;::::1;10712:45;10708:298;;;10774:12;10792:14;:19;;10820:9;10792:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10773:62;;;10854:7;10849:147;;10888:93;::::0;::::1;::::0;;8626:42:80;8614:55;;10888:93:1::1;::::0;::::1;8596:74:80::0;10971:9:1::1;8686:18:80::0;;;8679:34;8569:18;;10888:93:1::1;8422:297:80::0;10849:147:1::1;10759:247;10708:298;10616:396:::0;:::o;2898:726::-;2979:7;2988;2997:12;3210:16;3229:44;3257:15;;3229:27;:44::i;:::-;3210:63;;3283:26;3312:47;3343:15;;3312:30;:47::i;:::-;3283:76;;3485:23;3511:46;3541:15;;3511:29;:46::i;:::-;3576:8;;3586:18;;-1:-1:-1;3576:8:1;;-1:-1:-1;2898:726:1;-1:-1:-1;;;;2898:726:1:o;3630:1208::-;3784:7;3793;3813:20;3835:26;3876:11;3865:41;;;;;;;;;;;;:::i;:::-;3812:94;;;;4096:14;4113:40;:14;:38;:40::i;:::-;4096:57;;4163:16;4182:39;:13;:37;:39::i;:::-;4163:58;-1:-1:-1;4401:22:1;;;4397:393;;4643:20;;4461:216;;4439:19;;4501:93;;4461:216;;4612:13;;4461:216;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4734:44:1;4461:216;4760:6;4768:9;4734:25;:44::i;:::-;4698:81;;;;;;;;;;;:::i;4397:393::-;4808:12;;;;-1:-1:-1;3630:1208:1;;-1:-1:-1;;;;;;3630:1208:1:o;9562:217::-;1012:10;1034:4;1012:27;1008:147;;1062:82;;;;;1133:10;1062:82;;;2601:74:80;2574:18;;1062:82:1;2455:226:80;1008:147:1;9670:1:::1;9660:7;:11;:43;;;;-1:-1:-1::0;9675:28:1::1;::::0;::::1;::::0;::::1;9660:43;9656:117;;;9719:43;:18;:5;:18;9738:14:::0;9754:7;9719:18:::1;:43::i;5253:604::-:0;5334:24;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;5334:24:1;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;5446:325:1;;;;5472:16;;;;;;;;5480:8;5472:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5529:70:1;;:19;:70::i;:::-;5502:97;;5446:325;;;5630:17;;;;;;;;5638:9;5630:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5688:72:1;;:19;:72::i;:::-;5661:99;;5446:325;5788:62;:7;5818:24;5844:5;5788:29;:62::i;:::-;5781:69;5253:604;-1:-1:-1;;;;;5253:604:1:o;9725:124:7:-;9798:12;9829:13;:4;9834:6;9829:4;;:13;:::i;:::-;9822:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9822:20:7;;9725:124;-1:-1:-1;;;;;;9725:124:7:o;6530:480:1:-;6747:27;;;6703:43;10256:55:80;;6747:27:1;;;10238:74:80;10360:18;10348:31;;10328:18;;;10321:59;6747:27:1;;;;;;;;;6654:19;10211:18:80;;;6747:27:1;;;;-1:-1:-1;;;;6654:19:1;1565:42;;6703:72;;6747:27;6703:72;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6683:92:1;;-1:-1:-1;6683:92:1;-1:-1:-1;6683:92:1;6785:136;;6820:90;;;;;10268:42:80;10256:55;;6820:90:1;;;10238:74:80;10360:18;10348:31;;10328:18;;;10321:59;10211:18;;6820:90:1;10066:320:80;6785:136:1;6948:6;6937:60;;;;;;;;;;;;:::i;:::-;:66;;6530:480;-1:-1:-1;;;;;6530:480:1:o;1676:150:36:-;1738:7;1780:37;282:2;232;1780:4;;:37;:::i;:::-;1772:46;;;:::i;1989:149::-;2054:7;2088:42;335:2;282;2088:4;;:42;:::i;2273:128::-;2337:12;2368:26;:4;335:2;2368:4;;:26;:::i;8217:302:7:-;8299:7;8352:16;8402:17;8383:36;;8379:107;;8458:15;8217:302;-1:-1:-1;;8217:302:7:o;8379:107::-;-1:-1:-1;8510:1:7;;8217:302;-1:-1:-1;;8217:302:7:o;8825:492::-;8946:21;;8910:7;;8981:45;;;8977:307;;9057:23;9065:14;9057:23;:::i;:::-;9049:32;;;8825:492;-1:-1:-1;;;8825:492:7:o;8977:307::-;1004:2;9102:6;:45;9098:186;;9163:23;9189;9197:14;9189:23;:::i;:::-;9163:49;;9233:40;9257:15;9233:23;:40::i;:::-;9226:47;8825:492;-1:-1:-1;;;;8825:492:7:o;10228:333::-;10373:12;10444:96;;;;;;;;10476:7;10444:96;;;;;;10499:9;10444:96;;;;10524:13;10444:96;;;10416:138;;;;;;;;:::i;:::-;;;;;;;;;;;;;10397:157;;10228:333;;;;;:::o;1271:160:65:-;1380:43;;;1395:14;8614:55:80;;1380:43:65;;;8596:74:80;8686:18;;;;8679:34;;;1380:43:65;;;;;;;;;;8569:18:80;;;;1380:43:65;;;;;;;;;;;;;;1353:71;;1373:5;;1353:19;:71::i;:::-;1271:160;;;:::o;3017:1788:7:-;3172:24;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;3172:24:7;3208:17;3235:12;3257:17;3285:32;3320:66;3328:18;533:16;3320:7;:66::i;:::-;3285:101;;4237:1;4216:6;:18;;;:22;;;4212:502;;;4286:174;4352:7;4377:25;4427:6;:18;;;4286:48;:174::i;:::-;4254:206;;-1:-1:-1;4254:206:7;-1:-1:-1;4254:206:7;-1:-1:-1;4212:502:7;;;4523:180;4590:7;4615:25;4670:6;:18;;;4665:2;:23;;;;:::i;:::-;4523:49;:180::i;:::-;4491:212;;-1:-1:-1;4491:212:7;-1:-1:-1;4491:212:7;-1:-1:-1;4212:502:7;-1:-1:-1;4731:67:7;;;;;;;;;;;;;;;;;;;;;;;;;3017:1788;-1:-1:-1;;;;3017:1788:7:o;7738:720:65:-;7818:18;7846:19;7984:4;7981:1;7974:4;7968:11;7961:4;7955;7951:15;7948:1;7941:5;7934;7929:60;8041:7;8031:176;;8085:4;8079:11;8130:16;8127:1;8122:3;8107:40;8176:16;8171:3;8164:29;8031:176;-1:-1:-1;;8284:1:65;8278:8;8234:16;;-1:-1:-1;8310:15:65;;:68;;8362:11;8377:1;8362:16;;8310:68;;;8328:26;;;;:31;8310:68;8306:146;;;8401:40;;;;;2631:42:80;2619:55;;8401:40:65;;;2601:74:80;2574:18;;8401:40:65;2455:226:80;8306:146:65;7808:650;;7738:720;;:::o;10684:107:7:-;10744:6;10774:1;10770:5;;:1;:5;;;:13;;10782:1;10770:13;;;-1:-1:-1;10778:1:7;10684:107;-1:-1:-1;10684:107:7:o;5356:1098::-;5545:17;;;;5623:23;5629:17;5623:2;:23;:::i;:::-;5607:39;-1:-1:-1;5656:31:7;5690:34;5607:39;5690:34;;;;:::i;:::-;5656:68;-1:-1:-1;5883:15:7;5893:5;5883:7;:15;:::i;:::-;5876:22;-1:-1:-1;5918:14:7;5876:22;5918:7;:14;:::i;:::-;5908:24;;6183:42;6192:7;6201:23;6183:8;:42::i;:::-;6171:54;-1:-1:-1;6250:19:7;6171:54;6250:7;:19;:::i;:::-;6242:28;;:4;:28;:::i;:::-;6235:35;-1:-1:-1;6429:17:7;6441:5;6429:9;:17;:::i;:::-;6409:38;;5597:857;;5356:1098;;;;;;;:::o;6989:915::-;7179:17;;;;7257:23;7263:17;7257:2;:23;:::i;:::-;7241:39;-1:-1:-1;7290:31:7;7324:34;7241:39;7324:34;;;;:::i;:::-;7290:68;;7642:42;7651:7;7660:23;7642:8;:42::i;:::-;7630:54;-1:-1:-1;7701:19:7;7630:54;7701:7;:19;:::i;:::-;7694:26;-1:-1:-1;7879:17:7;7891:5;7879:9;:17;:::i;10567:111::-;10630:7;10661:1;10657;:5;:13;;10669:1;10657:13;;14:591:80;84:6;92;145:2;133:9;124:7;120:23;116:32;113:52;;;161:1;158;151:12;113:52;201:9;188:23;230:18;271:2;263:6;260:14;257:34;;;287:1;284;277:12;257:34;325:6;314:9;310:22;300:32;;370:7;363:4;359:2;355:13;351:27;341:55;;392:1;389;382:12;341:55;432:2;419:16;458:2;450:6;447:14;444:34;;;474:1;471;464:12;444:34;519:7;514:2;505:6;501:2;497:15;493:24;490:37;487:57;;;540:1;537;530:12;487:57;571:2;563:11;;;;;593:6;;-1:-1:-1;14:591:80;;-1:-1:-1;;;;14:591:80:o;610:250::-;695:1;705:113;719:6;716:1;713:13;705:113;;;795:11;;;789:18;776:11;;;769:39;741:2;734:10;705:113;;;-1:-1:-1;;852:1:80;834:16;;827:27;610:250::o;865:329::-;906:3;944:5;938:12;971:6;966:3;959:19;987:76;1056:6;1049:4;1044:3;1040:14;1033:4;1026:5;1022:16;987:76;:::i;:::-;1108:2;1096:15;1113:66;1092:88;1083:98;;;;1183:4;1079:109;;865:329;-1:-1:-1;;865:329:80:o;1199:217::-;1346:2;1335:9;1328:21;1309:4;1366:44;1406:2;1395:9;1391:18;1383:6;1366:44;:::i;2065:180::-;2124:6;2177:2;2165:9;2156:7;2152:23;2148:32;2145:52;;;2193:1;2190;2183:12;2145:52;-1:-1:-1;2216:23:80;;2065:180;-1:-1:-1;2065:180:80:o;3093:196::-;3161:20;;3221:42;3210:54;;3200:65;;3190:93;;3279:1;3276;3269:12;3190:93;3093:196;;;:::o;3294:129::-;3379:18;3372:5;3368:30;3361:5;3358:41;3348:69;;3413:1;3410;3403:12;3428:319;3495:6;3503;3556:2;3544:9;3535:7;3531:23;3527:32;3524:52;;;3572:1;3569;3562:12;3524:52;3595:29;3614:9;3595:29;:::i;:::-;3585:39;;3674:2;3663:9;3659:18;3646:32;3687:30;3711:5;3687:30;:::i;:::-;3736:5;3726:15;;;3428:319;;;;;:::o;3752:186::-;3811:6;3864:2;3852:9;3843:7;3839:23;3835:32;3832:52;;;3880:1;3877;3870:12;3832:52;3903:29;3922:9;3903:29;:::i;3943:359::-;4146:6;4135:9;4128:25;4189:6;4184:2;4173:9;4169:18;4162:34;4232:2;4227;4216:9;4212:18;4205:30;4109:4;4252:44;4292:2;4281:9;4277:18;4269:6;4252:44;:::i;4307:184::-;4359:77;4356:1;4349:88;4456:4;4453:1;4446:15;4480:4;4477:1;4470:15;4496:334;4567:2;4561:9;4623:2;4613:13;;4628:66;4609:86;4597:99;;4726:18;4711:34;;4747:22;;;4708:62;4705:88;;;4773:18;;:::i;:::-;4809:2;4802:22;4496:334;;-1:-1:-1;4496:334:80:o;4835:245::-;4883:4;4916:18;4908:6;4905:30;4902:56;;;4938:18;;:::i;:::-;-1:-1:-1;4995:2:80;4983:15;5000:66;4979:88;5069:4;4975:99;;4835:245::o;5085:817::-;5171:6;5179;5187;5240:2;5228:9;5219:7;5215:23;5211:32;5208:52;;;5256:1;5253;5246:12;5208:52;5296:9;5283:23;5329:18;5321:6;5318:30;5315:50;;;5361:1;5358;5351:12;5315:50;5384:22;;5437:4;5429:13;;5425:27;-1:-1:-1;5415:55:80;;5466:1;5463;5456:12;5415:55;5502:2;5489:16;5527:48;5543:31;5571:2;5543:31;:::i;:::-;5527:48;:::i;:::-;5598:2;5591:5;5584:17;5640:7;5633:4;5628:2;5624;5620:11;5616:22;5613:35;5610:55;;;5661:1;5658;5651:12;5610:55;5720:2;5713:4;5709:2;5705:13;5698:4;5691:5;5687:16;5674:49;5766:1;5759:4;5754:2;5747:5;5743:14;5739:25;5732:36;5787:5;5777:15;;;;;5839:4;5828:9;5824:20;5811:34;5801:44;;5892:2;5881:9;5877:18;5864:32;5854:42;;5085:817;;;;;:::o;6453:254::-;6521:6;6529;6582:2;6570:9;6561:7;6557:23;6553:32;6550:52;;;6598:1;6595;6588:12;6550:52;6621:29;6640:9;6621:29;:::i;:::-;6611:39;6697:2;6682:18;;;;6669:32;;-1:-1:-1;;;6453:254:80:o;6712:341::-;6777:6;6785;6838:2;6826:9;6817:7;6813:23;6809:32;6806:52;;;6854:1;6851;6844:12;6806:52;6890:9;6877:23;6867:33;;6950:2;6939:9;6935:18;6922:32;6997:5;6990:13;6983:21;6976:5;6973:32;6963:60;;7019:1;7016;7009:12;7715:492;7890:3;7928:6;7922:13;7944:66;8003:6;7998:3;7991:4;7983:6;7979:17;7944:66;:::i;:::-;8073:13;;8032:16;;;;8095:70;8073:13;8032:16;8142:4;8130:17;;8095:70;:::i;:::-;8181:20;;7715:492;-1:-1:-1;;;;7715:492:80:o;8724:708::-;8812:6;8820;8873:2;8861:9;8852:7;8848:23;8844:32;8841:52;;;8889:1;8886;8879:12;8841:52;8918:9;8912:16;8902:26;;8972:2;8961:9;8957:18;8951:25;8999:18;8991:6;8988:30;8985:50;;;9031:1;9028;9021:12;8985:50;9054:22;;9107:4;9099:13;;9095:27;-1:-1:-1;9085:55:80;;9136:1;9133;9126:12;9085:55;9165:2;9159:9;9190:48;9206:31;9234:2;9206:31;:::i;9190:48::-;9261:2;9254:5;9247:17;9301:7;9296:2;9291;9287;9283:11;9279:20;9276:33;9273:53;;;9322:1;9319;9312:12;9273:53;9335:67;9399:2;9394;9387:5;9383:14;9378:2;9374;9370:11;9335:67;:::i;:::-;9421:5;9411:15;;;;;8724:708;;;;;:::o;9437:288::-;9612:2;9601:9;9594:21;9575:4;9632:44;9672:2;9661:9;9657:18;9649:6;9632:44;:::i;:::-;9624:52;;9712:6;9707:2;9696:9;9692:18;9685:34;9437:288;;;;;:::o;9730:331::-;9835:9;9846;9888:8;9876:10;9873:24;9870:44;;;9910:1;9907;9900:12;9870:44;9939:6;9929:8;9926:20;9923:40;;;9959:1;9956;9949:12;9923:40;-1:-1:-1;;9985:23:80;;;10030:25;;;;;-1:-1:-1;9730:331:80:o;10391:287::-;10520:3;10558:6;10552:13;10574:66;10633:6;10628:3;10621:4;10613:6;10609:17;10574:66;:::i;:::-;10656:16;;;;;10391:287;-1:-1:-1;;10391:287:80:o;10683:774::-;10782:6;10835:2;10823:9;10814:7;10810:23;10806:32;10803:52;;;10851:1;10848;10841:12;10803:52;10884:2;10878:9;10926:2;10918:6;10914:15;10995:6;10983:10;10980:22;10959:18;10947:10;10944:34;10941:62;10938:88;;;11006:18;;:::i;:::-;11042:2;11035:22;11079:16;;11104:30;11079:16;11104:30;:::i;:::-;11143:21;;11209:2;11194:18;;11188:25;11222:32;11188:25;11222:32;:::i;:::-;11282:2;11270:15;;11263:32;11340:2;11325:18;;11319:25;11353:32;11319:25;11353:32;:::i;:::-;11413:2;11401:15;;11394:32;11405:6;10683:7