0x608060405234801561001057600080fd5b5060405161212338038061212383398101604081905261002f9161011a565b60016000556001600160a01b03811661008e5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c69642066656520726563697069656e742061646472657373000000604482015260640160405180910390fd5b600161009a85826102a1565b50600280546001600160a01b03199081166001600160a01b03958616179091556004805460058054909316938616939093179091556001600160a81b0319909116919092161790555061035f565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b038116811461011557600080fd5b919050565b6000806000806080858703121561013057600080fd5b84516001600160401b0381111561014657600080fd5b8501601f8101871361015757600080fd5b80516001600160401b03811115610170576101706100e8565b604051601f8201601f19908116603f011681016001600160401b038111828210171561019e5761019e6100e8565b6040528181528282016020018910156101b657600080fd5b60005b828110156101d5576020818501810151838301820152016101b9565b506000602083830101528096505050506101f1602086016100fe565b92506101ff604086016100fe565b915061020d606086016100fe565b905092959194509250565b600181811c9082168061022c57607f821691505b60208210810361024c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561029c57806000526020600020601f840160051c810160208510156102795750805b601f840160051c820191505b818110156102995760008155600101610285565b50505b505050565b81516001600160401b038111156102ba576102ba6100e8565b6102ce816102c88454610218565b84610252565b6020601f82116001811461030257600083156102ea5750848201515b600019600385901b1c1916600184901b178455610299565b600084815260208120601f198516915b828110156103325787850151825560209485019460019092019101610312565b50848210156103505786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b611db58061036e6000396000f3fe6080604052600436106101815760003560e01c80637d882097116100d1578063b94467e21161008a578063e4b2fb7911610064578063e4b2fb7914610496578063e9081ec714610460578063f160d369146104b6578063fc7e286d146104d657600080fd5b8063b94467e214610430578063de363e6514610445578063e1254fba1461046057600080fd5b80637d8820971461036a578063832e3f88146103805780638da5cb5b146103c857806393b60e8f146103e85780639d76ea58146103fd578063b6b55f251461041d57600080fd5b80634a79d50c1161013e57806371417b321161011857806371417b32146102fe5780637362377b1461032b578063765fc49b146103405780637a00464a1461035557600080fd5b80634a79d50c1461028c57806352a9039c146102ae5780636c7b7f2e146102db57600080fd5b806306def802146101865780630c3f6acf146101b95780630e022923146101e757806324add57d1461021d578063469048401461023f57806348c54b9d14610277575b600080fd5b34801561019257600080fd5b506101a66101a1366004611902565b610503565b6040519081526020015b60405180910390f35b3480156101c557600080fd5b506004546101da90600160a01b900460ff1681565b6040516101b09190611933565b3480156101f357600080fd5b506101a6610202366004611902565b6001600160a01b031660009081526007602052604090205490565b34801561022957600080fd5b5061023d610238366004611a33565b610537565b005b34801561024b57600080fd5b5060055461025f906001600160a01b031681565b6040516001600160a01b0390911681526020016101b0565b34801561028357600080fd5b5061023d610928565b34801561029857600080fd5b506102a1610a45565b6040516101b09190611b20565b3480156102ba57600080fd5b506101a66102c9366004611902565b60076020526000908152604090205481565b3480156102e757600080fd5b506102f0610ad3565b6040516101b0929190611b53565b34801561030a57600080fd5b506101a6610319366004611902565b60086020526000908152604090205481565b34801561033757600080fd5b5061023d610bfb565b34801561034c57600080fd5b5061023d610d34565b34801561036157600080fd5b5061023d610f4b565b34801561037657600080fd5b506101a660035481565b34801561038c57600080fd5b506103b861039b366004611902565b6001600160a01b0316600090815260086020526040902054151590565b60405190151581526020016101b0565b3480156103d457600080fd5b5060045461025f906001600160a01b031681565b3480156103f457600080fd5b5061023d611002565b34801561040957600080fd5b5060025461025f906001600160a01b031681565b61023d61042b366004611bde565b6111bd565b34801561043c57600080fd5b5061023d611473565b34801561045157600080fd5b506101a666038d7ea4c6800081565b34801561046c57600080fd5b506101a661047b366004611902565b6001600160a01b031660009081526006602052604090205490565b3480156104a257600080fd5b5061025f6104b1366004611bde565b61151f565b3480156104c257600080fd5b5061023d6104d1366004611902565b611549565b3480156104e257600080fd5b506101a66104f1366004611902565b60066020526000908152604090205481565b6001600160a01b03811660009081526008602090815260408083205460079092528220546105319190611c0d565b92915050565b6004546001600160a01b0316331461056a5760405162461bcd60e51b815260040161056190611c20565b60405180910390fd5b80518251146105bb5760405162461bcd60e51b815260206004820152601860248201527f4d69736d61746368656420696e707574206c656e6774687300000000000000006044820152606401610561565b6002546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a0823190602401602060405180830381865afa158015610608573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062c9190611c57565b90506000805b6009548110156106d457600760006009838154811061065357610653611c70565b60009182526020808320909101546001600160a01b031683528201929092526040019020546106829083611c86565b9150600860006009838154811061069b5761069b611c70565b60009182526020808320909101546001600160a01b031683528201929092526040019020546106ca9083611c86565b9150600101610632565b5060005b8551811015610920576000600760008884815181106106f9576106f9611c70565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054905060006008600089858151811061073c5761073c611c70565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054905086838151811061077957610779611c70565b60200260200101518261078c9190611c86565b600760008a86815181106107a2576107a2611c70565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550848784815181106107e1576107e1611c70565b6020026020010151856107f49190611c86565b11156108555760405162461bcd60e51b815260206004820152602a60248201527f416c6c6f636174696f6e206578636565647320617661696c61626c6520746f6b604482015269656e2062616c616e636560b01b6064820152608401610561565b86838151811061086757610867611c70565b60200260200101518461087a9190611c86565b935087838151811061088e5761088e611c70565b60200260200101516001600160a01b03167fb955ec1dde73439a2529b03391608e33d23e249e4298a696b7ce993d4057f288600760008b87815181106108d6576108d6611c70565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205460405161090e91815260200190565b60405180910390a250506001016106d8565b505050505050565b60026000540361094a5760405162461bcd60e51b815260040161056190611c99565b60026000908155338152600760209081526040808320546008909252909120548082116109b95760405162461bcd60e51b815260206004820152601c60248201527f4e6f20746f6b656e7320617661696c61626c6520746f20636c61696d000000006044820152606401610561565b60006109c58284611c0d565b336000908152600860205260408120805492935083929091906109e9908490611c86565b90915550506002546001600160a01b0316610a058133846115eb565b60405182815233907f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e4309060200160405180910390a2505060016000555050565b60018054610a5290611cd0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7e90611cd0565b8015610acb5780601f10610aa057610100808354040283529160200191610acb565b820191906000526020600020905b815481529060010190602001808311610aae57829003601f168201915b505050505081565b606080600060098054905067ffffffffffffffff811115610af657610af661195b565b604051908082528060200260200182016040528015610b1f578160200160208202803683370190505b50905060005b600954811015610b92576006600060098381548110610b4657610b46611c70565b60009182526020808320909101546001600160a01b031683528201929092526040019020548251839083908110610b7f57610b7f611c70565b6020908102919091010152600101610b25565b5060098181805480602002602001604051908101604052809291908181526020018280548015610beb57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bcd575b5050505050915092509250509091565b6004546001600160a01b03163314610c255760405162461bcd60e51b815260040161056190611c20565b600260005403610c475760405162461bcd60e51b815260040161056190611c99565b60026000554780610c8f5760405162461bcd60e51b81526020600482015260126024820152714e6f2045544820746f20776974686472617760701b6044820152606401610561565b6004546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610cdc576040519150601f19603f3d011682016040523d82523d6000602084013e610ce1565b606091505b5050905080610d2b5760405162461bcd60e51b815260206004820152601660248201527508cc2d2d8cac840e8de40eed2e8d0c8e4c2ee408aa8960531b6044820152606401610561565b50506001600055565b6004546001600160a01b03163314610d5e5760405162461bcd60e51b815260040161056190611c20565b600380600454600160a01b900460ff166003811115610d7f57610d7f61191d565b14610d9c5760405162461bcd60e51b815260040161056190611d0a565b600260005403610dbe5760405162461bcd60e51b815260040161056190611c99565b6002600081815590546040516370a0823160e01b81523060048201526001600160a01b03909116919082906370a0823190602401602060405180830381865afa158015610e0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e339190611c57565b90506000805b600954811015610e93576008600060098381548110610e5a57610e5a611c70565b60009182526020808320909101546001600160a01b03168352820192909252604001902054610e899083611c86565b9150600101610e39565b50808211610ee35760405162461bcd60e51b815260206004820152601d60248201527f4e6f2072656d61696e696e6720746f6b656e7320746f207265736375650000006044820152606401610561565b6000610eef8284611c0d565b600454909150610f0c906001600160a01b038681169116836115eb565b6040518181527f766da609db01f3e66af23934e777343ffb8f0b11581e932b26d4d2b78bc43bfa9060200160405180910390a150506001600055505050565b6004546001600160a01b03163314610f755760405162461bcd60e51b815260040161056190611c20565b600180600454600160a01b900460ff166003811115610f9657610f9661191d565b14610fb35760405162461bcd60e51b815260040161056190611d0a565b6004805460ff60a01b1916600360a01b1790556040517f551dc40198cc79684bb69e4931dba4ac16e4598792ee1c0a5000aeea366d7bb690610ff790600390611933565b60405180910390a150565b6004546001600160a01b0316331461102c5760405162461bcd60e51b815260040161056190611c20565b600080600454600160a01b900460ff16600381111561104d5761104d61191d565b1461106a5760405162461bcd60e51b815260040161056190611d0a565b60026000540361108c5760405162461bcd60e51b815260040161056190611c99565b6002600081815590546001600160a01b0316905b600954811015611162576000600982815481106110bf576110bf611c70565b60009182526020808320909101546001600160a01b031680835260069091526040909120549091508015611158576001600160a01b0380831660009081526006602052604081205561111490851683836115eb565b816001600160a01b03167fc4474c2790e13695f6d2b6f1d8e164290b55370f87a542fd7711abe0a1bf40ac8260405161114f91815260200190565b60405180910390a25b50506001016110a0565b5060006003556004805460ff60a01b1916600160a11b1790556040517f551dc40198cc79684bb69e4931dba4ac16e4598792ee1c0a5000aeea366d7bb6906111ac90600290611933565b60405180910390a150506001600055565b6002600054036111df5760405162461bcd60e51b815260040161056190611c99565b60026000908155600454600160a01b900460ff1660038111156112045761120461191d565b148061122d57506001600454600160a01b900460ff16600381111561122b5761122b61191d565b145b61128f5760405162461bcd60e51b815260206004820152602d60248201527f4465706f7369747320617265206e6f7420616c6c6f77656420696e207468652060448201526c63757272656e7420737461746560981b6064820152608401610561565b66038d7ea4c6800034146112de5760405162461bcd60e51b8152602060048201526016602482015275125b98dbdc9c9958dd0811551208199959481cd95b9d60521b6044820152606401610561565b6005546040516000916001600160a01b03169034908381818185875af1925050503d806000811461132b576040519150601f19603f3d011682016040523d82523d6000602084013e611330565b606091505b50509050806113815760405162461bcd60e51b815260206004820152601a60248201527f4661696c656420746f207472616e7366657220455448206665650000000000006044820152606401610561565b6002546001600160a01b031661139981333086611653565b3360009081526006602052604081205490036113f257600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b031916331790555b3360009081526006602052604081208054859290611411908490611c86565b92505081905550826003600082825461142a9190611c86565b90915550506040805184815234602082015233917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15910160405180910390a25050600160005550565b6004546001600160a01b0316331461149d5760405162461bcd60e51b815260040161056190611c20565b600080600454600160a01b900460ff1660038111156114be576114be61191d565b146114db5760405162461bcd60e51b815260040161056190611d0a565b6004805460ff60a01b1916600160a01b1790556040517f551dc40198cc79684bb69e4931dba4ac16e4598792ee1c0a5000aeea366d7bb690610ff790600190611933565b6009818154811061152f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6004546001600160a01b031633146115735760405162461bcd60e51b815260040161056190611c20565b6001600160a01b0381166115c95760405162461bcd60e51b815260206004820152601d60248201527f496e76616c69642066656520726563697069656e7420616464726573730000006044820152606401610561565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6040516001600160a01b03831660248201526044810182905261164e90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611691565b505050565b6040516001600160a01b038085166024830152831660448201526064810182905261168b9085906323b872dd60e01b90608401611617565b50505050565b60006116e6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166117639092919063ffffffff16565b80519091501561164e57808060200190518101906117049190611d41565b61164e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610561565b6060611772848460008561177c565b90505b9392505050565b6060824710156117dd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610561565b6001600160a01b0385163b6118345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610561565b600080866001600160a01b031685876040516118509190611d63565b60006040518083038185875af1925050503d806000811461188d576040519150601f19603f3d011682016040523d82523d6000602084013e611892565b606091505b50915091506118a28282866118ad565b979650505050505050565b606083156118bc575081611775565b8251156118cc5782518084602001fd5b8160405162461bcd60e51b81526004016105619190611b20565b80356001600160a01b03811681146118fd57600080fd5b919050565b60006020828403121561191457600080fd5b611775826118e6565b634e487b7160e01b600052602160045260246000fd5b602081016004831061195557634e487b7160e01b600052602160045260246000fd5b91905290565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561199a5761199a61195b565b604052919050565b600067ffffffffffffffff8211156119bc576119bc61195b565b5060051b60200190565b600082601f8301126119d757600080fd5b81356119ea6119e5826119a2565b611971565b8082825260208201915060208360051b860101925085831115611a0c57600080fd5b602085015b83811015611a29578035835260209283019201611a11565b5095945050505050565b60008060408385031215611a4657600080fd5b823567ffffffffffffffff811115611a5d57600080fd5b8301601f81018513611a6e57600080fd5b8035611a7c6119e5826119a2565b8082825260208201915060208360051b850101925087831115611a9e57600080fd5b6020840193505b82841015611ac757611ab6846118e6565b825260209384019390910190611aa5565b9450505050602083013567ffffffffffffffff811115611ae657600080fd5b611af2858286016119c6565b9150509250929050565b60005b83811015611b17578181015183820152602001611aff565b50506000910152565b6020815260008251806020840152611b3f816040850160208701611afc565b601f01601f19169190910160400192915050565b6040808252835190820181905260009060208501906060840190835b81811015611b965783516001600160a01b0316835260209384019390920191600101611b6f565b50508381036020808601919091528551808352918101925085019060005b81811015611bd2578251845260209384019390920191600101611bb4565b50919695505050505050565b600060208284031215611bf057600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561053157610531611bf7565b60208082526018908201527f4f6e6c79206f776e65722063616e2063616c6c20746869730000000000000000604082015260600190565b600060208284031215611c6957600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b8082018082111561053157610531611bf7565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600181811c90821680611ce457607f821691505b602082108103611d0457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601d908201527f496e76616c696420737461746520666f72207468697320616374696f6e000000604082015260600190565b600060208284031215611d5357600080fd5b8151801515811461177557600080fd5b60008251611d75818460208701611afc565b919091019291505056fea26469706673582212204774627e9458588dc91d014a06fd7abb7f3b9d496d944e0b7da951ef9e799a4a64736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000085ca16fd0e81659e0b8be337294149e72252873100000000000000000000000046df8bbe7afb0fa0cd67848941c2238ace83cfd800000000000000000000000026e978cce80b7af20df83ffc2a577386bcd0ab70000000000000000000000000000000000000000000000000000000000000002c3078383563613136666430653831363539653062386265333337323934313439653732323532383733313a300000000000000000000000000000000000000000