0x608060405234801561001057600080fd5b506000805460ff191690556100243361006a565b600280546001600160a01b031990811630179091556812f939c99edab800006006556001805490911673dac17f958d2ee523a2206206994597c13d831ec71790556100c3565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b611441806100d26000396000f3fe6080604052600436106101795760003560e01c80638456cb59116100cb578063dc1b73281161007f578063f2fde38b11610059578063f2fde38b146103fd578063f7260d3e1461041d578063ff920c741461043d57600080fd5b8063dc1b732814610391578063e73faa2d146103b1578063ed9ec888146103c757600080fd5b806394bf804d116100b057806394bf804d1461032457806397562de414610344578063cd8bff331461037157600080fd5b80638456cb59146102d85780638da5cb5b146102ed57600080fd5b80634f8d65f61161012d57806370a082311161010757806370a0823114610283578063715018a6146102a3578063718da7ee146102b857600080fd5b80634f8d65f61461020a57806355eba868146102405780635c975abb1461026057600080fd5b806318160ddd1161015e57806318160ddd146101cb5780633ccfd60b146101e05780633f4ba83a146101f557600080fd5b806301e336671461018557806307225b4d146101a757600080fd5b3661018057005b600080fd5b34801561019157600080fd5b506101a56101a03660046111e4565b61045d565b005b3480156101b357600080fd5b506007545b6040519081526020015b60405180910390f35b3480156101d757600080fd5b506005546101b8565b3480156101ec57600080fd5b506101a561061a565b34801561020157600080fd5b506101a56106e8565b34801561021657600080fd5b506101b8610225366004611220565b6001600160a01b031660009081526004602052604090205490565b34801561024c57600080fd5b506101a561025b366004611220565b6106fa565b34801561026c57600080fd5b5060005460ff1660405190151581526020016101c2565b34801561028f57600080fd5b506101b861029e366004611220565b610776565b3480156102af57600080fd5b506101a5610867565b3480156102c457600080fd5b506101a56102d3366004611220565b610879565b3480156102e457600080fd5b506101a56108b0565b3480156102f957600080fd5b5060005461010090046001600160a01b03165b6040516001600160a01b0390911681526020016101c2565b34801561033057600080fd5b506101a561033f366004611242565b6108c0565b34801561035057600080fd5b5061036461035f366004611220565b610ac3565b6040516101c2919061126e565b34801561037d57600080fd5b506101b861038c3660046112e8565b610b72565b34801561039d57600080fd5b506101a56103ac3660046112e8565b610b93565b3480156103bd57600080fd5b506101b860065481565b3480156103d357600080fd5b506101b86103e2366004611220565b6001600160a01b031660009081526003602052604090205490565b34801561040957600080fd5b506101a5610418366004611220565b610ba0565b34801561042957600080fd5b5060025461030c906001600160a01b031681565b34801561044957600080fd5b5060015461030c906001600160a01b031681565b610465610c30565b600081116104ba5760405162461bcd60e51b815260206004820152600e60248201527f696e76616c696420616d6f756e7400000000000000000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b0383166104ff5760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016104b1565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa15801561055f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105839190611301565b9050818110156105d55760405162461bcd60e51b815260206004820152601460248201527f696e73756666696369656e742062616c616e636500000000000000000000000060448201526064016104b1565b6105e96001600160a01b0384168584610c90565b60405142907fac32cddf915f6ffcec025c2e4bf5c11baa7c91c5ae1534d75d19797b2dd45f5590600090a250505050565b610622610c30565b604051600090339047908381818185875af1925050503d8060008114610664576040519150601f19603f3d011682016040523d82523d6000602084013e610669565b606091505b50509050806106ba5760405162461bcd60e51b815260206004820152600f60248201527f7769746864726177206661696c6564000000000000000000000000000000000060448201526064016104b1565b60405142907fac32cddf915f6ffcec025c2e4bf5c11baa7c91c5ae1534d75d19797b2dd45f5590600090a250565b6106f0610c30565b6106f8610d3e565b565b610702610c30565b6001600160a01b0381166107475760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016104b1565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260036020908152604080832080548251818502810185019093528083528493849084015b828210156108155760008481526020908190206040805160a0810182526005860290920180546001600160a01b039081168452600180830154858701526002830154938501939093526003820154606085015260049091015416608083015290835290920191016107a9565b505050509050600080600090505b825181101561085f5782818151811061083e5761083e61131a565b602002602001015160400151826108559190611346565b9150600101610823565b509392505050565b61086f610c30565b6106f86000610d90565b610881610c30565b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6108b8610c30565b6106f8610e00565b6108c8610e3d565b6001600160a01b03811633036109205760405162461bcd60e51b815260206004820152601d60248201527f63616c6c6572206973207468652073616d6520617320696e766974657200000060448201526064016104b1565b600060065483610930919061135f565b336000818152600360208181526040808420815160a0810183529586528583018781529186018a815242606088018181526001600160a01b038c811660808b01908152855460018181018855968b52978a209a516005988902909b0180549b831673ffffffffffffffffffffffffffffffffffffffff199c8d16178155965195870195909555925160028601555195840195909555905160049092018054929091169190951617909355825493945092869291906109ef908490611346565b90915550506001600160a01b03831660009081526004602052604081208054869290610a1c908490611346565b9091555050600254600154610a40916001600160a01b039182169133911685610e90565b604080518281526001600160a01b03851660208201528391869133917f64cf309bc0263a1b873cea29c5e11662ae4e55295ad48d5926f08b1ff9679d80910160405180910390a4505060078054600181018255600091909152437fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688909101555050565b6001600160a01b0381166000908152600360209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610b675760008481526020908190206040805160a0810182526005860290920180546001600160a01b03908116845260018083015485870152600283015493850193909352600382015460608501526004909101541660808301529083529092019101610afb565b505050509050919050565b60078181548110610b8257600080fd5b600091825260209091200154905081565b610b9b610c30565b600655565b610ba8610c30565b6001600160a01b038116610c245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104b1565b610c2d81610d90565b50565b6000546001600160a01b036101009091041633146106f85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b1565b6040516001600160a01b038316602482015260448101829052610d399084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610ee7565b505050565b610d46610fcf565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600080546001600160a01b038381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b610e08610e3d565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610d733390565b60005460ff16156106f85760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016104b1565b6040516001600160a01b0380851660248301528316604482015260648101829052610ee19085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401610cd5565b50505050565b6000610f3c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166110219092919063ffffffff16565b9050805160001480610f5d575080806020019051810190610f5d9190611376565b610d395760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016104b1565b60005460ff166106f85760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016104b1565b60606110308484600085611038565b949350505050565b6060824710156110b05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016104b1565b600080866001600160a01b031685876040516110cc91906113bc565b60006040518083038185875af1925050503d8060008114611109576040519150601f19603f3d011682016040523d82523d6000602084013e61110e565b606091505b509150915061111f8783838761112a565b979650505050505050565b60608315611199578251600003611192576001600160a01b0385163b6111925760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104b1565b5081611030565b61103083838151156111ae5781518083602001fd5b8060405162461bcd60e51b81526004016104b191906113d8565b80356001600160a01b03811681146111df57600080fd5b919050565b6000806000606084860312156111f957600080fd5b611202846111c8565b9250611210602085016111c8565b9150604084013590509250925092565b60006020828403121561123257600080fd5b61123b826111c8565b9392505050565b6000806040838503121561125557600080fd5b82359150611265602084016111c8565b90509250929050565b602080825282518282018190526000919060409081850190868401855b828110156112db57815180516001600160a01b0390811686528782015188870152868201518787015260608083015190870152608091820151169085015260a0909301929085019060010161128b565b5091979650505050505050565b6000602082840312156112fa57600080fd5b5035919050565b60006020828403121561131357600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561135957611359611330565b92915050565b808202811582820484141761135957611359611330565b60006020828403121561138857600080fd5b8151801515811461123b57600080fd5b60005b838110156113b357818101518382015260200161139b565b50506000910152565b600082516113ce818460208701611398565b9190910192915050565b60208152600082518060208401526113f7816040850160208701611398565b601f01601f1916919091016040019291505056fea2646970667358221220e4f40857a91cbeb27057d1a3242f7f975ec495409f9eaaf6c360ad2ef948233a64736f6c63430008180033