UNPKG

@layerzerolabs/hyperliquid-composer

Version:

LayerZero Labs reference EVM OmniChain Fungible Token (OFT) implementation for Hyperliquid

1 lines 92.9 kB
{"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_addresses_or_refund","inputs":[{"name":"_maybeReceiver","type":"bytes","internalType":"bytes"},{"name":"_senderBytes32","type":"bytes32","internalType":"bytes32"},{"name":"_amountLD","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"pure"},{"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":"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":"0x60e060405234801562000010575f80fd5b5060405162001b6338038062001b6383398101604081905262000033916200017c565b6001600160a01b0382166200006a5760405163fb82c1f160e01b81526001600160a01b038316600482015260240160405180910390fd5b6001600160a01b03808316608052811660a081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa158015620000b9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000df9190620001b2565b6001600160a01b031660c05250505f60208190527f2802b8ca0a4d9948ac89ce9ba15f4015f0f68c52469c4df23bbaf374f1d4604080546001600160401b0319908116610451179091556103e79091527f332eac5de6beffe8ee7761a0342c75594c3acb5fdde0a2555227e56aa65d414180549091166096179055620001d5565b80516001600160a01b038116811462000177575f80fd5b919050565b5f80604083850312156200018e575f80fd5b620001998362000160565b9150620001a96020840162000160565b90509250929050565b5f60208284031215620001c3575f80fd5b620001ce8262000160565b9392505050565b60805160a05160c05161195c620002075f395f81816107150152610ae801525f61055901525f610407015261195c5ff3fe608060405260043610610183575f3560e01c806381e8dcb4116100d1578063bc963bc71161007c578063f6e6b24011610057578063f6e6b24014610661578063f9716faf146106b9578063fc0c546a14610704575f80fd5b8063bc963bc714610619578063d00b1ad51461062e578063ebaeefd614610642575f80fd5b80639b5215f6116100ac5780639b5215f614610548578063aae12e461461057b578063ba87267914610604575f80fd5b806381e8dcb4146104e65780638483bc00146105055780639180b7441461051a575f80fd5b80634bd162df116101315780635e280f111161010c5780635e280f11146103f6578063765008a1146104295780637ecd9ac3146104bf575f80fd5b80634bd162df1461034f5780635241b4961461039d5780635b9a2373146103e1575f80fd5b806320d9af9a1161016157806320d9af9a1461021657806322dbe29c146102395780632d0e315c14610281575f80fd5b806303be2050146101875780630d1995e0146101bc5780631f8164d914610202575b5f80fd5b348015610192575f80fd5b506101a66101a13660046111cd565b610737565b6040516101b391906112a4565b60405180910390f35b3480156101c7575f80fd5b506101a66040518060400160405280600381526020017d06000000000000000000000000000000000000000000000000000000000081525081565b34801561020d575f80fd5b506101a661074c565b348015610221575f80fd5b5061022b6103e681565b6040519081526020016101b3565b348015610244575f80fd5b506101a66040518060400160405280600181526020017f010000000000000000000000000000000000000000000000000000000000000081525081565b34801561028c575f80fd5b5061030a604080516060810182525f8082526020820181905291810191909152506040805160608101825260015473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff16602082015260025460070b9181019190915290565b60408051825173ffffffffffffffffffffffffffffffffffffffff16815260208084015167ffffffffffffffff16908201529181015160070b908201526060016101b3565b34801561035a575f80fd5b506103846103693660046112b6565b5f6020819052908152604090205467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101b3565b3480156103a8575f80fd5b506103bc6103b7366004611349565b6107d0565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b3565b3480156103ec575f80fd5b5061022b6103e781565b348015610401575f80fd5b506103bc7f000000000000000000000000000000000000000000000000000000000000000081565b348015610434575f80fd5b506001546002546104819173ffffffffffffffffffffffffffffffffffffffff8116917401000000000000000000000000000000000000000090910467ffffffffffffffff169060070b83565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845267ffffffffffffffff909216602084015260070b908201526060016101b3565b3480156104ca575f80fd5b506103bc73333333333333333333333333333333333333333381565b3480156104f1575f80fd5b50610384610500366004611443565b61090a565b610518610513366004611478565b610915565b005b348015610525575f80fd5b506105396105343660046111cd565b610a32565b6040516101b393929190611491565b348015610553575f80fd5b506103bc7f000000000000000000000000000000000000000000000000000000000000000081565b348015610586575f80fd5b5061030a604080516060810182525f8082526020820181905291810191909152506040805160608101825260035473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff16602082015260045460070b9181019190915290565b34801561060f575f80fd5b506103bc61080181565b348015610624575f80fd5b5061038461045181565b348015610639575f80fd5b50610384609681565b34801561064d575f80fd5b5061051861065c3660046114af565b610a6a565b34801561066c575f80fd5b506003546004546104819173ffffffffffffffffffffffffffffffffffffffff8116917401000000000000000000000000000000000000000090910467ffffffffffffffff169060070b83565b3480156106c4575f80fd5b506106d86106d33660046114d7565b610b0f565b6040805182518152602080840151908201529181015167ffffffffffffffff16908201526060016101b3565b34801561070f575f80fd5b506103bc7f000000000000000000000000000000000000000000000000000000000000000081565b60606107438383610c45565b90505b92915050565b604080518082018252600181527f010000000000000000000000000000000000000000000000000000000000000060208083019190915282518084018452600381527d0600000000000000000000000000000000000000000000000000000000008183015292516107be9391016114fe565b60405160208183030381529060405281565b5f806107db84610c8f565b90505f6107e786610cba565b905073ffffffffffffffffffffffffffffffffffffffff81166109015785516040515f917f09b34731000000000000000000000000000000000000000000000000000000009161083b918a9160240161152c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290506108c5818487610d1d565b6040517f4f9520330000000000000000000000000000000000000000000000000000000081526004016108f891906112a4565b60405180910390fd5b95945050505050565b5f6107438383610d78565b333014610950576040517f5950c85e0000000000000000000000000000000000000000000000000000000081523360048201526024016108f8565b5f34118015610974575073ffffffffffffffffffffffffffffffffffffffff811615155b15610a2f575f8173ffffffffffffffffffffffffffffffffffffffff16346040515f6040518083038185875af1925050503d805f81146109cf576040519150601f19603f3d011682016040523d82523d5f602084013e6109d4565b606091505b5050905080610a2d576040517fc8ee485e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201523460248201526044016108f8565b505b50565b5f8060605f610a418686610e8c565b90505f610a4e8787610ea4565b90505f610a5b8888610eb3565b92989197509195509350505050565b333014610aa5576040517f5950c85e0000000000000000000000000000000000000000000000000000000081523360048201526024016108f8565b5f81118015610ac9575073ffffffffffffffffffffffffffffffffffffffff821615155b15610a2d57610a2d73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168383610ec2565b610b3a60405180606001604052805f81526020015f81526020015f67ffffffffffffffff1681525090565b604080516060810182525f80825260208201819052918101829052908315610bcd576040805160608101825260015473ffffffffffffffffffffffffffffffffffffffff81168083527401000000000000000000000000000000000000000090910467ffffffffffffffff166020830181905260025460070b93830193909352909350610bc691610d78565b9050610c3a565b6040805160608101825260035473ffffffffffffffffffffffffffffffffffffffff81168083527401000000000000000000000000000000000000000090910467ffffffffffffffff166020830181905260045460070b93830193909352909350610c3791610d78565b90505b610901858284610f54565b6060610c54826044818661154d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b5f8173ffffffffffffffffffffffffffffffffffffffff8111610cb25792915050565b505f92915050565b80515f907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec8101610cf857610cee83611574565b60601c9392505050565b60208103610cb2575f610d0a846115c3565b9050610d1581610c8f565b949350505050565b606060405180606001604052808473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200185815250604051602001610d609190611605565b60405160208183030381529060405290509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602082015267ffffffffffffffff8316818301528151808203830181526060918201928390525f9283929161080191610dcc9190611649565b5f60405180830381855afa9150503d805f8114610e04576040519150601f19603f3d011682016040523d82523d5f602084013e610e09565b606091505b50909250905081610e6e576040517fa91ed72100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8616600482015267ffffffffffffffff851660248201526044016108f8565b80806020019051810190610e829190611664565b5195945050505050565b5f610e9b602c600c848661154d565b610743916116d4565b5f610e9b604c602c848661154d565b6060610c5482604c818661154d565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610f4f90849061102f565b505050565b610f7f60405180606001604052805f81526020015f81526020015f67ffffffffffffffff1681525090565b5f805f80610f958767ffffffffffffffff6110d4565b90505f866040015160070b1315610fc157610fb5888288604001516110fc565b91955093509150611003565b610ffb888288604001517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ff6919061173d565b611175565b919550935091505b5060408051606081018252938452602084019290925267ffffffffffffffff1690820152949350505050565b5f8060205f8451602086015f885af18061104e576040513d5f823e3d81fd5b50505f513d9150811561106557806001141561107f565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156110ce576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016108f8565b50505050565b5f8167ffffffffffffffff168367ffffffffffffffff16116110f65782610743565b50919050565b5f80808061110b85600a611881565b90505f6111228267ffffffffffffffff8916611896565b905061112e82896118da565b935061113a84896118ed565b975061114688826111bf565b945061115285896118ed565b61115c9085611900565b93506111688286611913565b9250505093509350939050565b5f80808061118485600a611881565b90505f61119b8267ffffffffffffffff8916611913565b90506111a788826111bf565b94506111b385896118ed565b93506111688286611896565b5f8183116110f65782610743565b5f80602083850312156111de575f80fd5b823567ffffffffffffffff808211156111f5575f80fd5b818501915085601f830112611208575f80fd5b813581811115611216575f80fd5b866020828501011115611227575f80fd5b60209290920196919550909350505050565b5f5b8381101561125357818101518382015260200161123b565b50505f910152565b5f8151808452611272816020860160208601611239565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f610743602083018461125b565b5f602082840312156112c6575f80fd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611341576113416112cd565b604052919050565b5f805f6060848603121561135b575f80fd5b833567ffffffffffffffff80821115611372575f80fd5b818601915086601f830112611385575f80fd5b8135602082821115611399576113996112cd565b6113c9817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f850116016112fa565b925081835288818386010111156113de575f80fd5b81818501828501375f9183018101919091529097908601359650604090950135949350505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611429575f80fd5b919050565b67ffffffffffffffff81168114610a2f575f80fd5b5f8060408385031215611454575f80fd5b61145d83611406565b9150602083013561146d8161142e565b809150509250929050565b5f60208284031215611488575f80fd5b61074382611406565b838152826020820152606060408201525f610901606083018461125b565b5f80604083850312156114c0575f80fd5b6114c983611406565b946020939093013593505050565b5f80604083850312156114e8575f80fd5b823591506020830135801515811461146d575f80fd5b5f835161150f818460208801611239565b835190830190611523818360208801611239565b01949350505050565b604081525f61153e604083018561125b565b90508260208301529392505050565b5f808585111561155b575f80fd5b83861115611567575f80fd5b5050820193919092039150565b5f815160208301517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808216935060148310156115bb5780818460140360031b1b83161693505b505050919050565b805160208083015191908110156110f6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6020815273ffffffffffffffffffffffffffffffffffffffff8251166020820152602082015160408201525f6040830151606080840152610d15608084018261125b565b5f825161165a818460208701611239565b9190910192915050565b5f60608284031215611674575f80fd5b6040516060810181811067ffffffffffffffff82111715611697576116976112cd565b60405282516116a58161142e565b815260208301516116b58161142e565b602082015260408301516116c88161142e565b60408201529392505050565b80356020831015610746577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8260070b8260070b028060070b915080821461175c5761175c611710565b5092915050565b600181815b808511156117bc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156117a2576117a2611710565b808516156117af57918102915b93841c9390800290611768565b509250929050565b5f826117d257506001610746565b816117de57505f610746565b81600181146117f457600281146117fe5761181a565b6001915050610746565b60ff84111561180f5761180f611710565b50506001821b610746565b5060208310610133831016604e8410600b841016171561183d575081810a610746565b6118478383611763565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561187957611879611710565b029392505050565b5f61074367ffffffffffffffff8416836117c4565b808202811582820484141761074657610746611710565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826118e8576118e86118ad565b500690565b8181038181111561074657610746611710565b8082018082111561074657610746611710565b5f82611921576119216118ad565b50049056fea2646970667358221220e242f388039aaf936317a7762f3a92beb458f4960c8b06da6a97bfc4cfd97ac664736f6c63430008160033","sourceMap":"731:10908: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:84;;2441:134:1;;;640:51:84;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:10908;;14:177:84;93:13;;-1:-1:-1;;;;;135:31:84;;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:84:o;:::-;731:10908:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405260043610610183575f3560e01c806381e8dcb4116100d1578063bc963bc71161007c578063f6e6b24011610057578063f6e6b24014610661578063f9716faf146106b9578063fc0c546a14610704575f80fd5b8063bc963bc714610619578063d00b1ad51461062e578063ebaeefd614610642575f80fd5b80639b5215f6116100ac5780639b5215f614610548578063aae12e461461057b578063ba87267914610604575f80fd5b806381e8dcb4146104e65780638483bc00146105055780639180b7441461051a575f80fd5b80634bd162df116101315780635e280f111161010c5780635e280f11146103f6578063765008a1146104295780637ecd9ac3146104bf575f80fd5b80634bd162df1461034f5780635241b4961461039d5780635b9a2373146103e1575f80fd5b806320d9af9a1161016157806320d9af9a1461021657806322dbe29c146102395780632d0e315c14610281575f80fd5b806303be2050146101875780630d1995e0146101bc5780631f8164d914610202575b5f80fd5b348015610192575f80fd5b506101a66101a13660046111cd565b610737565b6040516101b391906112a4565b60405180910390f35b3480156101c7575f80fd5b506101a66040518060400160405280600381526020017d06000000000000000000000000000000000000000000000000000000000081525081565b34801561020d575f80fd5b506101a661074c565b348015610221575f80fd5b5061022b6103e681565b6040519081526020016101b3565b348015610244575f80fd5b506101a66040518060400160405280600181526020017f010000000000000000000000000000000000000000000000000000000000000081525081565b34801561028c575f80fd5b5061030a604080516060810182525f8082526020820181905291810191909152506040805160608101825260015473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff16602082015260025460070b9181019190915290565b60408051825173ffffffffffffffffffffffffffffffffffffffff16815260208084015167ffffffffffffffff16908201529181015160070b908201526060016101b3565b34801561035a575f80fd5b506103846103693660046112b6565b5f6020819052908152604090205467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101b3565b3480156103a8575f80fd5b506103bc6103b7366004611349565b6107d0565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b3565b3480156103ec575f80fd5b5061022b6103e781565b348015610401575f80fd5b506103bc7f000000000000000000000000000000000000000000000000000000000000000081565b348015610434575f80fd5b506001546002546104819173ffffffffffffffffffffffffffffffffffffffff8116917401000000000000000000000000000000000000000090910467ffffffffffffffff169060070b83565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845267ffffffffffffffff909216602084015260070b908201526060016101b3565b3480156104ca575f80fd5b506103bc73333333333333333333333333333333333333333381565b3480156104f1575f80fd5b50610384610500366004611443565b61090a565b610518610513366004611478565b610915565b005b348015610525575f80fd5b506105396105343660046111cd565b610a32565b6040516101b393929190611491565b348015610553575f80fd5b506103bc7f000000000000000000000000000000000000000000000000000000000000000081565b348015610586575f80fd5b5061030a604080516060810182525f8082526020820181905291810191909152506040805160608101825260035473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff16602082015260045460070b9181019190915290565b34801561060f575f80fd5b506103bc61080181565b348015610624575f80fd5b5061038461045181565b348015610639575f80fd5b50610384609681565b34801561064d575f80fd5b5061051861065c3660046114af565b610a6a565b34801561066c575f80fd5b506003546004546104819173ffffffffffffffffffffffffffffffffffffffff8116917401000000000000000000000000000000000000000090910467ffffffffffffffff169060070b83565b3480156106c4575f80fd5b506106d86106d33660046114d7565b610b0f565b6040805182518152602080840151908201529181015167ffffffffffffffff16908201526060016101b3565b34801561070f575f80fd5b506103bc7f000000000000000000000000000000000000000000000000000000000000000081565b60606107438383610c45565b90505b92915050565b604080518082018252600181527f010000000000000000000000000000000000000000000000000000000000000060208083019190915282518084018452600381527d0600000000000000000000000000000000000000000000000000000000008183015292516107be9391016114fe565b60405160208183030381529060405281565b5f806107db84610c8f565b90505f6107e786610cba565b905073ffffffffffffffffffffffffffffffffffffffff81166109015785516040515f917f09b34731000000000000000000000000000000000000000000000000000000009161083b918a9160240161152c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290506108c5818487610d1d565b6040517f4f9520330000000000000000000000000000000000000000000000000000000081526004016108f891906112a4565b60405180910390fd5b95945050505050565b5f6107438383610d78565b333014610950576040517f5950c85e0000000000000000000000000000000000000000000000000000000081523360048201526024016108f8565b5f34118015610974575073ffffffffffffffffffffffffffffffffffffffff811615155b15610a2f575f8173ffffffffffffffffffffffffffffffffffffffff16346040515f6040518083038185875af1925050503d805f81146109cf576040519150601f19603f3d011682016040523d82523d5f602084013e6109d4565b606091505b5050905080610a2d576040517fc8ee485e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201523460248201526044016108f8565b505b50565b5f8060605f610a418686610e8c565b90505f610a4e8787610ea4565b90505f610a5b8888610eb3565b92989197509195509350505050565b333014610aa5576040517f5950c85e0000000000000000000000000000000000000000000000000000000081523360048201526024016108f8565b5f81118015610ac9575073ffffffffffffffffffffffffffffffffffffffff821615155b15610a2d57610a2d73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168383610ec2565b610b3a60405180606001604052805f81526020015f81526020015f67ffffffffffffffff1681525090565b604080516060810182525f80825260208201819052918101829052908315610bcd576040805160608101825260015473ffffffffffffffffffffffffffffffffffffffff81168083527401000000000000000000000000000000000000000090910467ffffffffffffffff166020830181905260025460070b93830193909352909350610bc691610d78565b9050610c3a565b6040805160608101825260035473ffffffffffffffffffffffffffffffffffffffff81168083527401000000000000000000000000000000000000000090910467ffffffffffffffff166020830181905260045460070b93830193909352909350610c3791610d78565b90505b610901858284610f54565b6060610c54826044818661154d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b5f8173ffffffffffffffffffffffffffffffffffffffff8111610cb25792915050565b505f92915050565b80515f907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec8101610cf857610cee83611574565b60601c9392505050565b60208103610cb2575f610d0a846115c3565b9050610d1581610c8f565b949350505050565b606060405180606001604052808473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200185815250604051602001610d609190611605565b60405160208183030381529060405290509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602082015267ffffffffffffffff8316818301528151808203830181526060918201928390525f9283929161080191610dcc9190611649565b5f60405180830381855afa9150503d805f8114610e04576040519150601f19603f3d011682016040523d82523d5f602084013e610e09565b606091505b50909250905081610e6e576040517fa91ed72100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8616600482015267ffffffffffffffff851660248201526044016108f8565b80806020019051810190610e829190611664565b5195945050505050565b5f610e9b602c600c848661154d565b610743916116d4565b5f610e9b604c602c848661154d565b6060610c5482604c818661154d565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610f4f90849061102f565b505050565b610f7f60405180606001604052805f81526020015f81526020015f67ffffffffffffffff1681525090565b5f805f80610f958767ffffffffffffffff6110d4565b90505f866040015160070b1315610fc157610fb5888288604001516110fc565b91955093509150611003565b610ffb888288604001517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ff6919061173d565b611175565b919550935091505b5060408051606081018252938452602084019290925267ffffffffffffffff1690820152949350505050565b5f8060205f8451602086015f885af18061104e576040513d5f823e3d81fd5b50505f513d9150811561106557806001141561107f565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156110ce576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016108f8565b50505050565b5f8167ffffffffffffffff168367ffffffffffffffff16116110f65782610743565b50919050565b5f80808061110b85600a611881565b90505f6111228267ffffffffffffffff8916611896565b905061112e82896118da565b935061113a84896118ed565b975061114688826111bf565b945061115285896118ed565b61115c9085611900565b93506111688286611913565b9250505093509350939050565b5f80808061118485600a611881565b90505f61119b8267ffffffffffffffff8916611913565b90506111a788826111bf565b94506111b385896118ed565b93506111688286611896565b5f8183116110f65782610743565b5f80602083850312156111de575f80fd5b823567ffffffffffffffff808211156111f5575f80fd5b818501915085601f830112611208575f80fd5b813581811115611216575f80fd5b866020828501011115611227575f80fd5b60209290920196919550909350505050565b5f5b8381101561125357818101518382015260200161123b565b50505f910152565b5f8151808452611272816020860160208601611239565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f610743602083018461125b565b5f602082840312156112c6575f80fd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611341576113416112cd565b604052919050565b5f805f6060848603121561135b575f80fd5b833567ffffffffffffffff80821115611372575f80fd5b818601915086601f830112611385575f80fd5b8135602082821115611399576113996112cd565b6113c9817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f850116016112fa565b925081835288818386010111156113de575f80fd5b81818501828501375f9183018101919091529097908601359650604090950135949350505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611429575f80fd5b919050565b67ffffffffffffffff81168114610a2f575f80fd5b5f8060408385031215611454575f80fd5b61145d83611406565b9150602083013561146d8161142e565b809150509250929050565b5f60208284031215611488575f80fd5b61074382611406565b838152826020820152606060408201525f610901606083018461125b565b5f80604083850312156114c0575f80fd5b6114c983611406565b946020939093013593505050565b5f80604083850312156114e8575f80fd5b823591506020830135801515811461146d575f80fd5b5f835161150f818460208801611239565b835190830190611523818360208801611239565b01949350505050565b604081525f61153e604083018561125b565b90508260208301529392505050565b5f808585111561155b575f80fd5b83861115611567575f80fd5b5050820193919092039150565b5f815160208301517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808216935060148310156115bb5780818460140360031b1b83161693505b505050919050565b805160208083015191908110156110f6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6020815273ffffffffffffffffffffffffffffffffffffffff8251166020820152602082015160408201525f6040830151606080840152610d15608084018261125b565b5f825161165a818460208701611239565b9190910192915050565b5f60608284031215611674575f80fd5b6040516060810181811067ffffffffffffffff82111715611697576116976112cd565b60405282516116a58161142e565b815260208301516116b58161142e565b602082015260408301516116c88161142e565b60408201529392505050565b80356020831015610746577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8260070b8260070b028060070b915080821461175c5761175c611710565b5092915050565b600181815b808511156117bc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156117a2576117a2611710565b808516156117af57918102915b93841c9390800290611768565b509250929050565b5f826117d257506001610746565b816117de57505f610746565b81600181146117f457600281146117fe5761181a565b6001915050610746565b60ff84111561180f5761180f611710565b50506001821b610746565b5060208310610133831016604e8410600b841016171561183d575081810a610746565b6118478383611763565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561187957611879611710565b029392505050565b5f61074367ffffffffffffffff8416836117c4565b808202811582820484141761074657610746611710565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826118e8576118e86118ad565b500690565b8181038181111561074657610746611710565b8082018082111561074657610746611710565b5f82611921576119216118ad565b50049056fea2646970667358221220e242f388039aaf936317a7762f3a92beb458f4960c8b06da6a97bfc4cfd97ac664736f6c63430008160033","sourceMap":"731:10908:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11504:133;;;;;;;;;;-1:-1:-1;11504:133:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1235:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1296:99;;;;;;;;;;;;;:::i;1701:51::-;;;;;;;;;;;;1749:3;1701:51;;;;;1567:25:84;;;1555:2;1540:18;1701:51:1;1421:177:84;1178:51:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10906:98;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;10982:15:1;;;;;;;;10989:8;10982:15;;;;;;;;;;;;;;;;;;;;;;;;;;;10906:98;;;;;1829:13:84;;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;10906:98:1;1603:457:84;2102:52:1;;;;;;;;;;-1:-1:-1;2102:52:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;2424:18:84;2412:31;;;2394:50;;2382:2;2367:18;2102:52:1;2250:200:84;3636:1090:1;;;;;;;;;;-1:-1:-1;3636:1090:1;;;;;:::i;:::-;;:::i;:::-;;;4124:42:84;4112:55;;;4094:74;;4082:2;4067:18;3636:1090:1;3948:226:84;1758:51:1;;;;;;;;;;;;1806:3;1758:51;;2161:33;;;;;;;;;;;;;;;2268:27;;;;;;;;;;-1:-1:-1;2268:27:1;;;;;;;;;;;;;;;;;;;;;;;;;4405:42:84;4393:55;;;4375:74;;4497:18;4485:31;;;4480:2;4465:18;;4458:59;4564:1;4553:21;4533:18;;;4526:49;4363:2;4348:18;2268:27:1;4179:402:84;1416:84:1;;;;;;;;;;;;1458:42;1416:84;;6006:151;;;;;;;;;;-1:-1:-1;6006:151:1;;;;;:::i;:::-;;:::i;10504:396::-;;;;;;:::i;:::-;;:::i;:::-;;2898:732;;;;;;;;;;-1:-1:-1;2898:732:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;2201:25::-;;;;;;;;;;;;;;;11010:100;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;11087:16:1;;;;;;;;11094:9;11087:16;;;;;;;;;;;;;;;;;;;;;;;;;;;11010:100;1506:101;;;;;;;;;;;;1565:42;1506:101;;1909:48;;;;;;;;;;;;1953:4;1909:48;;2048:47;;;;;;;;;;;;2092:3;2048:47;;9450:217;;;;;;;;;;-1:-1:-1;9450:217:1;;;;;:::i;:::-;;:::i;2301:28::-;;;;;;;;;;-1:-1:-1;2301:28:1;;;;;;;;;;;;;;;;;;;;;5141:604;;;;;;;;;;-1:-1:-1;5141:604:1;;;;;:::i;:::-;;:::i;:::-;;;;6883:13:84;;6865:32;;6953:4;6941:17;;;6935:24;6913:20;;;6906:54;7008:17;;;7002:24;7028:18;6998:49;6976:20;;;6969:79;6853:2;6838:18;5141:604:1;6649:405:84;2232:29:1;;;;;;;;;;;;;;;11504:133;11573:12;11604:26;:4;;:24;:26::i;:::-;11597:33;;11504:133;;;;;:::o;1296:99::-;1354:19;;;;;;;;;;;;;;;;;;;;1375;;;;;;;;;;;;;;;1337:58;;;;1375:19;1337:58;;:::i;:::-;;;;;;;;;;;;;1296:99;:::o;3636:1090::-;3799:7;3997:14;4014:40;:14;:38;:40::i;:::-;3997:57;;4064:16;4083:40;:14;:38;:40::i;:::-;4064:59;-1:-1:-1;4303:22:1;;;4299:395;;4546:21;;4363:218;;4341:19;;4403:93;;4363:218;;4514:14;;4363:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4638:44:1;4363:218;4664:6;4672:9;4638:25;:44::i;:::-;4602:81;;;;;;;;;;;:::i;:::-;;;;;;;;4299:395;4711:8;3636:1090;-1:-1:-1;;;;;3636:1090:1:o;6006:151::-;6089:6;6114:36;6134:5;6141:8;6114:19;:36::i;10504:396::-;1012:10;1034:4;1012:27;1008:147;;1062:82;;;;;1133:10;1062:82;;;4094:74:84;4067:18;;1062:82:1;3948:226:84;1008:147:1;10612:1:::1;10600:9;:13;:45;;;;-1:-1:-1::0;10617:28:1::1;::::0;::::1;::::0;::::1;10600:45;10596:298;;;10662:12;10680:14;:19;;10708:9;10680:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10661:62;;;10742:7;10737:147;;10776:93;::::0;::::1;::::0;;8510:42:84;8498:55;;10776:93:1::1;::::0;::::1;8480:74:84::0;10859:9:1::1;8570:18:84::0;;;8563:34;8453:18;;10776:93:1::1;8306:297:84::0;10737:147:1::1;10647:247;10596:298;10504:396:::0;:::o;2898:732::-;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:26;3514:46;3544:15;;3514:29;:46::i;:::-;3579:8;;3589:18;;-1:-1:-1;3579:8:1;;-1:-1:-1;2898:732:1;-1:-1:-1;;;;2898:732:1:o;9450:217::-;1012:10;1034:4;1012:27;1008:147;;1062:82;;;;;1133:10;1062:82;;;4094:74:84;4067:18;;1062:82:1;3948:226:84;1008:147:1;9558:1:::1;9548:7;:11;:43;;;;-1:-1:-1::0;9563:28:1::1;::::0;::::1;::::0;::::1;9548:43;9544:117;;;9607:43;:18;:5;:18;9626:14:::0;9642:7;9607:18:::1;:43::i;5141:604::-:0;5222:24;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;5222:24:1;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;5334:325:1;;;;5360:16;;;;;;;;5368:8;5360:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5417:70:1;;:19;:70::i;:::-;5390:97;;5334:325;;;5518:17;;;;;;;;5526:9;5518:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5576:72:1;;:19;:72::i;:::-;5549:99;;5334:325;5676:62;:7;5706:24;5732:5;5676:29;:62::i;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;8217:302::-;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;6418:480:1:-;6635:27;;;6591:43;10448:55:84;;6635:27:1;;;10430:74:84;10552:18;10540:31;;10520:18;;;10513:59;6635:27:1;;;;;;;;;6542:19;10403:18:84;;;6635:27:1;;;;-1:-1:-1;;;;6542:19:1;1565:42;;6591:72;;6635:27;6591:72;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6571:92:1;;-1:-1:-1;6571:92:1;-1:-1:-1;6571:92:1;6673:136;;6708:90;;;;;10460:42:84;10448:55;;6708:90:1;;;10430:74:84;10552:18;10540:31;;10520:18;;;10513:59;10403:18;;6708:90:1;10258:320:84;6673:136:1;6836:6;6825:60;;;;;;;;;;;;:::i;:::-;:66;;6418:480;-1:-1:-1;;;;;6418: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;1271:160:69:-;1380:43;;;1395:14;8498:55:84;;1380:43:69;;;8480:74:84;8570:18;;;;8563:34;;;1380:43:69;;;;;;;;;;8453:18:84;;;;1380:43:69;;;;;;;;;;;;;;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:69:-;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:69;8278:8;8234:16;;-1:-1:-1;8310:15:69;;:68;;8362:11;8377:1;8362:16;;8310:68;;;8328:26;;;;:31;8310:68;8306:146;;;8401:40;;;;;4124:42:84;4112:55;;8401:40:69;;;4094:74:84;4067:18;;8401:40:69;3948:226:84;8306:146:69;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:84;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:84;;-1:-1:-1;;;;14:591:84: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:84;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:84: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:84;;2065:180;-1:-1:-1;2065:180:84:o;2455:184::-;2507:77;2504:1;2497:88;2604:4;2601:1;2594:15;2628:4;2625:1;2618:15;2644:334;2715:2;2709:9;2771:2;2761:13;;2776:66;2757:86;2745:99;;2874:18;2859:34;;2895:22;;;2856:62;2853:88;;;2921:18;;:::i;:::-;2957:2;2950:22;2644:334;;-1:-1:-1;2644:334:84:o;2983:960::-;3069:6;3077;3085;3138:2;3126:9;3117:7;3113:23;3109:32;3106:52;;;3154:1;3151;3144:12;3106:52;3194:9;3181:23;3223:18;3264:2;3256:6;3253:14;3250:34;;;3280:1;3277;3270:12;3250:34;3318:6;3307:9;3303:22;3293:32;;3363:7;3356:4;3352:2;3348:13;3344:27;3334:55;;3385:1;3382;3375:12;3334:55;3421:2;3408:16;3443:4;3466:2;3462;3459:10;3456:36;;;3472:18;;:::i;:::-;3514:112;3622:2;3553:66;3546:4;3542:2;3538:13;3534:86;3530:95;3514:112;:::i;:::-;3501:125;;3649:2;3642:5;3635:17;3689:7;3684:2;3679;3675;3671:11;3667:20;3664:33;3661:53;;;3710:1;3707;3700:12;3661:53;3765:2;3760;3756;3752:11;3747:2;3740:5;3736:14;3723:45;3809:1;3788:14;;;3784:23;;3777:34;;;;3792:5;;3867:18;;;3854:32;;-1:-1:-1;3933:2:84;3918:18;;;3905:32;;2983:960;-1:-1:-1;;;;2983:960:84:o;4586:196::-;4654:20;;4714:42;4703:54;;4693:65;;4683:93;;4772:1;4769;4762:12;4683:93;4586:196;;;:::o;4787:129::-;4872:18;4865:5;4861:30;4854:5;4851:41;4841:69;;4906:1;4903;4896:12;4921:319;4988:6;4996;5049:2;5037:9;5028:7;5024:23;5020:32;5017:52;;;5065:1;5062;5055:12;5017:52;5088:29;5107:9;5088:29;:::i;:::-;5078:39;;5167:2;5156:9;5152:18;5139:32;5180:30;5204:5;5180:30;:::i;:::-;5229:5;5219:15;;;4921:319;;;;;:::o;5245:186::-;5304:6;5357:2;5345:9;5336:7;5332:23;5328:32;5325:52;;;5373:1;5370;5363:12;5325:52;5396:29;5415:9;5396:29;:::i;5436:359::-;5639:6;5628:9;5621:25;5682:6;5677:2;5666:9;5662:18;5655:34;5725:2;5720;5709:9;5705:18;5698:30;5602:4;5745:44;5785:2;5774:9;5770:18;5762:6;5745:44;:::i;6044:254::-;6112:6;6120;6173:2;6161:9;6152:7;6148:23;6144:32;6141:52;;;6189:1;6186;6179:12;6141:52;6212:29;6231:9;6212:29;:::i;:::-;6202:39;6288:2;6273:18;;;;6260:32;;-1:-1:-1;;;6044:254:84:o;6303:341::-;6368:6;6376;6429:2;6417:9;6408:7;6404:23;6400:32;6397:52;;;6445:1;6442;6435:12;6397:52;6481:9;6468:23;6458:33;;6541:2;6530:9;6526:18;6513:32;6588:5;6581:13;6574:21;6567:5;6564:32;6554:60;;6610:1;6607;6600:12;7306:492;7481:3;7519:6;7513:13;7535:66;7594:6;7589:3;7582:4;7574:6;7570:17;7535:66;:::i;:::-;7664:13;;7623:16;;;;7686:70;7664:13;7623:16;7733:4;7721:17;;7686:70;:::i;:::-;7772:20;;7306:492;-1:-1:-1;;;;7306:492:84:o;7803:288::-;7978:2;7967:9;7960:21;7941:4;7998:44;8038:2;8027:9;8023:18;8015:6;7998:44;:::i;:::-;7990:52;;8078:6;8073:2;8062:9;8058:18;8051:34;7803:288;;;;;:::o;8608:331::-;8713:9;8724;8766:8;8754:10;8751:24;8748:44;;;8788:1;8785;8778:12;8748:44;8817:6;8807:8;8804:20;8801:40;;;8837:1;8834;8827:12;8801:40;-1:-1:-1;;8863:23:84;;;8908:25;;;;;-1:-1:-1;8608:331:84:o;8944:410::-;9028:5;9068;9062:12;9110:4;9103:5;9099:16;9093:23;9135:66;9227:2;9223;9219:11;9210:20;;9253:2;9245:6;9242:14;9239:109;;;9335:2;9329;9319:6;9315:2;9311:15;9308:1;9304:23;9300:32;9296:2;9292:41;9288:50;9279:59;;9239:109;;;;8944:410;;;:::o;9359:357::-;9477:12;;9524:4;9513:16;;;9507:23;;9477:12;9542:16;;9539:171;;;9632:66;9616:4;9612:17;;;;9609:1;9605:25;9601:98;9590:110;;9359:357;-1:-1:-1;9359:357:84:o;9721:532::-;9924:2;9913:9;9906:21;9982:42;9973:6;9967:13;9963:62;9958:2;9947:9;9943:18;9936:90;10080:2;10072:6;10068:15;10062:22;10057:2;10046:9;10042:18;10035:50;9887:4;10132:2;10124:6;10120:15;10114:22;10174:4;10167;10156:9;10152:20;10145:34;10196:51;10242:3;10231:9;10227:19;10213:12;10196:51;:::i;10583:287::-;10712:3;10750:6;10744:13;10766:66;10825:6;10820:3;10813:4;10805:6;10801:17;10766:66;:::i;:::-;10848:16;;;;;10583:287;-1:-1:-1;;10583:287:84:o;10875:774::-;10974:6;11027:2;11015:9;11006:7;11002:23;10998:32;10995:52;;;11043:1;11040;11033:12;10995:52;11076:2;11070:9;11118:2;11110:6;11106:15;11187:6;11175:10;11172:22;11151:18;11139:10;11136:34;11133:62;11130:88;;;11198:18;;:::i;:::-;11234:2;11227:22;11271:16;;11296:30;11271:16;11296:30;:::i;:::-;11335:21;;11401:2;11386:18;;11380:25;11414:32;11380:25;11414:32;:::i;:::-;11474:2;11462:15;;11455:32;11532:2;11517:18;;11511:25;11545:32;11511:25;11545:32;:::i;:::-;11605:2;11593:15;;11586:32;11597:6;10875:774;-1:-1:-1;;;10875:774:84:o;11654:315::-;11774:19;;11813:2;11805:11;;11802:161;;;11885:66;11874:2;11870:12;;;11867:1;11863:20;11859:93;11848:105;11654:315;;;;:::o;11974:184::-;12026:77;12023:1;12016:88;12123:4;12120:1;12113:15;12147:4;12144:1;12137:15;12163:237;12201:7;12278:1;12275;12264:16;12260:1;12257;12246:16;12242:39;12315:11;12312:1;12301:26;12290:37;;12358:11;12349:7;12346:24;12336:58;;12374:18;;:::i;:::-;12336:58;12163:237;;;;:::o;12405:476::-;12494:1;12531:5;12494:1;12545:330;12566:7;12556:8;12553:21;12545:330;;;12685:4;12617:66;12613:77;12607:4;12604:87;12601:113;;;12694:18;;:::i;:::-;12744:7;12734:8;12730:22;12727:55;;;12764:16;;;;12727:55;12843:22;;;;12803:15;;;;12545:330;;;12549:3;12405:476;;;;;:::o;12886:866::-;12935:5;12965:8;12955:80;;-1:-1:-1;13006:1:84;13020:5;;12955:80;13054:4;13044:76;;-1:-1:-1;13091:1:84;13105:5;;13044:76;13136:4;13154:1;13149:59;;;;13222:1;13217:130;;;;13129:218;;13149:59;13179:1;13170:10;;13193:5;;;13217:130;13254:3;13244:8;13241:17;13238:43;;;13261:18;;:::i;:::-;-1:-1:-1;;13317:1:84;13303:16;;13332:5;;13129:218;;13431:2;