//
0x60806040523480156200001157600080fd5b506040516200226c3803806200226c8339810160408190526200003491620000dd565b600062000040620000bc565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600280546001600160a01b039384166001600160a01b0319918216179091556003805492909316911617905562000114565b3390565b80516001600160a01b0381168114620000d857600080fd5b919050565b60008060408385031215620000f0578182fd5b620000fb83620000c0565b91506200010b60208401620000c0565b90509250929050565b61214880620001246000396000f3fe6080604052600436106100e85760003560e01c806363a2b7cb1161008a57806376cdb03b1161005957806376cdb03b1461025c57806380599e4b146102715780638da5cb5b14610291578063f2fde38b146102a6576100e8565b806363a2b7cb146101e757806370284d1914610207578063715018a61461022757806374a8f1031461023c576100e8565b80632fc7e763116100c65780632fc7e76314610172578063443bd1d0146101925780634edefa13146101b45780635cc8edda146101c7576100e8565b806313e7c9d8146100ed57806315f9b874146101235780632409556e14610150575b600080fd5b3480156100f957600080fd5b5061010d61010836600461168a565b6102c6565b60405161011a9190611c09565b60405180910390f35b34801561012f57600080fd5b5061014361013e36600461185c565b6102db565b60405161011a919061209c565b34801561015c57600080fd5b5061017061016b366004611897565b6102fe565b005b34801561017e57600080fd5b5061017061018d3660046116e6565b610664565b34801561019e57600080fd5b506101a7610a3b565b60405161011a9190611bc7565b6101706101c2366004611998565b610a4a565b3480156101d357600080fd5b506101706101e2366004611a1c565b610c1c565b3480156101f357600080fd5b50610170610202366004611937565b610f01565b34801561021357600080fd5b5061017061022236600461168a565b611003565b34801561023357600080fd5b506101706110e1565b34801561024857600080fd5b5061017061025736600461168a565b611182565b34801561026857600080fd5b506101a7611250565b34801561027d57600080fd5b5061017061028c36600461185c565b61125f565b34801561029d57600080fd5b506101a76113de565b3480156102b257600080fd5b506101706102c136600461168a565b6113ed565b60016020526000908152604090205460ff1681565b805160208183018101805160048252928201919093012091525463ffffffff1681565b3360009081526001602052604090205460ff166103365760405162461bcd60e51b815260040161032d90611ee6565b60405180910390fd5b6003546040517f82b7b50000000000000000000000000000000000000000000000000000000000815260009182916001600160a01b03909116906382b7b50090610384908b90600401611c32565b604080518083038186803b15801561039b57600080fd5b505afa1580156103af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d391906116ad565b90925090506001600160a01b0382166103fe5760405162461bcd60e51b815260040161032d90611f54565b866001600160a01b0316816001600160a01b031614156104305760405162461bcd60e51b815260040161032d90612065565b61043a88876114c5565b6104565760405162461bcd60e51b815260040161032d90611eaf565b816001600160a01b03166104d860028989604051602001610478929190611af6565b60408051601f198184030181529082905261049291611b50565b602060405180830381855afa1580156104af573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906104d29190611844565b87611560565b6001600160a01b0316146104fe5760405162461bcd60e51b815260040161032d90611de4565b6003546040517f092b25e90000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063092b25e990610549908b908b90600401611c45565b600060405180830381600087803b15801561056357600080fd5b505af1158015610577573d6000803e3d6000fd5b50506002546040517fdd9a76ff0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063dd9a76ff91506105ca908a90339089908c90600401611bdb565b602060405180830381600087803b1580156105e457600080fd5b505af11580156105f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061c9190611824565b507fd5b2cf831feccbfa01ac1987c17d405937ce2aedcb9a9c9efc88853b2a1e2c32888884866040516106529493929190611d3e565b60405180910390a15050505050505050565b3360009081526001602052604090205460ff166106935760405162461bcd60e51b815260040161032d90611ee6565b8151806106b25760405162461bcd60e51b815260040161032d90611ff7565b60005b81811015610a3557600354845160009182916001600160a01b03909116906382b7b500908890869081106106e557fe5b6020026020010151600001516040518263ffffffff1660e01b815260040161070d9190611c32565b604080518083038186803b15801561072457600080fd5b505afa158015610738573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075c91906116ad565b90925090506001600160a01b038216158061077e57506001600160a01b038116155b806107be57506107bc86848151811061079357fe5b6020026020010151600001518785815181106107ab57fe5b6020026020010151606001516114c5565b155b806108b05750816001600160a01b03166108a460028886815181106107df57fe5b6020026020010151602001518987815181106107f757fe5b6020026020010151604001518a888151811061080f57fe5b60200260200101516060015160405160200161082d93929190611b6c565b60408051601f198184030181529082905261084791611b50565b602060405180830381855afa158015610864573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906108879190611844565b88868151811061089357fe5b602002602001015160800151611560565b6001600160a01b031614155b806109685750600260009054906101000a90046001600160a01b03166001600160a01b031663dd9a76ff8233888a88815181106108e957fe5b6020026020010151606001516040518563ffffffff1660e01b81526004016109149493929190611bdb565b602060405180830381600087803b15801561092e57600080fd5b505af1158015610942573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109669190611824565b155b15610974575050610a2d565b7f46a358402c825d88ee06e8f57c5b20a6fadef12a3f1b9dd15f286d2b06e2d8f08684815181106109a157fe5b602002602001015160000151338886815181106109ba57fe5b6020026020010151602001518987815181106109d257fe5b6020026020010151604001518a88815181106109ea57fe5b6020026020010151606001518b8981518110610a0257fe5b6020026020010151608001518b604051610a229796959493929190611ccc565b60405180910390a150505b6001016106b5565b50505050565b6003546001600160a01b031681565b6003546040517f82b7b50000000000000000000000000000000000000000000000000000000000815260009182916001600160a01b03909116906382b7b50090610a98908890600401611c32565b604080518083038186803b158015610aaf57600080fd5b505afa158015610ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae791906116ad565b90925090506001600160a01b038216610b125760405162461bcd60e51b815260040161032d90611f54565b6001600160a01b03811615610b395760405162461bcd60e51b815260040161032d90611f1d565b60003411610b595760405162461bcd60e51b815260040161032d90611e78565b6002546040517ff340fa010000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063f340fa01903490610ba4903390600401611bc7565b6000604051808303818588803b158015610bbd57600080fd5b505af1158015610bd1573d6000803e3d6000fd5b50505050507f9ffdf0136249d99680088653555755221714868b4f7ca1ff7d8523e3bef1dc4a8533848787604051610c0d959493929190611c70565b60405180910390a15050505050565b3360009081526001602052604090205460ff16610c4b5760405162461bcd60e51b815260040161032d90611ee6565b6003546040517f82b7b50000000000000000000000000000000000000000000000000000000000815260009182916001600160a01b03909116906382b7b50090610c99908b90600401611c32565b604080518083038186803b158015610cb057600080fd5b505afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce891906116ad565b90925090506001600160a01b038216610d135760405162461bcd60e51b815260040161032d90611f54565b6001600160a01b038116610d395760405162461bcd60e51b815260040161032d9061202e565b610d4388866114c5565b610d5f5760405162461bcd60e51b815260040161032d90611eaf565b816001600160a01b0316610de36002898989604051602001610d8393929190611b6c565b60408051601f1981840301815290829052610d9d91611b50565b602060405180830381855afa158015610dba573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610ddd9190611844565b86611560565b6001600160a01b031614610e095760405162461bcd60e51b815260040161032d90611de4565b6002546040517fdd9a76ff0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063dd9a76ff90610e58908490339088908b90600401611bdb565b602060405180830381600087803b158015610e7257600080fd5b505af1158015610e86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eaa9190611824565b610ec65760405162461bcd60e51b815260040161032d90611dad565b7f46a358402c825d88ee06e8f57c5b20a6fadef12a3f1b9dd15f286d2b06e2d8f0883389898989896040516106529796959493929190611ccc565b6003546040517f82b7b5000000000000000000000000000000000000000000000000000000000081526000916001600160a01b0316906382b7b50090610f4b908690600401611c32565b604080518083038186803b158015610f6257600080fd5b505afa158015610f76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9a91906116ad565b9150506001600160a01b0381163314610fc55760405162461bcd60e51b815260040161032d90611f8b565b7f79a23f77451563d737c2d12dba4995c66f9c63fe6703e1b843d634ed3529c12d8383604051610ff6929190611d7f565b60405180910390a1505050565b61100b611606565b6001600160a01b031661101c6113de565b6001600160a01b0316146110425760405162461bcd60e51b815260040161032d90611fc2565b6001600160a01b03811660009081526001602052604090205460ff166110de576001600160a01b03811660009081526001602081905260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055517f5b6a420b639feabfb011a07742a6ae14ef72f35d1a330ed65f42216c95bc6c2e906110d5908390611bc7565b60405180910390a15b50565b6110e9611606565b6001600160a01b03166110fa6113de565b6001600160a01b0316146111205760405162461bcd60e51b815260040161032d90611fc2565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b61118a611606565b6001600160a01b031661119b6113de565b6001600160a01b0316146111c15760405162461bcd60e51b815260040161032d90611fc2565b6001600160a01b03811660009081526001602052604090205460ff16156110de576001600160a01b0381166000908152600160205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517fa5f3b7626fd86ff989f1d22cf3d41d74591ea6eb99241079400b0c332a9a8f11906110d5908390611bc7565b6002546001600160a01b031681565b6003546040517f82b7b5000000000000000000000000000000000000000000000000000000000081526000916001600160a01b0316906382b7b500906112a9908590600401611c32565b604080518083038186803b1580156112c057600080fd5b505afa1580156112d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f891906116ad565b9150506001600160a01b03811633146113235760405162461bcd60e51b815260040161032d90611f8b565b6003546040517f092b25e90000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063092b25e99061136f908590600090600401611c45565b600060405180830381600087803b15801561138957600080fd5b505af115801561139d573d6000803e3d6000fd5b505050507f33f0e5ba8079ed962d5166bdb2180f83068317c73732f76dc437da45bb69ac1182826040516113d2929190611c45565b60405180910390a15050565b6000546001600160a01b031690565b6113f5611606565b6001600160a01b03166114066113de565b6001600160a01b03161461142c5760405162461bcd60e51b815260040161032d90611fc2565b6001600160a01b0381166114525760405162461bcd60e51b815260040161032d90611e1b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008163ffffffff166004846040516114de9190611b50565b9081526040519081900360200190205463ffffffff16106115015750600061155a565b816004846040516115129190611b50565b908152604051908190036020019020805463ffffffff929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009092169190911790555060015b92915050565b6020810151604082015160608301516000929190831a601b81101561158357601b015b8060ff16601b1415801561159b57508060ff16601c14155b156115ac576000935050505061155a565b600186828585604051600081526020016040526040516115cf9493929190611c14565b6020604051602081039080840390855afa1580156115f1573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b3390565b600082601f83011261161a578081fd5b813567ffffffffffffffff81111561162e57fe5b6116416020601f19601f840116016120ad565b915080825283602082850101111561165857600080fd5b8060208401602084013760009082016020015292915050565b803563ffffffff8116811461168557600080fd5b919050565b60006020828403121561169b578081fd5b81356116a6816120fd565b9392505050565b600080604083850312156116bf578081fd5b82516116ca816120fd565b60208401519092506116db816120fd565b809150509250929050565b600080604083850312156116f8578182fd5b823567ffffffffffffffff8082111561170f578384fd5b818501915085601f830112611722578384fd5b81358181111561172e57fe5b602061173d81828402016120ad565b82815281810190858301885b85811015611811578135880160a0601f19828f03011215611768578a8bfd5b61177260a06120ad565b8682013589811115611782578c8dfd5b6117908f898386010161160a565b82525061179f60408301611671565b878201526060820135898111156117b4578c8dfd5b6117c28f898386010161160a565b6040830152506117d460808301611671565b606082015260a0820135898111156117ea578c8dfd5b6117f88f898386010161160a565b6080830152508552509284019290840190600101611749565b50909a9890920135985050505050505050565b600060208284031215611835578081fd5b815180151581146116a6578182fd5b600060208284031215611855578081fd5b5051919050565b60006020828403121561186d578081fd5b813567ffffffffffffffff811115611883578182fd5b61188f8482850161160a565b949350505050565b60008060008060008060c087890312156118af578182fd5b863567ffffffffffffffff808211156118c6578384fd5b6118d28a838b0161160a565b9750602089013591506118e4826120fd565b8196506118f360408a01611671565b95506060890135915080821115611908578384fd5b5061191589828a0161160a565b9350506080870135915061192b60a08801611671565b90509295509295509295565b60008060408385031215611949578182fd5b823567ffffffffffffffff80821115611960578384fd5b61196c8683870161160a565b93506020850135915080821115611981578283fd5b5061198e8582860161160a565b9150509250929050565b6000806000606084860312156119ac578283fd5b833567ffffffffffffffff808211156119c3578485fd5b6119cf8783880161160a565b945060208601359150808211156119e4578384fd5b6119f08783880161160a565b93506040860135915080821115611a05578283fd5b50611a128682870161160a565b9150509250925092565b60008060008060008060c08789031215611a34578182fd5b863567ffffffffffffffff80821115611a4b578384fd5b611a578a838b0161160a565b9750611a6560208a01611671565b96506040890135915080821115611a7a578384fd5b611a868a838b0161160a565b9550611a9460608a01611671565b94506080890135915080821115611aa9578384fd5b50611ab689828a0161160a565b92505060a087013590509295509295509295565b60008151808452611ae28160208601602086016120d1565b601f01601f19169290920160200192915050565b60609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016601482015260180190565b60008251611b628184602087016120d1565b9190910192915050565b60007fffffffff00000000000000000000000000000000000000000000000000000000808660e01b1683528451611baa8160048601602089016120d1565b60e09490941b169190920160048101919091526008019392505050565b6001600160a01b0391909116815260200190565b6001600160a01b039485168152929093166020830152604082015263ffffffff909116606082015260800190565b901515815260200190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082526116a66020830184611aca565b600060408252611c586040830185611aca565b90506001600160a01b03831660208301529392505050565b600060a08252611c8360a0830188611aca565b6001600160a01b038781166020850152861660408401528281036060840152611cac8186611aca565b90508281036080840152611cc08185611aca565b98975050505050505050565b600060e08252611cdf60e083018a611aca565b6001600160a01b038916602084015263ffffffff80891660408501528382036060850152611d0d8289611aca565b908716608085015283810360a08501529050611d298186611aca565b9150508260c083015298975050505050505050565b600060808252611d516080830187611aca565b6001600160a01b03958616602084015293909416604082015263ffffffff9190911660609091015292915050565b600060408252611d926040830185611aca565b8281036020840152611da48185611aca565b95945050505050565b60208082526012908201527f62616c616e6365206e6f7420656e6f7567680000000000000000000000000000604082015260600190565b60208082526011908201527f696e76616c6964207369676e6174757265000000000000000000000000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201527f6464726573730000000000000000000000000000000000000000000000000000606082015260800190565b6020808252600d908201527f696e76616c69642076616c756500000000000000000000000000000000000000604082015260600190565b60208082526011908201527f696e76616c69642074696d657374616d70000000000000000000000000000000604082015260600190565b6020808252601a908201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604082015260600190565b60208082526010908201527f64657669636520686173206f776e657200000000000000000000000000000000604082015260600190565b6020808252600c908201527f696e76616c696420696d65690000000000000000000000000000000000000000604082015260600190565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526011908201527f696e76616c696420646174612073697a65000000000000000000000000000000604082015260600190565b60208082526014908201527f64657669636520686173206e6f74206f776e6572000000000000000000000000604082015260600190565b60208082526011908201527f6f776e6572206e6f74206368616e676564000000000000000000000000000000604082015260600190565b63ffffffff91909116815260200190565b60405181810167ffffffffffffffff811182821017156120c957fe5b604052919050565b60005b838110156120ec5781810151838201526020016120d4565b83811115610a355750506000910152565b6001600160a01b03811681146110de57600080fdfea2646970667358221220ee864a6555eefd5698655f9ff98e71677273e1fc5cff3ed1441bb793bda5257964736f6c63430007030033000000000000000000000000daaf49e3cf8f5a2f2c842f703aba92ae1245c531000000000000000000000000c475e098b78e780af0c356e85ad62011fb0a2367