60806040526103e86100136009600a6102db565b6100249066017e9d8602b4006102f0565b61002f9060146102f0565b6100399190610307565b6005556103e861004b6009600a6102db565b61005c9066017e9d8602b4006102f0565b6100679060146102f0565b6100719190610307565b6006556103e86100836009600a6102db565b6100949066017e9d8602b4006102f0565b61009f9060146102f0565b6100a99190610307565b6007556402540be3ff600a555f600b555f600c553480156100c8575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600160035f61011f5f546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081015f908120805494151560ff19958616179055308152600390925290208054909116600117905561016a6009600a6102db565b61017b9066017e9d8602b4006102f0565b335f81815260016020526040812092909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6101bb6009600a6102db565b6101cc9066017e9d8602b4006102f0565b60405190815260200160405180910390a3610326565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561023157808504811115610215576102156101e2565b600184161561022357908102905b60019390931c9280026101fa565b935093915050565b5f82610247575060016102d5565b8161025357505f6102d5565b816001811461026957600281146102735761028f565b60019150506102d5565b60ff841115610284576102846101e2565b50506001821b6102d5565b5060208310610133831016604e8410600b84101617156102b2575081810a6102d5565b6102be5f1984846101f6565b805f19048211156102d1576102d16101e2565b0290505b92915050565b5f6102e960ff841683610239565b9392505050565b80820281158282048414176102d5576102d56101e2565b5f8261032157634e487b7160e01b5f52601260045260245ffd5b500490565b611c4a806103335f395ff3fe608060405260043610610134575f3560e01c806370a08231116100a8578063a9059cbb1161006d578063a9059cbb1461036c578063b10fc89d1461038b578063b8106b99146103aa578063bd85e93b146103c9578063dd62ed3e146103de578063f6c16d3514610422575f80fd5b806370a08231146102be578063715018a6146102f2578063751039fc146103065780638da5cb5b1461031a57806395d89b4114610340575f80fd5b8063313ce567116100f9578063313ce5671461020e578063348e4774146102295780633e594aa4146102605780634ac6c63b146102755780635154f13614610294578063652e2f04146102a9575f80fd5b806302f377fc1461013f57806306fdde0314610160578063095ea7b31461019e57806318160ddd146101cd57806323b872dd146101ef575f80fd5b3661013b57005b5f80fd5b34801561014a575f80fd5b5061015e610159366004611837565b610436565b005b34801561016b575f80fd5b506040805180820190915260048152634d69636160e01b60208201525b60405161019591906118b9565b60405180910390f35b3480156101a9575f80fd5b506101bd6101b8366004611902565b61074d565b6040519015158152602001610195565b3480156101d8575f80fd5b506101e1610763565b604051908152602001610195565b3480156101fa575f80fd5b506101bd61020936600461192c565b610786565b348015610219575f80fd5b5060405160098152602001610195565b348015610234575f80fd5b506101bd61024336600461196a565b6001600160a01b03165f9081526004602052604090205460ff1690565b34801561026b575f80fd5b506101e1600a5481565b348015610280575f80fd5b5061015e61028f366004611837565b6107ed565b34801561029f575f80fd5b506101e160075481565b3480156102b4575f80fd5b506101e160065481565b3480156102c9575f80fd5b506101e16102d836600461196a565b6001600160a01b03165f9081526001602052604090205490565b3480156102fd575f80fd5b5061015e61092d565b348015610311575f80fd5b5061015e61099e565b348015610325575f80fd5b505f546040516001600160a01b039091168152602001610195565b34801561034b575f80fd5b506040805180820190915260048152634d49434160e01b6020820152610188565b348015610377575f80fd5b506101bd610386366004611902565b610a79565b348015610396575f80fd5b5061015e6103a5366004611985565b610a85565b3480156103b5575f80fd5b5061015e6103c4366004611985565b610c89565b3480156103d4575f80fd5b506101e160055481565b3480156103e9575f80fd5b506101e16103f83660046119bc565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b34801561042d575f80fd5b5061015e610d2c565b5f546001600160a01b031633146104685760405162461bcd60e51b815260040161045f906119e8565b60405180910390fd5b816104a35760405162461bcd60e51b815260206004820152600b60248201526a456d70747920617272617960a81b604482015260640161045f565b5f5b82811015610747575f8484838181106104c0576104c0611a1d565b90506020020160208101906104d5919061196a565b6001600160a01b03160361052b5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420757064617465207a65726f2061646472657373000000000000604482015260640161045f565b5f546001600160a01b031684848381811061054857610548611a1d565b905060200201602081019061055d919061196a565b6001600160a01b0316036105b35760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420757064617465206f776e657220737461747573000000000000604482015260640161045f565b308484838181106105c6576105c6611a1d565b90506020020160208101906105db919061196a565b6001600160a01b0316036106315760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f742075706461746520636f6e747261637420737461747573000000604482015260640161045f565b81151560045f86868581811061064957610649611a1d565b905060200201602081019061065e919061196a565b6001600160a01b0316815260208101919091526040015f205460ff1615151461073f578160045f86868581811061069757610697611a1d565b90506020020160208101906106ac919061196a565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790558383828181106106e5576106e5611a1d565b90506020020160208101906106fa919061196a565b6001600160a01b03167fa9c983df23f186d1e36d912f72f1e147d84f7c1614787f88eabb701834a5531983604051610736911515815260200190565b60405180910390a25b6001016104a5565b50505050565b5f6107593384846110ec565b5060015b92915050565b5f6107706009600a611b28565b6107819066017e9d8602b400611b36565b905090565b5f610792848484611210565b6107e384336107de85604051806060016040528060288152602001611bed602891396001600160a01b038a165f9081526002602090815260408083203384529091529020549190611749565b6110ec565b5060019392505050565b5f546001600160a01b031633146108165760405162461bcd60e51b815260040161045f906119e8565b816108515760405162461bcd60e51b815260206004820152600b60248201526a456d70747920617272617960a81b604482015260640161045f565b5f5b82811015610747575f84848381811061086e5761086e611a1d565b9050602002016020810190610883919061196a565b6001600160a01b0316036108d35760405162461bcd60e51b815260206004820152601760248201527643616e6e6f7420736574207a65726f206164647265737360481b604482015260640161045f565b8160035f8686858181106108e9576108e9611a1d565b90506020020160208101906108fe919061196a565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610853565b5f546001600160a01b031633146109565760405162461bcd60e51b815260040161045f906119e8565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146109c75760405162461bcd60e51b815260040161045f906119e8565b6109d36009600a611b28565b6109e49066017e9d8602b400611b36565b6005556109f36009600a611b28565b610a049066017e9d8602b400611b36565b600755610a136009600a611b28565b610a249066017e9d8602b400611b36565b6006557f9da1d91fa7d0082eb55c343a33f4ea427cbaab2ff539d2c0bf4bc5d536e4bcc6610a546009600a611b28565b610a659066017e9d8602b400611b36565b6040519081526020015b60405180910390a1565b5f610759338484611210565b5f546001600160a01b03163314610aae5760405162461bcd60e51b815260040161045f906119e8565b6001600160a01b038216610b045760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420757064617465207a65726f2061646472657373000000000000604482015260640161045f565b5f546001600160a01b03166001600160a01b0316826001600160a01b031603610b6f5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420757064617465206f776e657220737461747573000000000000604482015260640161045f565b306001600160a01b03831603610bc75760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f742075706461746520636f6e747261637420737461747573000000604482015260640161045f565b6001600160a01b0382165f9081526004602052604090205481151560ff909116151503610c2b5760405162461bcd60e51b815260206004820152601260248201527114dd185d1d5cc8185b1c9958591e481cd95d60721b604482015260640161045f565b6001600160a01b0382165f81815260046020908152604091829020805460ff191685151590811790915591519182527fa9c983df23f186d1e36d912f72f1e147d84f7c1614787f88eabb701834a55319910160405180910390a25050565b5f546001600160a01b03163314610cb25760405162461bcd60e51b815260040161045f906119e8565b6001600160a01b038216610d025760405162461bcd60e51b815260206004820152601760248201527643616e6e6f7420736574207a65726f206164647265737360481b604482015260640161045f565b6001600160a01b03919091165f908152600360205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610d555760405162461bcd60e51b815260040161045f906119e8565b43600a5411610d9f5760405162461bcd60e51b815260206004820152601660248201527513585c9ad95d08185b1c9958591e48195b98589b195960521b604482015260640161045f565b600880546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155610deb903090610dda6009600a611b28565b6107de9066017e9d8602b400611b36565b60085f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e3b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5f9190611b4d565b6001600160a01b031663c9c653963060085f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ebe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee29190611b4d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610f2c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f509190611b4d565b600980546001600160a01b039283166001600160a01b03199091161790556008541663f305d7194730610f97816001600160a01b03165f9081526001602052604090205490565b5f80610faa5f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611010573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906110359190611b68565b505060095460085460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116915063095ea7b3906044016020604051808303815f875af115801561108a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110ae9190611b93565b5043600a8190556040805142815260208101929092527fb5ab7082c95178f2fb913db100315ace1a06a9de710260741e25d2da8beb169c9101610a6f565b6001600160a01b03831661114e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161045f565b6001600160a01b0382166111af5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161045f565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166112745760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161045f565b6001600160a01b0382166112d65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161045f565b5f81116113375760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161045f565b6001600160a01b0383165f9081526004602052604090205460ff1615801561137757506001600160a01b0382165f9081526004602052604090205460ff16155b6113ba5760405162461bcd60e51b8152602060048201526014602482015273416464726573732063616e6e6f7420747261646560601b604482015260640161045f565b600a5443101561145f576001600160a01b0383165f9081526003602052604090205460ff168061140157506001600160a01b0382165f9081526003602052604090205460ff165b61145f5760405162461bcd60e51b815260206004820152602960248201527f4d61726b6574206e6f7420616374697665202d20756e617574686f72697a6564604482015268103a3930b739b332b960b91b606482015260840161045f565b5f546001600160a01b0384811691161480159061148957505f546001600160a01b03838116911614155b80156114ad57506001600160a01b0383165f9081526003602052604090205460ff16155b80156114d157506001600160a01b0382165f9081526003602052604090205460ff16155b156116a6576009546001600160a01b03908116908416036115b85760055481111561153e5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e742065786365656473207472616e73666572206c696d6974000000604482015260640161045f565b60075481611560846001600160a01b03165f9081526001602052604090205490565b61156a9190611bae565b11156115b85760405162461bcd60e51b815260206004820152601a60248201527f576f756c642065786365656420686f6c64696e67206c696d6974000000000000604482015260640161045f565b6009546001600160a01b03908116908316036116a657600c544311156115dd575f600b555b6003600b541061163b5760405162461bcd60e51b815260206004820152602360248201527f5472616e73616374696f6e206c696d69742070657220626c6f636b20726561636044820152621a195960ea1b606482015260840161045f565b60065481111561168d5760405162461bcd60e51b815260206004820152601960248201527f416d6f756e7420657863656564732073656c6c206c696d697400000000000000604482015260640161045f565b600b8054905f61169c83611bc1565b909155505043600c555b6001600160a01b0383165f908152600160205260409020546116c89082611781565b6001600160a01b038085165f9081526001602052604080822093909355908416815220546116f690826117c9565b6001600160a01b038084165f8181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112039085815260200190565b5f818484111561176c5760405162461bcd60e51b815260040161045f91906118b9565b505f6117788486611bd9565b95945050505050565b5f6117c283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611749565b9392505050565b5f806117d58385611bae565b9050838110156117c25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161045f565b8015158114611834575f80fd5b50565b5f805f60408486031215611849575f80fd5b833567ffffffffffffffff81111561185f575f80fd5b8401601f8101861361186f575f80fd5b803567ffffffffffffffff811115611885575f80fd5b8660208260051b8401011115611899575f80fd5b6020918201945092508401356118ae81611827565b809150509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611834575f80fd5b5f8060408385031215611913575f80fd5b823561191e816118ee565b946020939093013593505050565b5f805f6060848603121561193e575f80fd5b8335611949816118ee565b92506020840135611959816118ee565b929592945050506040919091013590565b5f6020828403121561197a575f80fd5b81356117c2816118ee565b5f8060408385031215611996575f80fd5b82356119a1816118ee565b915060208301356119b181611827565b809150509250929050565b5f80604083850312156119cd575f80fd5b82356119d8816118ee565b915060208301356119b1816118ee565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115611a8057808504811115611a6457611a64611a31565b6001841615611a7257908102905b60019390931c928002611a49565b935093915050565b5f82611a965750600161075d565b81611aa257505f61075d565b8160018114611ab85760028114611ac257611ade565b600191505061075d565b60ff841115611ad357611ad3611a31565b50506001821b61075d565b5060208310610133831016604e8410600b8410161715611b01575081810a61075d565b611b0d5f198484611a45565b805f1904821115611b2057611b20611a31565b029392505050565b5f6117c260ff841683611a88565b808202811582820484141761075d5761075d611a31565b5f60208284031215611b5d575f80fd5b81516117c2816118ee565b5f805f60608486031215611b7a575f80fd5b5050815160208301516040909301519094929350919050565b5f60208284031215611ba3575f80fd5b81516117c281611827565b8082018082111561075d5761075d611a31565b5f60018201611bd257611bd2611a31565b5060010190565b8181038181111561075d5761075d611a3156fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220ec7cfe31b1cfe8b102a0ef67407068c804642b3e2bd2e605f07728412177582964736f6c634300081a0033