From 515d5928287cc240d926dfe6c9fd7c742b162c33 Mon Sep 17 00:00:00 2001 From: RnkSngh Date: Thu, 12 Sep 2024 11:45:30 -0400 Subject: [PATCH] [ Informal Audit ] enforce 2 length connection hops in dispatcher --- contracts/core/Dispatcher.sol | 9 ++++++--- src/evm/contracts/factories/Dispatcher__factory.ts | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/contracts/core/Dispatcher.sol b/contracts/core/Dispatcher.sol index d78a925e..14037f80 100644 --- a/contracts/core/Dispatcher.sol +++ b/contracts/core/Dispatcher.sol @@ -174,8 +174,9 @@ contract Dispatcher is Ownable2StepUpgradeable, UUPSUpgradeable, ReentrancyGuard string calldata counterpartyPortId ) external nonReentrant { // We need to validate connectionHops & counterpartyPortId since they aren't validated in an internal - // function like all other instances of these arguments - if (connectionHops.length < 2 || bytes(counterpartyPortId).length == 0) { + // function like all other instances of these arguments. ConnectionHops can only be of length 2 for now since we + // don't yet support multihop, but this will be updated in the future + if (connectionHops.length != 2 || bytes(counterpartyPortId).length == 0) { revert IBCErrors.invalidCounterParty(); } if (bytes(version).length == 0) { @@ -212,7 +213,9 @@ contract Dispatcher is Ownable2StepUpgradeable, UUPSUpgradeable, ReentrancyGuard ChannelEnd calldata counterparty, Ics23Proof calldata proof ) external nonReentrant { - if (connectionHops.length < 2) { + // Note: ConnectionHops can only be of length 2 for now since we don't yet support multihop, but this will be + // updated in the future + if (connectionHops.length != 2) { revert IBCErrors.invalidConnectionHops(); } _checkInvalidCounterParty(local.portId, local.channelId, counterparty.portId, counterparty.channelId); diff --git a/src/evm/contracts/factories/Dispatcher__factory.ts b/src/evm/contracts/factories/Dispatcher__factory.ts index 56f583d9..7f41cdb7 100644 --- a/src/evm/contracts/factories/Dispatcher__factory.ts +++ b/src/evm/contracts/factories/Dispatcher__factory.ts @@ -2155,7 +2155,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e7565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e5576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516159df6200011f60003960008181610c5201528181610c9b015281816113f40152818161143401526114c701526159df6000f3fe6080604052600436106101c25760003560e01c8063715018a6116100f7578063940265cb11610095578063c3e1155c11610064578063c3e1155c14610538578063e30c397814610570578063f2fde38b1461058e578063f90b8e96146105ae57600080fd5b8063940265cb146104a35780639f59ae71146104d8578063ba5a4d25146104f8578063c00fa7c01461051857600080fd5b80637ab4339d116100d15780637ab4339d1461040857806381bc079b146104285780638da5cb5b146104485780638dd34bb41461046657600080fd5b8063715018a6146103bc5780637774a6d3146103d157806379ba5097146103f357600080fd5b8063478222c211610164578063556d51781161013e578063556d51781461033c5780635d7adf961461035c5780636050b5f31461037c5780636b67055e1461039c57600080fd5b8063478222c2146102cd5780634f1ef2861461030657806352d1902d1461031957600080fd5b80633659cfe6116101a05780633659cfe614610240578063418925b71461026057806342852d2414610280578063429446b6146102ad57600080fd5b80631eb9fc86146101c75780632494546b146101e95780632bf5d19d14610220575b600080fd5b3480156101d357600080fd5b506101e76101e2366004614011565b6105ce565b005b3480156101f557600080fd5b5060fa546102069063ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b34801561022c57600080fd5b506101e761023b3660046140e7565b610958565b34801561024c57600080fd5b506101e761025b366004614191565b610c48565b34801561026c57600080fd5b506101e761027b3660046141ef565b610d30565b34801561028c57600080fd5b506102a061029b3660046142b0565b610de8565b60405161021791906143b3565b3480156102b957600080fd5b506101e76102c8366004614011565b611140565b3480156102d957600080fd5b50610105546102ee906001600160a01b031681565b6040516001600160a01b039091168152602001610217565b6101e7610314366004614506565b6113ea565b34801561032557600080fd5b5061032e6114ba565b604051908152602001610217565b34801561034857600080fd5b506101e7610357366004614569565b61156d565b34801561036857600080fd5b506101e76103773660046145d1565b611585565b34801561038857600080fd5b506101e76103973660046145d1565b611895565b3480156103a857600080fd5b506101e76103b73660046145d1565b6118a7565b3480156103c857600080fd5b506101e7611f99565b3480156103dd57600080fd5b506103e6611fad565b604051610217919061462a565b3480156103ff57600080fd5b506101e761203b565b34801561041457600080fd5b506101e761042336600461465d565b6120b2565b34801561043457600080fd5b506101e76104433660046146ae565b61223b565b34801561045457600080fd5b506033546001600160a01b03166102ee565b34801561047257600080fd5b506104866104813660046146c7565b612303565b604080519384526020840192909252151590820152606001610217565b3480156104af57600080fd5b506104c36104be366004614712565b6123c4565b60408051928352901515602083015201610217565b3480156104e457600080fd5b506101e76104f33660046147bb565b612488565b34801561050457600080fd5b506101e76105133660046147fc565b6124dd565b34801561052457600080fd5b506101e76105333660046147bb565b612a19565b34801561054457600080fd5b506105586105533660046148a0565b612a55565b6040516001600160401b039091168152602001610217565b34801561057c57600080fd5b506065546001600160a01b03166102ee565b34801561059a57600080fd5b506101e76105a9366004614191565b612ba9565b3480156105ba57600080fd5b506101e76105c93660046148fd565b612c1a565b6105d6613247565b60028510156105f85760405163af0ba14d60e01b815260040160405180910390fd5b61061e6106058880614955565b60208a01356106148680614955565b87602001356132a0565b610680868660008181106106345761063461499b565b90506020028101906106469190614955565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506132e392505050565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36106b38c80614955565b8d602001356040518463ffffffff1660e01b81526004016106d6939291906149da565b600060405180830381865af41580156106f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261071b9190810190614a4e565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60078a8e80604001906107489190614955565b8f8f6107548e80614955565b8f602001356040518a63ffffffff1660e01b815260040161077d99989796959493929190614ad7565b600060405180830381865af415801561079a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107c29190810190614a4e565b6040518463ffffffff1660e01b81526004016107e093929190614bf1565b600060405180830381600087803b1580156107fa57600080fd5b505af115801561080e573d6000803e3d6000fd5b5060009250610829915061082490508980614955565b613362565b905060008061089b836301d08fc560e71b6020808e01359089013561085160408b018b614955565b6040516024016108649493929190614d9f565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526133fc565b915091508115610900576108b4838b8b8b8b8b8b6134e8565b826001600160a01b03167fcf8be9ab2b5edf8beb2c45abe8e0cc7646318ac19f6c3164ba2e19e93a8a32af8b602001356040516108f391815260200190565b60405180910390a2610942565b826001600160a01b03167f971a4433f5bff5f011728a4123aeeca4b5275ac20b013cf276e65510491ac26f82604051610939919061462a565b60405180910390a25b50505061094f6001609755565b50505050505050565b610960613247565b60028310156109825760405163af0ba14d60e01b815260040160405180910390fd5b61098f6106058880614955565b6109a5848460008181106106345761063461499b565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36109d88c80614955565b8d602001356040518463ffffffff1660e01b81526004016109fb939291906149da565b600060405180830381865af4158015610a18573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a409190810190614a4e565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60068c8e8060400190610a6d9190614955565b8d8d610a798e80614955565b8f602001356040518a63ffffffff1660e01b8152600401610aa299989796959493929190614ad7565b600060405180830381865af4158015610abf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ae79190810190614a4e565b6040518463ffffffff1660e01b8152600401610b0593929190614bf1565b600060405180830381600087803b158015610b1f57600080fd5b505af1158015610b33573d6000803e3d6000fd5b5060009250610b49915061082490508980614955565b9050600080610b9f83634bdb559760e01b8b8a8a8f602001358b8060000190610b729190614955565b8d602001358e8060400190610b879190614955565b60405160240161086499989796959493929190614e0f565b915091508115610c0f57826001600160a01b03167ff910705a7a768eb5958f281a5f84cae8bffc5dd811ca5cd303dda140a423698c82806020019051810190610be89190614e74565b8b8b8b8b610bf68c80614955565b8d602001356040516108f3989796959493929190614ebc565b826001600160a01b03167f9e2fe55a3b54b57f82334c273f8d048cd7f05ad19c16cf334276a8c1fec4b6fd82604051610939919061462a565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c995760405162461bcd60e51b8152600401610c9090614f22565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610ce2600080516020615963833981519152546001600160a01b031690565b6001600160a01b031614610d085760405162461bcd60e51b8152600401610c9090614f6e565b610d1181613788565b60408051600080825260208201909252610d2d91839190613790565b50565b610d38613247565b6002831080610d45575080155b15610d6357604051637d6ba8a560e01b815260040160405180910390fd5b6000879003610d855760405163f61bbcf360e01b815260040160405180910390fd5b336001600160a01b03167f20fd8a5856711b18d00def4aa6abafbe00ce6d60795e015cc1cad35eb9b463598989898989898989604051610dcc989796959493929190614fba565b60405180910390a2610dde6001609755565b5050505050505050565b610e2e6040805160e08101909152606081526020810160008152602001600015158152602001606081526020016060815260200160008019168152602001606081525090565b6001600160a01b038316600090815260fb6020908152604080832085845290915290819020815160e08101909252805482908290610e6b9061501a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e979061501a565b8015610ee45780601f10610eb957610100808354040283529160200191610ee4565b820191906000526020600020905b815481529060010190602001808311610ec757829003601f168201915b5050509183525050600182015460209091019060ff166002811115610f0b57610f0b614334565b6002811115610f1c57610f1c614334565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b82821015611002578382906000526020600020018054610f759061501a565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa19061501a565b8015610fee5780601f10610fc357610100808354040283529160200191610fee565b820191906000526020600020905b815481529060010190602001808311610fd157829003601f168201915b505050505081526020019060010190610f56565b50505050815260200160038201805461101a9061501a565b80601f01602080910402602001604051908101604052809291908181526020018280546110469061501a565b80156110935780601f1061106857610100808354040283529160200191611093565b820191906000526020600020905b81548152906001019060200180831161107657829003601f168201915b50505050508152602001600482015481526020016005820180546110b69061501a565b80601f01602080910402602001604051908101604052809291908181526020018280546110e29061501a565b801561112f5780601f106111045761010080835404028352916020019161112f565b820191906000526020600020905b81548152906001019060200180831161111257829003601f168201915b505050505081525050905092915050565b611148613247565b600285101561116a5760405163af0ba14d60e01b815260040160405180910390fd5b6111776106058880614955565b61118d868660008181106106345761063461499b565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36111c08c80614955565b8d602001356040518463ffffffff1660e01b81526004016111e3939291906149da565b600060405180830381865af4158015611200573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112289190810190614a4e565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60088a8e80604001906112559190614955565b8f8f6112618e80614955565b8f602001356040518a63ffffffff1660e01b815260040161128a99989796959493929190614ad7565b600060405180830381865af41580156112a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112cf9190810190614a4e565b6040518463ffffffff1660e01b81526004016112ed93929190614bf1565b600060405180830381600087803b15801561130757600080fd5b505af115801561131b573d6000803e3d6000fd5b5060009250611331915061082490508980614955565b90506000806113598363fad28a2460e01b8c6020013560405160240161086491815260200190565b9150915081156113b157611372838b8b8b8b8b8b6134e8565b826001600160a01b03167fe80f571f70f7cabf9d7ac60ece08421be374117776c311c327a083ca398f802f8b602001356040516108f391815260200190565b826001600160a01b03167ff6a58ef30f66943749e8c29c661c84da143a1c8ed017f5faa92b509e0000875a82604051610939919061462a565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036114325760405162461bcd60e51b8152600401610c9090614f22565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661147b600080516020615963833981519152546001600160a01b031690565b6001600160a01b0316146114a15760405162461bcd60e51b8152600401610c9090614f6e565b6114aa82613788565b6114b682826001613790565b5050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461155a5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610c90565b5060008051602061596383398151915290565b6115756138fb565b611580838383613955565b505050565b61158d613247565b6115a661159d602084018461504e565b602001356139f0565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634b5728d1866040518263ffffffff1660e01b81526004016115ec91906150d0565b600060405180830381865af4158015611609573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116319190810190614a4e565b604051637e4794ed60e11b815273__$d825222459c46c14afb2efe0967c30e98d$__9063fc8f29da906116689089906004016150d0565b602060405180830381865af4158015611685573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a99190615192565b6040516020016116bb91815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016116e893929190614bf1565b600060405180830381600087803b15801561170257600080fd5b505af1158015611716573d6000803e3d6000fd5b50505050600061173983806020019061172f919061504e565b6108249080614955565b6001600160a01b038116600090815261010060209081526040822092935090919082906117689087018761504e565b602001358152602001908152602001600020600085604001602081019061178f91906151ab565b6001600160401b0316815260208101919091526040016000205460ff16905080156117cd5760405163066c745760e01b815260040160405180910390fd5b6117f56117e060e0860160c087016151ab565b6117f060c0870160a088016151ab565b613abb565b611812576040516312c9cc9f60e01b815260040160405180910390fd5b61181f602085018561504e565b602001356001600160a01b0383167fedbcd9eeb09d85c3ea1b5bf002c04478059cb261cab82c903885cefccae374bc61185e60608801604089016151ab565b6080880161187260e08a0160c08b016151ab565b604051611881939291906151c6565b60405180910390a350506114b66001609755565b61189d613247565b6114b66001609755565b6118af613247565b6118bf61159d602084018461504e565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634b5728d1866040518263ffffffff1660e01b815260040161190591906150d0565b600060405180830381865af4158015611922573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261194a9190810190614a4e565b604051637e4794ed60e11b815273__$d825222459c46c14afb2efe0967c30e98d$__9063fc8f29da906119819089906004016150d0565b602060405180830381865af415801561199e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c29190615192565b6040516020016119d491815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401611a0193929190614bf1565b600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b505050506000611a4883806020019061172f919061504e565b6001600160a01b03811660009081526101006020908152604082209293509091908290611a779087018761504e565b6020013581526020019081526020016000206000856040016020810190611a9e91906151ab565b6001600160401b0316815260208101919091526040016000205460ff1690508015611adc5760405163066c745760e01b815260040160405180910390fd5b6001600160a01b03821660009081526101006020908152604082206001929091611b089088018861504e565b6020013581526020019081526020016000206000866040016020810190611b2f91906151ab565b6001600160401b031681526020810191909152604001600020805460ff191691151591909117905560026001600160a01b038316600090815260fb6020908152604082209190611b819088018861504e565b60209081013582528101919091526040016000206001015460ff166002811115611bad57611bad614334565b03611cac576001600160a01b038216600090815260fd6020908152604082209190611bda9087018761504e565b60209081013582528101919091526040908101600020546001600160401b031690611c0b90606087019087016151ab565b6001600160401b031614611c325760405163362a414d60e01b815260040160405180910390fd5b611c4260608501604086016151ab565b611c4d9060016151f6565b6001600160a01b038316600090815260fd6020908152604082209190611c759088018861504e565b60200135815260200190815260200160002060006101000a8154816001600160401b0302191690836001600160401b031602179055505b611cb9602085018561504e565b602001356001600160a01b0383167fde5b57e6566d68a30b0979431df3d5df6db3b9aa89f8820f595b9315bf86d067611cf860608801604089016151ab565b6040516001600160401b03909116815260200160405180910390a3611d266117e060e0860160c087016151ab565b15611da957611d38602085018561504e565b602001356001600160a01b0383167fedbcd9eeb09d85c3ea1b5bf002c04478059cb261cab82c903885cefccae374bc611d7760608801604089016151ab565b60808801611d8b60e08a0160c08b016151ab565b604051611d9a939291906151c6565b60405180910390a3505061189d565b604080518082019091526000815260606020820152600080611dde85634dcc0aa660e01b8960405160240161086491906152e0565b915091508115611e035780806020019051810190611dfc91906152f3565b9250611e1b565b60408051808201909152600081526020810182905292505b6001600160a01b0385166000908152610101602090815260408220908290611e45908b018b61504e565b6020013581526020019081526020016000206000896040016020810190611e6c91906151ab565b6001600160401b0316815260208101919091526040016000205460ff1690508015611eaa57604051637aa549d360e01b815260040160405180910390fd5b6001600160a01b03861660009081526101016020908152604082206001929091611ed6908c018c61504e565b60200135815260200190815260200160002060008a6040016020810190611efd91906151ab565b6001600160401b03168152602080820192909252604001600020805460ff191692151592909217909155611f339089018961504e565b602001356001600160a01b0387167fa32e6f42b1d63fb83ad73b009a6dbb9413d1da02e95b1bb08f081815eea8db20611f7260608c0160408d016151ab565b87604051611f819291906153a9565b60405180910390a35050505050506114b66001609755565b611fa16138fb565b611fab6000613b09565b565b60f98054611fba9061501a565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe69061501a565b80156120335780601f1061200857610100808354040283529160200191612033565b820191906000526020600020905b81548152906001019060200180831161201657829003601f168201915b505050505081565b60655433906001600160a01b031681146120a95760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610c90565b610d2d81613b09565b600054600290610100900460ff161580156120d4575060005460ff8083169116105b6121375760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c90565b6000805461ffff191660ff831617610100179055612153613247565b82516000036121755760405163e8cf362360e01b815260040160405180910390fd5b6001600160a01b03821661219c5760405163cbdd34cf60e01b815260040160405180910390fd5b6121a4613b22565b6121ac613b51565b60f96121b88482615411565b50825160fa805463ffffffff191663ffffffff90921691909117905561010580546001600160a01b0319166001600160a01b03841617905560016097556000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b612243613247565b61224c81613b80565b33600090815260fb602090815260408083208484529091528120906122718282613e9b565b60018201805461ffff1916905561228c600283016000613ed5565b61229a600383016000613e9b565b60048201600090556005820160006122b29190613e9b565b50506000818152610103602052604081206122cc91613e9b565b604051819033907f21372e37743553ba8e5f61239803174a827c7732d53ec8adcb76c6b3bb2c13f190600090a3610d2d6001609755565b600080600061234785858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506132e392505050565b6001600160a01b03166344c9af28876040518263ffffffff1660e01b815260040161237491815260200190565b606060405180830381865afa158015612391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b591906154d0565b92509250925093509350939050565b60008061240684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506132e392505050565b6001600160a01b0316635922f420898989896040518563ffffffff1660e01b815260040161243794939291906154fe565b60408051808303816000875af1158015612455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247991906155c3565b91509150965096945050505050565b6124906138fb565b60008190036124b25760405163e8cf362360e01b815260040160405180910390fd5b60f96124bf8284836155e8565b5060fa805463ffffffff191663ffffffff9290921691909117905550565b6124e5613247565b60006124f461172f868061504e565b905061250361159d868061504e565b6001600160a01b031663cb535ab58373__$d825222459c46c14afb2efe0967c30e98d$__6311a7a373896040518263ffffffff1660e01b815260040161254991906150d0565b600060405180830381865af4158015612566573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261258e9190810190614a4e565b6040516374e9704560e01b815273__$d825222459c46c14afb2efe0967c30e98d$__906374e97045906125c7908b908b906004016156a8565b602060405180830381865af41580156125e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126089190615192565b60405160200161261a91815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161264793929190614bf1565b600060405180830381600087803b15801561266157600080fd5b505af1158015612675573d6000803e3d6000fd5b505050506001600160a01b038116600090815260ff602052604081208161269c888061504e565b60200135815260200190815260200160002060008760400160208101906126c391906151ab565b6001600160401b0316815260208101919091526040016000205460ff169050806127005760405163ca89746b60e01b815260040160405180910390fd5b60008061279f84637e1d42b560e01b8a73__$d825222459c46c14afb2efe0967c30e98d$__63360b8cd78c8c6040518363ffffffff1660e01b81526004016127499291906156a8565b600060405180830381865af4158015612766573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261278e91908101906152f3565b6040516024016108649291906156bc565b9150915081156129c35760026001600160a01b038516600090815260fb60205260408120906127ce8b8061504e565b60209081013582528101919091526040016000206001015460ff1660028111156127fa576127fa614334565b036128ef576001600160a01b038416600090815260fe60205260408120906128228a8061504e565b60209081013582528101919091526040908101600020546001600160401b0316906128539060608b01908b016151ab565b6001600160401b03161461287a5760405163362a414d60e01b815260040160405180910390fd5b61288a6060890160408a016151ab565b6128959060016151f6565b6001600160a01b038516600090815260fe60205260408120906128b88b8061504e565b60200135815260200190815260200160002060006101000a8154816001600160401b0302191690836001600160401b031602179055505b6001600160a01b038416600090815260ff60205260408120906129128a8061504e565b602001358152602001908152602001600020600089604001602081019061293991906151ab565b6001600160401b031681526020810191909152604001600020805460ff19169055612964888061504e565b602001356001600160a01b0385167fe46f6591236abe528fe47a3b281fb002524dadd3e62b1f317ed285d07273c3b16129a360608c0160408d016151ab565b6040516001600160401b03909116815260200160405180910390a3612a05565b836001600160a01b03167f625eea143c9dae6915c809da47016c22d9cd006c3ace7c345c5cbcf57d3aefbc826040516129fc919061462a565b60405180910390a25b50505050612a136001609755565b50505050565b612a216138fb565b6101048282604051612a349291906156e1565b90815260405190819003602001902080546001600160a01b03191690555050565b6000612a5f613247565b612a6885613b80565b42826001600160401b031611612a915760405163551ea0fb60e11b815260040160405180910390fd5b5033600090815260fc602090815260408083208784529091528120546001600160401b031690819003612ad757604051631e510bfb60e21b815260040160405180910390fd5b33600090815260ff6020908152604080832088845282528083206001600160401b03851684529091529020805460ff19166001908117909155612b1b9082906151f6565b33600081815260fc602090815260408083208a845290915290819020805467ffffffffffffffff19166001600160401b03949094169390931790925590518691907fb5bff96e18da044e4e34510d16df9053b9f1920f6a960732e5aaf22fe9b8013690612b8f9088908890879089906156f1565b60405180910390a3612ba16001609755565b949350505050565b612bb16138fb565b606580546001600160a01b0383166001600160a01b03199091168117909155612be26033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b612c22613247565b6001600160a01b038316612c495760405163cbdd34cf60e01b815260040160405180910390fd5b6001600160a01b038316600090815260fb60209081526040808320858452909152808220815160e08101909252805482908290612c859061501a565b80601f0160208091040260200160405190810160405280929190818152602001828054612cb19061501a565b8015612cfe5780601f10612cd357610100808354040283529160200191612cfe565b820191906000526020600020905b815481529060010190602001808311612ce157829003601f168201915b5050509183525050600182015460209091019060ff166002811115612d2557612d25614334565b6002811115612d3657612d36614334565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b82821015612e1c578382906000526020600020018054612d8f9061501a565b80601f0160208091040260200160405190810160405280929190818152602001828054612dbb9061501a565b8015612e085780601f10612ddd57610100808354040283529160200191612e08565b820191906000526020600020905b815481529060010190602001808311612deb57829003601f168201915b505050505081526020019060010190612d70565b505050508152602001600382018054612e349061501a565b80601f0160208091040260200160405190810160405280929190818152602001828054612e609061501a565b8015612ead5780601f10612e8257610100808354040283529160200191612ead565b820191906000526020600020905b815481529060010190602001808311612e9057829003601f168201915b5050505050815260200160048201548152602001600582018054612ed09061501a565b80601f0160208091040260200160405190810160405280929190818152602001828054612efc9061501a565b8015612f495780601f10612f1e57610100808354040283529160200191612f49565b820191906000526020600020905b815481529060010190602001808311612f2c57829003601f168201915b5050509190925250505060a0810151909150612f7857604051634d93b09d60e11b815260040160405180910390fd5b612f81836139f0565b6001600160a01b031663cb535ab58373__$d825222459c46c14afb2efe0967c30e98d$__636f6547268560c00151886040518363ffffffff1660e01b8152600401612fcd929190615726565b600060405180830381865af4158015612fea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130129190810190614a4e565b602085015185516060870151608088015160a0890151604051631f621e1560e31b815273__$d825222459c46c14afb2efe0967c30e98d$__9563fb10f0a895613068956009959294919390929190600401615748565b600060405180830381865af4158015613085573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130ad9190810190614a4e565b6040518463ffffffff1660e01b81526004016130cb93929190614bf1565b600060405180830381600087803b1580156130e557600080fd5b505af11580156130f9573d6000803e3d6000fd5b5050505060008061312986633f9fdbe460e01b8786608001518760a00151604051602401610864939291906157f0565b6001600160a01b038816600090815260fb602090815260408083208a8452909152812092945090925061315c8282613e9b565b60018201805461ffff19169055613177600283016000613ed5565b613185600383016000613e9b565b600482016000905560058201600061319d9190613e9b565b50506000858152610103602052604081206131b791613e9b565b81156131f85760405185906001600160a01b038816907f5f010dbbd6bf46aec8131c5456301a75cd688d3cca9bc8380c9e26301be2072990600090a361323a565b856001600160a01b03167fc9d36d7a317cb116925d5cb66f0069fe825822fe23e9cf3f421c38cf444caa3082604051613231919061462a565b60405180910390a25b5050506115806001609755565b6002609754036132995760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c90565b6002609755565b8415806132ab575081155b806132b4575083155b806132bd575080155b156132db57604051637d6ba8a560e01b815260040160405180910390fd5b505050505050565b600081516000036133115760405163524e171160e01b81526020600482015260006024820152604401610c90565b610104826040516133229190615819565b908152604051908190036020019020546001600160a01b031690508061335d578160405163036c4d8760e11b8152600401610c90919061462a565b919050565b60fa5460009073__$f61eb90c6f674e787d51c07f105fa231e2$__9063a1ef9a989061339790859063ffffffff16818861582b565b6040518363ffffffff1660e01b81526004016133b49291906156a8565b602060405180830381865af41580156133d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f59190615855565b9392505050565b600060606001600160a01b0384163b61344457505060408051808201909152601481527318d85b1b081d1bc81b9bdb8b58dbdb9d1c9858dd60621b60208201526000906134e1565b60005a9050846001600160a01b0316846040516134619190615819565b6000604051808303816000865af19150503d806000811461349e576040519150601f19603f3d011682016040523d82523d6000602084013e6134a3565b606091505b509093509150821580156134c157506134bd604082615872565b5a11155b156134df5760405163b08ede0960e01b815260040160405180910390fd5b505b9250929050565b6040518060e001604052808780604001906135039190614955565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060200184600281111561354f5761354f614334565b815283151560208201526040016135668688615894565b81526020016135758380614955565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602083810135908201526040016135c38880614955565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160a01b038a16815260fb602090815260408083208b830135845290915290208251909150819061362d9082615411565b50602082015160018083018054909160ff199091169083600281111561365557613655614334565b021790555060408201516001820180549115156101000261ff001990921691909117905560608201518051613694916002840191602090910190613ef3565b50608082015160038201906136a99082615411565b5060a0820151600482015560c082015160058201906136c89082615411565b5050506001600160a01b038716600081815260fc602090815260408083208a8301358085529083528184208054600167ffffffffffffffff19918216811790925586865260fd85528386208387528552838620805482168317905595855260fe845282852091855292528220805490931617909155859085908161374e5761374e61499b565b90506020028101906137609190614955565b60208089013560009081526101039091526040902091610dde9190836155e8565b6001609755565b610d2d6138fb565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156137c35761158083613bbb565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561381d575060408051601f3d908101601f1916820190925261381a91810190615192565b60015b6138805760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610c90565b60008051602061596383398151915281146138ef5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610c90565b50611580838383613c57565b6033546001600160a01b03163314611fab5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c90565b60008290036139815760405163524e171160e01b81526020600482015260006024820152604401610c90565b6001600160a01b0381166139a85760405163cbdd34cf60e01b815260040160405180910390fd5b8061010484846040516139bc9291906156e1565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055505050565b6000818152610103602052604081208054829190613a0d9061501a565b80601f0160208091040260200160405190810160405280929190818152602001828054613a399061501a565b8015613a865780601f10613a5b57610100808354040283529160200191613a86565b820191906000526020600020905b815481529060010190602001808311613a6957829003601f168201915b505050505090508051600003613ab2576040516363b99a9d60e11b815260048101849052602401610c90565b6133f5816132e3565b60006001600160401b03831615801590613ade5750826001600160401b03164210155b806133f557506001600160401b038216158015906133f55750506001600160401b0316431015919050565b606580546001600160a01b0319169055610d2d81613c7c565b600054610100900460ff16613b495760405162461bcd60e51b8152600401610c9090615917565b611fab613cce565b600054610100900460ff16613b785760405162461bcd60e51b8152600401610c9090615917565b611fab613cfe565b33600090815260fb60209081526040808320848452909152902060040154610d2d57604051631109bfb360e31b815260040160405180910390fd5b6001600160a01b0381163b613c285760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610c90565b60008051602061596383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b613c6083613d25565b600082511180613c6d5750805b1561158057612a138383613d65565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613cf55760405162461bcd60e51b8152600401610c9090615917565b611fab33613b09565b600054610100900460ff166137815760405162461bcd60e51b8152600401610c9090615917565b613d2e81613bbb565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606133f58383604051806060016040528060278152602001615983602791396060600080856001600160a01b031685604051613da29190615819565b600060405180830381855af49150503d8060008114613ddd576040519150601f19603f3d011682016040523d82523d6000602084013e613de2565b606091505b5091509150613df386838387613dfd565b9695505050505050565b60608315613e6c578251600003613e65576001600160a01b0385163b613e655760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c90565b5081612ba1565b612ba18383815115613e815781518083602001fd5b8060405162461bcd60e51b8152600401610c90919061462a565b508054613ea79061501a565b6000825580601f10613eb7575050565b601f016020900490600052602060002090810190610d2d9190613f49565b5080546000825590600052602060002090810190610d2d9190613f5e565b828054828255906000526020600020908101928215613f39579160200282015b82811115613f395782518290613f299082615411565b5091602001919060010190613f13565b50613f45929150613f5e565b5090565b5b80821115613f455760008155600101613f4a565b80821115613f45576000613f728282613e9b565b50600101613f5e565b600060608284031215613f8d57600080fd5b50919050565b60008083601f840112613fa557600080fd5b5081356001600160401b03811115613fbc57600080fd5b6020830191508360208260051b85010111156134e157600080fd5b80356003811061335d57600080fd5b8015158114610d2d57600080fd5b803561335d81613fe6565b600060408284031215613f8d57600080fd5b600080600080600080600060c0888a03121561402c57600080fd5b87356001600160401b038082111561404357600080fd5b61404f8b838c01613f7b565b985060208a013591508082111561406557600080fd5b6140718b838c01613f93565b909850965086915061408560408b01613fd7565b955061409360608b01613ff4565b945060808a01359150808211156140a957600080fd5b6140b58b838c01613f7b565b935060a08a01359150808211156140cb57600080fd5b506140d88a828b01613fff565b91505092959891949750929550565b600080600080600080600060c0888a03121561410257600080fd5b87356001600160401b038082111561411957600080fd5b6141258b838c01613f7b565b985061413360208b01613fd7565b975061414160408b01613ff4565b965060608a013591508082111561415757600080fd5b6141638b838c01613f93565b909650945060808a01359150808211156140a957600080fd5b6001600160a01b0381168114610d2d57600080fd5b6000602082840312156141a357600080fd5b81356133f58161417c565b60008083601f8401126141c057600080fd5b5081356001600160401b038111156141d757600080fd5b6020830191508360208285010111156134e157600080fd5b60008060008060008060008060a0898b03121561420b57600080fd5b88356001600160401b038082111561422257600080fd5b61422e8c838d016141ae565b909a50985088915061424260208c01613fd7565b975060408b0135915061425482613fe6565b90955060608a0135908082111561426a57600080fd5b6142768c838d01613f93565b909650945060808b013591508082111561428f57600080fd5b5061429c8b828c016141ae565b999c989b5096995094979396929594505050565b600080604083850312156142c357600080fd5b82356142ce8161417c565b946020939093013593505050565b60005b838110156142f75781810151838201526020016142df565b83811115612a135750506000910152565b600081518084526143208160208601602086016142dc565b601f01601f19169290920160200192915050565b634e487b7160e01b600052602160045260246000fd5b6003811061435a5761435a614334565b9052565b600081518084526020808501808196508360051b8101915082860160005b858110156143a6578284038952614394848351614308565b9885019893509084019060010161437c565b5091979650505050505050565b602081526000825160e060208401526143d0610100840182614308565b905060208401516143e4604085018261434a565b506040840151151560608401526060840151601f198085840301608086015261440d838361435e565b925060808601519150808584030160a086015261442a8383614308565b925060a086015160c086015260c08601519150808584030160e0860152506144528282614308565b95945050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156144995761449961445b565b604052919050565b60006001600160401b038211156144ba576144ba61445b565b50601f01601f191660200190565b60006144db6144d6846144a1565b614471565b90508281528383830111156144ef57600080fd5b828260208301376000602084830101529392505050565b6000806040838503121561451957600080fd5b82356145248161417c565b915060208301356001600160401b0381111561453f57600080fd5b8301601f8101851361455057600080fd5b61455f858235602084016144c8565b9150509250929050565b60008060006040848603121561457e57600080fd5b83356001600160401b0381111561459457600080fd5b6145a0868287016141ae565b90945092505060208401356145b48161417c565b809150509250925092565b600060e08284031215613f8d57600080fd5b600080604083850312156145e457600080fd5b82356001600160401b03808211156145fb57600080fd5b614607868387016145bf565b9350602085013591508082111561461d57600080fd5b5061455f85828601613fff565b6020815260006133f56020830184614308565b600082601f83011261464e57600080fd5b6133f5838335602085016144c8565b6000806040838503121561467057600080fd5b82356001600160401b0381111561468657600080fd5b6146928582860161463d565b92505060208301356146a38161417c565b809150509250929050565b6000602082840312156146c057600080fd5b5035919050565b6000806000604084860312156146dc57600080fd5b8335925060208401356001600160401b038111156146f957600080fd5b614705868287016141ae565b9497909650939450505050565b60008060008060008060a0878903121561472b57600080fd5b86356001600160401b038082111561474257600080fd5b61474e8a838b01613f7b565b9750602089013591508082111561476457600080fd5b908801906080828b03121561477857600080fd5b90955060408801359450606088013593506080880135908082111561479c57600080fd5b506147a989828a016141ae565b979a9699509497509295939492505050565b600080602083850312156147ce57600080fd5b82356001600160401b038111156147e457600080fd5b6147f0858286016141ae565b90969095509350505050565b6000806000806060858703121561481257600080fd5b84356001600160401b038082111561482957600080fd5b614835888389016145bf565b9550602087013591508082111561484b57600080fd5b614857888389016141ae565b9095509350604087013591508082111561487057600080fd5b5061487d87828801613fff565b91505092959194509250565b80356001600160401b038116811461335d57600080fd5b600080600080606085870312156148b657600080fd5b8435935060208501356001600160401b038111156148d357600080fd5b6148df878288016141ae565b90945092506148f2905060408601614889565b905092959194509250565b60008060006060848603121561491257600080fd5b833561491d8161417c565b92506020840135915060408401356001600160401b0381111561493f57600080fd5b61494b86828701613fff565b9150509250925092565b6000808335601e1984360301811261496c57600080fd5b8301803591506001600160401b0382111561498657600080fd5b6020019150368190038213156134e157600080fd5b634e487b7160e01b600052603260045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6040815260006149ee6040830185876149b1565b9050826020830152949350505050565b6000614a0c6144d6846144a1565b9050828152838383011115614a2057600080fd5b6133f58360208301846142dc565b600082601f830112614a3f57600080fd5b6133f5838351602085016149fe565b600060208284031215614a6057600080fd5b81516001600160401b03811115614a7657600080fd5b612ba184828501614a2e565b600a811061435a5761435a614334565b6000808335601e19843603018112614aa957600080fd5b83016020810192503590506001600160401b03811115614ac857600080fd5b8036038213156134e157600080fd5b614ae1818b614a82565b60006020614af18184018c61434a565b60c06040840152614b0660c084018a8c6149b1565b8381036060850152878152818101600589901b820183018a60005b8b811015614b5b57848303601f19018452614b3c828e614a92565b614b478582846149b1565b958801959450505090850190600101614b21565b50508581036080870152614b7081898b6149b1565b9450505050508260a08301529a9950505050505050505050565b6000808335601e19843603018112614ba157600080fd5b83016020810192503590506001600160401b03811115614bc057600080fd5b8060051b36038213156134e157600080fd5b60008235603e19833603018112614be857600080fd5b90910192915050565b6000606080835260a0808401614c078889614b8a565b60408786018190529281905260059260c08089019083861b8a01018460005b85811015614d67578b830360bf19018452813536889003607e19018112614c4c57600080fd5b87016080848101614c5d8380614b8a565b928752908290528b860191808c1b87018d0191908160005b82811015614ce557898503609f19018652614c908285614bd2565b614c9a8182614a92565b8e8852614caa8f890182846149b1565b9150506020614cbb81840184614a92565b9350888303828a0152614ccf8385836149b1565b9982019998505093909301925050600101614c75565b5050505060209150614cf982840184614a92565b87830384890152614d0b8382846149b1565b92505050614d1b88840184614a92565b8783038a890152614d2d8382846149b1565b92505050614d3d8d840184614a92565b93508682038e880152614d518285836149b1565b9783019796505050929092019150600101614c26565b505060208d013560808b015289810360208b0152614d85818d614308565b97505050878603818901525050505050613df38185614308565b848152836020820152606060408201526000613df36060830184866149b1565b81835260006020808501808196508560051b810191508460005b878110156143a6578284038952614df08288614a92565b614dfb8682846149b1565b9a87019a9550505090840190600101614dd9565b614e19818b61434a565b60c060208201526000614e3060c083018a8c614dbf565b8860408401528281036060840152614e4981888a6149b1565b905085608084015282810360a0840152614e648185876149b1565b9c9b505050505050505050505050565b600060208284031215614e8657600080fd5b81516001600160401b03811115614e9c57600080fd5b8201601f81018413614ead57600080fd5b612ba1848251602084016149fe565b60c081526000614ecf60c083018b614308565b614edc602084018b61434a565b88151560408401528281036060840152614ef781888a614dbf565b90508281036080840152614f0c8186886149b1565b9150508260a08301529998505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60a081526000614fce60a083018a8c6149b1565b614fdb602084018a61434a565b87151560408401528281036060840152614ff6818789614dbf565b9050828103608084015261500b8185876149b1565b9b9a5050505050505050505050565b600181811c9082168061502e57607f821691505b602082108103613f8d57634e487b7160e01b600052602260045260246000fd5b60008235603e1983360301811261506457600080fd5b9190910192915050565b600061507a8283614a92565b6040855261508c6040860182846149b1565b915050602083013560208501528091505092915050565b6001600160401b03806150b583614889565b168352806150c560208401614889565b166020840152505050565b6020815260006150e08384614bd2565b60e060208401526150f561010084018261506e565b90506151046020850185614bd2565b601f198085840301604086015261511b838361506e565b925061512960408701614889565b91506001600160401b0380831660608701526151486060880188614a92565b93508287860301608088015261515f8585836149b1565b94505061517260a08701608089016150a3565b8061517f60c08901614889565b1660e08701525050508091505092915050565b6000602082840312156151a457600080fd5b5051919050565b6000602082840312156151bd57600080fd5b6133f582614889565b6001600160401b03848116825260808201906151e560208401866150a3565b808416606084015250949350505050565b60006001600160401b0380831681851680830382111561522657634e487b7160e01b600052601160045260246000fd5b01949350505050565b600061523b8283614bd2565b60e0845261524c60e085018261506e565b905061525b6020840184614bd2565b848203602086015261526d828261506e565b91505061527c60408401614889565b6001600160401b0380821660408701526152996060860186614a92565b925086840360608801526152ae8484836149b1565b9350506152c160808701608087016150a3565b806152ce60c08701614889565b1660c087015250508091505092915050565b6020815260006133f5602083018461522f565b60006020828403121561530557600080fd5b81516001600160401b038082111561531c57600080fd5b908301906040828603121561533057600080fd5b60405160408101818110838211171561534b5761534b61445b565b604052825161535981613fe6565b815260208301518281111561536d57600080fd5b61537987828601614a2e565b60208301525095945050505050565b8051151582526000602082015160406020850152612ba16040850182614308565b6001600160401b0383168152604060208201526000612ba16040830184615388565b601f82111561158057600081815260208120601f850160051c810160208610156153f25750805b601f850160051c820191505b818110156132db578281556001016153fe565b81516001600160401b0381111561542a5761542a61445b565b61543e81615438845461501a565b846153cb565b602080601f831160018114615473576000841561545b5750858301515b600019600386901b1c1916600185901b1785556132db565b600085815260208120601f198616915b828110156154a257888601518255948401946001909101908401615483565b50858210156154c05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000806000606084860312156154e557600080fd5b835192506020840151915060408401516145b481613fe6565b60808152600061550e8687614b8a565b6060608085015261552360e085018284614dbf565b915050602087013560a08401526001600160401b0361554460408901614889565b1660c0840152828103602084015261555c8687614b8a565b6080835261556e608084018284614dbf565b91505061557e6020880188614b8a565b8383036020850152615591838284614dbf565b925050506040870135604083015260608701356060830152809250505083604083015282606083015295945050505050565b600080604083850312156155d657600080fd5b8251915060208301516146a381613fe6565b6001600160401b038311156155ff576155ff61445b565b6156138361560d835461501a565b836153cb565b6000601f841160018114615647576000851561562f5750838201355b600019600387901b1c1916600186901b1783556156a1565b600083815260209020601f19861690835b828110156156785786850135825560209485019460019092019101615658565b50868210156156955760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b602081526000612ba16020830184866149b1565b6040815260006156cf604083018561522f565b82810360208401526144528185615388565b8183823760009101908152919050565b6060815260006157056060830186886149b1565b6001600160401b039485166020840152929093166040909101529392505050565b6040815260006157396040830185614308565b90508260208301529392505050565b6157528188614a82565b600060206157628184018961434a565b60c0604084015261577660c0840188614308565b8381036060850152865180825282820190600581901b83018401848a0160005b838110156157c457601f198684030185526157b2838351614308565b94870194925090860190600101615796565b505086810360808801526157d8818a614308565b955050505050508260a0830152979650505050505050565b8381526060602082015260006158096060830185614308565b9050826040830152949350505050565b600082516150648184602087016142dc565b6000808585111561583b57600080fd5b8386111561584857600080fd5b5050820193919092039150565b60006020828403121561586757600080fd5b81516133f58161417c565b60008261588f57634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160401b03808411156158ae576158ae61445b565b8360051b60206158bf818301614471565b8681529185019181810190368411156158d757600080fd5b865b8481101561590b578035868111156158f15760008081fd5b6158fd36828b0161463d565b8452509183019183016158d9565b50979650505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d39d0d5d7c43f36bd05a85060c622d10750bcf9d2e32667055fa8967529877be64736f6c634300080f0033"; + "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e7565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e5576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516159df6200011f60003960008181610c5101528181610c9a015281816113f40152818161143401526114c701526159df6000f3fe6080604052600436106101c25760003560e01c8063715018a6116100f7578063940265cb11610095578063c3e1155c11610064578063c3e1155c14610538578063e30c397814610570578063f2fde38b1461058e578063f90b8e96146105ae57600080fd5b8063940265cb146104a35780639f59ae71146104d8578063ba5a4d25146104f8578063c00fa7c01461051857600080fd5b80637ab4339d116100d15780637ab4339d1461040857806381bc079b146104285780638da5cb5b146104485780638dd34bb41461046657600080fd5b8063715018a6146103bc5780637774a6d3146103d157806379ba5097146103f357600080fd5b8063478222c211610164578063556d51781161013e578063556d51781461033c5780635d7adf961461035c5780636050b5f31461037c5780636b67055e1461039c57600080fd5b8063478222c2146102cd5780634f1ef2861461030657806352d1902d1461031957600080fd5b80633659cfe6116101a05780633659cfe614610240578063418925b71461026057806342852d2414610280578063429446b6146102ad57600080fd5b80631eb9fc86146101c75780632494546b146101e95780632bf5d19d14610220575b600080fd5b3480156101d357600080fd5b506101e76101e2366004614011565b6105ce565b005b3480156101f557600080fd5b5060fa546102069063ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b34801561022c57600080fd5b506101e761023b3660046140e7565b610958565b34801561024c57600080fd5b506101e761025b366004614191565b610c47565b34801561026c57600080fd5b506101e761027b3660046141ef565b610d2f565b34801561028c57600080fd5b506102a061029b3660046142b0565b610de8565b60405161021791906143b3565b3480156102b957600080fd5b506101e76102c8366004614011565b611140565b3480156102d957600080fd5b50610105546102ee906001600160a01b031681565b6040516001600160a01b039091168152602001610217565b6101e7610314366004614506565b6113ea565b34801561032557600080fd5b5061032e6114ba565b604051908152602001610217565b34801561034857600080fd5b506101e7610357366004614569565b61156d565b34801561036857600080fd5b506101e76103773660046145d1565b611585565b34801561038857600080fd5b506101e76103973660046145d1565b611895565b3480156103a857600080fd5b506101e76103b73660046145d1565b6118a7565b3480156103c857600080fd5b506101e7611f99565b3480156103dd57600080fd5b506103e6611fad565b604051610217919061462a565b3480156103ff57600080fd5b506101e761203b565b34801561041457600080fd5b506101e761042336600461465d565b6120b2565b34801561043457600080fd5b506101e76104433660046146ae565b61223b565b34801561045457600080fd5b506033546001600160a01b03166102ee565b34801561047257600080fd5b506104866104813660046146c7565b612303565b604080519384526020840192909252151590820152606001610217565b3480156104af57600080fd5b506104c36104be366004614712565b6123c4565b60408051928352901515602083015201610217565b3480156104e457600080fd5b506101e76104f33660046147bb565b612488565b34801561050457600080fd5b506101e76105133660046147fc565b6124dd565b34801561052457600080fd5b506101e76105333660046147bb565b612a19565b34801561054457600080fd5b506105586105533660046148a0565b612a55565b6040516001600160401b039091168152602001610217565b34801561057c57600080fd5b506065546001600160a01b03166102ee565b34801561059a57600080fd5b506101e76105a9366004614191565b612ba9565b3480156105ba57600080fd5b506101e76105c93660046148fd565b612c1a565b6105d6613247565b60028510156105f85760405163af0ba14d60e01b815260040160405180910390fd5b61061e6106058880614955565b60208a01356106148680614955565b87602001356132a0565b610680868660008181106106345761063461499b565b90506020028101906106469190614955565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506132e392505050565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36106b38c80614955565b8d602001356040518463ffffffff1660e01b81526004016106d6939291906149da565b600060405180830381865af41580156106f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261071b9190810190614a4e565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60078a8e80604001906107489190614955565b8f8f6107548e80614955565b8f602001356040518a63ffffffff1660e01b815260040161077d99989796959493929190614ad7565b600060405180830381865af415801561079a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107c29190810190614a4e565b6040518463ffffffff1660e01b81526004016107e093929190614bf1565b600060405180830381600087803b1580156107fa57600080fd5b505af115801561080e573d6000803e3d6000fd5b5060009250610829915061082490508980614955565b613362565b905060008061089b836301d08fc560e71b6020808e01359089013561085160408b018b614955565b6040516024016108649493929190614d9f565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526133fc565b915091508115610900576108b4838b8b8b8b8b8b6134e8565b826001600160a01b03167fcf8be9ab2b5edf8beb2c45abe8e0cc7646318ac19f6c3164ba2e19e93a8a32af8b602001356040516108f391815260200190565b60405180910390a2610942565b826001600160a01b03167f971a4433f5bff5f011728a4123aeeca4b5275ac20b013cf276e65510491ac26f82604051610939919061462a565b60405180910390a25b50505061094f6001609755565b50505050505050565b610960613247565b600283146109815760405163af0ba14d60e01b815260040160405180910390fd5b61098e6106058880614955565b6109a4848460008181106106345761063461499b565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36109d78c80614955565b8d602001356040518463ffffffff1660e01b81526004016109fa939291906149da565b600060405180830381865af4158015610a17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a3f9190810190614a4e565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60068c8e8060400190610a6c9190614955565b8d8d610a788e80614955565b8f602001356040518a63ffffffff1660e01b8152600401610aa199989796959493929190614ad7565b600060405180830381865af4158015610abe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ae69190810190614a4e565b6040518463ffffffff1660e01b8152600401610b0493929190614bf1565b600060405180830381600087803b158015610b1e57600080fd5b505af1158015610b32573d6000803e3d6000fd5b5060009250610b48915061082490508980614955565b9050600080610b9e83634bdb559760e01b8b8a8a8f602001358b8060000190610b719190614955565b8d602001358e8060400190610b869190614955565b60405160240161086499989796959493929190614e0f565b915091508115610c0e57826001600160a01b03167ff910705a7a768eb5958f281a5f84cae8bffc5dd811ca5cd303dda140a423698c82806020019051810190610be79190614e74565b8b8b8b8b610bf58c80614955565b8d602001356040516108f3989796959493929190614ebc565b826001600160a01b03167f9e2fe55a3b54b57f82334c273f8d048cd7f05ad19c16cf334276a8c1fec4b6fd82604051610939919061462a565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c985760405162461bcd60e51b8152600401610c8f90614f22565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610ce1600080516020615963833981519152546001600160a01b031690565b6001600160a01b031614610d075760405162461bcd60e51b8152600401610c8f90614f6e565b610d1081613788565b60408051600080825260208201909252610d2c91839190613790565b50565b610d37613247565b600283141580610d45575080155b15610d6357604051637d6ba8a560e01b815260040160405180910390fd5b6000879003610d855760405163f61bbcf360e01b815260040160405180910390fd5b336001600160a01b03167f20fd8a5856711b18d00def4aa6abafbe00ce6d60795e015cc1cad35eb9b463598989898989898989604051610dcc989796959493929190614fba565b60405180910390a2610dde6001609755565b5050505050505050565b610e2e6040805160e08101909152606081526020810160008152602001600015158152602001606081526020016060815260200160008019168152602001606081525090565b6001600160a01b038316600090815260fb6020908152604080832085845290915290819020815160e08101909252805482908290610e6b9061501a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e979061501a565b8015610ee45780601f10610eb957610100808354040283529160200191610ee4565b820191906000526020600020905b815481529060010190602001808311610ec757829003601f168201915b5050509183525050600182015460209091019060ff166002811115610f0b57610f0b614334565b6002811115610f1c57610f1c614334565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b82821015611002578382906000526020600020018054610f759061501a565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa19061501a565b8015610fee5780601f10610fc357610100808354040283529160200191610fee565b820191906000526020600020905b815481529060010190602001808311610fd157829003601f168201915b505050505081526020019060010190610f56565b50505050815260200160038201805461101a9061501a565b80601f01602080910402602001604051908101604052809291908181526020018280546110469061501a565b80156110935780601f1061106857610100808354040283529160200191611093565b820191906000526020600020905b81548152906001019060200180831161107657829003601f168201915b50505050508152602001600482015481526020016005820180546110b69061501a565b80601f01602080910402602001604051908101604052809291908181526020018280546110e29061501a565b801561112f5780601f106111045761010080835404028352916020019161112f565b820191906000526020600020905b81548152906001019060200180831161111257829003601f168201915b505050505081525050905092915050565b611148613247565b600285101561116a5760405163af0ba14d60e01b815260040160405180910390fd5b6111776106058880614955565b61118d868660008181106106345761063461499b565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36111c08c80614955565b8d602001356040518463ffffffff1660e01b81526004016111e3939291906149da565b600060405180830381865af4158015611200573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112289190810190614a4e565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60088a8e80604001906112559190614955565b8f8f6112618e80614955565b8f602001356040518a63ffffffff1660e01b815260040161128a99989796959493929190614ad7565b600060405180830381865af41580156112a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112cf9190810190614a4e565b6040518463ffffffff1660e01b81526004016112ed93929190614bf1565b600060405180830381600087803b15801561130757600080fd5b505af115801561131b573d6000803e3d6000fd5b5060009250611331915061082490508980614955565b90506000806113598363fad28a2460e01b8c6020013560405160240161086491815260200190565b9150915081156113b157611372838b8b8b8b8b8b6134e8565b826001600160a01b03167fe80f571f70f7cabf9d7ac60ece08421be374117776c311c327a083ca398f802f8b602001356040516108f391815260200190565b826001600160a01b03167ff6a58ef30f66943749e8c29c661c84da143a1c8ed017f5faa92b509e0000875a82604051610939919061462a565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036114325760405162461bcd60e51b8152600401610c8f90614f22565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661147b600080516020615963833981519152546001600160a01b031690565b6001600160a01b0316146114a15760405162461bcd60e51b8152600401610c8f90614f6e565b6114aa82613788565b6114b682826001613790565b5050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461155a5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610c8f565b5060008051602061596383398151915290565b6115756138fb565b611580838383613955565b505050565b61158d613247565b6115a661159d602084018461504e565b602001356139f0565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634b5728d1866040518263ffffffff1660e01b81526004016115ec91906150d0565b600060405180830381865af4158015611609573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116319190810190614a4e565b604051637e4794ed60e11b815273__$d825222459c46c14afb2efe0967c30e98d$__9063fc8f29da906116689089906004016150d0565b602060405180830381865af4158015611685573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a99190615192565b6040516020016116bb91815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016116e893929190614bf1565b600060405180830381600087803b15801561170257600080fd5b505af1158015611716573d6000803e3d6000fd5b50505050600061173983806020019061172f919061504e565b6108249080614955565b6001600160a01b038116600090815261010060209081526040822092935090919082906117689087018761504e565b602001358152602001908152602001600020600085604001602081019061178f91906151ab565b6001600160401b0316815260208101919091526040016000205460ff16905080156117cd5760405163066c745760e01b815260040160405180910390fd5b6117f56117e060e0860160c087016151ab565b6117f060c0870160a088016151ab565b613abb565b611812576040516312c9cc9f60e01b815260040160405180910390fd5b61181f602085018561504e565b602001356001600160a01b0383167fedbcd9eeb09d85c3ea1b5bf002c04478059cb261cab82c903885cefccae374bc61185e60608801604089016151ab565b6080880161187260e08a0160c08b016151ab565b604051611881939291906151c6565b60405180910390a350506114b66001609755565b61189d613247565b6114b66001609755565b6118af613247565b6118bf61159d602084018461504e565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634b5728d1866040518263ffffffff1660e01b815260040161190591906150d0565b600060405180830381865af4158015611922573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261194a9190810190614a4e565b604051637e4794ed60e11b815273__$d825222459c46c14afb2efe0967c30e98d$__9063fc8f29da906119819089906004016150d0565b602060405180830381865af415801561199e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c29190615192565b6040516020016119d491815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401611a0193929190614bf1565b600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b505050506000611a4883806020019061172f919061504e565b6001600160a01b03811660009081526101006020908152604082209293509091908290611a779087018761504e565b6020013581526020019081526020016000206000856040016020810190611a9e91906151ab565b6001600160401b0316815260208101919091526040016000205460ff1690508015611adc5760405163066c745760e01b815260040160405180910390fd5b6001600160a01b03821660009081526101006020908152604082206001929091611b089088018861504e565b6020013581526020019081526020016000206000866040016020810190611b2f91906151ab565b6001600160401b031681526020810191909152604001600020805460ff191691151591909117905560026001600160a01b038316600090815260fb6020908152604082209190611b819088018861504e565b60209081013582528101919091526040016000206001015460ff166002811115611bad57611bad614334565b03611cac576001600160a01b038216600090815260fd6020908152604082209190611bda9087018761504e565b60209081013582528101919091526040908101600020546001600160401b031690611c0b90606087019087016151ab565b6001600160401b031614611c325760405163362a414d60e01b815260040160405180910390fd5b611c4260608501604086016151ab565b611c4d9060016151f6565b6001600160a01b038316600090815260fd6020908152604082209190611c759088018861504e565b60200135815260200190815260200160002060006101000a8154816001600160401b0302191690836001600160401b031602179055505b611cb9602085018561504e565b602001356001600160a01b0383167fde5b57e6566d68a30b0979431df3d5df6db3b9aa89f8820f595b9315bf86d067611cf860608801604089016151ab565b6040516001600160401b03909116815260200160405180910390a3611d266117e060e0860160c087016151ab565b15611da957611d38602085018561504e565b602001356001600160a01b0383167fedbcd9eeb09d85c3ea1b5bf002c04478059cb261cab82c903885cefccae374bc611d7760608801604089016151ab565b60808801611d8b60e08a0160c08b016151ab565b604051611d9a939291906151c6565b60405180910390a3505061189d565b604080518082019091526000815260606020820152600080611dde85634dcc0aa660e01b8960405160240161086491906152e0565b915091508115611e035780806020019051810190611dfc91906152f3565b9250611e1b565b60408051808201909152600081526020810182905292505b6001600160a01b0385166000908152610101602090815260408220908290611e45908b018b61504e565b6020013581526020019081526020016000206000896040016020810190611e6c91906151ab565b6001600160401b0316815260208101919091526040016000205460ff1690508015611eaa57604051637aa549d360e01b815260040160405180910390fd5b6001600160a01b03861660009081526101016020908152604082206001929091611ed6908c018c61504e565b60200135815260200190815260200160002060008a6040016020810190611efd91906151ab565b6001600160401b03168152602080820192909252604001600020805460ff191692151592909217909155611f339089018961504e565b602001356001600160a01b0387167fa32e6f42b1d63fb83ad73b009a6dbb9413d1da02e95b1bb08f081815eea8db20611f7260608c0160408d016151ab565b87604051611f819291906153a9565b60405180910390a35050505050506114b66001609755565b611fa16138fb565b611fab6000613b09565b565b60f98054611fba9061501a565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe69061501a565b80156120335780601f1061200857610100808354040283529160200191612033565b820191906000526020600020905b81548152906001019060200180831161201657829003601f168201915b505050505081565b60655433906001600160a01b031681146120a95760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610c8f565b610d2c81613b09565b600054600290610100900460ff161580156120d4575060005460ff8083169116105b6121375760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c8f565b6000805461ffff191660ff831617610100179055612153613247565b82516000036121755760405163e8cf362360e01b815260040160405180910390fd5b6001600160a01b03821661219c5760405163cbdd34cf60e01b815260040160405180910390fd5b6121a4613b22565b6121ac613b51565b60f96121b88482615411565b50825160fa805463ffffffff191663ffffffff90921691909117905561010580546001600160a01b0319166001600160a01b03841617905560016097556000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b612243613247565b61224c81613b80565b33600090815260fb602090815260408083208484529091528120906122718282613e9b565b60018201805461ffff1916905561228c600283016000613ed5565b61229a600383016000613e9b565b60048201600090556005820160006122b29190613e9b565b50506000818152610103602052604081206122cc91613e9b565b604051819033907f21372e37743553ba8e5f61239803174a827c7732d53ec8adcb76c6b3bb2c13f190600090a3610d2c6001609755565b600080600061234785858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506132e392505050565b6001600160a01b03166344c9af28876040518263ffffffff1660e01b815260040161237491815260200190565b606060405180830381865afa158015612391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b591906154d0565b92509250925093509350939050565b60008061240684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506132e392505050565b6001600160a01b0316635922f420898989896040518563ffffffff1660e01b815260040161243794939291906154fe565b60408051808303816000875af1158015612455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247991906155c3565b91509150965096945050505050565b6124906138fb565b60008190036124b25760405163e8cf362360e01b815260040160405180910390fd5b60f96124bf8284836155e8565b5060fa805463ffffffff191663ffffffff9290921691909117905550565b6124e5613247565b60006124f461172f868061504e565b905061250361159d868061504e565b6001600160a01b031663cb535ab58373__$d825222459c46c14afb2efe0967c30e98d$__6311a7a373896040518263ffffffff1660e01b815260040161254991906150d0565b600060405180830381865af4158015612566573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261258e9190810190614a4e565b6040516374e9704560e01b815273__$d825222459c46c14afb2efe0967c30e98d$__906374e97045906125c7908b908b906004016156a8565b602060405180830381865af41580156125e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126089190615192565b60405160200161261a91815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161264793929190614bf1565b600060405180830381600087803b15801561266157600080fd5b505af1158015612675573d6000803e3d6000fd5b505050506001600160a01b038116600090815260ff602052604081208161269c888061504e565b60200135815260200190815260200160002060008760400160208101906126c391906151ab565b6001600160401b0316815260208101919091526040016000205460ff169050806127005760405163ca89746b60e01b815260040160405180910390fd5b60008061279f84637e1d42b560e01b8a73__$d825222459c46c14afb2efe0967c30e98d$__63360b8cd78c8c6040518363ffffffff1660e01b81526004016127499291906156a8565b600060405180830381865af4158015612766573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261278e91908101906152f3565b6040516024016108649291906156bc565b9150915081156129c35760026001600160a01b038516600090815260fb60205260408120906127ce8b8061504e565b60209081013582528101919091526040016000206001015460ff1660028111156127fa576127fa614334565b036128ef576001600160a01b038416600090815260fe60205260408120906128228a8061504e565b60209081013582528101919091526040908101600020546001600160401b0316906128539060608b01908b016151ab565b6001600160401b03161461287a5760405163362a414d60e01b815260040160405180910390fd5b61288a6060890160408a016151ab565b6128959060016151f6565b6001600160a01b038516600090815260fe60205260408120906128b88b8061504e565b60200135815260200190815260200160002060006101000a8154816001600160401b0302191690836001600160401b031602179055505b6001600160a01b038416600090815260ff60205260408120906129128a8061504e565b602001358152602001908152602001600020600089604001602081019061293991906151ab565b6001600160401b031681526020810191909152604001600020805460ff19169055612964888061504e565b602001356001600160a01b0385167fe46f6591236abe528fe47a3b281fb002524dadd3e62b1f317ed285d07273c3b16129a360608c0160408d016151ab565b6040516001600160401b03909116815260200160405180910390a3612a05565b836001600160a01b03167f625eea143c9dae6915c809da47016c22d9cd006c3ace7c345c5cbcf57d3aefbc826040516129fc919061462a565b60405180910390a25b50505050612a136001609755565b50505050565b612a216138fb565b6101048282604051612a349291906156e1565b90815260405190819003602001902080546001600160a01b03191690555050565b6000612a5f613247565b612a6885613b80565b42826001600160401b031611612a915760405163551ea0fb60e11b815260040160405180910390fd5b5033600090815260fc602090815260408083208784529091528120546001600160401b031690819003612ad757604051631e510bfb60e21b815260040160405180910390fd5b33600090815260ff6020908152604080832088845282528083206001600160401b03851684529091529020805460ff19166001908117909155612b1b9082906151f6565b33600081815260fc602090815260408083208a845290915290819020805467ffffffffffffffff19166001600160401b03949094169390931790925590518691907fb5bff96e18da044e4e34510d16df9053b9f1920f6a960732e5aaf22fe9b8013690612b8f9088908890879089906156f1565b60405180910390a3612ba16001609755565b949350505050565b612bb16138fb565b606580546001600160a01b0383166001600160a01b03199091168117909155612be26033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b612c22613247565b6001600160a01b038316612c495760405163cbdd34cf60e01b815260040160405180910390fd5b6001600160a01b038316600090815260fb60209081526040808320858452909152808220815160e08101909252805482908290612c859061501a565b80601f0160208091040260200160405190810160405280929190818152602001828054612cb19061501a565b8015612cfe5780601f10612cd357610100808354040283529160200191612cfe565b820191906000526020600020905b815481529060010190602001808311612ce157829003601f168201915b5050509183525050600182015460209091019060ff166002811115612d2557612d25614334565b6002811115612d3657612d36614334565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b82821015612e1c578382906000526020600020018054612d8f9061501a565b80601f0160208091040260200160405190810160405280929190818152602001828054612dbb9061501a565b8015612e085780601f10612ddd57610100808354040283529160200191612e08565b820191906000526020600020905b815481529060010190602001808311612deb57829003601f168201915b505050505081526020019060010190612d70565b505050508152602001600382018054612e349061501a565b80601f0160208091040260200160405190810160405280929190818152602001828054612e609061501a565b8015612ead5780601f10612e8257610100808354040283529160200191612ead565b820191906000526020600020905b815481529060010190602001808311612e9057829003601f168201915b5050505050815260200160048201548152602001600582018054612ed09061501a565b80601f0160208091040260200160405190810160405280929190818152602001828054612efc9061501a565b8015612f495780601f10612f1e57610100808354040283529160200191612f49565b820191906000526020600020905b815481529060010190602001808311612f2c57829003601f168201915b5050509190925250505060a0810151909150612f7857604051634d93b09d60e11b815260040160405180910390fd5b612f81836139f0565b6001600160a01b031663cb535ab58373__$d825222459c46c14afb2efe0967c30e98d$__636f6547268560c00151886040518363ffffffff1660e01b8152600401612fcd929190615726565b600060405180830381865af4158015612fea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130129190810190614a4e565b602085015185516060870151608088015160a0890151604051631f621e1560e31b815273__$d825222459c46c14afb2efe0967c30e98d$__9563fb10f0a895613068956009959294919390929190600401615748565b600060405180830381865af4158015613085573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130ad9190810190614a4e565b6040518463ffffffff1660e01b81526004016130cb93929190614bf1565b600060405180830381600087803b1580156130e557600080fd5b505af11580156130f9573d6000803e3d6000fd5b5050505060008061312986633f9fdbe460e01b8786608001518760a00151604051602401610864939291906157f0565b6001600160a01b038816600090815260fb602090815260408083208a8452909152812092945090925061315c8282613e9b565b60018201805461ffff19169055613177600283016000613ed5565b613185600383016000613e9b565b600482016000905560058201600061319d9190613e9b565b50506000858152610103602052604081206131b791613e9b565b81156131f85760405185906001600160a01b038816907f5f010dbbd6bf46aec8131c5456301a75cd688d3cca9bc8380c9e26301be2072990600090a361323a565b856001600160a01b03167fc9d36d7a317cb116925d5cb66f0069fe825822fe23e9cf3f421c38cf444caa3082604051613231919061462a565b60405180910390a25b5050506115806001609755565b6002609754036132995760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c8f565b6002609755565b8415806132ab575081155b806132b4575083155b806132bd575080155b156132db57604051637d6ba8a560e01b815260040160405180910390fd5b505050505050565b600081516000036133115760405163524e171160e01b81526020600482015260006024820152604401610c8f565b610104826040516133229190615819565b908152604051908190036020019020546001600160a01b031690508061335d578160405163036c4d8760e11b8152600401610c8f919061462a565b919050565b60fa5460009073__$f61eb90c6f674e787d51c07f105fa231e2$__9063a1ef9a989061339790859063ffffffff16818861582b565b6040518363ffffffff1660e01b81526004016133b49291906156a8565b602060405180830381865af41580156133d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f59190615855565b9392505050565b600060606001600160a01b0384163b61344457505060408051808201909152601481527318d85b1b081d1bc81b9bdb8b58dbdb9d1c9858dd60621b60208201526000906134e1565b60005a9050846001600160a01b0316846040516134619190615819565b6000604051808303816000865af19150503d806000811461349e576040519150601f19603f3d011682016040523d82523d6000602084013e6134a3565b606091505b509093509150821580156134c157506134bd604082615872565b5a11155b156134df5760405163b08ede0960e01b815260040160405180910390fd5b505b9250929050565b6040518060e001604052808780604001906135039190614955565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060200184600281111561354f5761354f614334565b815283151560208201526040016135668688615894565b81526020016135758380614955565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602083810135908201526040016135c38880614955565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160a01b038a16815260fb602090815260408083208b830135845290915290208251909150819061362d9082615411565b50602082015160018083018054909160ff199091169083600281111561365557613655614334565b021790555060408201516001820180549115156101000261ff001990921691909117905560608201518051613694916002840191602090910190613ef3565b50608082015160038201906136a99082615411565b5060a0820151600482015560c082015160058201906136c89082615411565b5050506001600160a01b038716600081815260fc602090815260408083208a8301358085529083528184208054600167ffffffffffffffff19918216811790925586865260fd85528386208387528552838620805482168317905595855260fe845282852091855292528220805490931617909155859085908161374e5761374e61499b565b90506020028101906137609190614955565b60208089013560009081526101039091526040902091610dde9190836155e8565b6001609755565b610d2c6138fb565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156137c35761158083613bbb565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561381d575060408051601f3d908101601f1916820190925261381a91810190615192565b60015b6138805760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610c8f565b60008051602061596383398151915281146138ef5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610c8f565b50611580838383613c57565b6033546001600160a01b03163314611fab5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c8f565b60008290036139815760405163524e171160e01b81526020600482015260006024820152604401610c8f565b6001600160a01b0381166139a85760405163cbdd34cf60e01b815260040160405180910390fd5b8061010484846040516139bc9291906156e1565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055505050565b6000818152610103602052604081208054829190613a0d9061501a565b80601f0160208091040260200160405190810160405280929190818152602001828054613a399061501a565b8015613a865780601f10613a5b57610100808354040283529160200191613a86565b820191906000526020600020905b815481529060010190602001808311613a6957829003601f168201915b505050505090508051600003613ab2576040516363b99a9d60e11b815260048101849052602401610c8f565b6133f5816132e3565b60006001600160401b03831615801590613ade5750826001600160401b03164210155b806133f557506001600160401b038216158015906133f55750506001600160401b0316431015919050565b606580546001600160a01b0319169055610d2c81613c7c565b600054610100900460ff16613b495760405162461bcd60e51b8152600401610c8f90615917565b611fab613cce565b600054610100900460ff16613b785760405162461bcd60e51b8152600401610c8f90615917565b611fab613cfe565b33600090815260fb60209081526040808320848452909152902060040154610d2c57604051631109bfb360e31b815260040160405180910390fd5b6001600160a01b0381163b613c285760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610c8f565b60008051602061596383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b613c6083613d25565b600082511180613c6d5750805b1561158057612a138383613d65565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613cf55760405162461bcd60e51b8152600401610c8f90615917565b611fab33613b09565b600054610100900460ff166137815760405162461bcd60e51b8152600401610c8f90615917565b613d2e81613bbb565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606133f58383604051806060016040528060278152602001615983602791396060600080856001600160a01b031685604051613da29190615819565b600060405180830381855af49150503d8060008114613ddd576040519150601f19603f3d011682016040523d82523d6000602084013e613de2565b606091505b5091509150613df386838387613dfd565b9695505050505050565b60608315613e6c578251600003613e65576001600160a01b0385163b613e655760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c8f565b5081612ba1565b612ba18383815115613e815781518083602001fd5b8060405162461bcd60e51b8152600401610c8f919061462a565b508054613ea79061501a565b6000825580601f10613eb7575050565b601f016020900490600052602060002090810190610d2c9190613f49565b5080546000825590600052602060002090810190610d2c9190613f5e565b828054828255906000526020600020908101928215613f39579160200282015b82811115613f395782518290613f299082615411565b5091602001919060010190613f13565b50613f45929150613f5e565b5090565b5b80821115613f455760008155600101613f4a565b80821115613f45576000613f728282613e9b565b50600101613f5e565b600060608284031215613f8d57600080fd5b50919050565b60008083601f840112613fa557600080fd5b5081356001600160401b03811115613fbc57600080fd5b6020830191508360208260051b85010111156134e157600080fd5b80356003811061335d57600080fd5b8015158114610d2c57600080fd5b803561335d81613fe6565b600060408284031215613f8d57600080fd5b600080600080600080600060c0888a03121561402c57600080fd5b87356001600160401b038082111561404357600080fd5b61404f8b838c01613f7b565b985060208a013591508082111561406557600080fd5b6140718b838c01613f93565b909850965086915061408560408b01613fd7565b955061409360608b01613ff4565b945060808a01359150808211156140a957600080fd5b6140b58b838c01613f7b565b935060a08a01359150808211156140cb57600080fd5b506140d88a828b01613fff565b91505092959891949750929550565b600080600080600080600060c0888a03121561410257600080fd5b87356001600160401b038082111561411957600080fd5b6141258b838c01613f7b565b985061413360208b01613fd7565b975061414160408b01613ff4565b965060608a013591508082111561415757600080fd5b6141638b838c01613f93565b909650945060808a01359150808211156140a957600080fd5b6001600160a01b0381168114610d2c57600080fd5b6000602082840312156141a357600080fd5b81356133f58161417c565b60008083601f8401126141c057600080fd5b5081356001600160401b038111156141d757600080fd5b6020830191508360208285010111156134e157600080fd5b60008060008060008060008060a0898b03121561420b57600080fd5b88356001600160401b038082111561422257600080fd5b61422e8c838d016141ae565b909a50985088915061424260208c01613fd7565b975060408b0135915061425482613fe6565b90955060608a0135908082111561426a57600080fd5b6142768c838d01613f93565b909650945060808b013591508082111561428f57600080fd5b5061429c8b828c016141ae565b999c989b5096995094979396929594505050565b600080604083850312156142c357600080fd5b82356142ce8161417c565b946020939093013593505050565b60005b838110156142f75781810151838201526020016142df565b83811115612a135750506000910152565b600081518084526143208160208601602086016142dc565b601f01601f19169290920160200192915050565b634e487b7160e01b600052602160045260246000fd5b6003811061435a5761435a614334565b9052565b600081518084526020808501808196508360051b8101915082860160005b858110156143a6578284038952614394848351614308565b9885019893509084019060010161437c565b5091979650505050505050565b602081526000825160e060208401526143d0610100840182614308565b905060208401516143e4604085018261434a565b506040840151151560608401526060840151601f198085840301608086015261440d838361435e565b925060808601519150808584030160a086015261442a8383614308565b925060a086015160c086015260c08601519150808584030160e0860152506144528282614308565b95945050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156144995761449961445b565b604052919050565b60006001600160401b038211156144ba576144ba61445b565b50601f01601f191660200190565b60006144db6144d6846144a1565b614471565b90508281528383830111156144ef57600080fd5b828260208301376000602084830101529392505050565b6000806040838503121561451957600080fd5b82356145248161417c565b915060208301356001600160401b0381111561453f57600080fd5b8301601f8101851361455057600080fd5b61455f858235602084016144c8565b9150509250929050565b60008060006040848603121561457e57600080fd5b83356001600160401b0381111561459457600080fd5b6145a0868287016141ae565b90945092505060208401356145b48161417c565b809150509250925092565b600060e08284031215613f8d57600080fd5b600080604083850312156145e457600080fd5b82356001600160401b03808211156145fb57600080fd5b614607868387016145bf565b9350602085013591508082111561461d57600080fd5b5061455f85828601613fff565b6020815260006133f56020830184614308565b600082601f83011261464e57600080fd5b6133f5838335602085016144c8565b6000806040838503121561467057600080fd5b82356001600160401b0381111561468657600080fd5b6146928582860161463d565b92505060208301356146a38161417c565b809150509250929050565b6000602082840312156146c057600080fd5b5035919050565b6000806000604084860312156146dc57600080fd5b8335925060208401356001600160401b038111156146f957600080fd5b614705868287016141ae565b9497909650939450505050565b60008060008060008060a0878903121561472b57600080fd5b86356001600160401b038082111561474257600080fd5b61474e8a838b01613f7b565b9750602089013591508082111561476457600080fd5b908801906080828b03121561477857600080fd5b90955060408801359450606088013593506080880135908082111561479c57600080fd5b506147a989828a016141ae565b979a9699509497509295939492505050565b600080602083850312156147ce57600080fd5b82356001600160401b038111156147e457600080fd5b6147f0858286016141ae565b90969095509350505050565b6000806000806060858703121561481257600080fd5b84356001600160401b038082111561482957600080fd5b614835888389016145bf565b9550602087013591508082111561484b57600080fd5b614857888389016141ae565b9095509350604087013591508082111561487057600080fd5b5061487d87828801613fff565b91505092959194509250565b80356001600160401b038116811461335d57600080fd5b600080600080606085870312156148b657600080fd5b8435935060208501356001600160401b038111156148d357600080fd5b6148df878288016141ae565b90945092506148f2905060408601614889565b905092959194509250565b60008060006060848603121561491257600080fd5b833561491d8161417c565b92506020840135915060408401356001600160401b0381111561493f57600080fd5b61494b86828701613fff565b9150509250925092565b6000808335601e1984360301811261496c57600080fd5b8301803591506001600160401b0382111561498657600080fd5b6020019150368190038213156134e157600080fd5b634e487b7160e01b600052603260045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6040815260006149ee6040830185876149b1565b9050826020830152949350505050565b6000614a0c6144d6846144a1565b9050828152838383011115614a2057600080fd5b6133f58360208301846142dc565b600082601f830112614a3f57600080fd5b6133f5838351602085016149fe565b600060208284031215614a6057600080fd5b81516001600160401b03811115614a7657600080fd5b612ba184828501614a2e565b600a811061435a5761435a614334565b6000808335601e19843603018112614aa957600080fd5b83016020810192503590506001600160401b03811115614ac857600080fd5b8036038213156134e157600080fd5b614ae1818b614a82565b60006020614af18184018c61434a565b60c06040840152614b0660c084018a8c6149b1565b8381036060850152878152818101600589901b820183018a60005b8b811015614b5b57848303601f19018452614b3c828e614a92565b614b478582846149b1565b958801959450505090850190600101614b21565b50508581036080870152614b7081898b6149b1565b9450505050508260a08301529a9950505050505050505050565b6000808335601e19843603018112614ba157600080fd5b83016020810192503590506001600160401b03811115614bc057600080fd5b8060051b36038213156134e157600080fd5b60008235603e19833603018112614be857600080fd5b90910192915050565b6000606080835260a0808401614c078889614b8a565b60408786018190529281905260059260c08089019083861b8a01018460005b85811015614d67578b830360bf19018452813536889003607e19018112614c4c57600080fd5b87016080848101614c5d8380614b8a565b928752908290528b860191808c1b87018d0191908160005b82811015614ce557898503609f19018652614c908285614bd2565b614c9a8182614a92565b8e8852614caa8f890182846149b1565b9150506020614cbb81840184614a92565b9350888303828a0152614ccf8385836149b1565b9982019998505093909301925050600101614c75565b5050505060209150614cf982840184614a92565b87830384890152614d0b8382846149b1565b92505050614d1b88840184614a92565b8783038a890152614d2d8382846149b1565b92505050614d3d8d840184614a92565b93508682038e880152614d518285836149b1565b9783019796505050929092019150600101614c26565b505060208d013560808b015289810360208b0152614d85818d614308565b97505050878603818901525050505050613df38185614308565b848152836020820152606060408201526000613df36060830184866149b1565b81835260006020808501808196508560051b810191508460005b878110156143a6578284038952614df08288614a92565b614dfb8682846149b1565b9a87019a9550505090840190600101614dd9565b614e19818b61434a565b60c060208201526000614e3060c083018a8c614dbf565b8860408401528281036060840152614e4981888a6149b1565b905085608084015282810360a0840152614e648185876149b1565b9c9b505050505050505050505050565b600060208284031215614e8657600080fd5b81516001600160401b03811115614e9c57600080fd5b8201601f81018413614ead57600080fd5b612ba1848251602084016149fe565b60c081526000614ecf60c083018b614308565b614edc602084018b61434a565b88151560408401528281036060840152614ef781888a614dbf565b90508281036080840152614f0c8186886149b1565b9150508260a08301529998505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60a081526000614fce60a083018a8c6149b1565b614fdb602084018a61434a565b87151560408401528281036060840152614ff6818789614dbf565b9050828103608084015261500b8185876149b1565b9b9a5050505050505050505050565b600181811c9082168061502e57607f821691505b602082108103613f8d57634e487b7160e01b600052602260045260246000fd5b60008235603e1983360301811261506457600080fd5b9190910192915050565b600061507a8283614a92565b6040855261508c6040860182846149b1565b915050602083013560208501528091505092915050565b6001600160401b03806150b583614889565b168352806150c560208401614889565b166020840152505050565b6020815260006150e08384614bd2565b60e060208401526150f561010084018261506e565b90506151046020850185614bd2565b601f198085840301604086015261511b838361506e565b925061512960408701614889565b91506001600160401b0380831660608701526151486060880188614a92565b93508287860301608088015261515f8585836149b1565b94505061517260a08701608089016150a3565b8061517f60c08901614889565b1660e08701525050508091505092915050565b6000602082840312156151a457600080fd5b5051919050565b6000602082840312156151bd57600080fd5b6133f582614889565b6001600160401b03848116825260808201906151e560208401866150a3565b808416606084015250949350505050565b60006001600160401b0380831681851680830382111561522657634e487b7160e01b600052601160045260246000fd5b01949350505050565b600061523b8283614bd2565b60e0845261524c60e085018261506e565b905061525b6020840184614bd2565b848203602086015261526d828261506e565b91505061527c60408401614889565b6001600160401b0380821660408701526152996060860186614a92565b925086840360608801526152ae8484836149b1565b9350506152c160808701608087016150a3565b806152ce60c08701614889565b1660c087015250508091505092915050565b6020815260006133f5602083018461522f565b60006020828403121561530557600080fd5b81516001600160401b038082111561531c57600080fd5b908301906040828603121561533057600080fd5b60405160408101818110838211171561534b5761534b61445b565b604052825161535981613fe6565b815260208301518281111561536d57600080fd5b61537987828601614a2e565b60208301525095945050505050565b8051151582526000602082015160406020850152612ba16040850182614308565b6001600160401b0383168152604060208201526000612ba16040830184615388565b601f82111561158057600081815260208120601f850160051c810160208610156153f25750805b601f850160051c820191505b818110156132db578281556001016153fe565b81516001600160401b0381111561542a5761542a61445b565b61543e81615438845461501a565b846153cb565b602080601f831160018114615473576000841561545b5750858301515b600019600386901b1c1916600185901b1785556132db565b600085815260208120601f198616915b828110156154a257888601518255948401946001909101908401615483565b50858210156154c05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000806000606084860312156154e557600080fd5b835192506020840151915060408401516145b481613fe6565b60808152600061550e8687614b8a565b6060608085015261552360e085018284614dbf565b915050602087013560a08401526001600160401b0361554460408901614889565b1660c0840152828103602084015261555c8687614b8a565b6080835261556e608084018284614dbf565b91505061557e6020880188614b8a565b8383036020850152615591838284614dbf565b925050506040870135604083015260608701356060830152809250505083604083015282606083015295945050505050565b600080604083850312156155d657600080fd5b8251915060208301516146a381613fe6565b6001600160401b038311156155ff576155ff61445b565b6156138361560d835461501a565b836153cb565b6000601f841160018114615647576000851561562f5750838201355b600019600387901b1c1916600186901b1783556156a1565b600083815260209020601f19861690835b828110156156785786850135825560209485019460019092019101615658565b50868210156156955760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b602081526000612ba16020830184866149b1565b6040815260006156cf604083018561522f565b82810360208401526144528185615388565b8183823760009101908152919050565b6060815260006157056060830186886149b1565b6001600160401b039485166020840152929093166040909101529392505050565b6040815260006157396040830185614308565b90508260208301529392505050565b6157528188614a82565b600060206157628184018961434a565b60c0604084015261577660c0840188614308565b8381036060850152865180825282820190600581901b83018401848a0160005b838110156157c457601f198684030185526157b2838351614308565b94870194925090860190600101615796565b505086810360808801526157d8818a614308565b955050505050508260a0830152979650505050505050565b8381526060602082015260006158096060830185614308565b9050826040830152949350505050565b600082516150648184602087016142dc565b6000808585111561583b57600080fd5b8386111561584857600080fd5b5050820193919092039150565b60006020828403121561586757600080fd5b81516133f58161417c565b60008261588f57634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160401b03808411156158ae576158ae61445b565b8360051b60206158bf818301614471565b8681529185019181810190368411156158d757600080fd5b865b8481101561590b578035868111156158f15760008081fd5b6158fd36828b0161463d565b8452509183019183016158d9565b50979650505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212209228cd764d497cb9fc8b0917d7511bb133e0a4b96f7e8bf5bf8cd998300e056864736f6c634300080f0033"; type DispatcherConstructorParams = | [linkLibraryAddresses: DispatcherLibraryAddresses, signer?: Signer]