0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61163e8061007e6000396000f3fe6080604052600436106100915760003560e01c8063c028da0f11610059578063c028da0f14610124578063ca96093014610144578063d0c9447114610199578063e06174e4146101b9578063f2fde38b1461020057600080fd5b80630bcb498214610096578063715018a6146100bf5780637cd2bffc146100d65780638da5cb5b146100e9578063a4cdb2fb14610111575b600080fd5b6100a96100a43660046111be565b610220565b6040516100b69190611231565b60405180910390f35b3480156100cb57600080fd5b506100d46103df565b005b6100a96100e4366004611270565b6103f3565b3480156100f557600080fd5b506000546040516001600160a01b0390911681526020016100b6565b6100d461011f366004611306565b610525565b34801561013057600080fd5b506100d461013f36600461131f565b6108ba565b34801561015057600080fd5b5061018b61015f366004611343565b600360209081526000948552604080862082529385528385208152918452828420909152825290205481565b6040519081526020016100b6565b3480156101a557600080fd5b5061018b6101b4366004611392565b6108d4565b3480156101c557600080fd5b506001546002546101e0916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016100b6565b34801561020c57600080fd5b506100d461021b3660046113a4565b610a65565b6002546000906001600160a01b0316331461023a57600080fd5b600061027b85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ae392505050565b805161ffff1660009081526004602090815260408083208285015184528252808320818501516001600160401b031684529091529020549091506001600160a01b03166102db57604051630b3a42e560e31b815260040160405180910390fd5b805161ffff1660009081526004602090815260408083208285015184528252808320818501516001600160401b031684529091529020546001600160a01b039081169061032b9089168289610b1e565b815161ffff90811660009081526004602090815260408083208287018051855290835281842082880180516001600160401b0390811687529185529483902080546001600160a01b031916905582518d815288519096169386019390935251848201529151166060830152516001600160a01b038a811692908416917f806b7998801cc7641c4fda76a2d60296a57eee3c5df63b790b72fdf700b7c5aa9181900360800190a3506001979650505050505050565b6103e7610b41565b6103f16000610b9b565b565b6002546000906001600160a01b0316331461040d57600080fd5b600061044e85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ae392505050565b805161ffff1660009081526003602090815260408083208285015184528252808320818501516001600160401b0316845282528083206001600160a01b038d1684529091528120805492935089929091906104aa9084906113c8565b909155505060408051888152825161ffff1660208083019190915283015181830152908201516001600160401b031660608201526001600160a01b038916907f1391b23a699f6a0185b888bef3dbf20b69c304aed2b68f98cb5b63d9ac34ae249060800160405180910390a250600198975050505050505050565b6001546001600160a01b0316331461053c57600080fd5b61054c60808201606083016113a4565b6004600061056060e0850160c086016113e9565b61ffff1681526020808201929092526040908101600090812060e0860135825290925281209061059861012085016101008601611404565b6001600160401b031681526020808201929092526040908101600090812080546001600160a01b0319166001600160a01b0395861617905560025482516320a6037160e21b81529251941693909284926382980dc492600480830193928290030181865afa15801561060e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610632919061141f565b905061065d81604085013561064d60c0870160a088016113a4565b6001600160a01b03169190610beb565b6001600160a01b03811663a5977fbb61067c60a08601608087016113a4565b61068c60c0870160a088016113a4565b604087018035906106a09060208a01611404565b6106b26101208a016101008b01611404565b6106bf60208b018b61143c565b6040516001600160e01b031960e089901b1681526001600160a01b03968716600482015295909416602486015260448501929092526001600160401b03908116606485015216608483015263ffffffff1660a482015260c401600060405180830381600087803b15801561073257600080fd5b505af1158015610746573d6000803e3d6000fd5b5050505060003084608001602081019061076091906113a4565b61077060c0870160a088016113a4565b604087018035906107849060208a01611404565b6107966101208a016101008b01611404565b6040516bffffffffffffffffffffffff19606097881b8116602083015295871b861660348201529390951b9093166048830152605c8201526001600160c01b031960c092831b8116607c83015292821b831660848201524690911b909116608c82015260940160408051601f19818403018152919052805160209091012090506001600160a01b038316634289fbb33461083660a08801608089016113a4565b6108466040890160208a01611404565b868661086261085d368d90038d0160c08e01611462565b610bf6565b6040518763ffffffff1660e01b8152600401610882959493929190611524565b6000604051808303818588803b15801561089b57600080fd5b505af11580156108af573d6000803e3d6000fd5b505050505050505050565b6108c2610b41565b8060016108cf8282611586565b505050565b6001546000906001600160a01b031633146108ee57600080fd5b6003600061090260408501602086016113e9565b61ffff168152602080820192909252604090810160009081208583013582529092528120906109376080850160608601611404565b6001600160401b03168152602080820192909252604001600090812091610960908501856113a4565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050806000036109a457604051634a37f4a760e01b815260040160405180910390fd5b60006003816109b960408601602087016113e9565b61ffff168152602080820192909252604090810160009081208683013582529092528120906109ee6080860160608701611404565b6001600160401b03168152602080820192909252604001600090812091610a17908601866113a4565b6001600160a01b039081168252602080830193909352604090910160002092909255600154610a609216908390610a50908601866113a4565b6001600160a01b03169190610b1e565b919050565b610a6d610b41565b6001600160a01b038116610ad75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610ae081610b9b565b50565b604080516060810182526000808252602080830182815293830191825284015160f01c8252602284015190925260429092015160c01c905290565b6001600160a01b038316610b36576108cf8282610c42565b6108cf838383610d5b565b6000546001600160a01b031633146103f15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ace565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6108cf838383610dbe565b60408051602a8082526060828101909352600091906020820181803683375050845160f01b60208084019190915285015160228301525060409093015160c01b60428401525090919050565b80471015610c925760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610ace565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610cdf576040519150601f19603f3d011682016040523d82523d6000602084013e610ce4565b606091505b50509050806108cf5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610ace565b6040516001600160a01b0383166024820152604481018290526108cf90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610e53565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052610e0f8482610f28565b610e4d576040516001600160a01b038416602482015260006044820152610e4390859063095ea7b360e01b90606401610d87565b610e4d8482610e53565b50505050565b6000610ea8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610fd19092919063ffffffff16565b9050805160001480610ec9575080806020019051810190610ec991906115b7565b6108cf5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610ace565b6000806000846001600160a01b031684604051610f4591906115d9565b6000604051808303816000865af19150503d8060008114610f82576040519150601f19603f3d011682016040523d82523d6000602084013e610f87565b606091505b5091509150818015610fb1575080511580610fb1575080806020019051810190610fb191906115b7565b8015610fc657506001600160a01b0385163b15155b925050505b92915050565b6060610fe08484600085610fe8565b949350505050565b6060824710156110495760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610ace565b600080866001600160a01b0316858760405161106591906115d9565b60006040518083038185875af1925050503d80600081146110a2576040519150601f19603f3d011682016040523d82523d6000602084013e6110a7565b606091505b50915091506110b8878383876110c3565b979650505050505050565b6060831561113257825160000361112b576001600160a01b0385163b61112b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ace565b5081610fe0565b610fe083838151156111475781518083602001fd5b8060405162461bcd60e51b8152600401610ace91906115f5565b6001600160a01b0381168114610ae057600080fd5b60008083601f84011261118857600080fd5b5081356001600160401b0381111561119f57600080fd5b6020830191508360208285010111156111b757600080fd5b9250929050565b6000806000806000608086880312156111d657600080fd5b85356111e181611161565b94506020860135935060408601356001600160401b0381111561120357600080fd5b61120f88828901611176565b909450925050606086013561122381611161565b809150509295509295909350565b602081016005831061125357634e487b7160e01b600052602160045260246000fd5b91905290565b80356001600160401b0381168114610a6057600080fd5b600080600080600080600060c0888a03121561128b57600080fd5b873561129681611161565b965060208801356112a681611161565b9550604088013594506112bb60608901611259565b935060808801356001600160401b038111156112d657600080fd5b6112e28a828b01611176565b90945092505060a08801356112f681611161565b8091505092959891949750929550565b6000610120828403121561131957600080fd5b50919050565b60006040828403121561131957600080fd5b803561ffff81168114610a6057600080fd5b6000806000806080858703121561135957600080fd5b61136285611331565b93506020850135925061137760408601611259565b9150606085013561138781611161565b939692955090935050565b60006080828403121561131957600080fd5b6000602082840312156113b657600080fd5b81356113c181611161565b9392505050565b80820180821115610fcb57634e487b7160e01b600052601160045260246000fd5b6000602082840312156113fb57600080fd5b6113c182611331565b60006020828403121561141657600080fd5b6113c182611259565b60006020828403121561143157600080fd5b81516113c181611161565b60006020828403121561144e57600080fd5b813563ffffffff811681146113c157600080fd5b60006060828403121561147457600080fd5b604051606081018181106001600160401b03821117156114a457634e487b7160e01b600052604160045260246000fd5b6040526114b083611331565b8152602083013560208201526114c860408401611259565b60408201529392505050565b60005b838110156114ef5781810151838201526020016114d7565b50506000910152565b600081518084526115108160208601602086016114d4565b601f01601f19169290920160200192915050565b6001600160a01b0386811682526001600160401b0386166020830152841660408201526060810183905260a0608082018190526000906110b8908301846114f8565b80546001600160a01b0319166001600160a01b0392909216919091179055565b813561159181611161565b61159b8183611566565b5060208201356115aa81611161565b6108cf8160018401611566565b6000602082840312156115c957600080fd5b815180151581146113c157600080fd5b600082516115eb8184602087016114d4565b9190910192915050565b6020815260006113c160208301846114f856fea26469706673582212203fd0cbcfc03251149245a6789edd34685df0db13975e26f09ef4625af0d6c75464736f6c63430008110033