0x608060405234801561001057600080fd5b50611b83806100206000396000f3fe6080604052600436106100555760003560e01c8063173e31391461005a5780635db05aba1461009f5780636bfdaece146100b45780637249fbb61461010d5780637394ad931461012d5780638129fc1c1461015b575b600080fd5b34801561006657600080fd5b50610082730659aa05409e89dc8dcf4e02d6a606a1991f8b5181565b6040516001600160a01b0390911681526020015b60405180910390f35b6100b26100ad3660046117a1565b610170565b005b3480156100c057600080fd5b506100d46100cf366004611882565b610600565b604080516001600160a01b03909716875260208701959095529385019290925260608401521515608083015260a082015260c001610096565b34801561011957600080fd5b506100b2610128366004611882565b6106ae565b34801561013957600080fd5b5061014d61014836600461189a565b6108b5565b604051908152602001610096565b34801561016757600080fd5b506100b2610cf3565b6000805462010000900463ffffffff1690600261018c83611ab0565b91906101000a81548163ffffffff021916908363ffffffff16021790555050888110156101f55760405162461bcd60e51b815260206004820152601260248201527123746f6b656e73203e20237061636b65747360701b60448201526064015b60405180910390fd5b6000891161023c5760405162461bcd60e51b8152602060048201526014602482015273105d081b19585cdd080c481c9958da5c1a595b9d60621b60448201526064016101ec565b61010089106102865760405162461bcd60e51b81526020600482015260166024820152754174206d6f73742032353520726563697069656e747360501b60448201526064016101ec565b8215806102935750826001145b6102df5760405162461bcd60e51b815260206004820152601960248201527f556e7265636f676e697a61626c6520746f6b656e20747970650000000000000060448201526064016101ec565b808361032a57813410156103255760405162461bcd60e51b815260206004820152600d60248201526c09cde40cadcdeeaced0408aa89609b1b60448201526064016101ec565b610496565b8360011415610496576040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b15801561037557600080fd5b505afa158015610389573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ad9190611906565b90506103c46001600160a01b038516333086610e25565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a082319060240160206040518083038186803b15801561040657600080fd5b505afa15801561041a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043e9190611906565b905061044a8282611a6d565b92508b8310156104935760405162461bcd60e51b8152602060048201526014602482015273237265636569766564203e20237061636b65747360601b60448201526064016101ec565b50505b600080546002546040513360601b6001600160601b03191660208201524260348201526201000090920460e01b6001600160e01b031916605483015260588201526078810189905260980160405160208183030381529060405280519060200120905060008a61050757600061050a565b60015b600083815260016020526040902060ff91909116915061052a848c610e96565b8155610538868e8985610ec5565b81600001600101819055508d8160030160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550338160040160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505060008b905060008b905060008b90507f86af556fd7cfab9462285ad44f2d5913527c539ff549f74731ca9997ca53401885858b8d33428d8a8a8a6040516105e79a999897969594939291906119ab565b60405180910390a1505050505050505050505050505050565b60008181526001602081815260408084208151808301835281548152938101549284018390528493849384938493849390929091610640919060a0610f21565b815161064f9060806060610f21565b610660836020015160ef600f610f21565b610671846020015160e0600f610f21565b84516106809060e06020610f21565b3360009081526002909701602052604090962054939d929c50909a5098504293909311965094509092505050565b600081815260016020818152604092839020835180850190945280548452918201549083015260048101549091906001600160a01b03163381146107235760405162461bcd60e51b815260206004820152600c60248201526b43726561746f72204f6e6c7960a01b60448201526064016101ec565b42610735836000015160e06020610f21565b11156107755760405162461bcd60e51b815260206004820152600f60248201526e139bdd08195e1c1a5c9959081e595d608a1b60448201526064016101ec565b6000610788836000015160806060610f21565b9050806107d75760405162461bcd60e51b815260206004820152601b60248201527f4e6f6e65206c65667420696e2074686520726564207061636b6574000000000060448201526064016101ec565b60006107ea846020015160fe6001610f21565b905060006107ff8560200151604060a0610f21565b85516bffffffffffffffffffffffff60801b1916875590508161084f57604051339084156108fc029085906000818181858888f19350505050158015610849573d6000803e3d6000fd5b50610863565b816001141561086357610863813385610f31565b604080518881526001600160a01b03831660208201529081018490527f66c304c539e0bc7c8070207c09b9f6a5a9591b434dfed1867cc57fde7fb600939060600160405180910390a150505050505050565b600083815260016020818152604080842081518083019092528054808352938101548284015292909142916108ec9160e090610f21565b116109235760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b60448201526064016101ec565b6000610936826020015160ef600f610f21565b9050600061094b836020015160e0600f610f21565b905081811061098b5760405162461bcd60e51b815260206004820152600c60248201526b4f7574206f662073746f636b60a01b60448201526064016101ec565b60038401546001600160a01b03166109a38882610f4a565b6109e55760405162461bcd60e51b815260206004820152601360248201527215995c9a599a58d85d1a5bdb8819985a5b1959606a1b60448201526064016101ec565b6000806109f9866020015160fe6001610f21565b90506000610a0e876020015160ff6001610f21565b90506000610a23886000015160806060610f21565b90508160011415610a9f57610a388688611a6d565b60011415610a4857809350610a90565b610a528688611a6d565b610a5d826002611a4e565b610a679190611a3a565b600254600054610a83919062010000900463ffffffff16610fd8565b610a8d9190611ad4565b93505b83610a9a57600193505b610ad0565b610aa98688611a6d565b60011415610ab957809350610ad0565b610ac38688611a6d565b610acd9082611a3a565b93505b8751610afb9060806060610ae48886611a6d565b821b600190911b6000190190911b19919091161790565b895533730659aa05409e89dc8dcf4e02d6a606a1991f8b511415610b95576001600160a01b038b16600090815260028a01602052604090205415610b735760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b60448201526064016101ec565b6001600160a01b038b16600090815260028a0160205260409020849055610bfb565b33600090815260028a01602052604090205415610be65760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b60448201526064016101ec565b33600090815260028a01602052604090208490555b6020880151610c139060e0600f610ae48a6001611a22565b60018a015582610c59576040516001600160a01b038c169085156108fc029086906000818181858888f19350505050158015610c53573d6000803e3d6000fd5b50610c7d565b8260011415610c7d57610c7d610c768960200151604060a0610f21565b8c86610f31565b7f358ddd686a5ca3ef6f8aee9b8d2dc3c642ecc278657c3802f8802b1a44c10e448d8c86610cb28c60200151604060a0610f21565b604080519485526001600160a01b03938416602086015284019190915216606082015260800160405180910390a150919750505050505050505b9392505050565b600054610100900460ff16610d0e5760005460ff1615610d16565b610d16611038565b610d795760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016101ec565b600054610100900460ff16158015610da4576000805460ff1961ff0019909116610100171660011790555b4233604051602001610df59291907f466f726d6572204e424120436f6d6d697373696f6e65722044617669642053748152602081019290925260601b6001600160601b031916604082015260540190565b60408051601f1981840301815291905280516020909101206002558015610e22576000805461ff00191690555b50565b6040516001600160a01b0380851660248301528316604482015260648101829052610e909085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611049565b50505050565b600080610ea6608060608661111b565b17610ebd60e06020610eb88642611a22565b61111b565b179392505050565b600080610ede604060a06001600160a01b03891661111b565b17610eed60e0600f600061111b565b17610efb60ef600f8761111b565b17610f0960fe60018661111b565b17610f1760ff60018561111b565b1795945050505050565b600019600190911b0191901c1690565b610f456001600160a01b0384168383611177565b505050565b6000806040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a323000000000815250905060008133604051602001610f9a929190611966565b6040516020818303038152906040528051906020012090506000610fbe82876111a7565b6001600160a01b0390811690861614935050505092915050565b6040516001600160e01b031960e083901b1660208201526001600160601b03193360601b1660248201526038810183905242605882015260009060780160408051601f198184030181529190528051602090910120610cec906001611a22565b6000611043306111cb565b15905090565b600061109e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111de9092919063ffffffff16565b805190915015610f4557808060200190518101906110bc9190611866565b610f455760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101ec565b60006001831b821061010084141761116e5760405162461bcd60e51b81526020600482015260166024820152750acc2d8eaca40deeae840decc40e4c2dcceca40849eb60531b60448201526064016101ec565b5090911b919050565b6040516001600160a01b038316602482015260448101829052610f4590849063a9059cbb60e01b90606401610e59565b60008060006111b685856111f5565b915091506111c381611265565b509392505050565b6001600160a01b0381163b15155b919050565b60606111ed8484600085611468565b949350505050565b60008082516041141561122c5760208301516040840151606085015160001a61122087828585611597565b9450945050505061125e565b825160401415611256576020830151604084015161124b868383611684565b93509350505061125e565b506000905060025b9250929050565b600081600481111561128757634e487b7160e01b600052602160045260246000fd5b141561129257610e22565b60018160048111156112b457634e487b7160e01b600052602160045260246000fd5b14156113025760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016101ec565b600281600481111561132457634e487b7160e01b600052602160045260246000fd5b14156113725760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016101ec565b600381600481111561139457634e487b7160e01b600052602160045260246000fd5b14156113ed5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016101ec565b600481600481111561140f57634e487b7160e01b600052602160045260246000fd5b1415610e225760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016101ec565b6060824710156114c95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101ec565b6114d2856111cb565b61151e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101ec565b600080866001600160a01b0316858760405161153a919061194a565b60006040518083038185875af1925050503d8060008114611577576040519150601f19603f3d011682016040523d82523d6000602084013e61157c565b606091505b509150915061158c8282866116bd565b979650505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156115ce575060009050600361167b565b8460ff16601b141580156115e657508460ff16601c14155b156115f7575060009050600461167b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561164b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166116745760006001925092505061167b565b9150600090505b94509492505050565b6000806001600160ff1b038316816116a160ff86901c601b611a22565b90506116af87828885611597565b935093505050935093915050565b606083156116cc575081610cec565b8251156116dc5782518084602001fd5b8160405162461bcd60e51b81526004016101ec9190611998565b600067ffffffffffffffff8084111561171157611711611b14565b604051601f8501601f19908116603f0116810190828211818310171561173957611739611b14565b8160405280935085815286868601111561175257600080fd5b858560208301376000602087830101525050509392505050565b80356111d981611b2a565b80356111d981611b3f565b600082601f830112611792578081fd5b610cec838335602085016116f6565b6000806000806000806000806000806101408b8d0312156117c0578586fd5b6117c98b61176c565b995060208b013598506117de60408c01611777565b975060608b0135965060808b0135955060a08b013567ffffffffffffffff80821115611808578687fd5b6118148e838f01611782565b965060c08d0135915080821115611829578586fd5b506118368d828e01611782565b94505060e08b0135925061184d6101008c0161176c565b91506101208b013590509295989b9194979a5092959850565b600060208284031215611877578081fd5b8151610cec81611b3f565b600060208284031215611893578081fd5b5035919050565b6000806000606084860312156118ae578283fd5b83359250602084013567ffffffffffffffff8111156118cb578283fd5b8401601f810186136118db578283fd5b6118ea868235602084016116f6565b92505060408401356118fb81611b2a565b809150509250925092565b600060208284031215611917578081fd5b5051919050565b60008151808452611936816020860160208601611a84565b601f01601f19169290920160200192915050565b6000825161195c818460208701611a84565b9190910192915050565b60008351611978818460208801611a84565b60609390931b6001600160601b0319169190920190815260140192915050565b600060208252610cec602083018461191e565b60006101408c83528b60208401528060408401526119cb8184018c61191e565b905082810360608401526119df818b61191e565b6001600160a01b03998a16608085015260a084019890985250509390951660c084015260e083019190915215156101008201526101200191909152949350505050565b60008219821115611a3557611a35611ae8565b500190565b600082611a4957611a49611afe565b500490565b6000816000190483118215151615611a6857611a68611ae8565b500290565b600082821015611a7f57611a7f611ae8565b500390565b60005b83811015611a9f578181015183820152602001611a87565b83811115610e905750506000910152565b600063ffffffff80831681811415611aca57611aca611ae8565b6001019392505050565b600082611ae357611ae3611afe565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e2257600080fd5b8015158114610e2257600080fdfea2646970667358221220892d0c08cc4ed6db170074d7662baac27cadeb5596372a2a647cd25bce6c10fc64736f6c63430008020033