Contract0x64649a16a57248f977dfd56ac466b80084a658c1
0x608060405234801561001057600080fd5b50612309806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80638544c53b1161010f578063d547741f116100a2578063e9b7d7dd11610071578063e9b7d7dd146104c0578063f5b541a6146104d3578063fad8b32a146104fa578063fc0c546a1461050d57600080fd5b8063d547741f1461045c578063d77fa7ee1461046f578063d914cd4b1461049a578063dc5b68a6146104ad57600080fd5b80639c6b9f8a116100de5780639c6b9f8a1461040e578063a217fddf14610421578063ac4afa3814610429578063c5b288ed1461043c57600080fd5b80638544c53b1461039c57806391d14854146103af5780639870d7fe146103e85780639a9d0d68146103fb57600080fd5b80632f2ff15d116101875780635a372cf7116101565780635a372cf71461031e5780636209ec2d146103315780637b05334c146103645780637c6f31581461037757600080fd5b80632f2ff15d146102b457806336568abe146102c757806345bc13e5146102da57806357b920381461030b57600080fd5b8063144fa6d7116101c3578063144fa6d71461024a578063232a30601461025d578063248a9ca3146102705780632981e7a1146102a157600080fd5b806301ffc9a7146101ea5780630cee17251461021257806313e7c9d814610227575b600080fd5b6101fd6101f8366004611d90565b610520565b60405190151581526020015b60405180910390f35b610225610220366004611d52565b6105b9565b005b6101fd610235366004611c54565b609d6020526000908152604090205460ff1681565b610225610258366004611c54565b6106f5565b61022561026b366004611c54565b610723565b61029361027e366004611d52565b60009081526065602052604090206001015490565b604051908152602001610209565b6102936102af366004611cc7565b61079e565b6102256102c2366004611d6b565b610831565b6102256102d5366004611d6b565b61085b565b6102936102e8366004611e36565b609c60209081526000938452604080852082529284528284209052825290205481565b610293610319366004611c54565b6108e7565b61022561032c366004611e6d565b61096f565b609e5461034c9064010000000090046001600160a01b031681565b6040516001600160a01b039091168152602001610209565b6101fd610372366004611c54565b610ce9565b609e546103879063ffffffff1681565b60405163ffffffff9091168152602001610209565b6102256103aa366004611cf3565b610d53565b6101fd6103bd366004611d6b565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6102256103f6366004611c54565b610d71565b610225610409366004611c54565b610ed0565b61022561041c366004611f48565b610efe565b610293600081565b61034c610437366004611d52565b611327565b61029361044a366004611c54565b609b6020526000908152604090205481565b61022561046a366004611d6b565b611351565b61029361047d366004611c8e565b609a60209081526000928352604080842090915290825290205481565b6102256104a8366004611c54565b611376565b6102256104bb366004611dd2565b61142e565b60985461034c906001600160a01b031681565b6102937f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b610225610508366004611c54565b61159e565b60975461034c906001600160a01b031681565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806105b357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60006105c4816116f6565b600082116106195760405162461bcd60e51b815260206004820152601a60248201527f42656e656669743a20616d6f756e7420697320696e76616c696400000000000060448201526064015b60405180910390fd5b6097546040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561067e57600080fd5b505af1158015610692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b69190611d30565b5060408051338152602081018490527f05e8d4927d2e9cff8a7d6f1c0c3b0fdd4d7299da00fe4911745bda49a5834e6791015b60405180910390a15050565b6000610700816116f6565b50609780546001600160a01b0319166001600160a01b0392909216919091179055565b600061072e816116f6565b609e80547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b038516908102919091179091556040519081527ff980c1430e55b1867cd9337a1f20246ab3b7255032486d0b71c24e820eebf3ab906020016106e9565b600080805b609954811015610829576000848152609c602090815260408083206001600160a01b0389168452909152812060998054919291849081106107e6576107e6612292565b60009182526020808320909101546001600160a01b03168352820192909252604001902054610815908361219a565b91508061082181612261565b9150506107a3565b509392505050565b60008281526065602052604090206001015461084c816116f6565b6108568383611703565b505050565b6001600160a01b03811633146108d95760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610610565b6108e382826117a5565b5050565b600080805b609954811015610968576001600160a01b0384166000908152609a60205260408120609980549192918490811061092557610925612292565b60009182526020808320909101546001600160a01b03168352820192909252604001902054610954908361219a565b91508061096081612261565b9150506108ec565b5092915050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610999816116f6565b6109a284610ce9565b15156001146109f35760405162461bcd60e51b815260206004820152601760248201527f5468697320706f6f6c206973206e6f742076616c6964210000000000000000006044820152606401610610565b815183511115610a6b5760405162461bcd60e51b815260206004820152602b60248201527f42656e656669743a2074686520726563697069656e7473206d69736d6174636860448201527f207468652076616c7565730000000000000000000000000000000000000000006064820152608401610610565b60005b8351811015610ca4576000838281518110610a8b57610a8b612292565b60200260200101511115610c9257828181518110610aab57610aab612292565b6020026020010151609c60008881526020019081526020016000206000868481518110610ada57610ada612292565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000876001600160a01b03166001600160a01b0316815260200190815260200160002054610b30919061219a565b609c60008881526020019081526020016000206000868481518110610b5757610b57612292565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000876001600160a01b03166001600160a01b0316815260200190815260200160002081905550828181518110610bb857610bb8612292565b6020026020010151609a6000868481518110610bd657610bd6612292565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000876001600160a01b03166001600160a01b0316815260200190815260200160002054610c2c919061219a565b609a6000868481518110610c4257610c42612292565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000876001600160a01b03166001600160a01b03168152602001908152602001600020819055505b80610c9c81612261565b915050610a6e565b507fcaa7702a1a19ec1d65859f97b85e4a7e3f022eb0e7493f934ea38d0cda37ecff84868585604051610cda9493929190612078565b60405180910390a15050505050565b6000805b609954811015610d4a57826001600160a01b031660998281548110610d1457610d14612292565b6000918252602090912001546001600160a01b03161415610d385750600192915050565b80610d4281612261565b915050610ced565b50600092915050565b6000610d5e816116f6565b8151610856906099906020850190611b4f565b6000610d7c816116f6565b6001600160a01b0382166000908152609d602052604090205460ff1615610e0b5760405162461bcd60e51b815260206004820152602260248201527f42656e656669743a2054686973206f70657261746f722069732065786973746560448201527f64210000000000000000000000000000000000000000000000000000000000006064820152608401610610565b6001600160a01b0382166000908152609d60205260409020805460ff19166001179055610e587f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92983611828565b609e805460019190600090610e7490849063ffffffff166121b2565b92506101000a81548163ffffffff021916908363ffffffff1602179055507f4c141abccf173677929dea054f218ed87362117834a8869ec9f68d8bdaaea1dc826040516106e991906001600160a01b0391909116815260200190565b6000610edb816116f6565b50609880546001600160a01b0319166001600160a01b0392909216919091179055565b6098546040517f0a4794f50000000000000000000000000000000000000000000000000000000081523360048201526000916001600160a01b031690630a4794f59060240160206040518083038186803b158015610f5b57600080fd5b505afa158015610f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f939190611c71565b90506001600160a01b0381166110115760405162461bcd60e51b815260206004820152603260248201527f42656e656669743a204163636f756e7420686173206e6f74207265676973746560448201527f72656420207061697220616464726573732100000000000000000000000000006064820152608401610610565b336000908152609b6020526040902054841461106f5760405162461bcd60e51b815260206004820152601960248201527f42656e656669743a204e6f6e636520697320696e76616c6964000000000000006044820152606401610610565b600061110285336040516020016110a292919091825260601b6bffffffffffffffffffffffff1916602082015260340190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b90506001600160a01b0382166111188286611832565b6001600160a01b03161461116e5760405162461bcd60e51b815260206004820152601d60248201527f42656e656669743a207369676e617475726520697320696e76616c69640000006044820152606401610610565b6001600160a01b038083166000908152609a6020908152604080832093871683529290522054806112075760405162461bcd60e51b815260206004820152602660248201527f42656e656669743a205468657265206172656e277420616d6f756e747320746f60448201527f20636c61696d00000000000000000000000000000000000000000000000000006064820152608401610610565b609e546040517f1072cbea000000000000000000000000000000000000000000000000000000008152336004820152602481018390526401000000009091046001600160a01b031690631072cbea90604401600060405180830381600087803b15801561127357600080fd5b505af1158015611287573d6000803e3d6000fd5b5050336000908152609b6020526040812080549093509091506112a990612261565b909155506001600160a01b038381166000908152609a6020908152604080832093881680845293825280832092909255815189815233918101919091528082018490526060810192909252517ffef04639dc7bea1d2faa17d209d726eca504dc3bc1e58a954761a805964db2649181900360800190a1505050505050565b6099818154811061133757600080fd5b6000918252602090912001546001600160a01b0316905081565b60008281526065602052604090206001015461136c816116f6565b61085683836117a5565b6000611381816116f6565b61138a82610ce9565b15156001146113db5760405162461bcd60e51b815260206004820152601760248201527f5468697320706f6f6c206973206e6f742076616c6964210000000000000000006044820152606401610610565b50609980546001810182556000919091527f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d000180546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff161580801561144e5750600054600160ff909116105b806114685750303b158015611468575060005460ff166001145b6114da5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610610565b6000805460ff1916600117905580156114fd576000805461ff0019166101001790555b609780546001600160a01b0319166001600160a01b038616179055825161152b906099906020860190611b4f565b50609880546001600160a01b0319166001600160a01b038416179055611552600033611828565b8015611598576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60006115a9816116f6565b6001600160a01b0382166000908152609d602052604090205460ff166116375760405162461bcd60e51b815260206004820152602760248201527f42656e656669743a2054686973205f6f70657261746f72206973206e6f74206560448201527f78697374656421000000000000000000000000000000000000000000000000006064820152608401610610565b6116617f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92983611351565b6001600160a01b0382166000908152609d60205260408120805460ff19169055609e80546001929061169a90849063ffffffff166121f9565b92506101000a81548163ffffffff021916908363ffffffff1602179055507ff634ca5385ad7ad304623aa4ed9b801e5dfaf3607f44107e57d9d7a3fd1093dc826040516106e991906001600160a01b0391909116815260200190565b61170081336118b1565b50565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff166108e35760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556117613390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16156108e35760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6108e38282611703565b60008060008061184185611926565b6040805160008152602081018083528b905260ff8516918101919091526060810183905260808101829052929550909350915060019060a0016020604051602081039080840390855afa15801561189c573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff166108e3576118e481611955565b6118ef836020611967565b604051602001611900929190611ff7565b60408051601f198184030181529082905262461bcd60e51b825261061091600401612112565b6000806000835160411461193957600080fd5b5050506020810151604082015160609092015160001a92909190565b60606105b36001600160a01b03831660145b606060006119768360026121da565b61198190600261219a565b67ffffffffffffffff811115611999576119996122a8565b6040519080825280601f01601f1916602001820160405280156119c3576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106119fa576119fa612292565b60200101906001600160f81b031916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611a4557611a45612292565b60200101906001600160f81b031916908160001a9053506000611a698460026121da565b611a7490600161219a565b90505b6001811115611af9577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611ab557611ab5612292565b1a60f81b828281518110611acb57611acb612292565b60200101906001600160f81b031916908160001a90535060049490941c93611af28161224a565b9050611a77565b508315611b485760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610610565b9392505050565b828054828255906000526020600020908101928215611ba4579160200282015b82811115611ba457825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611b6f565b50611bb0929150611bb4565b5090565b5b80821115611bb05760008155600101611bb5565b8035611bd4816122be565b919050565b600082601f830112611bea57600080fd5b81356020611bff611bfa83612176565b612145565b80838252828201915082860187848660051b8901011115611c1f57600080fd5b60005b85811015611c47578135611c35816122be565b84529284019290840190600101611c22565b5090979650505050505050565b600060208284031215611c6657600080fd5b8135611b48816122be565b600060208284031215611c8357600080fd5b8151611b48816122be565b60008060408385031215611ca157600080fd5b8235611cac816122be565b91506020830135611cbc816122be565b809150509250929050565b60008060408385031215611cda57600080fd5b8235611ce5816122be565b946020939093013593505050565b600060208284031215611d0557600080fd5b813567ffffffffffffffff811115611d1c57600080fd5b611d2884828501611bd9565b949350505050565b600060208284031215611d4257600080fd5b81518015158114611b4857600080fd5b600060208284031215611d6457600080fd5b5035919050565b60008060408385031215611d7e57600080fd5b823591506020830135611cbc816122be565b600060208284031215611da257600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611b4857600080fd5b600080600060608486031215611de757600080fd5b8335611df2816122be565b9250602084013567ffffffffffffffff811115611e0e57600080fd5b611e1a86828701611bd9565b9250506040840135611e2b816122be565b809150509250925092565b600080600060608486031215611e4b57600080fd5b833592506020840135611e5d816122be565b91506040840135611e2b816122be565b60008060008060808587031215611e8357600080fd5b84359350602080860135611e96816122be565b9350604086013567ffffffffffffffff80821115611eb357600080fd5b611ebf89838a01611bd9565b94506060880135915080821115611ed557600080fd5b508601601f81018813611ee757600080fd5b8035611ef5611bfa82612176565b8082825284820191508484018b868560051b8701011115611f1557600080fd5b600094505b83851015611f38578035835260019490940193918501918501611f1a565b50979a9699509497505050505050565b600080600060608486031215611f5d57600080fd5b8335925060208085013567ffffffffffffffff80821115611f7d57600080fd5b818701915087601f830112611f9157600080fd5b813581811115611fa357611fa36122a8565b611fb5601f8201601f19168501612145565b91508082528884828501011115611fcb57600080fd5b8084840185840137600084828401015250809450505050611fee60408501611bc9565b90509250925092565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161202f81601785016020880161221e565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161206c81602884016020880161221e565b01602801949350505050565b6000608082016001600160a01b038088168452602087818601526080604086015282875180855260a087019150828901945060005b818110156120cb5785518516835294830194918301916001016120ad565b5050858103606087015286518082529082019350915080860160005b83811015612103578151855293820193908201906001016120e7565b50929998505050505050505050565b602081526000825180602084015261213181604085016020870161221e565b601f01601f19169190910160400192915050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561216e5761216e6122a8565b604052919050565b600067ffffffffffffffff821115612190576121906122a8565b5060051b60200190565b600082198211156121ad576121ad61227c565b500190565b600063ffffffff8083168185168083038211156121d1576121d161227c565b01949350505050565b60008160001904831182151516156121f4576121f461227c565b500290565b600063ffffffff838116908316818110156122165761221661227c565b039392505050565b60005b83811015612239578181015183820152602001612221565b838111156115985750506000910152565b6000816122595761225961227c565b506000190190565b60006000198214156122755761227561227c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461170057600080fdfea2646970667358221220d6da6caf525fd43b6d9e67184af896930c86865b594ffa9d867210ec24300cfd64736f6c63430008070033