0x608060405234801561001057600080fd5b506004361061012c5760003560e01c80637bb7bed1116100ad578063c4f59f9b11610071578063c4f59f9b1461035e578063e86b2fbe14610373578063eb8f280614610386578063f2fde38b14610399578063f49dc6b6146103ac57600080fd5b80637bb7bed1146102d8578063831e8dec146102eb5780638da5cb5b146103275780638daa0acb14610338578063c4d66de81461034b57600080fd5b806345a49d3c116100f457806345a49d3c146102525780635ce65fe9146102655780635fe3b5671461027857806366f91a24146102a3578063715018a6146102d057600080fd5b8063246467e8146101315780632e4a5d6014610146578063318d9e5d1461017e57806332894a6d1461019157806342cbb15c14610235575b600080fd5b61014461013f3660046119d8565b6103bf565b005b610169610154366004611a14565b60696020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61014461018c366004611b0c565b610462565b6101f461019f366004611b49565b6066602090815260009283526040808420909152908252902080546001820154600283015460039093015491926001600160e01b038083169363ffffffff600160e01b94859004811694928216929091041686565b604080519687526001600160e01b03958616602088015263ffffffff94851690870152606086019290925290921660808401521660a082015260c001610175565b61023d6104b6565b60405163ffffffff9091168152602001610175565b610144610260366004611b49565b6104fc565b610144610273366004611a14565b61057c565b60655461028b906001600160a01b031681565b6040516001600160a01b039091168152602001610175565b6102b86a0c097ce7bc90715b34b9f160241b81565b6040516001600160e01b039091168152602001610175565b6101446105f6565b61028b6102e6366004611b7c565b61060a565b6103196102f9366004611b49565b606760209081526000928352604080842090915290825290206002015481565b604051908152602001610175565b6033546001600160a01b031661028b565b610144610346366004611a14565b610634565b610144610359366004611a14565b610798565b6103666108c4565b6040516101759190611b95565b610144610381366004611a14565b610926565b610144610394366004611b49565b6109a0565b6101446103a7366004611a14565b610a1b565b6101446103ba366004611c3d565b610a94565b6103c7610c75565b6001600160a01b03831660009081526069602052604090205460ff166104515760405162461bcd60e51b815260206004820152603460248201527f5265776172644469737472696275746f723a206772616e7420726577617264206044820152731d1bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b60648201526084015b60405180910390fd5b61045c838383610ccf565b50505050565b60005b6068548110156104b2576104a06068828154811061048557610485611cd6565b6000918252602090912001546001600160a01b031683610e2a565b806104aa81611d02565b915050610465565b5050565b60006104f7426040518060400160405280601c81526020017f626c6f636b206e756d6265722065786365656473203332206269747300000000815250610ece565b905090565b6065546001600160a01b031633146105265760405162461bcd60e51b815260040161044890611d1b565b60005b606854811015610577576105656068828154811061054957610549611cd6565b6000918252602090912001546001600160a01b03168484610f01565b8061056f81611d02565b915050610529565b505050565b6065546001600160a01b031633146105a65760405162461bcd60e51b815260040161044890611d1b565b60005b6068548110156104b2576105e4606882815481106105c9576105c9611cd6565b6000918252602090912001546001600160a01b031683611099565b806105ee81611d02565b9150506105a9565b6105fe610c75565b61060860006112eb565b565b6068818154811061061a57600080fd5b6000918252602090912001546001600160a01b0316905081565b61063c610c75565b6001600160a01b0381166106b15760405162461bcd60e51b815260206004820152603660248201527f5265776172644469737472696275746f723a2072657761726420746f6b656e2060448201527563616e6e6f74206265207a65726f206164647265737360501b6064820152608401610448565b6001600160a01b03811660009081526069602052604090205460ff16156107315760405162461bcd60e51b815260206004820152602e60248201527f5265776172644469737472696275746f723a2072657761726420746f6b656e2060448201526d616c72656164792065786973747360901b6064820152608401610448565b6068805460018181019092557fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c220977530180546001600160a01b039093166001600160a01b031990931683179055600091825260696020526040909120805460ff19169091179055565b600054610100900460ff16158080156107b85750600054600160ff909116105b806107d25750303b1580156107d2575060005460ff166001145b6108355760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610448565b6000805460ff191660011790558015610858576000805461ff0019166101001790555b61086061133d565b606580546001600160a01b0319166001600160a01b03841617905580156104b2576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6060606880548060200260200160405190810160405280929190818152602001828054801561091c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116108fe575b5050505050905090565b6065546001600160a01b031633146109505760405162461bcd60e51b815260040161044890611d1b565b60005b6068548110156104b25761098e6068828154811061097357610973611cd6565b6000918252602090912001546001600160a01b03168361136c565b8061099881611d02565b915050610953565b6065546001600160a01b031633146109ca5760405162461bcd60e51b815260040161044890611d1b565b60005b60685481101561057757610a09606882815481106109ed576109ed611cd6565b6000918252602090912001546001600160a01b03168484611504565b80610a1381611d02565b9150506109cd565b610a23610c75565b6001600160a01b038116610a885760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610448565b610a91816112eb565b50565b610a9c610c75565b6001600160a01b03841660009081526069602052604090205460ff16610b1b5760405162461bcd60e51b815260206004820152602e60248201527f5265776172644469737472696275746f723a2072657761726420746f6b656e2060448201526d191bd95cc81b9bdd08195e1a5cdd60921b6064820152608401610448565b8151835114610b8a5760405162461bcd60e51b815260206004820152603560248201527f5265776172644469737472696275746f723a20737570706c79207370656564206044820152740c2e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b6064820152608401610448565b8051835114610bf95760405162461bcd60e51b815260206004820152603560248201527f5265776172644469737472696275746f723a20626f72726f77207370656564206044820152740c2e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b6064820152608401610448565b60005b8351811015610c6e57610c5c85858381518110610c1b57610c1b611cd6565b6020026020010151858481518110610c3557610c35611cd6565b6020026020010151858581518110610c4f57610c4f611cd6565b602002602001015161171e565b80610c6681611d02565b915050610bfc565b5050505050565b6033546001600160a01b031633146106085760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610448565b6040516370a0823160e01b815230600482015260009081906001600160a01b038616906370a0823190602401602060405180830381865afa158015610d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c9190611d78565b9050600083118015610d4e5750808311155b15610e1e5760405163a9059cbb60e01b81526001600160a01b0385811660048301526024820185905286169063a9059cbb906044016020604051808303816000875af1158015610da2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc69190611d91565b50836001600160a01b0316856001600160a01b03167f6123969dd9705ebe9fca0229b85009158c92cae456c32d917d8d435748f3abd385604051610e0c91815260200190565b60405180910390a36000915050610e23565b829150505b9392505050565b60005b8151811015610577576001600160a01b038316600090815260676020526040812083518290859085908110610e6457610e64611cd6565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000209050610eb684848481518110610ea457610ea4611cd6565b60200260200101518360020154610ccf565b60029091015580610ec681611d02565b915050610e2d565b6000816401000000008410610ef65760405162461bcd60e51b81526004016104489190611db3565b508290505b92915050565b6001600160a01b03808416600081815260666020908152604080832087861680855290835281842094845260678352818420958716845294825280832060018501549584529182905290912080546001600160e01b0390941690819055919290919080158015610f7f57506a0c097ce7bc90715b34b9f160241b8210155b15610f9557506a0c097ce7bc90715b34b9f160241b5b60006040518060200160405280610fac858561187e565b90526040516370a0823160e01b81526001600160a01b0388811660048301529192506000918916906370a0823190602401602060405180830381865afa158015610ffa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101e9190611d78565b9050600061102c828461188a565b905061103c8660020154826118b3565b600287018190556040805183815260208101929092526001600160a01b038a811692908d16917ffd07974d3aaf62e9d6f1492b77eba5e72f99d8367e456eaf203de8491d42c999910160405180910390a350505050505050505050565b60006040518060200160405280836001600160a01b031663aa5af0fd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111089190611d78565b90526001600160a01b038085166000908152606660209081526040808320938716835292905290812091925061113c6104b6565b600383015490915063ffffffff600160e01b90910481169082161115610c6e576002820154156112c357600382015460009061118590600160e01b900463ffffffff1683611e01565b63ffffffff16905060006111fa866001600160a01b03166347bd37186040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f49190611d78565b866118bf565b9050600061120c8386600201546118dd565b9050600080831161122c5760405180602001604052806000815250611236565b61123682846118e9565b604080516020810190915260038801546001600160e01b0316815290915061129c90611262908361192d565b5160408051808201909152601a81527f6e657720696e64657820657863656564732032323420626974730000000000006020820152611959565b6003870180546001600160e01b0319166001600160e01b0392909216919091179055505050505b60038201805463ffffffff8316600160e01b026001600160e01b039091161790555050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166113645760405162461bcd60e51b815260040161044890611e25565b610608611980565b6001600160a01b03808316600090815260666020908152604080832093851683529290529081209061139c6104b6565b600183015490915063ffffffff600160e01b9091048116908216111561045c578154156114dd5760018201546000906113e290600160e01b900463ffffffff1683611e01565b63ffffffff1690506000846001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144e9190611d78565b905060006114608386600001546118dd565b90506000808311611480576040518060200160405280600081525061148a565b61148a82846118e9565b604080516020810190915260018801546001600160e01b031681529091506114b690611262908361192d565b6001870180546001600160e01b0319166001600160e01b0392909216919091179055505050505b60018201805463ffffffff8316600160e01b026001600160e01b0390911617905550505050565b60006040518060200160405280846001600160a01b031663aa5af0fd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561154f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115739190611d78565b90526001600160a01b03808616600081815260666020908152604080832089861680855290835281842094845260678352818420958916845294825280832060038501549584526001810190925290912080546001600160e01b039094169081905593945090929091801580156115f857506a0c097ce7bc90715b34b9f160241b8210155b1561160e57506a0c097ce7bc90715b34b9f160241b5b60006040518060200160405280611625858561187e565b90526040516395dd919360e01b81526001600160a01b0389811660048301529192506000916116a291908b16906395dd919390602401602060405180830381865afa158015611678573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169c9190611d78565b886118bf565b905060006116b0828461188a565b90506116c08660020154826118b3565b600287018190556040805183815260208101929092526001600160a01b038b811692908e16917ffd07974d3aaf62e9d6f1492b77eba5e72f99d8367e456eaf203de8491d42c999910160405180910390a35050505050505050505050565b6001600160a01b038085166000908152606660209081526040808320938716835292905220805483146117d45760018101546001600160e01b0316600003611783576001810180546001600160e01b0319166a0c097ce7bc90715b34b9f160241b1790555b61178d858561136c565b8281556040518381526001600160a01b0385811691908716907f61918eb908e35e96d460dc030b7c4f6448ac64f1383759571b9c7cab50efd0469060200160405180910390a35b81816002015414610c6e5760038101546001600160e01b0316600003611817576003810180546001600160e01b0319166a0c097ce7bc90715b34b9f160241b1790555b6118218585611099565b818160020181905550836001600160a01b0316856001600160a01b03167f13b9c4bac6e50afba9701545614343a5e29bc815d483928198270e878c42eaf98460405161186f91815260200190565b60405180910390a35050505050565b6000610e238284611e70565b60006a0c097ce7bc90715b34b9f160241b6118a98484600001516118dd565b610e239190611e83565b6000610e238284611ea5565b6000610e236118d684670de0b6b3a76400006118dd565b83516119b0565b6000610e238284611eb8565b604080516020810190915260008152604051806020016040528061192461191e866a0c097ce7bc90715b34b9f160241b6118dd565b856119b0565b90529392505050565b6040805160208101909152600081526040518060200160405280611924856000015185600001516118b3565b600081600160e01b8410610ef65760405162461bcd60e51b81526004016104489190611db3565b600054610100900460ff166119a75760405162461bcd60e51b815260040161044890611e25565b610608336112eb565b6000610e238284611e83565b80356001600160a01b03811681146119d357600080fd5b919050565b6000806000606084860312156119ed57600080fd5b6119f6846119bc565b9250611a04602085016119bc565b9150604084013590509250925092565b600060208284031215611a2657600080fd5b610e23826119bc565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611a6e57611a6e611a2f565b604052919050565b600067ffffffffffffffff821115611a9057611a90611a2f565b5060051b60200190565b600082601f830112611aab57600080fd5b81356020611ac0611abb83611a76565b611a45565b82815260059290921b84018101918181019086841115611adf57600080fd5b8286015b84811015611b0157611af4816119bc565b8352918301918301611ae3565b509695505050505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b611b4184828501611a9a565b949350505050565b60008060408385031215611b5c57600080fd5b611b65836119bc565b9150611b73602084016119bc565b90509250929050565b600060208284031215611b8e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b81811015611bd65783516001600160a01b031683529284019291840191600101611bb1565b50909695505050505050565b600082601f830112611bf357600080fd5b81356020611c03611abb83611a76565b82815260059290921b84018101918181019086841115611c2257600080fd5b8286015b84811015611b015780358352918301918301611c26565b60008060008060808587031215611c5357600080fd5b611c5c856119bc565b9350602085013567ffffffffffffffff80821115611c7957600080fd5b611c8588838901611a9a565b94506040870135915080821115611c9b57600080fd5b611ca788838901611be2565b93506060870135915080821115611cbd57600080fd5b50611cca87828801611be2565b91505092959194509250565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611d1457611d14611cec565b5060010190565b6020808252603a908201527f5265776172644469737472696275746f723a206f6e6c7920636f6d7074726f6c60408201527f6c65722063616e2063616c6c20746869732066756e6374696f6e000000000000606082015260800190565b600060208284031215611d8a57600080fd5b5051919050565b600060208284031215611da357600080fd5b81518015158114610e2357600080fd5b600060208083528351808285015260005b81811015611de057858101830151858201604001528201611dc4565b506000604082860101526040601f19601f8301168501019250505092915050565b63ffffffff828116828216039080821115611e1e57611e1e611cec565b5092915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b81810381811115610efb57610efb611cec565b600082611ea057634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610efb57610efb611cec565b6000816000190483118215151615611ed257611ed2611cec565b50029056fea26469706673582212203e261aafa1ce0a1be796e4955c3dff4a1ebd8cf75ec6cfd3bb7523fe36b8e8ef64736f6c63430008100033