60806040523480156200001157600080fd5b506040805180820182526011815270416e7377657220476f7665726e616e636560781b60208083019182528351808501909452600484526320a3a7ab60e11b9084015281519192916200006791600391620000f5565b5080516200007d906004906020840190620000f5565b50506009805460ff191690555062000095336200009b565b620001d7565b600980546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000103906200019b565b90600052602060002090601f01602090048101928262000127576000855562000172565b82601f106200014257805160ff191683800117855562000172565b8280016001018555821562000172579182015b828111156200017257825182559160200191906001019062000155565b506200018092915062000184565b5090565b5b8082111562000180576000815560010162000185565b600181811c90821680620001b057607f821691505b602082108103620001d157634e487b7160e01b600052602260045260246000fd5b50919050565b61199280620001e76000396000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c806379cc6790116100ee578063981b24d011610097578063d892934211610071578063d892934214610344578063dd62ed3e14610357578063f2fde38b14610390578063fe575a87146103a357600080fd5b8063981b24d01461030b578063a457c2d71461031e578063a9059cbb1461033157600080fd5b80638da5cb5b116100c85780638da5cb5b146102d257806395d89b41146102fb5780639711715a1461030357600080fd5b806379cc6790146102af5780638129fc1c146102c25780638456cb59146102ca57600080fd5b8063395093511161015b5780634ee2cd7e116101355780634ee2cd7e146102605780635c975abb1461027357806370a082311461027e578063715018a6146102a757600080fd5b806339509351146102305780633f4ba83a1461024357806342966c681461024d57600080fd5b806323b872dd1161018c57806323b872dd146102065780632ff2e9dc14610219578063313ce5671461022157600080fd5b806306fdde03146101b3578063095ea7b3146101d157806318160ddd146101f4575b600080fd5b6101bb6103c6565b6040516101c89190611652565b60405180910390f35b6101e46101df3660046116be565b610458565b60405190151581526020016101c8565b6002545b6040519081526020016101c8565b6101e46102143660046116e8565b610472565b6101f8610496565b604051601281526020016101c8565b6101e461023e3660046116be565b6104b3565b61024b6104f2565b005b61024b61025b366004611724565b610561565b6101f861026e3660046116be565b61056e565b60095460ff166101e4565b6101f861028c36600461173d565b6001600160a01b031660009081526020819052604090205490565b61024b6105c7565b61024b6102bd3660046116be565b610631565b61024b61064a565b61024b6106cd565b60095461010090046001600160a01b03166040516001600160a01b0390911681526020016101c8565b6101bb610735565b61024b610744565b6101f8610319366004611724565b6107ac565b6101e461032c3660046116be565b6107d7565b6101e461033f3660046116be565b610881565b61024b610352366004611758565b61088f565b6101f8610365366004611794565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61024b61039e36600461173d565b61094e565b6101e46103b136600461173d565b600a6020526000908152604090205460ff1681565b6060600380546103d5906117c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610401906117c7565b801561044e5780601f106104235761010080835404028352916020019161044e565b820191906000526020600020905b81548152906001019060200180831161043157829003601f168201915b5050505050905090565b600033610466818585610a33565b60019150505b92915050565b600033610480858285610b58565b61048b858585610bea565b506001949350505050565b6104a26012600a6118f3565b6104b090633b9aca006118ff565b81565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061046690829086906104ed90879061191e565b610a33565b6009546001600160a01b036101009091041633146105575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b61055f610df2565b565b61056b3382610e8e565b50565b6001600160a01b038216600090815260056020526040812081908190610595908590610fe5565b91509150816105bc576001600160a01b0385166000908152602081905260409020546105be565b805b95945050505050565b6009546001600160a01b036101009091041633146106275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054e565b61055f60006110e8565b61063c823383610b58565b6106468282610e8e565b5050565b6009546001600160a01b036101009091041633146106aa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054e565b61055f336106ba6012600a6118f3565b6106c890633b9aca006118ff565b611159565b6009546001600160a01b0361010090910416331461072d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054e565b61055f611244565b6060600480546103d5906117c7565b6009546001600160a01b036101009091041633146107a45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054e565b61056b6112cc565b60008060006107bc846006610fe5565b91509150816107cd576002546107cf565b805b949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156108745760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161054e565b61048b8286868403610a33565b600033610466818585610bea565b6009546001600160a01b036101009091041633146108ef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054e565b6001600160a01b0382166000818152600a6020908152604091829020805460ff191685151590811790915591519182527fcf3473b85df1594d47b6958f29a32bea0abff9dd68296f7bf33443646793cfd8910160405180910390a25050565b6009546001600160a01b036101009091041633146109ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054e565b6001600160a01b038116610a2a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161054e565b61056b816110e8565b6001600160a01b038316610a955760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161054e565b6001600160a01b038216610af65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161054e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610be45781811015610bd75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161054e565b610be48484848403610a33565b50505050565b6001600160a01b038316610c665760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161054e565b6001600160a01b038216610cc85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161054e565b610cd3838383611326565b6001600160a01b03831660009081526020819052604090205481811015610d625760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161054e565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610d9990849061191e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610de591815260200190565b60405180910390a3610be4565b60095460ff16610e445760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640161054e565b6009805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038216610eee5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161054e565b610efa82600083611326565b6001600160a01b03821660009081526020819052604090205481811015610f6e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161054e565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610f9d908490611936565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b4b565b505050565b600080600084116110385760405162461bcd60e51b815260206004820152601660248201527f4552433230536e617073686f743a206964206973203000000000000000000000604482015260640161054e565b6110406113bf565b84111561108f5760405162461bcd60e51b815260206004820152601d60248201527f4552433230536e617073686f743a206e6f6e6578697374656e74206964000000604482015260640161054e565b600061109b84866113cf565b845490915081036110b35760008092509250506110e1565b60018460010182815481106110ca576110ca61194d565b906000526020600020015492509250506110e1565b505b9250929050565b600980546001600160a01b038381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff85161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166111af5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161054e565b6111bb60008383611326565b80600260008282546111cd919061191e565b90915550506001600160a01b038216600090815260208190526040812080548392906111fa90849061191e565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60095460ff16156112975760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161054e565b6009805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e713390565b60006112dc600880546001019055565b60006112e66113bf565b90507f8030e83b04d87bef53480e26263266d6ca66863aa8506aca6f2559d18aa1cb678160405161131991815260200190565b60405180910390a1919050565b611331838383611494565b6001600160a01b0383166000908152600a602052604090205460ff1615801561137357506001600160a01b0382166000908152600a602052604090205460ff16155b610fe05760405162461bcd60e51b815260206004820152601360248201527f4163636f756e7420626c61636b6c697374656400000000000000000000000000604482015260640161054e565b60006113ca60085490565b905090565b815460009081036113e25750600061046c565b82546000905b8082101561143e5760006113fc8383611518565b9050848682815481106114115761141161194d565b9060005260206000200154111561142a57809150611438565b61143581600161191e565b92505b506113e8565b60008211801561147357508385611456600185611936565b815481106114665761146661194d565b9060005260206000200154145b1561148c57611483600183611936565b9250505061046c565b50905061046c565b61149f83838361153a565b60095460ff1615610fe05760405162461bcd60e51b815260206004820152602a60248201527f45524332305061757361626c653a20746f6b656e207472616e7366657220776860448201527f696c652070617573656400000000000000000000000000000000000000000000606482015260840161054e565b60006115276002848418611963565b6115339084841661191e565b9392505050565b6001600160a01b038316611559576115518261157e565b610fe06115b0565b6001600160a01b038216611570576115518361157e565b6115798361157e565b610fe0825b6001600160a01b0381166000908152600560209081526040808320918390529091205461056b91906115be565b6115be565b61055f60066115ab60025490565b60006115c86113bf565b9050806115d484611608565b1015610fe0578254600180820185556000858152602080822090930193909355938401805494850181558252902090910155565b8054600090810361161b57506000919050565b8154829061162b90600190611936565b8154811061163b5761163b61194d565b90600052602060002001549050919050565b919050565b600060208083528351808285015260005b8181101561167f57858101830151858201604001528201611663565b81811115611691576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461164d57600080fd5b600080604083850312156116d157600080fd5b6116da836116a7565b946020939093013593505050565b6000806000606084860312156116fd57600080fd5b611706846116a7565b9250611714602085016116a7565b9150604084013590509250925092565b60006020828403121561173657600080fd5b5035919050565b60006020828403121561174f57600080fd5b611533826116a7565b6000806040838503121561176b57600080fd5b611774836116a7565b91506020830135801515811461178957600080fd5b809150509250929050565b600080604083850312156117a757600080fd5b6117b0836116a7565b91506117be602084016116a7565b90509250929050565b600181811c908216806117db57607f821691505b6020821081036117fb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156110df57816000190482111561183857611838611801565b8085161561184557918102915b93841c939080029061181c565b6000826118615750600161046c565b8161186e5750600061046c565b8160018114611884576002811461188e576118aa565b600191505061046c565b60ff84111561189f5761189f611801565b50506001821b61046c565b5060208310610133831016604e8410600b84101617156118cd575081810a61046c565b6118d78383611817565b80600019048211156118eb576118eb611801565b029392505050565b60006115338383611852565b600081600019048311821515161561191957611919611801565b500290565b6000821982111561193157611931611801565b500190565b60008282101561194857611948611801565b500390565b634e487b7160e01b600052603260045260246000fd5b60008261198057634e487b7160e01b600052601260045260246000fd5b50049056fea164736f6c634300080d000a