0 txs
0 calls
constructor
constructor(address addressProvider, address _pool, address _orderManager, address _positionManager, address _feeCollector, uint256 _maxTimeDelay)
functions
ADDRESS_PROVIDER
viewfunction ADDRESS_PROVIDER() view returns (address)
executor
viewfunction executor() view returns (address)
feeCollector
viewfunction feeCollector() view returns (address)
maxTimeDelay
viewfunction maxTimeDelay() view returns (uint256)
orderManager
viewfunction orderManager() view returns (address)
pool
viewfunction pool() view returns (address)
positionManager
viewfunction positionManager() view returns (address)
executeADLAndDecreaseOrders
nonpayablefunction executeADLAndDecreaseOrders(address keeper, uint256 pairIndex, tuple[] executePositions, tuple[] executeOrders)
executeDecreaseOrder
nonpayablefunction executeDecreaseOrder(address keeper, uint256 _orderId, uint8 _tradeType, uint8 tier, uint256 referralsRatio, uint256 referralUserRatio, address referralOwner, bool isSystem, uint256 executionSize, bool onlyOnce)
executeDecreaseOrders
nonpayablefunction executeDecreaseOrders(address keeper, tuple[] orders, uint8 tradeType)
executeIncreaseOrder
nonpayablefunction executeIncreaseOrder(address keeper, uint256 _orderId, uint8 _tradeType, uint8 tier, uint256 referralsRatio, uint256 referralUserRatio, address referralOwner)
executeIncreaseOrders
nonpayablefunction executeIncreaseOrders(address keeper, tuple[] orders, uint8 tradeType)
updateExecutor
nonpayablefunction updateExecutor(address _executor)
updateMaxTimeDelay
nonpayablefunction updateMaxTimeDelay(uint256 newMaxTimeDelay)
events
ExecuteAdlOrder
event ExecuteAdlOrder(uint256[] adlOrderIds, bytes32[] adlPositionKeys, uint256[] orders)
ExecuteDecreaseOrder
event ExecuteDecreaseOrder(address account, uint256 orderId, uint256 pairIndex, uint8 tradeType, bool isLong, int256 collateral, uint256 orderSize, uint256 orderPrice, uint256 executionSize, uint256 executionPrice, uint256 executedSize, bool needADL, int256 pnl, uint256 tradingFee, int256 fundingFee, uint8 paymentType, uint256 networkFeeAmount)
ExecuteIncreaseOrder
event ExecuteIncreaseOrder(address account, uint256 orderId, uint256 pairIndex, uint8 tradeType, bool isLong, int256 collateral, uint256 orderSize, uint256 orderPrice, uint256 executionSize, uint256 executionPrice, uint256 executedSize, uint256 tradingFee, int256 fundingFee, uint8 paymentType, uint256 networkFeeAmount)
ExecuteOrderError
event ExecuteOrderError(uint256 orderId, string errorMessage)
ExecutePositionError
event ExecutePositionError(bytes32 positionKey, string errorMessage)
InvalidOrder
event InvalidOrder(address sender, uint256 orderId, string message)
UpdateExecutorAddress
event UpdateExecutorAddress(address sender, address oldAddress, address newAddress)
UpdateMaxTimeDelay
event UpdateMaxTimeDelay(uint256 oldDelay, uint256 newDelay)
ZeroPosition
event ZeroPosition(address sender, address account, uint256 pairIndex, bool isLong, string message)
errors
No errors.
creation bytecode
0x61012034620002e257601f6200607538819003918201601f19168301916001600160401b03831184841017620002e75780849260c094604052833981010312620002e25780516001600160a01b03918282168203620002e25760208101518381168103620002e2576040820151908482168203620002e2576060830151928584168403620002e25760808101519586168603620002e25760a001519360805260a05260c05260e052610100918252600055604051615d779182620002fe83396080518281816101c40152818161059801528181610999015281816118b60152818161226b0152613996015260a0518281816108f90152818161094d015281816118f8015281816121b70152818161221901528181612424015281816138390152613922015260c05182818160d00152818161044d015281816107f901528181610ae401528181611198015281816116ba015281816117300152818161211b015281816127220152818161278701528181612968015281816129ba01528181612a0c01528181612a5701528181612ba701528181612bf201528181612e9d01528181612f1501528181613381015281816133fe015281816137ad01528181613d2101528181613d8a01528181613fec0152818161405d015281816140e1015281816142ed015281816143490152818161438b015281816143d9015281816144f00152818161453e01528181614590015281816145de01528181614756015281816147bb01528181614a0601528181614a7701528181614af80152614b75015260e05182818161053301528181610a0501528181610b9a01528181610ee30152818161143101528181612321015281816123a00152818161247a01528181612573015281816126c20152818161320c015281816138be01528181613a6a01528181613b0101528181613cc30152613e060152518181816101380152818161260801528181612aa901528181612afd01528181613bc40152818161442301526144820152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe61018080604052600436101561001457600080fd5b60003560e01c90816316f0115b146118e5575080631848effa146118a05780632980be901461182d5780633cb5149e1461179c5780635b81c5b6146115675780635d3cfccc146106f557806374936c1614610562578063791b98bc1461051d578063bb02ec9b14610307578063be39f3aa14610190578063c34c08e514610167578063c415b95c14610122578063cb0269c9146101045763f9b6117f146100ba57600080fd5b346100ff5760003660031901126100ff576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b600080fd5b346100ff5760003660031901126100ff576020600054604051908152f35b346100ff5760003660031901126100ff576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346100ff5760003660031901126100ff576001546040516001600160a01b039091168152602090f35b346100ff576020806003193601126100ff5760405162435da560e01b81526004803592916001600160a01b039183908290817f000000000000000000000000000000000000000000000000000000000000000086165afa80156102c55783916000916102d1575b50602460405180948193637be53ca160e01b8352336004840152165afa9081156102c557600091610264575b7fc4f93ed7d82b431d36b3c7670e42f8d5d8f19375008e1ab63c1f63c52e5c3f346040848661025186611bb7565b60005491816000558351928352820152a1005b9180915082813d83116102be575b61027c8183611a37565b810103126100ff577fc4f93ed7d82b431d36b3c7670e42f8d5d8f19375008e1ab63c1f63c52e5c3f34926102516102b4604094611baa565b9293505092610223565b503d610272565b6040513d6000823e3d90fd5b82819392503d8311610300575b6102e88183611a37565b810103126100ff576102fa8391611b96565b856101f7565b503d6102de565b346100ff5761031536611b47565b909160018060a01b0390600180948382541633148015610514575b61033990611be9565b6000915b61034357005b8051821015610512576103568282611c3f565b5180519060ff606082015116916080928383015160a0840151928960c0860151169060048c10156104fc57303b156100ff576103b18a8d938f976000966040519889978897631e5a8a4f60e11b895281159660048a016135a8565b038183305af190816104ed575b506104e057916103cc611c76565b6308c379a0146103ed575b50506102c5576103e78692611c1a565b9161033d565b6103f5611c94565b9182610402575b506103d7565b909192506000927f15079dd10bd9f21e9620eb4eb2f936987e6442faa3440ed3eaa88396f8104743825160405190815260406020820152806104476040820185611d05565b0390a1877f000000000000000000000000000000000000000000000000000000000000000016915191803b156100ff5789600080946104bb6104a6956040519889978896879563ecd1bbcb60e01b875260048701526024860190611c69565b84604485015260648401526084830190611d05565b03925af180156102c5576104d1575b80806103fc565b6104da90611985565b876104ca565b9390506103e79150611c1a565b6104f690611985565b8a6103be565b634e487b7160e01b600052602160045260246000fd5b005b50333014610330565b346100ff5760003660031901126100ff576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346100ff576020806003193601126100ff5761057c611927565b60405162435da560e01b81526001600160a01b039083816004817f000000000000000000000000000000000000000000000000000000000000000086165afa9081156102c557829185916000916106be575b50602460405180948193637be53ca160e01b8352336004840152165afa9081156102c55760009161065b575b7f49aef47427a17b78024aa06f13d2c150bd483250f907caf46db8d81ef2331734606085858861062987611bb7565b81600154931691826bffffffffffffffffffffffff60a01b8516176001556040519333855216908301526040820152a1005b929190508383813d83116106b7575b6106748183611a37565b810103126100ff577f49aef47427a17b78024aa06f13d2c150bd483250f907caf46db8d81ef2331734936106296106ac606095611baa565b9293945050936105fa565b503d61066a565b92505081813d83116106ee575b6106d58183611a37565b810103126100ff57836106e88392611b96565b866105ce565b503d6106cb565b346100ff5760803660031901126100ff5761070e611927565b6044356001600160401b038082116100ff57366023830112156100ff57816004013561073981611a58565b926107476040519485611a37565b818452602460c0602086019302820101903682116100ff57602401915b8183106114ff575050506064359081116100ff57610786903690600401611a6f565b9160018060a01b0360015416331480156114f6575b6107a490611be9565b6000928391825b82518610156108d1576107be8684611c3f565b516020815191015160048110156104fc576107f090604051926340b4605b60e11b845260048401526024830190611c69565b6101e0816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156102c55760009161089f575b50610844602435604083015114614c62565b6101208101511561087c576108769161086a8260e060c061087095015191015190611fab565b90611dc0565b95611c1a565b946107ab565b61087691969461086a8260e060c061089995015191015190611fab565b93611c1a565b6108c391506101e03d6101e0116108ca575b6108bb8183611a37565b810190613607565b5087610832565b503d6108b1565b9284906040516330a66e1560e01b815260243560048201526101008160248160018060a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156102c5576000916114c5575b50604051632f7ce47360e21b8152602480356004830152909190610160908390817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156102c5576109bd92600091611494575b50602001516001600160a01b03167f0000000000000000000000000000000000000000000000000000000000000000614d1a565b946000828211156113e35750906109d391611fab565b60408051630a899e9f60e21b8152602480356004830152600190820152604481019290925260648201869052816084817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156102c5576000916113c2575b50925b610a4b8251614ca3565b93825192610a5884611a58565b93610a666040519586611a37565b808552610a75601f1991611a58565b0136602086013781610e68575b5050610a8e8151614ca3565b9160005b8251811015610de157610aa58184611c3f565b5190815191602081015160048110156104fc57610ad990604051946340b4605b60e11b865260048601526024850190611c69565b6101e09283816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9384156102c557600094610dc1575b5050610b3260c084015160e085015190611fab565b606084015160048110156104fc57600114610d80575b8151610b548489611c3f565b526040848101516101208601518251630a899e9f60e21b815260048101929092521515602482015260448101839052606481018c90529190826084816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9182156102c557600090600093610d4c575b501580610d3f575b15610c7f575050606083519301519260048410156104fc576060820151608083015160a084015160c08501516020909501519094909260ff16906001600160a01b031660048410156104fc57303b156100ff57600095610c4f938d936040519a8b988998631e5a8a4f60e11b8a52159660048a016135a8565b038183305af19182156102c557610c6b92610c70575b50611c1a565b610a92565b610c7990611985565b88610c65565b9091606085519501519260048410156104fc5760ff606083015116610cbc60808401519260a08501519460c060018060a01b039101511695611fab565b94303b156100ff57604051631e5a8a4f60e11b81526001600160a01b038d1660048201526024810198909852610cf6906044890190611c69565b6064870152608486015260a485015260c4840152600160e484015261010483015260006101248301526000826101448183305af19182156102c557610c6b92610c705750611c1a565b5061018085015115610bd6565b9050610d7191925060403d604011610d79575b610d698183611a37565b8101906136df565b91908c610bce565b503d610d5f565b9861012084015115600014610dac5760a08401519080821015610da557505b98610b48565b9050610d9f565b60a08401519080821115610da5575098610b48565b610dd8929450803d106108ca576108bb8183611a37565b50918980610b1d565b508483610df960405192606084526060840190614ce6565b82810360208401526020808551928381520194019060005b818110610e52577f848f1ac058d7c8ba1794a5c4436909ac76b44482b4d716a15bab1aa1748dbec28580610e4d89888382036040850152614ce6565b0390a1005b8251865260209586019590920191600101610e11565b9160009691969493835194610e7c86611a58565b95610e8a6040519788611a37565b808752610e99601f1991611a58565b0160005b81811061135657505060005b855181101561134757898814610ffb57610ec38187611c3f565b518051604051636468402960e11b8152600481019190915260e0816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156102c557600091610fcc575b50610f2e602435602083015114614c62565b608081018051610f3e8c8f611fab565b11610fc55750610f4e8a8d611fab565b915b82610f67575b505050610f6290611c1a565b610ea9565b610f7683610f6295949c611dc0565b9a610f81848c611c3f565b51928352602083015260408181015160ff1690830152606080820151908301526080808201519083015260a0908101516001600160a01b0316910152908b80610f56565b5191610f50565b610fee915060e03d60e011610ff4575b610fe68183611a37565b810190611f23565b8c610f1c565b503d610fdc565b509492975094509491505b60005b815181101561133a5761101c8183611c3f565b5190602082015180611039575b506110349150611c1a565b611009565b8251805160208201516040909201519192911515906001600160a01b03166001600160ff1b0383116112eb57611192938c61014093611079602096614cd5565b9160018060a01b038a51511693604051948886015287855261109a85611a00565b604051956110a7876119e4565b8652878601526000604086015260006060860152608085015260a084015260c0830152600060e0830152600061010083015260006101208301528282015260405193849283926301d8cec960e51b845285600485015260018060a01b03815116602485015285810151604485015261112760408201516064860190611c69565b60608101516084850152608081015160a485015260a0810151151560c485015260c081015160e485015260e0810151610104850152611170610100820151610124860190612048565b6101208101516101448501520151610160610164840152610184830190611d05565b038160007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19081156102c5576000916112b9575b5060ff604084015116926060810151608082015160018060a01b0360a08401511691303b156100ff5760405196631e5a8a4f60e11b885260018060a01b038b166004890152856024890152600060448901526064880152608487015260a486015260c4850152600160e4850152600061010485015260016101248501526000846101448183305af19182156102c55761103494611299936112aa575b506112788488611c3f565b525180516020820151604090920151151591906001600160a01b0316615b17565b6112a38288611c3f565b5288611029565b6112b390611985565b8b61126d565b90506020813d6020116112e3575b816112d460209383611a37565b810103126100ff5751896111d1565b3d91506112c7565b60405162461bcd60e51b815260206004820152602160248201527f56616c756520746f6f206c6172676520746f2066697420696e20696e743235366044820152601760f91b6064820152608490fd5b5050929190918580610a82565b50949297509450949150611006565b602090604051611365816119ae565b6000604051611373816119c9565b8181528185820152816040820152816060818184015281608084015260a09282848201528260c08201528552818786015281604086015284015281608084015282015282828b01015201610e9d565b6113db915060403d604011610d7957610d698183611a37565b905085610a3e565b94918082106113f4575b5050610a41565b6113ff929550611fab565b60408051630a899e9f60e21b8152602480356004830152600090820152604481019290925260648201869052816084817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156102c557600091611473575b509285806113ed565b61148c915060403d604011610d7957610d698183611a37565b90508561146a565b6114b891506101603d610160116114be575b6114b08183611a37565b810190611e09565b88610989565b503d6114a6565b6114e991506101003d610100116114ef575b6114e18183611a37565b810190611eac565b8661092a565b503d6114d7565b5033301461079b565b60c0833603126100ff57602060c09160405161151a816119ae565b85358152828601358382015261153260408701611977565b6040820152606080870135908201526080860135608082015260a0611558818801611953565b90820152815201920191610764565b346100ff5761157536611b47565b909160018060a01b036001541633148015611793575b61159490611be9565b60005b8351811015610512576115aa8185611c3f565b5180516060820151608083015160a084015160c08501516001600160a01b03169290919060ff16303b156100ff576040516302980be960e41b81526001600160a01b03891660048201526024810195909552611609604486018a611c69565b6064850152608484015260a483015260c482015260008160e48183305af19081611784575b5061177a5760019061163e611c76565b6308c379a01461165c575b506102c55761165790611c1a565b611597565b611664611c94565b80611670575b50611649565b9091506000917f15079dd10bd9f21e9620eb4eb2f936987e6442faa3440ed3eaa88396f8104743815160405190815260406020820152806116b46040820186611d05565b0390a1517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b156100ff5761172b91600091604051938492839263ecd1bbcb60e01b84526004840152611713602484018b611c69565b60016044840152608060648401526084830190611d05565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af180156102c55761176b575b8061166a565b61177490611985565b85611765565b5061165790611c1a565b61178d90611985565b8661162e565b5033301461158b565b346100ff576101403660031901126100ff576117b6611927565b60443560048110156100ff576117ca611967565b6117d261193d565b60e4359081151582036100ff57610124359384151585036100ff576105129560018060a01b036001541633148015611824575b61180e90611be9565b610104359460a4359260843592602435906136fc565b50333014611805565b346100ff5760e03660031901126100ff57611846611927565b6044359060048210156100ff576105129161185f611967565b9161186861193d565b9260018060a01b036001541633148015611897575b61188690611be9565b60a43592608435926024359061207f565b5033301461187d565b346100ff5760003660031901126100ff576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346100ff5760003660031901126100ff577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b600435906001600160a01b03821682036100ff57565b60c435906001600160a01b03821682036100ff57565b35906001600160a01b03821682036100ff57565b6064359060ff821682036100ff57565b359060ff821682036100ff57565b6001600160401b03811161199857604052565b634e487b7160e01b600052604160045260246000fd5b60c081019081106001600160401b0382111761199857604052565b60e081019081106001600160401b0382111761199857604052565b61016081019081106001600160401b0382111761199857604052565b604081019081106001600160401b0382111761199857604052565b6101a081019081106001600160401b0382111761199857604052565b90601f801991011681019081106001600160401b0382111761199857604052565b6001600160401b0381116119985760051b60200190565b81601f820112156100ff57803590611a8682611a58565b92604090611a9682519586611a37565b838552602091828601918360e0809702860101948186116100ff578401925b858410611ac6575050505050505090565b86848303126100ff57825190611adb826119c9565b843582528585013560048110156100ff5786830152838501359081151582036100ff57828792868b9501526060611b13818901611977565b908201526080808801359082015260a0808801359082015260c0611b38818901611953565b90820152815201930192611ab5565b9060606003198301126100ff576004356001600160a01b03811681036100ff5791602435906001600160401b0382116100ff57611b8691600401611a6f565b9060443560048110156100ff5790565b51906001600160a01b03821682036100ff57565b519081151582036100ff57565b15611bbe57565b60405162461bcd60e51b81526020600482015260036024820152626f706160e81b6044820152606490fd5b15611bf057565b60405162461bcd60e51b81526020600482015260026024820152616f6560f01b6044820152606490fd5b6000198114611c295760010190565b634e487b7160e01b600052601160045260246000fd5b8051821015611c535760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b9060048210156104fc5752565b60009060033d11611c8357565b905060046000803e60005160e01c90565b600060443d10611cf157604051600319913d83016004833e81516001600160401b03918282113d602484011117611cf457818401948551938411611cfc573d85010160208487010111611cf45750611cf192910160200190611a37565b90565b949350505050565b50949350505050565b919082519283825260005b848110611d31575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201611d10565b91908260409103126100ff57604051611d5d81611a00565b8092805160038110156100ff578252602090810151910152565b909160a092600180851b03168252602082015260606040820152600960608201526806164647265737320360bc1b60808201520190565b906305f5e100918201809211611c2957565b91908201809211611c2957565b15611dd457565b60405162461bcd60e51b815260206004820152600d60248201526c1bdc99195c88195e1c1a5c9959609a1b6044820152606490fd5b90816101609103126100ff5760405190611e22826119e4565b80518252611e3260208201611b96565b6020830152611e4360408201611b96565b6040830152611e5460608201611b96565b6060830152611e6560808201611baa565b608083015260a081015160a083015260c081015160c083015260e081015160e083015261010080820151908301526101208082015190830152610140809101519082015290565b809161010092839103126100ff57604051918201908282106001600160401b038311176119985760e091604052805183526020810151602084015260408101516040840152606081015160608401526080810151608084015260a081015160a084015260c081015160c0840152015160e082015290565b908160e09103126100ff5760c060405191611f3d836119c9565b611f4681611b96565b835260208101516020840152611f5e60408201611baa565b6040840152606081015160608401526080810151608084015260a081015160a0840152015160c082015290565b6012039060128211611c2957565b906305f5e100918203918211611c2957565b91908203918211611c2957565b908160409103126100ff57602060405191611fd283611a00565b805183520151602082015290565b60048210156104fc5752565b91909160c08060e083019460018060a01b0381511684526020810151602085015260408101511515604085015260608101511515606085015261203760808201516080860190611c69565b60a081015160a08501520151910152565b9060038210156104fc5752565b6001600160a01b039091168152606081019392916040919061207b906020830190612048565b0152565b909291959395610120526000602060405161209981611a00565b828152015260009360006101406040516120b2816119e4565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152015260405163f9d244fd60e01b81528460048201526121126024820161012051611c69565b6101a0816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156102c557600061010052600060a0526134c3575b5061010051602001516001600160a01b0316156134865761010051606081015160048110156104fc5715613463575b506101005160409081015160c09081529051632f7ce47360e21b81529051600482015295610160876024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9687156102c557600097613440575b50608087015115613363576040516330a66e1560e01b815260c0516004820152610100816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015613358578760e052613335575b5060e051602088015161228f91906001600160a01b03167f0000000000000000000000000000000000000000000000000000000000000000614d1a565b976101005160c0810151151590816132ea575b506060610100510151906004821015612c6357906122d4918b610100519161012060a08401519301519360e0516153cf565b6101005160208082015160408084015160c0909401519051630298e27360e01b81526001600160a01b0392831660048201526024810194909452151560448401529199918a9060649082907f0000000000000000000000000000000000000000000000000000000000000000165afa9889156132df5788996132a7575b5061010051602081015160408083015160c090930151905163bc95baad60e01b81526001600160a01b039092166004830152602482019290925290151560448201529860e08a806064810103817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa998a1561316257899a613286575b5060808a0151159081156131e6575b50156131ae5760606101005101516004811015612c635760011461316d575b604051632500ed8d60e21b815260c05160048201529860a08a6024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa998a1561316257899a6130dc575b506040516301274eb160e71b815260c05160048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115612d26578a916130aa575b506124cb6101005161010060e082015191015190611fab565b8a9b81612e2a575b5050508861014052610100518a8a608083015113600014612dd45750506101005161010081015115908115612daa575b5015612da45760806101005101515b610140525b60e051602080820151608090920151610100518083015160408083015160c09093015190516269055560e11b81526001600160a01b039283166004820152602481019390935215156044830152909491939290859060649082907f0000000000000000000000000000000000000000000000000000000000000000165afa938415612d9957908e8e928e96612d5c575b506125b6966101405192615512565b5015612d3157610100518051602082015160c092830151604080516340086d2960e11b81529451600486015260ff9990991660248501529197911515916001600160a01b0391821691849060449082907f0000000000000000000000000000000000000000000000000000000000000000165afa928315612d26579060209392918b93612cf5575b506040519863244edd2960e11b8a5260c05160048b015260248a0152604489015260018060a01b03871660648901528a608489015260a48801526101405160c4880152805160e4880152015161010486015261012485015261014484015260018060a01b0316610164830152856101848301526040826101a4818760018060a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1928315612b4d5784928594612cba575b506127058661010080510151611dc0565b61010080510152610100516060815191015160048110156128e1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b15612cb65761277190604051926331353f7960e11b845260048401526024830190611c69565b60016044820152606481018790528581608481837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015612c5857908691612ca2575b505060606101005101516004811015612c8e57158015612c77575b6128f5575b50506101005160018060a01b03602082015116958151956060604084015193015160048110156128e157610100519060c0820151151560e08301519161010060a08501519401519660a051519a60038c10156128cd575060a051602001519b604051809e81526020015260408d015260608c0161285b91611c69565b60808b01526101405160a08b015260c08a015260e08901526101008801526101208701526101408601526101608501526101808401526101a0830161289f91612048565b6101c08201526101e07f4d12d133c743bc8c14429fd47f17fb29070e2f252d4294b1675da3bd779547e091a1565b634e487b7160e01b81526021600452602490fd5b634e487b7160e01b87526021600452602487fd5b6101005160018060a01b0360208201511690604081015190606060c08201511515910151906004821015612c63579061295a9160e0610100510151936040519561293e876119c9565b8652602086015260408501526001606085015260808401611fe0565b60a0820183905260c08201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b15612b5857856129b59160405180938192632670e98d60e01b835260048301611fec565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015612c5857908691612c44575b50506004610120511015612b5c576101205180612b9757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b15612b9357604051633e5005e560e01b815260048101919091528481602481837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015612b8857908591612b70575b50505b60a051516003811015612b5c5760a05160200151917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b15612b5857908591612af86040519485938493637f3fbf2b60e11b855260048501612055565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015612b4d57908491156127df57612b3e90611985565b612b495782386127df565b8280fd5b6040513d86823e3d90fd5b8580fd5b634e487b7160e01b85526021600452602485fd5b612b7990611985565b612b84578338612a8f565b8380fd5b6040513d87823e3d90fd5b8480fd5b600114612ba5575b50612a92565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b15612b935760405163121494ed60e31b815260048101919091528481602481837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015612b8857908591612c30575b50612b9f565b612c3990611985565b612b84578338612c2a565b612c4d90611985565b612b935784386129f2565b6040513d88823e3d90fd5b634e487b7160e01b89526021600452602489fd5b506101005160e061010082015191015111156127da565b634e487b7160e01b86526021600452602486fd5b612cab90611985565b612b935784386127bf565b8680fd5b925092506040823d604011612ced575b81612cd760409383611a37565b81010312612b84576020825192015192386126f4565b3d9150612cca565b612d1891935060403d604011612d1f575b612d108183611a37565b810190611fb8565b913861263e565b503d612d06565b6040513d8c823e3d90fd5b60405162461bcd60e51b81526020600482015260036024820152627a706160e81b6044820152606490fd5b9250509493506020813d602011612d91575b81612d7b60209383611a37565b810103126100ff575192938c908e6125b66125a7565b3d9150612d6e565b6040513d8e823e3d90fd5b88612512565b6060915001516004811015612dc0571538612503565b634e487b7160e01b8a52602160045260248afd5b610100612de2920151611dc0565b610100519060e08201511190811591612e14575b5015612e0e5760806101005101515b61014052612517565b88612e05565b6060915001516004811015612dc0571538612df6565b6101005160c00151919c508c9290918e919015158d82126130075715612f905750508051602090910151808210612f8857612e6491611fab565b80915b11612f80575b508915612e7c573880806124d3565b505050505050505091505061010051606081519101516004811015612f6c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b15612b4957612eec906040519263ecd1bbcb60e01b845260048401526024830190611c69565b600160448201526080606482015260036084820152621b985b60ea1b60a4820152818160c481837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015612f6157612f4d575050565b612f578291611985565b612f5e5750565b80fd5b6040513d84823e3d90fd5b634e487b7160e01b83526021600452602483fd5b995038612e6d565b505089612e64565b9091612fa98160606040612faf940151910151906151d5565b86615207565b8c811215612ff757612fc983612fc4836154cf565b615b89565b8211612fda57505050898091612e67565b612ff092612fc4612fea926154cf565b90611fab565b8091612e67565b612ff092612fc461086a926154cf565b909291501561306c578060206130219251910151906151d5565b8b81131561303e5761086a613038612ff093614cd5565b916154cf565b61304782614cd5565b613050826154cf565b1161306457612fea613038612ff093614cd5565b505089612ff0565b61308b91508060606040613085930151910151906151d5565b84615207565b8c8b82121561309e575050898091612e67565b612fc4612ff0926154cf565b90506020813d6020116130d4575b816130c560209383611a37565b810103126100ff5751386124b2565b3d91506130b8565b90995060a0813d60a01161315a575b816130f860a09383611a37565b8101031261315657604051908160a08101106001600160401b0360a0840111176119985760809060a083016040528051835260208101516020840152604081015160408401526060810151606084015201516080820152983861245c565b8880fd5b3d91506130eb565b6040513d8b823e3d90fd5b9860a06101005160c0810151151560001461319c570151908082101561319557505b98612406565b905061318f565b01519080821115613195575098612406565b60405162461bcd60e51b815260206004820152601060248201526f3732b2b2103634b8bab4b230ba34b7b760811b6044820152606490fd5b60405163096c2ca160e11b81526004810191909152602481018c905290506020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa90811561316257899161324c575b5015386123e7565b90506020813d60201161327e575b8161326760209383611a37565b810103126131565761327890611baa565b38613244565b3d915061325a565b6132a0919a5060e03d60e011610ff457610fe68183611a37565b98386123d8565b9098506020813d6020116132d7575b816132c360209383611a37565b810103126132d357519738612351565b8780fd5b3d91506132b6565b6040513d8a823e3d90fd5b606091500151600481101561332157158015613307575b386122a2565b506060610100510151600481101561332157600114613301565b634e487b7160e01b88526021600452602488fd5b61334f906101003d610100116114ef576114e18183611a37565b60e05238612252565b6040513d89823e3d90fd5b5050505050505050610100516060815191015160048110156104fc577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b156100ff576133d0906040519263ecd1bbcb60e01b845260048401526024830190611c69565b6001604482015260806064820152600760848201526621656e61626c6560c81b60a482015260008160c481837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af180156102c5576134355750565b61343e90611985565b565b61345c9197506101603d610160116114be576114b08183611a37565b95386121f0565b61347861014061348092015160005490611dc0565b421115611dcd565b3861218a565b5092505091507ff9445e2284b28c1785e706b0a018d9d0a6f8ed8dc6e6cdf4da0135ef62c5ac1792506134be60405192839283611d77565b0390a1565b6101a03d6101a0116135a1575b6134da8183611a37565b81818101036101a081126100ff57610160136100ff57604051916134fd836119e4565b8051835261350d60208201611b96565b602084015260408101516040840152606081015160048110156100ff57613593926101609160608601526080830151608086015260a083015160a086015261355760c08401611baa565b60c086015260e083015160e086015261010083015161010086015261012083015161012086015261014083015161014086015282019101611d45565b906101005260a0523861215b565b503d6134d0565b9692610120969299989591946135db60ff926101408b019c60018060a01b038099168c5260208c015260408b0190611c69565b166060880152608087015260a08601521660c0840152600060e084015260006101008401521515910152565b9190828103906101e082126100ff576101a08092126100ff576040519161362d83611a1b565b8451835261363d60208601611b96565b60208401526040850151604084015260608501519260048410156100ff57611cf19360608201526080860151608082015260a086015160a082015260c086015160c082015260e086015160e082015261010080870151908201526101206136a5818801611baa565b908201526101406136b7818801611baa565b9082015261016080870151908201526101806136d4818801611baa565b908201529401611d45565b91908260409103126100ff5760206136f683611baa565b92015190565b96949290989593919798610100526000602060405161371a81611a00565b82815201526000608052600061018060405161373581611a1b565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201528261016082015201526137a4604051986340b4605b60e11b8a526101005160048b015260248a0190611c69565b6101e0886044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9485156102c557600098600096614c39575b5060208901516001600160a01b031615614bf957606089015160048110156104fc5715614bdf575b60408981015160e09081529051632f7ce47360e21b81529051600482015290610160826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9182156102c557600092614bbc575b50608082015115614adb5760208a01516040808c01516101208d0151915163bc95baad60e01b81526001600160a01b039384166004820152602481019190915290151560448201529b907f0000000000000000000000000000000000000000000000000000000000000000168c6064815a9360e094fa9b8c1561413a576080519c614aba575b5060808c0151156149dd576040516330a66e1560e01b815260e051600482015290610100826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa91821561413a57608051926149ba575b5080156149a1575b60808d0151608051610160528082106000146149975750610160525b60208301516139ba9082906001600160a01b03167f0000000000000000000000000000000000000000000000000000000000000000614d1a565b9b60608c01516004811015613f89576139e9908d8f610140820151151561010060a084015193015193876153cf565b60608c01516004811015613f8957600114614943575b908b9392916020608086015192015191602060018060a01b038188015116966101206040820151910151151597613a66604051998a9384936269055560e11b85526004850191926040919493606084019560018060a01b0316845260208401521515910152565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa94851561413a578f906080519661490b575b613ab597506101605193615784565b50506040888101516101208a01518251630a899e9f60e21b815261016051600482019390935290151560248201526044810191909152606481018b905290816084816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561413a57608051916148eb575b508061473e5750613bc0906080518060a05260808a0151136000146146fb5760e08901511580156146f4575b60805190156146ef575060808901515b60a0525b885160208a01516101208b0151604080516340086d2960e11b815260e051600482015260ff909516602486015293949293901515926001600160a01b039290921691859081906044820190565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa92831561413a57602094608051946146ce575b506040518061014052630c0a361d60e41b905260e05160046101405101526024610140510152604461014051015260018060a01b038916606461014051015261016051608461014051015260a461014051015260a05160c4610140510152805160e4610140510152015161010461014051015261012461014051015261014461014051015260018060a01b0316610164610140510152846101846101405101526080516101a46101405101526060610140516101c48160805160018060a01b037f0000000000000000000000000000000000000000000000000000000000000000165af190811561413a576080519283948493614681575b613d0a6101605160e0890151611dc0565b60e0880152865160608801516004811015613f89577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b1561414757613d7090604051926331353f7960e11b845260048401526024830190611c69565b6080805160448301526101605160648301525181608481837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1801561413a5761466c575b5060208701516040808901516101208a0151915163bc95baad60e01b81526001600160a01b0390931660048401526024830152151560448201529160e083806064810103817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa92831561413a576080519361464b575b508015614639575b801561462d575b614284575b506080015115613fa1575b60018060a01b03602086015116956060860151956004871015613f8957610120810151151560c08201519060e060a08401519301519480519960038b1015613f8957613f529b6020613edd93015160c05260405180610120525261010051602061012051015260e05160406101205101526060610120510190611c69565b608061012051015260a05160a061012051015260c061012051015260e061012051015261016051610100610120510152610120805101526101406101205101526080516101606101205101526101806101205101526101a06101205101526101c06101205101526101e0610120510190612048565b60c0516102006101205101527fbb3de0b2e2134fe005a42dd2f1106ed8939cee5890c390749097a3ea26788f7561022061012051a1565b634e487b7160e01b6080515260216004526024608051fd5b959391613fcb60018060a0989694981b036020850151166040850151610120860151151591615b17565b604051634cc42b5160e01b81526004810191909152608051909690876024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa96871561413a576080519761415a575b506080515b875181101561414d5761403e8189611c3f565b5160a0810151906080810151906004821015613f8957606001511515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b15614147576140ac906040519363ecd1bbcb60e01b855260048501526024840190611c69565b6044820152608060648201819052600f60848301526e31b637b9b2b2103837b9b4ba34b7b760891b60a4830152518160c481837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1801561413a57614125575b5061412090611c1a565b61402b565b61412e90611985565b60805180156141165780fd5b6040513d608051823e3d90fd5b60805180fd5b5091939550919395613e5f565b90963d8091833e61416b8183611a37565b6020828281010312614147578151906001600160401b03821161414757808301601f8385010112156141475781830151906141a582611a58565b936141b36040519586611a37565b8285526020850193828201602060e086028385010101116141475793602085830101945b602060e08602828501010186106141f5575050505050509538614026565b60e0868585010312614147576040519161420e836119c9565b61421787611b96565b83526020870151602084015261422f60408801611baa565b604084015261424060608801611baa565b6060840152608087015192600484101561414757602060e09282829660808695015260a08b015160a082015260c08b015160c08201528152019701969250506141d7565b60018060a01b036020880151166040880151610120890151151560608a01516004811015613f89576142dd918b5193604051956142c0876119c9565b865260208601526040850152608051606085015260808401611fe0565b60a08201526101605160c08201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b156141475760405190632670e98d60e01b8252818061433b6080519360048301611fec565b038160805160018060a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561413a57614618575b5060608701516004811015613f89576144d9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b156141475760405163be82e5b160e01b815261010051600482015260805181602481837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1801561413a576144c4575b505b8251906003821015613f895760208401517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b1561414757614474926040519384928392637f3fbf2b60e11b84526080519560048501612055565b038160805160018060a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561413a5715613e54576144b890611985565b6080518015613e545780fd5b6144cd90611985565b608051801561440e5780fd5b60608701516004811015613f895760010361458e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b15614147576040516304d3cb8160e41b815261010051600482015260805181602481837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1801561413a57614579575b50614410565b61458290611985565b60805180156145735780fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b15614147576040516304d3cb8160e41b815261010051600482015260805181602481837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1801561413a576145795750614410565b61462190611985565b60805180156143765780fd5b50608082015115613e4f565b5060e087015160c08801511115613e48565b61466591935060e03d60e011610ff457610fe68183611a37565b9138613e40565b61467590611985565b6080518015613dbf5780fd5b9250935091506060913d6060116146c6575b6146a08361014051611a37565b606061014051809481010312614147578251936040602085015194015194939492613cf9565b3d9250614693565b6146e891945060403d604011612d1f57612d108183611a37565b9238613c01565b613b6f565b5086613b5f565b61470c6101605160e08b0151611dc0565b60c08a015111801590614737575b6080519015614732575060808901515b60a052613b73565b61472a565b508661471a565b965050505050505060608201516004811015613f89577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b156141475760405163c1872cf360e01b8152610100516004820152906147a9906024830190611c69565b811515604482015260805181606481837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1801561413a576148d6575b5060018060a01b036020830151169060608301516004811015613f89577fbb3de0b2e2134fe005a42dd2f1106ed8939cee5890c390749097a3ea26788f7594846101206102209601511515608082015160c08301519161487560e060a086015195015196604051998a526101005160208b015260e05160408b015260608a0190611c69565b608088015260a087015260c086015260e08501526101605161010085015261012084015261014083015215156101608201526080516101808201526080516101a08201526080516101c082015260006101e0820152608051610200820152a1565b6148df90611985565b60805180156147f05780fd5b614904915060403d604011610d7957610d698183611a37565b5038613b33565b9550506020863d60201161493b575b8161492760209383611a37565b810103126100ff578e613ab5965195613aa6565b3d915061491a565b9b908b9392916101208501511560001461497a5760a0850151908082101561497357505b9c5b90919293506139ff565b9050614967565b60a0850151908082111561499057505b9c614969565b905061498a565b6101605250613980565b506149b560c08c015160e08d015190611fab565b613964565b6149d69192506101003d610100116114ef576114e18183611a37565b903861395c565b50505060208801516040890151610120909901519899506001600160a01b0390811698151597507f0000000000000000000000000000000000000000000000000000000000000000163b15955061414794505050505057604051638ffb8b2f60e01b81526080516001600160a01b039093166004820152602481019390935215156044830152818060648101038160805160018060a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561413a57614aa65750565b614aaf90611985565b60805180612f5e5750565b614ad4919c5060e03d60e011610ff457610fe68183611a37565b9a386138f8565b50505050505050505090506060815191015160048110156104fc577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b156100ff57614b47906040519263ecd1bbcb60e01b845260048401526024830190611c69565b60006044820181905260806064830152600760848301526621656e61626c6560c81b60a48301528160c481837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af180156102c557614bac5750565b614bb590611985565b6000608052565b614bd89192506101603d610160116114be576114b08183611a37565b9038613872565b614bf46134786101608b015160005490611dc0565b613811565b505050505050507ff9445e2284b28c1785e706b0a018d9d0a6f8ed8dc6e6cdf4da0135ef62c5ac1792506134be9150604051918291610100519083611d77565b909550614c589198506101e03d6101e0116108ca576108bb8183611a37565b97909794386137e9565b15614c6957565b60405162461bcd60e51b81526020600482015260126024820152710dad2e6dac2e8c6d040e0c2d2e492dcc8caf60731b6044820152606490fd5b90614cad82611a58565b614cba6040519182611a37565b8281528092614ccb601f1991611a58565b0190602036910137565b600160ff1b8114611c295760000390565b90815180825260208080930193019160005b828110614d06575050505090565b835185529381019392810192600101614cf8565b60408051632b47bb3d60e21b8082526001600160a01b039560049560209591939092918816919086818981865afa908115615192578991889160009161519d575b5089885180948193636cf38c4960e01b8352165afa9081156151925760009161515d575b50614fa057508351632630c12f60e01b81529185838881855afa928315614f2457889392918791600094614f5e575b506024859188519b8c938492634bb3415360e01b84521696878d840152165afa978815614f2457600098614f2f575b5090858792865193848092635434a1df60e01b82525afa918215614f245790869291600092614ee9575b50602490865194859384926341976e0960e01b84528b840152165afa908115614ede57908691600091614ead575b5060e091614e55918181811115614ea45790614e5091611fab565b615c59565b91015110614e635750505090565b5162461bcd60e51b815291820152601a60248201527f657863656564206d617820707269636520646576696174696f6e000000000000604482015260649150fd5b614e5091611fab565b91508482813d8311614ed7575b614ec48183611a37565b81010312612f5e575051859060e0614e35565b503d614eba565b83513d6000823e3d90fd5b91909282813d8311614f1d575b614f008183611a37565b81010312612f5e5750906024614f168793611b96565b9190614e07565b503d614ef6565b85513d6000823e3d90fd5b90978682813d8311614f57575b614f468183611a37565b81010312612f5e5750519685614ddd565b503d614f3c565b82819495939296503d8311614f99575b614f788183611a37565b81010312612f5e57509085886024614f91829695611b96565b949150614dae565b503d614f6e565b90979596925083949351908152838188818b5afa908115614f24578392918591600091615123575b5088875180968193637e89925d60e01b8352165afa928315614f24576000936150e0575b508387988698979851998a8092632630c12f60e01b82525afa908115614f24578495969798600092615094575b50916001600160401b0393918160449489519a8b9788966310f5a88f60e31b88521690860152166024840152165afa91821561508a575060009161505e575b50905090565b82813d8311615083575b6150728183611a37565b81010312612f5e5750518038615058565b503d615068565b513d6000823e3d90fd5b919092939482813d83116150d9575b6150ad8183611a37565b81010312612f5e575092826044926001600160401b03946150ce8897611b96565b939550509092615019565b503d6150a3565b8481819a959a3d831161511c575b6150f88183611a37565b810103126131565751976001600160401b0389168903612f5e575091969183614fec565b503d6150ee565b9293509082813d8111615156575b61513b8183611a37565b81010312612f5e575090836151508493611b96565b38614fc8565b503d615131565b908782813d831161518b575b6151738183611a37565b81010312612f5e575061518590611baa565b38614d7f565b503d615169565b86513d6000823e3d90fd5b92509082813d81116151ce575b6151b48183611a37565b81010312612f5e5750866151c88a92611b96565b38614d5b565b503d6151aa565b81810392916000138015828513169184121617611c2957565b908160209103126100ff575160ff811681036100ff5790565b81156152875760208181015160405163313ce56760e01b815293916001600160a01b03918590600490829085165afa9283156102c557611cf194600094615254575b5060400151166152f0565b60409194506152799060203d8111615280575b6152718183611a37565b8101906151ee565b9390615249565b503d615267565b5050600090565b604d8111611c2957600a0a90565b818102929160008212600160ff1b821416611c29578184051490151715611c2957565b81156152da57600160ff1b8114600019831416611c29570590565b634e487b7160e01b600052601260045260246000fd5b811561537b5760405163313ce56760e01b815290602090829060049082906001600160a01b03165afa9283156102c55761535261534660ff61534b61534682611cf1996153589860009161535d575b5016611f8b565b61528e565b9316611f8b565b9261529c565b6152bf565b615375915060203d8111615280576152718183611a37565b3861533f565b505050600090565b1561538a57565b60405162461bcd60e51b815260206004820152601760248201527f6e6f7420726561636820747269676765722070726963650000000000000000006044820152606490fd5b9094939460048110156104fc5780615477575050506153f66153f083611f99565b84615cd5565b8110159283615457575b50501590811561544f575b501561541357565b60405162461bcd60e51b815260206004820152601460248201527365786365656473206d617820736c69707061676560601b6044820152606490fd5b90503861540b565b82935061546761546d9293611dae565b90615cd5565b1015903880615400565b9194935091906001036154bb5761343e93156154a45761546760c061549d930151611f99565b1115615383565b61546760c06154b4930151611dae565b1015615383565b905061343e926000146154b4571115615383565b600081126154da5790565b611cf190614cd5565b91909160008382019384129112908015821691151617611c2957565b81810292918115918404141715611c2957565b95979690949293801596878098615779575b6157635761553760808201928351611dc0565b998a116157275783818861555561556396606061555d9601516154e3565b945191615975565b906154e3565b9483615716575b6000938487126156d95784908215926156cf575b5050615592575b50505050611cf1906154cf565b60018060a01b0393604093858583015116855196879363313ce56760e01b9283865285600460209b8c935afa9485156156c5579089929185966156a4575b508201511691600488518094819382525afa9182156156995761562761562061534660ff61561961534682612fc4998f996156369d9c9a6156319a9261567c575b505016611f8b565b9516611f8b565b928c6154ff565b956156318a6154cf565b6154ff565b10615642578080615585565b60649250519062461bcd60e51b82526004820152601460248201527365786365656473206d6178206c6576657261676560601b6044820152fd5b6156929250803d10615280576152718183611a37565b8f80615611565b8651903d90823e3d90fd5b839196506156be90823d8411615280576152718183611a37565b95906155d0565b88513d86823e3d90fd5b129050833861557e565b60405162461bcd60e51b81526020600482015260156024820152740c6ded8d8c2e8cae4c2d840dcdee840cadcdeeaced605b1b6044820152606490fd5b9483615721916154e3565b9461556a565b60405162461bcd60e51b815260206004820152601460248201527332bc31b2b2b2399036b0bc103837b9b4ba34b7b760611b6044820152606490fd5b9850505050505050506060608083015192015190565b506000861215615524565b91949290939597969786159283809461596a575b6157635760808101976157cb89518260009181811015600014615962576157bf9250611fab565b9b5b60608401516154e3565b98831595866158f1575b50505050816158dd575b826158d2575b156156d957816158c7575b50615802575b505050611cf1906154cf565b604082810151815163313ce56760e01b8082526020969395919290916001600160a01b039188908590600490829086165afa9384156158bc579088929160009561589b575b508201511691600487518094819382525afa908115614f24579161563161562761562061534660ff61561961534682612fc4998f9b6158909d9c60009261567c57505016611f8b565b1061564257806157f6565b839195506158b590823d8411615280576152718183611a37565b9490615847565b87513d6000823e3d90fd5b6000915012386157f0565b5060008612156157e5565b956158e98284926154e3565b9690506157df565b91818a9493615907868c959e989e518688615975565b901580615958575b15615943576000811261594357509161593261555d949261593897969451611fab565b91615975565b955b388080806157d5565b945050505050615952916154e3565b9561593a565b508151831061590f565b50509b6157c1565b506000831215615798565b91909160a081019081518086148015615a1b575b8015615a13575b615a085760408692015115156000146159db57505080518411156159c357611cf1936159bd915190611fab565b91615a23565b90611cf1936159d46159bd92614cd5565b9251611fab565b11156159ef57611cf1936159bd9151611fab565b90611cf193615a006159bd92614cd5565b925190611fab565b505050505050600090565b508315615990565b508015615989565b919091821561537b57604081810151905163313ce56760e01b815293906001600160a01b03906020908690600490829085165afa9283156102c557611cf195600094615a75575b506020015116615a97565b6020919450615a9090823d8111615280576152718183611a37565b9390615a6a565b928115615b0e5760405163313ce56760e01b815293602090859060049082906001600160a01b03165afa9081156102c557615b05615b0a94615aff61534660ff61534b61534682615358996c0c9f2c9cd04674edea400000009d60009161535d575016611f8b565b9461529c565b61529c565b0590565b50505050600090565b909168010000000000000000831015615b5e5760009015615b56575060ff60015b169160201b906bffffffffffffffffffffffff199060601b16171790565b60ff90615b38565b60405162461bcd60e51b81526020600482015260036024820152621c1d1b60ea1b6044820152606490fd5b906c0c9f2c9cd04674edea40000000906000198284099282810292838086109503948086039514615c4b5784831115615c0e578291096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b60405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606490fd5b5050809250156152da570490565b906305f5e100906000198284099282810292838086109503948086039514615c4b5784831115615c0e578291096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b9060001981830981830291828083109203918083039214615d34576305f5e1009082821115615c0e577facbe0e98f503f8881186e60dbb7f727bf36b7213ee9f5a78c767074b22e90e21940990828211900360f81b910360081c170290565b50506305f5e1009150049056fea264697066735822122069383cb64b8b8c3c6e2ff76e3fff96a2a43c84a2e8fcba03331cd3faa9c4eebb64736f6c63430008130033000000000000000000000000446dd43816a00d56849f549c032b4814008e183d0000000000000000000000008932aa60a7b5efefa8ec3ee899fd238d029d10c60000000000000000000000004df429a8ff6cf308f1c9aa8e4b6bef5e4e90043700000000000000000000000020f00c8af604bfb0f7f2518e2f37f03f25f176e5000000000000000000000000a9b2083a62d6a65cdb958fde3e91dd8df577fb5a000000000000000000000000000000000000000000000000000000000000012c