0x6080604052348015600f57600080fd5b506114928061001f6000396000f3fe60806040526004361061007b5760003560e01c80638c878dbb1161004e5780638c878dbb14610117578063a71e26f814610145578063c4d66de814610165578063f2f038771461018557600080fd5b8063016f8afa146100805780630b402823146100a25780634036778f146100c2578063848e1b7e146100e2575b600080fd5b34801561008c57600080fd5b506100a061009b366004611195565b610198565b005b3480156100ae57600080fd5b506100a06100bd3660046111be565b610218565b3480156100ce57600080fd5b506100a06100dd3660046111d7565b6103b4565b3480156100ee57600080fd5b506101026100fd3660046111be565b610845565b60405190151581526020015b60405180910390f35b34801561012357600080fd5b506101376101323660046111be565b6108b9565b60405190815260200161010e565b34801561015157600080fd5b506100a06101603660046111be565b61098f565b34801561017157600080fd5b506100a0610180366004611195565b6109fb565b6100a06101933660046111d7565b610ad2565b60008051602061141d833981519152546000805160206113dd8339815191529060ff166101e05760405162461bcd60e51b81526004016101d7906111f9565b60405180910390fd5b6101e8610de6565b506000805160206113dd83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60008051602061143d833981519152805460ff166102485760405162461bcd60e51b81526004016101d790611228565b60008281527f7cdd259a1dd9611ce9d90388172634af6fcb06705bb297b751bf3c9df62c3081602052604090205460008051602061143d833981519152906000805160206113dd833981519152906001600160a01b031633146102bd5760405162461bcd60e51b81526004016101d790611255565b33600090815260038201602090815260408083208784529091529020546103185760405162461bcd60e51b815260206004820152600f60248201526e139bc818dbdb5b5a5d08199bdd5b99608a1b60448201526064016101d7565b33600081815260038301602090815260408083208884528252918290205491519182528692917fa25d83e22bfce7946f514fb4a7137361088ec873888f842b6efb28ed66e699aa910160405180910390a360408051808201825260008082526020808301828152338352600395909501815283822097825296909652942093518455516001909301805460ff1916931515939093179092555050565b60008051602061141d833981519152546000805160206113dd8339815191529060ff166103f35760405162461bcd60e51b81526004016101d7906111f9565b60008051602061143d833981519152805460ff166104235760405162461bcd60e51b81526004016101d790611228565b6000805160206113fd833981519152805460ff166104835760405162461bcd60e51b815260206004820152601c60248201527f44617461496e746572666163654661636574206e6f7420666f756e640000000060448201526064016101d7565b6000805160206113dd833981519152805460008051602061143d83398151915291906001600160a01b03166104fa5760405162461bcd60e51b815260206004820152601860248201527f41727465666163742061646472657373206e6f7420736574000000000000000060448201526064016101d7565b60008781526008830160205260409020546001600160a01b031633146105325760405162461bcd60e51b81526004016101d790611255565b33600090815260038201602090815260408083208a84529091529020600181015460ff16156105965760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481c995d99585b195960821b60448201526064016101d7565b80546105e45760405162461bcd60e51b815260206004820152601960248201527f4e6f20636f6d6d697420666f756e6420746f2072657665616c0000000000000060448201526064016101d7565b6000876040516020016105f991815260200190565b60408051601f1981840301815282825280516020918201209083015281018a9052606001604051602081830303815290604052805190602001209050816000015481146106785760405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964206e6f6e636560981b60448201526064016101d7565b60008083556001838101805460ff1916909117905561069b6305f5e1008a6112a2565b905060006106b16106ac838d6112cc565b610e75565b905084600101548111156107fa5784546040516370a0823160e01b81523360048201526000916064916001600160a01b03909116906370a0823190602401602060405180830381865afa15801561070c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073091906112df565b61073b9060196112f8565b6107469060646112cc565b61074f8e610ec3565b61075991906112f8565b610763919061130f565b90506107967f600a9c6ce73811fcb663863305ebcc5f6ac2ca83bb56e1c95c02cb2edc42e89b546001600160a01b031690565b6040516340c10f1960e01b8152336004820152602481018390526001600160a01b0391909116906340c10f1990604401600060405180830381600087803b1580156107e057600080fd5b505af11580156107f4573d6000803e3d6000fd5b50505050505b600185015460405190821181528b9033907f34ef20d95020bbbbd52bdc8b8b46c13b520585c6fa8bc00ee9df1d42be47b56a9060200160405180910390a35050505050505050505050565b60008051602061143d83398151915280546000919060ff166108795760405162461bcd60e51b81526004016101d790611228565b50503360009081527fb5c3375aefd91879ab6b5143ae161bc39b87084b0547090063f40a9c6ad17687602090815260408083209383529290522054151590565b60008051602061143d83398151915280546000919060ff166108ed5760405162461bcd60e51b81526004016101d790611228565b6040805142602082015290810184905233606090811b6bffffffffffffffffffffffff1916908201526000805160206113dd833981519152906000906074016040516020818303038152906040528051906020012090505b600081815260048301602052604090205460ff161561098757604080516020810183905201604051602081830303815290604052805190602001209050610945565b949350505050565b60008051602061141d833981519152546000805160206113dd8339815191529060ff166109ce5760405162461bcd60e51b81526004016101d7906111f9565b6109d6610de6565b507fb5c3375aefd91879ab6b5143ae161bc39b87084b0547090063f40a9c6ad1768555565b610a03610de6565b60008051602061141d833981519152546000805160206113dd8339815191529060ff1615610a995760405162461bcd60e51b815260206004820152603a60248201527f4669676874696e6746616365743a20666163657420696e7374616e636520686160448201527f7320616c7265616479206265656e20696e697469616c697a656400000000000060648201526084016101d7565b60028101805460ff19166001908117909155600f9082015580546001600160a01b039092166001600160a01b0319909216919091179055565b60008051602061141d833981519152546000805160206113dd8339815191529060ff16610b115760405162461bcd60e51b81526004016101d7906111f9565b60008051602061143d833981519152805460ff16610b415760405162461bcd60e51b81526004016101d790611228565b6000805160206113fd833981519152805460ff16610ba15760405162461bcd60e51b815260206004820152601c60248201527f44617461496e746572666163654661636574206e6f7420666f756e640000000060448201526064016101d7565b60008581527f7cdd259a1dd9611ce9d90388172634af6fcb06705bb297b751bf3c9df62c3081602052604090205460008051602061143d833981519152906000805160206113dd833981519152906001600160a01b03163314610c165760405162461bcd60e51b81526004016101d790611255565b600086815260048201602052604090205460ff1615610c6b5760405162461bcd60e51b815260206004820152601160248201527012185cda08185b1c9958591e481d5cd959607a1b60448201526064016101d7565b604080516020810188905290810188905260009060600160408051601f19818403018152918152815160209283012060008a8152600486018452828120805460ff191660011790553381526003860184528281208c825290935291205490915015610d0e5760405162461bcd60e51b8152602060048201526013602482015272436f6d6d697420616c7265616479206d61646560681b60448201526064016101d7565b6000610d1b896032610f6d565b905080341015610d625760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b60448201526064016101d7565b60408051808201825283815260006020808301828152338084526003890183528584208f855283529285902093518455516001909301805460ff19169315159390931790925591518481528b92917f4b493bc15bbf32721674ad7da949c59c42d5084a8940998831423f05d48c298b910160405180910390a3505050505050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6003015461010090046001600160a01b03163314610e73577fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f54604051600162bed83560e01b031981523360048201526101009091046001600160a01b031660248201526044016101d7565b565b600080610e83600143611323565b604080516020810192909252810184905260600160408051601f1981840301815291905280516020909101209050610ebc6064826112a2565b9392505050565b7f8a844ca8e3dafb64110f153693c7adac59ba5369fa9e8075ca21090478338170546000907f600a9c6ce73811fcb663863305ebcc5f6ac2ca83bb56e1c95c02cb2edc42e836906000805160206113fd833981519152907f600a9c6ce73811fcb663863305ebcc5f6ac2ca83bb56e1c95c02cb2edc42e86990610f499060ff16866112a2565b60328110610f5957610f59611336565b015461098790670de0b6b3a76400006112f8565b600080610f78610f8f565b9050610f85818585611103565b9150505b92915050565b7f8a844ca8e3dafb64110f153693c7adac59ba5369fa9e8075ca2109047833816f546000906000805160206113fd83398151915290825b60038160ff1610156110fc5760006004840160ff831660038110610fec57610fec611336565b01546001600160a01b0316146110ea576000836004018260ff166003811061101657611016611336565b0160009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611068573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108c919061136b565b5050509150508160ff166000036110bd57806110b084670de0b6b3a76400006112f8565b6110ba919061130f565b92505b8160ff166001036110e857670de0b6b3a76400006110db82856112f8565b6110e5919061130f565b92505b505b806110f4816113bd565b915050610fc6565b5092915050565b60008061111083856112a2565b9050670f43fc2c04ee000060006111278284611151565b9050670de0b6b3a764000061113c82896112f8565b611146919061130f565b979650505050505050565b6000670de0b6b3a7640000815b8381101561118d57670de0b6b3a764000061117986846112f8565b611183919061130f565b915060010161115e565b509392505050565b6000602082840312156111a757600080fd5b81356001600160a01b0381168114610ebc57600080fd5b6000602082840312156111d057600080fd5b5035919050565b600080604083850312156111ea57600080fd5b50508035926020909101359150565b602080825260159082015274199858d95d081b9bdd081a5b9a5d1a585b1a5e9959605a1b604082015260600190565b60208082526013908201527213919508199858d95d081b9bdd08199bdd5b99606a1b604082015260600190565b60208082526018908201527f4e6f7420746865206f776e6572206f6620746865207065740000000000000000604082015260600190565b634e487b7160e01b600052601260045260246000fd5b6000826112b1576112b161128c565b500690565b634e487b7160e01b600052601160045260246000fd5b80820180821115610f8957610f896112b6565b6000602082840312156112f157600080fd5b5051919050565b8082028115828204841417610f8957610f896112b6565b60008261131e5761131e61128c565b500490565b81810381811115610f8957610f896112b6565b634e487b7160e01b600052603260045260246000fd5b805169ffffffffffffffffffff8116811461136657600080fd5b919050565b600080600080600060a0868803121561138357600080fd5b61138c8661134c565b602087015160408801516060890151929750909550935091506113b16080870161134c565b90509295509295909350565b600060ff821660ff81036113d3576113d36112b6565b6001019291505056feb5c3375aefd91879ab6b5143ae161bc39b87084b0547090063f40a9c6ad176848a844ca8e3dafb64110f153693c7adac59ba5369fa9e8075ca2109047833816db5c3375aefd91879ab6b5143ae161bc39b87084b0547090063f40a9c6ad176867cdd259a1dd9611ce9d90388172634af6fcb06705bb297b751bf3c9df62c3079a26469706673582212209ca6d809a249b7ea1e870f38e43d7a2b424936a2b318f5f8f3a8cafddab8c15164736f6c634300081b0033