6080604052600580546001600160a01b03191673aabcf84c4e17f4e8348ce599f9a660902c5c65e1179055620000323390565b600680546001600160a01b0319166001600160a01b03929092169190911790556005600781905560085534801562000068575f80fd5b506040516200226b3803806200226b8339810160408190526200008b9162000449565b6006546001600160a01b031680620000bc57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000c78162000366565b505f731689e7b1f10000ae47ebfe339a4f69decd19f6029050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000143919062000449565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001b5919062000449565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000200573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000226919062000449565b600b80546001600160a01b03199081166001600160a01b0393841617909155600a8054909116918316919091178155620002639060129062000585565b6200027390630bebc20062000595565b335f9081526002602090815260408083209390935581546001600160a01b03908116835260049091528282208054600160ff199182168117909255308452848420805482168317905560055490921683529282208054909116909217909155620002de9083620003b5565b506200030b7f22435ed027edf5f902dc0093fbc24cdb50c05b5fd5f311b78c67c1cbaff60e1383620003b5565b50335f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200033d6012600a62000585565b6200034d90630bebc20062000595565b60405190815260200160405180910390a35050620005af565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f8281526001602090815260408083206001600160a01b038516845290915281205460ff1662000440575f8381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a450600162000443565b505f5b92915050565b5f602082840312156200045a575f80fd5b81516001600160a01b038116811462000471575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620004cc57815f1904821115620004b057620004b062000478565b80851615620004be57918102915b93841c939080029062000491565b509250929050565b5f82620004e45750600162000443565b81620004f257505f62000443565b81600181146200050b5760028114620005165762000536565b600191505062000443565b60ff8411156200052a576200052a62000478565b50506001821b62000443565b5060208310610133831016604e8410600b84101617156200055b575081810a62000443565b6200056783836200048c565b805f19048211156200057d576200057d62000478565b029392505050565b5f6200047160ff841683620004d4565b808202811582820484141762000443576200044362000478565b611cae80620005bd5f395ff3fe6080604052600436106101de575f3560e01c806370a08231116100fd578063ac9650d811610092578063dd62ed3e11610062578063dd62ed3e14610578578063ea2f0b37146105bc578063f2fde38b146105db578063fe575a87146105fa575f80fd5b8063ac9650d8146104f9578063ca9ec19914610525578063cb7115951461053a578063d547741f14610559575f80fd5b806391d14854116100cd57806391d14854146104a857806395d89b411461021d578063a217fddf146104c7578063a9059cbb146104da575f80fd5b806370a0823114610416578063715018a61461044a578063768dc7101461045e5780638da5cb5b1461048c575f80fd5b80632f2ff15d1161017357806344337ea11161014357806344337ea11461038d57806351bc3c85146103ac578063537df3b6146103c05780636f268a99146103df575f80fd5b80632f2ff15d1461031f578063313ce5671461033e57806336568abe1461035957806342a1109514610378575f80fd5b806319afe463116101ae57806319afe463146102905780631a2266b0146102b057806323b872dd146102d1578063248a9ca3146102f0575f80fd5b806301ffc9a7146101e957806306fdde031461021d578063095ea7b31461024f57806318160ddd1461026e575f80fd5b366101e557005b5f80fd5b3480156101f4575f80fd5b50610208610203366004611655565b610619565b60405190151581526020015b60405180910390f35b348015610228575f80fd5b5060408051808201825260048152631d195cdd60e21b6020820152905161021491906116c9565b34801561025a575f80fd5b506102086102693660046116ff565b61064f565b348015610279575f80fd5b50610282610664565b604051908152602001610214565b34801561029b575f80fd5b506102825f80516020611c3183398151915281565b3480156102bb575f80fd5b506102cf6102ca36600461174c565b610684565b005b3480156102dc575f80fd5b506102086102eb36600461181e565b61070a565b3480156102fb575f80fd5b5061028261030a36600461185c565b5f908152600160208190526040909120015490565b34801561032a575f80fd5b506102cf610339366004611873565b610772565b348015610349575f80fd5b5060405160128152602001610214565b348015610364575f80fd5b506102cf610373366004611873565b610797565b348015610383575f80fd5b5061028260075481565b348015610398575f80fd5b506102cf6103a73660046118a1565b6107cf565b3480156103b7575f80fd5b506102cf610853565b3480156103cb575f80fd5b506102cf6103da3660046118a1565b6108a0565b3480156103ea575f80fd5b506005546103fe906001600160a01b031681565b6040516001600160a01b039091168152602001610214565b348015610421575f80fd5b506102826104303660046118a1565b6001600160a01b03165f9081526002602052604090205490565b348015610455575f80fd5b506102cf6108f8565b348015610469575f80fd5b506102086104783660046118a1565b60046020525f908152604090205460ff1681565b348015610497575f80fd5b505f546001600160a01b03166103fe565b3480156104b3575f80fd5b506102086104c2366004611873565b61090b565b3480156104d2575f80fd5b506102825f81565b3480156104e5575f80fd5b506102086104f43660046116ff565b610935565b348015610504575f80fd5b506105186105133660046118bc565b610941565b604051610214919061192b565b348015610530575f80fd5b5061028260085481565b348015610545575f80fd5b506102cf6105543660046118a1565b610a34565b348015610564575f80fd5b506102cf610573366004611873565b610a5e565b348015610583575f80fd5b5061028261059236600461198b565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b3480156105c7575f80fd5b506102cf6105d63660046118a1565b610a83565b3480156105e6575f80fd5b506102cf6105f53660046118a1565b610aab565b348015610605575f80fd5b506102086106143660046118a1565b610aed565b5f6001600160e01b03198216637965db0b60e01b148061064957506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f61065b338484610b0d565b50600192915050565b5f6106716012600a611aab565b61067f90630bebc200611ab9565b905090565b5f80516020611c3183398151915261069b81610c30565b5f5b835181101561070457826106d2576106cd8482815181106106c0576106c0611ad0565b6020026020010151610c3a565b6106f4565b6106f48482815181106106e7576106e7611ad0565b6020026020010151610c91565b6106fd81611ae4565b905061069d565b50505050565b5f610716848484610ce4565b610767843361076285604051806060016040528060288152602001611c51602891396001600160a01b038a165f9081526003602090815260408083203384529091529020549190611028565b610b0d565b5060015b9392505050565b5f828152600160208190526040909120015461078d81610c30565b6107048383611060565b6001600160a01b03811633146107c05760405163334bd91960e11b815260040160405180910390fd5b6107ca82826110d6565b505050565b5f80516020611c318339815191526107e681610c30565b6001600160a01b03821661080d57604051633c70ac7560e01b815260040160405180910390fd5b6001600160a01b0382165f9081526009602052604090205460ff16156108465760405163cb2a4ebd60e01b815260040160405180910390fd5b61084f82610c91565b5050565b6005546001600160a01b0316336001600160a01b031614610872575f80fd5b305f9081526002602052604090205480156108905761089081611141565b47801561084f5761084f8161129b565b5f80516020611c318339815191526108b781610c30565b6001600160a01b0382165f9081526009602052604090205460ff166108ef576040516360949b5160e01b815260040160405180910390fd5b61084f82610c3a565b610900611329565b6109095f611355565b565b5f9182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f61065b338484610ce4565b60608167ffffffffffffffff81111561095c5761095c611729565b60405190808252806020026020018201604052801561098f57816020015b606081526020019060019003908161097a5790505b5090505f5b82811015610a2d576109fd308585848181106109b2576109b2611ad0565b90506020028101906109c49190611afc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506113a492505050565b828281518110610a0f57610a0f611ad0565b60200260200101819052508080610a2590611ae4565b915050610994565b5092915050565b610a3c611329565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b5f8281526001602081905260409091200154610a7981610c30565b61070483836110d6565b610a8b611329565b6001600160a01b03165f908152600460205260409020805460ff19169055565b610ab3611329565b6001600160a01b038116610ae157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610aea81611355565b50565b6001600160a01b0381165f9081526009602052604081205460ff16610649565b6001600160a01b038316610b6f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ad8565b6001600160a01b038216610bd05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ad8565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610aea813361140d565b6001600160a01b0381165f81815260096020908152604091829020805460ff1916905590519182527f2b6bf71b58b3583add364b3d9060ebf8019650f65f5be35f5464b9cb3e4ba2d491015b60405180910390a150565b6001600160a01b0381165f81815260096020908152604091829020805460ff1916600117905590519182527ff9b68063b051b82957fa193585681240904fed808db8b30fc5a2d2202c6ed6279101610c86565b6001600160a01b038316610d485760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ad8565b6001600160a01b038216610daa5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ad8565b5f8111610e0b5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ad8565b6001600160a01b0383165f9081526004602052604081205460ff16158015610e4b57506001600160a01b0383165f9081526004602052604090205460ff16155b15610eeb57600b546001600160a01b038581169116148015610e7b5750600a546001600160a01b03848116911614155b15610ea357610ea06064610e9a6007548561144690919063ffffffff16565b906114c4565b90505b600b546001600160a01b038481169116148015610ec957506001600160a01b0384163014155b15610eeb57610ee86064610e9a6008548561144690919063ffffffff16565b90505b8015610f6357305f90815260026020526040902054610f0a9082611505565b305f81815260026020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f5a9085815260200190565b60405180910390a35b6001600160a01b0384165f90815260026020526040902054610f859083611563565b6001600160a01b0385165f90815260026020526040902055610fc8610faa8383611563565b6001600160a01b0385165f9081526002602052604090205490611505565b6001600160a01b038085165f8181526002602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6110118585611563565b60405190815260200160405180910390a350505050565b5f818484111561104b5760405162461bcd60e51b8152600401610ad891906116c9565b505f6110578486611b46565b95945050505050565b5f61106b838361090b565b6110cf575f8381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610649565b505f610649565b5f6110e1838361090b565b156110cf575f8381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610649565b805f0361114b5750565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061117e5761117e611ad0565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156111d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111f99190611b59565b8160018151811061120c5761120c611ad0565b6001600160a01b039283166020918202929092010152600a546112329130911684610b0d565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061126a9085905f90869030904290600401611b74565b5f604051808303815f87803b158015611281575f80fd5b505af1158015611293573d5f803e3d5ffd5b505050505050565b6005546040515f916001600160a01b03169083908381818185875af1925050503d805f81146112e5576040519150601f19603f3d011682016040523d82523d5f602084013e6112ea565b606091505b505090508061084f5760405162461bcd60e51b815260206004820152600b60248201526a10d85b1b0819985a5b195960aa1b6044820152606401610ad8565b5f546001600160a01b031633146109095760405163118cdaa760e01b8152336004820152602401610ad8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60605f80846001600160a01b0316846040516113c09190611be3565b5f60405180830381855af49150503d805f81146113f8576040519150601f19603f3d011682016040523d82523d5f602084013e6113fd565b606091505b50915091506110578583836115a4565b611417828261090b565b61084f5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610ad8565b5f825f0361145557505f610649565b5f6114608385611ab9565b90508261146d8583611bfe565b1461076b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ad8565b5f61076b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611600565b5f806115118385611c1d565b90508381101561076b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ad8565b5f61076b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611028565b6060826115b9576115b48261162c565b61076b565b81511580156115d057506001600160a01b0384163b155b156115f957604051639996b31560e01b81526001600160a01b0385166004820152602401610ad8565b508061076b565b5f81836116205760405162461bcd60e51b8152600401610ad891906116c9565b505f6110578486611bfe565b80511561163c5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f60208284031215611665575f80fd5b81356001600160e01b03198116811461076b575f80fd5b5f5b8381101561169657818101518382015260200161167e565b50505f910152565b5f81518084526116b581602086016020860161167c565b601f01601f19169290920160200192915050565b602081525f61076b602083018461169e565b6001600160a01b0381168114610aea575f80fd5b80356116fa816116db565b919050565b5f8060408385031215611710575f80fd5b823561171b816116db565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b803580151581146116fa575f80fd5b5f806040838503121561175d575f80fd5b823567ffffffffffffffff80821115611774575f80fd5b818501915085601f830112611787575f80fd5b813560208282111561179b5761179b611729565b8160051b604051601f19603f830116810181811086821117156117c0576117c0611729565b6040529283528183019350848101820192898411156117dd575f80fd5b948201945b83861015611802576117f3866116ef565b855294820194938201936117e2565b9650611811905087820161173d565b9450505050509250929050565b5f805f60608486031215611830575f80fd5b833561183b816116db565b9250602084013561184b816116db565b929592945050506040919091013590565b5f6020828403121561186c575f80fd5b5035919050565b5f8060408385031215611884575f80fd5b823591506020830135611896816116db565b809150509250929050565b5f602082840312156118b1575f80fd5b813561076b816116db565b5f80602083850312156118cd575f80fd5b823567ffffffffffffffff808211156118e4575f80fd5b818501915085601f8301126118f7575f80fd5b813581811115611905575f80fd5b8660208260051b8501011115611919575f80fd5b60209290920196919550909350505050565b5f602080830181845280855180835260408601915060408160051b87010192508387015f5b8281101561197e57603f1988860301845261196c85835161169e565b94509285019290850190600101611950565b5092979650505050505050565b5f806040838503121561199c575f80fd5b82356119a7816116db565b91506020830135611896816116db565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115611a0557815f19048211156119eb576119eb6119b7565b808516156119f857918102915b93841c93908002906119d0565b509250929050565b5f82611a1b57506001610649565b81611a2757505f610649565b8160018114611a3d5760028114611a4757611a63565b6001915050610649565b60ff841115611a5857611a586119b7565b50506001821b610649565b5060208310610133831016604e8410600b8410161715611a86575081810a610649565b611a9083836119cb565b805f1904821115611aa357611aa36119b7565b029392505050565b5f61076b60ff841683611a0d565b8082028115828204841417610649576106496119b7565b634e487b7160e01b5f52603260045260245ffd5b5f60018201611af557611af56119b7565b5060010190565b5f808335601e19843603018112611b11575f80fd5b83018035915067ffffffffffffffff821115611b2b575f80fd5b602001915036819003821315611b3f575f80fd5b9250929050565b81810381811115610649576106496119b7565b5f60208284031215611b69575f80fd5b815161076b816116db565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015611bc25784516001600160a01b031683529383019391830191600101611b9d565b50506001600160a01b03969096166060850152505050608001529392505050565b5f8251611bf481846020870161167c565b9190910192915050565b5f82611c1857634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610649576106496119b756fe22435ed027edf5f902dc0093fbc24cdb50c05b5fd5f311b78c67c1cbaff60e1345524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212208550f277b96d4111a5d39e6d3703987b4d38a6c28586f3ad18dadd51c395b29664736f6c63430008140033000000000000000000000000aabcf84c4e17f4e8348ce599f9a660902c5c65e1