0x60a06040523060805234801561001457600080fd5b50608051612a6361004c600039600081816108b3015281816108f301528181610a0401528181610a440152610ac00152612a636000f3fe6080604052600436106101a35760003560e01c80637ebef529116100e2578063c45a015511610085578063c45a0155146104ed578063c6bbd5a71461050d578063d4175be21461052d578063ed462a301461055a578063ee610ed91461057a578063f2fde38b1461059a578063f887ea40146105ba578063fcf8ad71146105da57600080fd5b80637ebef529146103ed5780638da5cb5b1461040d5780639c52a7f11461042b5780639c82f2a41461044b578063ab8236f31461046b578063b64663841461048b578063bf353dbb146104ab578063c0406226146104d857600080fd5b806365fae35e1161014a57806365fae35e146102b2578063692058c2146102d257806369f79a05146102f25780636cbadbfa146103125780636e81221c14610347578063715018a61461035a57806372c2dc6f1461036f57806375151b63146103bd57600080fd5b806307da68f5146101a85780630a78909d146101bf5780632b3297f9146101d2578063308d35131461020f5780633659cfe61461022f5780633fda988f1461024f5780634f1ef2861461027c57806352d1902d1461028f575b600080fd5b3480156101b457600080fd5b506101bd6105fa565b005b6101bd6101cd366004611ef3565b610639565b3480156101de57600080fd5b5060cb546101f2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561021b57600080fd5b5060cf546101f2906001600160a01b031681565b34801561023b57600080fd5b506101bd61024a366004611f59565b6108a8565b34801561025b57600080fd5b5061026f61026a366004611fc1565b610971565b6040516102069190612002565b6101bd61028a3660046120fd565b6109f9565b34801561029b57600080fd5b506102a4610ab3565b604051908152602001610206565b3480156102be57600080fd5b506101bd6102cd366004611f59565b610b61565b3480156102de57600080fd5b5060cc546101f2906001600160a01b031681565b3480156102fe57600080fd5b506102a461030d36600461214c565b610bad565b34801561031e57600080fd5b5060cf5461033490600160a01b900461ffff1681565b60405161ffff9091168152602001610206565b6102a4610355366004612195565b610d0d565b34801561036657600080fd5b506101bd610e2c565b34801561037b57600080fd5b506103af61038a3660046121e8565b60d060205260009081526040902080546001909101546001600160a01b039091169082565b604051610206929190612203565b3480156103c957600080fd5b506103dd6103d8366004611f59565b610e62565b6040519015158152602001610206565b3480156103f957600080fd5b506101bd61040836600461221c565b610ee5565b34801561041957600080fd5b506097546001600160a01b03166101f2565b34801561043757600080fd5b506101bd610446366004611f59565b610fc9565b34801561045757600080fd5b506101bd610466366004611f59565b611012565b34801561047757600080fd5b506101bd610486366004612263565b611063565b34801561049757600080fd5b506102a46104a63660046122fd565b6112d3565b3480156104b757600080fd5b506102a46104c6366004611f59565b60c96020526000908152604090205481565b3480156104e457600080fd5b506101bd611353565b3480156104f957600080fd5b5060cd546101f2906001600160a01b031681565b34801561051957600080fd5b5060d2546101f2906001600160a01b031681565b34801561053957600080fd5b506102a4610548366004611f59565b60d16020526000908152604090205481565b34801561056657600080fd5b506101bd61057536600461233e565b611389565b34801561058657600080fd5b5061026f610595366004611fc1565b611468565b3480156105a657600080fd5b506101bd6105b5366004611f59565b61149b565b3480156105c657600080fd5b5060ce546101f2906001600160a01b031681565b3480156105e657600080fd5b506101bd6105f536600461236a565b611533565b33600090815260c960205260409020546001146106325760405162461bcd60e51b815260040161062990612388565b60405180910390fd5b600060ca55565b60ca546106585760405162461bcd60e51b8152600401610629906123b7565b61066185610e62565b6106ad5760405162461bcd60e51b815260206004820152601c60248201527f53674272696467652f746f6b656e2d6e6f742d737570706f72746564000000006044820152606401610629565b6001600160a01b038516156106d1576106d16001600160a01b0386163330876115b2565b60cf5461ffff848116600160a01b9092041614156106fb576106f585828685610d0d565b506108a1565b61ffff8316600090815260d06020908152604091829020825180840190935280546001600160a01b0316808452600190910154918301919091526107515760405162461bcd60e51b8152600401610629906123e6565b6001600160a01b038616600090815260d160205260409020548590806107af5760cf5460009061078d908a906001600160a01b03168a30610d0d565b60cf546001600160a01b0316600090815260d160205260409020549093509150505b60006107bb868661160a565b60ce5460208601519192506001600160a01b031690639fbf10fc9034908a908690338960006107e98f61164d565b8d516040516107fb919060200161241d565b6040516020818303038152906040528b6040518b63ffffffff1660e01b815260040161082f999897969594939291906124b6565b6000604051808303818588803b15801561084857600080fd5b505af115801561085c573d6000803e3d6000fd5b50506040518b815261ffff8b1693503392507fb0044db374359016d690192387f34e89f854bc405fa9ea986a10d2f5039a3cec915060200160405180910390a3505050505b5050505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156108f15760405162461bcd60e51b815260040161062990612533565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166109236116ad565b6001600160a01b0316146109495760405162461bcd60e51b81526004016106299061257f565b610952816116c9565b6040805160008082526020820190925261096e918391906116f3565b50565b60cb5460cf546040516323c1995360e01b81526060926001600160a01b03908116926323c19953926109ad929091169087908790600401612614565b600060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109f29190810190612649565b9392505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610a425760405162461bcd60e51b815260040161062990612533565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610a746116ad565b6001600160a01b031614610a9a5760405162461bcd60e51b81526004016106299061257f565b610aa3826116c9565b610aaf828260016116f3565b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b4e5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610629565b506000805160206129e783398151915290565b33600090815260c96020526040902054600114610b905760405162461bcd60e51b815260040161062990612388565b6001600160a01b0316600090815260c96020526040902060019055565b60cf5460009061ffff848116600160a01b909204161415610bd0575060006109f2565b61ffff8316600090815260d06020908152604091829020825180840190935280546001600160a01b031680845260019091015491830191909152610c265760405162461bcd60e51b8152600401610629906123e6565b60ce5481516040516001600160601b0319606092831b811660208301529188901b90911660348201526000916001600160a01b031690630a51236990879060019060480160405160208183030381529060405288604051602001610c8a919061241d565b604051602081830303815290604052610ca28a61164d565b6040518663ffffffff1660e01b8152600401610cc29594939291906126f5565b6040805180830381865afa158015610cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d029190612741565b509695505050505050565b600060ca5460001415610d325760405162461bcd60e51b8152600401610629906123b7565b60cb5460405163095ea7b360e01b81526001600160a01b038781169263095ea7b392610d6692909116908790600401612203565b6020604051808303816000875af1158015610d85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da99190612765565b5060cb54604051631ba0488760e21b81526001600160a01b0390911690636e81221c90610de0908890889088908890600401612780565b6020604051808303816000875af1158015610dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2391906127ab565b95945050505050565b6097546001600160a01b03163314610e565760405162461bcd60e51b8152600401610629906127c4565b610e606000611863565b565b60cb5460cf5460405163db47b9c960e01b81526001600160a01b0391821660048201528382166024820152600092919091169063db47b9c990604401602060405180830381865afa158015610ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edf9190612765565b92915050565b6000610ef160016118b5565b90508015610f09576000805461ff0019166101001790555b610f11611942565b60cb80546001600160a01b038087166001600160a01b03199283161790925560ce80549286169290911691909117905560cf805461ffff8416600160a01b0261ffff60a01b19909116179055610f7533600090815260c96020526040902060019055565b610f7d611353565b8015610fc3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b33600090815260c96020526040902054600114610ff85760405162461bcd60e51b815260040161062990612388565b6001600160a01b0316600090815260c96020526040812055565b33600090815260c960205260409020546001146110415760405162461bcd60e51b815260040161062990612388565b60cb80546001600160a01b0319166001600160a01b0392909216919091179055565b60ce546001600160a01b031633146110b25760405162461bcd60e51b815260206004820152601260248201527129b3a13934b233b297a337b93134b23232b760711b6044820152606401610629565b600080828060200190518101906110c991906127f9565b91509150846001600160a01b0316816001600160a01b03161461120e576000806110f587848887611971565b91509150811561114c578961ffff16846001600160a01b03167fb54d72d7db0f68fd7dc4ca43585099a6ea574e1f6d0a7be6ac5d8f88101f5497858460405161113f929190612203565b60405180910390a3611207565b60405163a9059cbb60e01b81526001600160a01b0388169063a9059cbb9061117a9087908a90600401612203565b6020604051808303816000875af1158015611199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bd9190612765565b508961ffff16846001600160a01b03167f3e31fd0d60d1d0ab5ee828becd76e85900565084f12d951e6f2d3362df5fc95e85896040516111fe929190612203565b60405180910390a35b50506112c9565b60405163a9059cbb60e01b81526001600160a01b0386169063a9059cbb9061123c9085908890600401612203565b6020604051808303816000875af115801561125b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127f9190612765565b508761ffff16826001600160a01b03167f3e31fd0d60d1d0ab5ee828becd76e85900565084f12d951e6f2d3362df5fc95e83876040516112c0929190612203565b60405180910390a35b5050505050505050565b60cb54604051632d9198e160e21b81526000916001600160a01b03169063b64663849061130890879087908790600401612833565b6020604051808303816000875af1158015611327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134b91906127ab565b949350505050565b33600090815260c960205260409020546001146113825760405162461bcd60e51b815260040161062990612388565b600160ca55565b33600090815260c960205260409020546001146113b85760405162461bcd60e51b815260040161062990612388565b6001600160a01b03808316600081815260d160205260409081902084905560ce54905163095ea7b360e01b8152919263095ea7b392611401929091169060001990600401612203565b6020604051808303816000875af1158015611420573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114449190612765565b505060cf80546001600160a01b0319166001600160a01b0392909216919091179055565b60cb5460405163ee610ed960e01b81526060916001600160a01b03169063ee610ed9906109ad9086908690600401612857565b6097546001600160a01b031633146114c55760405162461bcd60e51b8152600401610629906127c4565b6001600160a01b03811661152a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610629565b61096e81611863565b33600090815260c960205260409020546001146115625760405162461bcd60e51b815260040161062990612388565b6040805180820182526001600160a01b039384168152602080820193845261ffff95909516600090815260d09095529320925183546001600160a01b031916921691909117825551600190910155565b610fc3846323b872dd60e01b8585856040516024016115d393929190612833565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611a65565b60608083836040516020016116359291906001600160a01b0392831681529116602082015260400190565b60408051808303601f19018152919052949350505050565b61167160405180606001604052806000815260200160008152602001606081525090565b60405180606001604052806207a1208152602001600081526020016040518060600160405280602a81526020016129bd602a9139905292915050565b6000805160206129e7833981519152546001600160a01b031690565b6097546001600160a01b0316331461096e5760405162461bcd60e51b8152600401610629906127c4565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561172b5761172683611b37565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611785575060408051601f3d908101601f19168201909252611782918101906127ab565b60015b6117e85760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610629565b6000805160206129e783398151915281146118575760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610629565b50611726838383611bd3565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008054610100900460ff16156118fc578160ff1660011480156118d85750303b155b6118f45760405162461bcd60e51b8152600401610629906128f4565b506000919050565b60005460ff8084169116106119235760405162461bcd60e51b8152600401610629906128f4565b506000805460ff191660ff92909216919091179055600190565b919050565b600054610100900460ff166119695760405162461bcd60e51b815260040161062990612942565b610e60611bf8565b60cb546040516000918291829182916001600160a01b0390911690631ba0488760e21b906119a9908b908b908b908b90602401612780565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516119e7919061298d565b6000604051808303816000865af19150503d8060008114611a24576040519150601f19603f3d011682016040523d82523d6000602084013e611a29565b606091505b50915091508115611a54578181806020019051810190611a4991906127ab565b935093505050611a5c565b509150600090505b94509492505050565b6000611aba826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611c289092919063ffffffff16565b8051909150156117265780806020019051810190611ad89190612765565b6117265760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610629565b6001600160a01b0381163b611ba45760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610629565b6000805160206129e783398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b611bdc83611c37565b600082511180611be95750805b1561172657610fc38383611c77565b600054610100900460ff16611c1f5760405162461bcd60e51b815260040161062990612942565b610e6033611863565b606061134b8484600085611d62565b611c4081611b37565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b611cdf5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610629565b600080846001600160a01b031684604051611cfa919061298d565b600060405180830381855af49150503d8060008114611d35576040519150601f19603f3d011682016040523d82523d6000602084013e611d3a565b606091505b5091509150610e238282604051806060016040528060278152602001612a0760279139611e93565b606082471015611dc35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610629565b6001600160a01b0385163b611e1a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610629565b600080866001600160a01b03168587604051611e36919061298d565b60006040518083038185875af1925050503d8060008114611e73576040519150601f19603f3d011682016040523d82523d6000602084013e611e78565b606091505b5091509150611e88828286611e93565b979650505050505050565b60608315611ea25750816109f2565b825115611eb25782518084602001fd5b8160405162461bcd60e51b815260040161062991906129a9565b6001600160a01b038116811461096e57600080fd5b803561ffff8116811461193d57600080fd5b600080600080600060a08688031215611f0b57600080fd5b8535611f1681611ecc565b945060208601359350611f2b60408701611ee1565b92506060860135611f3b81611ecc565b91506080860135611f4b81611ecc565b809150509295509295909350565b600060208284031215611f6b57600080fd5b81356109f281611ecc565b60008083601f840112611f8857600080fd5b5081356001600160401b03811115611f9f57600080fd5b6020830191508360208260051b8501011115611fba57600080fd5b9250929050565b60008060208385031215611fd457600080fd5b82356001600160401b03811115611fea57600080fd5b611ff685828601611f76565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b8181101561203c57835115158352928401929184019160010161201e565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561208657612086612048565b604052919050565b600082601f83011261209f57600080fd5b81356001600160401b038111156120b8576120b8612048565b6120cb601f8201601f191660200161205e565b8181528460208386010111156120e057600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561211057600080fd5b823561211b81611ecc565b915060208301356001600160401b0381111561213657600080fd5b6121428582860161208e565b9150509250929050565b60008060006060848603121561216157600080fd5b833561216c81611ecc565b925061217a60208501611ee1565b9150604084013561218a81611ecc565b809150509250925092565b600080600080608085870312156121ab57600080fd5b84356121b681611ecc565b935060208501356121c681611ecc565b92506040850135915060608501356121dd81611ecc565b939692955090935050565b6000602082840312156121fa57600080fd5b6109f282611ee1565b6001600160a01b03929092168252602082015260400190565b60008060006060848603121561223157600080fd5b833561223c81611ecc565b9250602084013561224c81611ecc565b915061225a60408501611ee1565b90509250925092565b60008060008060008060c0878903121561227c57600080fd5b61228587611ee1565b955060208701356001600160401b03808211156122a157600080fd5b6122ad8a838b0161208e565b965060408901359550606089013591506122c682611ecc565b9093506080880135925060a088013590808211156122e357600080fd5b506122f089828a0161208e565b9150509295509295509295565b60008060006060848603121561231257600080fd5b833561231d81611ecc565b9250602084013561232d81611ecc565b929592945050506040919091013590565b6000806040838503121561235157600080fd5b823561235c81611ecc565b946020939093013593505050565b60008060006060848603121561237f57600080fd5b61231d84611ee1565b60208082526015908201527415d85c9919590bdb9bdd0b585d5d1a1bdc9a5e9959605a1b604082015260600190565b6020808252601590820152745761726465644c6976696e672f6e6f742d6c69766560581b604082015260600190565b6020808252601c908201527f53674272696467652f636861696e2d6e6f742d737570706f7274656400000000604082015260600190565b60609190911b6001600160601b031916815260140190565b60005b83811015612450578181015183820152602001612438565b83811115610fc35750506000910152565b60008151808452612479816020860160208601612435565b601f01601f19169290920160200192915050565b8051825260208101516020830152600060408201516060604085015261134b6060850182612461565b600061012061ffff8c1683528a602084015289604084015260018060a01b03891660608401528760808401528660a08401528060c08401526124fa8184018761248d565b905082810360e084015261250e8186612461565b90508281036101008401526125238185612461565b9c9b505050505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b8183526000602080850194508260005b858110156126095781356125ee81611ecc565b6001600160a01b0316875295820195908201906001016125db565b509495945050505050565b6001600160a01b0384168152604060208201819052600090610e2390830184866125cb565b8051801515811461193d57600080fd5b6000602080838503121561265c57600080fd5b82516001600160401b038082111561267357600080fd5b818501915085601f83011261268757600080fd5b81518181111561269957612699612048565b8060051b91506126aa84830161205e565b81815291830184019184810190888411156126c457600080fd5b938501935b838510156126e9576126da85612639565b825293850193908501906126c9565b98975050505050505050565b61ffff8616815260ff8516602082015260a06040820152600061271b60a0830186612461565b828103606084015261272d8186612461565b905082810360808401526126e9818561248d565b6000806040838503121561275457600080fd5b505080516020909101519092909150565b60006020828403121561277757600080fd5b6109f282612639565b6001600160a01b03948516815292841660208401526040830191909152909116606082015260800190565b6000602082840312156127bd57600080fd5b5051919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000806040838503121561280c57600080fd5b825161281781611ecc565b602084015190925061282881611ecc565b809150509250929050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020808252818101839052600090600560408085019086831b86010187855b888110156128e657878303603f190184528135368b9003601e1901811261289c57600080fd5b8a0180356001600160401b038111156128b457600080fd5b80871b36038c13156128c557600080fd5b6128d285828a85016125cb565b958801959450505090850190600101612876565b509098975050505050505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000825161299f818460208701612435565b9190910192915050565b6020815260006109f2602083018461246156fe307838453065654335624366314565364142393836333231333439666634443038303139653239393138360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220dab3136df3a1dbd6a3e420dfa1cb037ad207a48b8aff23b9fc2b769ab1e6fc9764736f6c634300080a0033