0x60806040523480156200001157600080fd5b5060408051602080820183526000808352835191820190935282815290916200003b838262000311565b5060016200004a828262000311565b50505062000067620000616200009360201b60201c565b62000097565b6006805460ff60b01b19169055600160075562000083620000f3565b6200008d620001b7565b620003dd565b3390565b600680546001600160a01b038381166201000081810262010000600160b01b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600654610100900460ff1615620001615760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084015b60405180910390fd5b60065460ff9081161015620001b5576006805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b565b620001c162000216565b6006805460ff60b01b1916600160b01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620001fd3390565b6040516001600160a01b039091168152602001620001ac565b6200022a600654600160b01b900460ff1690565b15620001b55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640162000158565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200029757607f821691505b602082108103620002b857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200030c57600081815260208120601f850160051c81016020861015620002e75750805b601f850160051c820191505b818110156200030857828155600101620002f3565b5050505b505050565b81516001600160401b038111156200032d576200032d6200026c565b62000345816200033e845462000282565b84620002be565b602080601f8311600181146200037d5760008415620003645750858301515b600019600386901b1c1916600185901b17855562000308565b600085815260208120601f198616915b82811015620003ae578886015182559484019460019091019084016200038d565b5085821015620003cd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611bc680620003ed6000396000f3fe6080604052600436106101ac5760003560e01c806370a08231116100ec578063b84c82461161008a578063c87b56dd11610064578063c87b56dd14610473578063ce775a1e14610493578063e985e9c5146104a8578063f2fde38b146104f157600080fd5b8063b84c824614610413578063b88d4fde14610433578063c47f00271461045357600080fd5b80638456cb59116100c65780638456cb59146103a55780638da5cb5b146103ba57806395d89b41146103de578063a22cb465146103f357600080fd5b806370a082311461035d578063715018a61461037d578063736fe5651461039257600080fd5b8063189b680f1161015957806342842e0e1161013357806342842e0e146102eb57806351cff8d91461030b5780635c975abb1461031e5780636352211e1461033d57600080fd5b8063189b680f1461029657806323b872dd146102b65780633f4ba83a146102d657600080fd5b8063095ea7b31161018a578063095ea7b31461024057806313966db51461026257806318160ddd1461028157600080fd5b806301ffc9a7146101b157806306fdde03146101e6578063081812fc14610208575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004611670565b610511565b60405190151581526020015b60405180910390f35b3480156101f257600080fd5b506101fb6105ae565b6040516101dd91906116da565b34801561021457600080fd5b506102286102233660046116ed565b610640565b6040516001600160a01b0390911681526020016101dd565b34801561024c57600080fd5b5061026061025b366004611722565b610667565b005b34801561026e57600080fd5b50600a545b6040519081526020016101dd565b34801561028d57600080fd5b50600c54610273565b3480156102a257600080fd5b506102606102b13660046117f8565b61079d565b3480156102c257600080fd5b506102606102d136600461188a565b6108f6565b3480156102e257600080fd5b5061026061097d565b3480156102f757600080fd5b5061026061030636600461188a565b61098f565b6102606103193660046118c6565b6109aa565b34801561032a57600080fd5b50600654600160b01b900460ff166101d1565b34801561034957600080fd5b506102286103583660046116ed565b6109eb565b34801561036957600080fd5b506102736103783660046118c6565b610a50565b34801561038957600080fd5b50610260610aea565b6102606103a0366004611722565b610afc565b3480156103b157600080fd5b50610260610b3a565b3480156103c657600080fd5b506006546201000090046001600160a01b0316610228565b3480156103ea57600080fd5b506101fb610b4a565b3480156103ff57600080fd5b5061026061040e3660046118e1565b610b59565b34801561041f57600080fd5b5061026061042e36600461191d565b610b64565b34801561043f57600080fd5b5061026061044e366004611952565b610b78565b34801561045f57600080fd5b5061026061046e36600461191d565b610c06565b34801561047f57600080fd5b506101fb61048e3660046116ed565b610c1a565b34801561049f57600080fd5b50600b54610273565b3480156104b457600080fd5b506101d16104c33660046119c2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156104fd57600080fd5b5061026061050c3660046118c6565b610d60565b60006001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000148061057457506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806105a857507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6060600880546105bd906119f5565b80601f01602080910402602001604051908101604052809291908181526020018280546105e9906119f5565b80156106365780601f1061060b57610100808354040283529160200191610636565b820191906000526020600020905b81548152906001019060200180831161061957829003601f168201915b5050505050905090565b600061064b82610df0565b506000908152600460205260409020546001600160a01b031690565b6000610672826109eb565b9050806001600160a01b0316836001600160a01b0316036107005760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b038216148061071c575061071c81336104c3565b61078e5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016106f7565b6107988383610e54565b505050565b600654610100900460ff16158080156107bd5750600654600160ff909116105b806107d75750303b1580156107d7575060065460ff166001145b6108495760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106f7565b6006805460ff19166001179055801561086c576006805461ff0019166101001790555b61087533610ecf565b60086108818682611a77565b50600961088e8582611a77565b50600a839055600d6108a08382611a77565b506108a9610f41565b80156108ef576006805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6109003382610fbc565b6109725760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016106f7565b61079883838361103b565b610985611241565b61098d6112a2565b565b61079883838360405180602001604052806000815250610b78565b6109b2611241565b6040516001600160a01b038216904780156108fc02916000818181858888f193505050501580156109e7573d6000803e3d6000fd5b5050565b6000818152600260205260408120546001600160a01b0316806105a85760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016106f7565b60006001600160a01b038216610ace5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e6572000000000000000000000000000000000000000000000060648201526084016106f7565b506001600160a01b031660009081526003602052604090205490565b610af2611241565b61098d6000610ecf565b610b04611241565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610798573d6000803e3d6000fd5b610b42611241565b61098d610f41565b6060600980546105bd906119f5565b6109e73383836112f9565b610b6c611241565b60096109e78282611a77565b610b823383610fbc565b610bf45760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016106f7565b610c00848484846113c7565b50505050565b610c0e611241565b60086109e78282611a77565b6060610c2582610df0565b6000828152600e602052604081208054610c3e906119f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6a906119f5565b8015610cb75780601f10610c8c57610100808354040283529160200191610cb7565b820191906000526020600020905b815481529060010190602001808311610c9a57829003601f168201915b5050505050905080516000036105a857600d8054610cd4906119f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d00906119f5565b8015610d4d5780601f10610d2257610100808354040283529160200191610d4d565b820191906000526020600020905b815481529060010190602001808311610d3057829003601f168201915b5050505050915050919050565b50919050565b610d68611241565b6001600160a01b038116610de45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106f7565b610ded81610ecf565b50565b6000818152600260205260409020546001600160a01b0316610ded5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016106f7565b6000818152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091558190610e96826109eb565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600680546001600160a01b03838116620100008181027fffffffffffffffffffff0000000000000000000000000000000000000000ffff85161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610f49611450565b600680547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16600160b01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610f9f3390565b6040516001600160a01b03909116815260200160405180910390a1565b600080610fc8836109eb565b9050806001600160a01b0316846001600160a01b0316148061100f57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806110335750836001600160a01b031661102884610640565b6001600160a01b0316145b949350505050565b826001600160a01b031661104e826109eb565b6001600160a01b0316146110b25760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016106f7565b6001600160a01b03821661112d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106f7565b826001600160a01b0316611140826109eb565b6001600160a01b0316146111a45760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016106f7565b6000818152600460209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6006546001600160a01b036201000090910416331461098d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106f7565b6112aa6114aa565b600680547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610f9f565b816001600160a01b0316836001600160a01b03160361135a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106f7565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6113d284848461103b565b6113de84848484611503565b610c005760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106f7565b600654600160b01b900460ff161561098d5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106f7565b600654600160b01b900460ff1661098d5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106f7565b60006001600160a01b0384163b1561164f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611547903390899088908890600401611b37565b6020604051808303816000875af1925050508015611582575060408051601f3d908101601f1916820190925261157f91810190611b73565b60015b611635573d8080156115b0576040519150601f19603f3d011682016040523d82523d6000602084013e6115b5565b606091505b50805160000361162d5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106f7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611033565b506001949350505050565b6001600160e01b031981168114610ded57600080fd5b60006020828403121561168257600080fd5b813561168d8161165a565b9392505050565b6000815180845260005b818110156116ba5760208185018101518683018201520161169e565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061168d6020830184611694565b6000602082840312156116ff57600080fd5b5035919050565b80356001600160a01b038116811461171d57600080fd5b919050565b6000806040838503121561173557600080fd5b61173e83611706565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561177d5761177d61174c565b604051601f8501601f19908116603f011681019082821181831017156117a5576117a561174c565b816040528093508581528686860111156117be57600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126117e957600080fd5b61168d83833560208501611762565b6000806000806080858703121561180e57600080fd5b843567ffffffffffffffff8082111561182657600080fd5b611832888389016117d8565b9550602087013591508082111561184857600080fd5b611854888389016117d8565b945060408701359350606087013591508082111561187157600080fd5b5061187e878288016117d8565b91505092959194509250565b60008060006060848603121561189f57600080fd5b6118a884611706565b92506118b660208501611706565b9150604084013590509250925092565b6000602082840312156118d857600080fd5b61168d82611706565b600080604083850312156118f457600080fd5b6118fd83611706565b91506020830135801515811461191257600080fd5b809150509250929050565b60006020828403121561192f57600080fd5b813567ffffffffffffffff81111561194657600080fd5b611033848285016117d8565b6000806000806080858703121561196857600080fd5b61197185611706565b935061197f60208601611706565b925060408501359150606085013567ffffffffffffffff8111156119a257600080fd5b8501601f810187136119b357600080fd5b61187e87823560208401611762565b600080604083850312156119d557600080fd5b6119de83611706565b91506119ec60208401611706565b90509250929050565b600181811c90821680611a0957607f821691505b602082108103610d5a57634e487b7160e01b600052602260045260246000fd5b601f82111561079857600081815260208120601f850160051c81016020861015611a505750805b601f850160051c820191505b81811015611a6f57828155600101611a5c565b505050505050565b815167ffffffffffffffff811115611a9157611a9161174c565b611aa581611a9f84546119f5565b84611a29565b602080601f831160018114611ada5760008415611ac25750858301515b600019600386901b1c1916600185901b178555611a6f565b600085815260208120601f198616915b82811015611b0957888601518255948401946001909101908401611aea565b5085821015611b275787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611b696080830184611694565b9695505050505050565b600060208284031215611b8557600080fd5b815161168d8161165a56fea2646970667358221220a7dd5ca6e18243c1710ce3e96fdfebd0274b759f93ddd24bca434db7da46559164736f6c63430008120033