0x608060405234801561001057600080fd5b50600436106100f55760003560e01c806391d1485411610097578063dab5f34011610066578063dab5f3401461021d578063e49bedb814610230578063ebf0c71714610244578063fda774441461024d57600080fd5b806391d14854146101dc578063a217fddf146101ef578063bd270231146101f7578063d547741f1461020a57600080fd5b80632f2ff15d116100d35780632f2ff15d1461016857806336568abe1461017b57806365c6bbcb1461018e578063688acc41146101b157600080fd5b806301ffc9a7146100fa57806314132f4814610122578063248a9ca314610137575b600080fd5b61010d610108366004610b84565b610255565b60405190151581526020015b60405180910390f35b610135610130366004610bca565b61028c565b005b61015a610145366004610c54565b60009081526020819052604090206001015490565b604051908152602001610119565b610135610176366004610c6d565b610490565b610135610189366004610c6d565b6104ba565b61010d61019c366004610c54565b60036020526000908152604090205460ff1681565b6002546101c4906001600160a01b031681565b6040516001600160a01b039091168152602001610119565b61010d6101ea366004610c6d565b610538565b61015a600081565b610135610205366004610ca7565b610561565b610135610218366004610c6d565b6105b8565b61013561022b366004610c54565b6105dd565b60025461010d90600160a01b900460ff1681565b61015a60015481565b610135610619565b60006001600160e01b03198216637965db0b60e01b148061028657506301ffc9a760e01b6001600160e01b03198316145b92915050565b600254600160a01b900460ff166102f45760405162461bcd60e51b815260206004820152602160248201527f41697264726f703a20436c61696d696e67206973206e6f74206f70656e2079656044820152601d60fa1b60648201526084015b60405180910390fd5b60006103008585610791565b60008181526003602052604090205490915060ff161561036e5760405162461bcd60e51b8152602060048201526024808201527f41697264726f703a20436c61696d2068617320616c7265616479206265656e206044820152631d5cd95960e21b60648201526084016102eb565b6103ab818484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506107df92505050565b6103f75760405162461bcd60e51b815260206004820152601d60248201527f41697264726f703a20496e76616c6964206d65726b6c652070726f6f6600000060448201526064016102eb565b60008181526003602052604090819020805460ff19166001179055600254905163a9059cbb60e01b81526001600160a01b038781166004830152602482018790529091169063a9059cbb906044016020604051808303816000875af1158015610464573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104889190610cc4565b505050505050565b6000828152602081905260409020600101546104ab816107f5565b6104b58383610802565b505050565b6001600160a01b038116331461052a5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016102eb565b6105348282610886565b5050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600061056c816107f5565b604051821515907fe9aa7c4d6fe933d410c93c79dd800937cf35f2051465f1d41591803c72b8b56b90600090a25060028054911515600160a01b0260ff60a01b19909216919091179055565b6000828152602081905260409020600101546105d3816107f5565b6104b58383610886565b60006105e8816107f5565b60405182907f90004c04698bc3322499a575ed3752dd4abf33e0a7294c06a787a0fe01bea94190600090a250600155565b6000610624816107f5565b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561066d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106919190610ce1565b9050600081116106e35760405162461bcd60e51b815260206004820152601760248201527f4e6f20746f6b656e73206c65667420746f20636c61696d00000000000000000060448201526064016102eb565b60408051338152602081018390527f1a615df8bf3120f94cd7e834a5e9fd11b133c5794100ae1faa1a497c1bc9f59a910160405180910390a160025460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561076d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b59190610cc4565b600081836040516020016107c192919091825260601b6bffffffffffffffffffffffff1916602082015260340190565b60405160208183030381529060405280519060200120905092915050565b60006107ee82600154856108eb565b9392505050565b6107ff8133610901565b50565b61080c8282610538565b610534576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556108423390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6108908282610538565b15610534576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000826108f8858461095a565b14949350505050565b61090b8282610538565b61053457610918816109a7565b6109238360206109b9565b604051602001610934929190610d1e565b60408051601f198184030181529082905262461bcd60e51b82526102eb91600401610d93565b600081815b845181101561099f5761098b8286838151811061097e5761097e610dc6565b6020026020010151610b55565b91508061099781610df2565b91505061095f565b509392505050565b60606102866001600160a01b03831660145b606060006109c8836002610e0b565b6109d3906002610e22565b67ffffffffffffffff8111156109eb576109eb610e35565b6040519080825280601f01601f191660200182016040528015610a15576020820181803683370190505b509050600360fc1b81600081518110610a3057610a30610dc6565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610a5f57610a5f610dc6565b60200101906001600160f81b031916908160001a9053506000610a83846002610e0b565b610a8e906001610e22565b90505b6001811115610b06576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610ac257610ac2610dc6565b1a60f81b828281518110610ad857610ad8610dc6565b60200101906001600160f81b031916908160001a90535060049490941c93610aff81610e4b565b9050610a91565b5083156107ee5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016102eb565b6000818310610b715760008281526020849052604090206107ee565b60008381526020839052604090206107ee565b600060208284031215610b9657600080fd5b81356001600160e01b0319811681146107ee57600080fd5b80356001600160a01b0381168114610bc557600080fd5b919050565b60008060008060608587031215610be057600080fd5b610be985610bae565b935060208501359250604085013567ffffffffffffffff80821115610c0d57600080fd5b818701915087601f830112610c2157600080fd5b813581811115610c3057600080fd5b8860208260051b8501011115610c4557600080fd5b95989497505060200194505050565b600060208284031215610c6657600080fd5b5035919050565b60008060408385031215610c8057600080fd5b82359150610c9060208401610bae565b90509250929050565b80151581146107ff57600080fd5b600060208284031215610cb957600080fd5b81356107ee81610c99565b600060208284031215610cd657600080fd5b81516107ee81610c99565b600060208284031215610cf357600080fd5b5051919050565b60005b83811015610d15578181015183820152602001610cfd565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351610d56816017850160208801610cfa565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610d87816028840160208801610cfa565b01602801949350505050565b6020815260008251806020840152610db2816040850160208701610cfa565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610e0457610e04610ddc565b5060010190565b808202811582820484141761028657610286610ddc565b8082018082111561028657610286610ddc565b634e487b7160e01b600052604160045260246000fd5b600081610e5a57610e5a610ddc565b50600019019056fea264697066735822122083b162e3d6d6aa90b6166d1d642d00a3286c1e693e8148550bee9b5ae8615f5164736f6c63430008140033
0x60806040526002805460ff60a01b1916905534801561001d57600080fd5b5060405161100d38038061100d83398101604081905261003c9161012a565b6001839055600280546001600160a01b0319166001600160a01b03841617905561006760008261006f565b505050610166565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661010a576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556100c93390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b80516001600160a01b038116811461012557600080fd5b919050565b60008060006060848603121561013f57600080fd5b8351925061014f6020850161010e565b915061015d6040850161010e565b90509250925092565b610e98806101756000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806391d1485411610097578063dab5f34011610066578063dab5f3401461021d578063e49bedb814610230578063ebf0c71714610244578063fda774441461024d57600080fd5b806391d14854146101dc578063a217fddf146101ef578063bd270231146101f7578063d547741f1461020a57600080fd5b80632f2ff15d116100d35780632f2ff15d1461016857806336568abe1461017b57806365c6bbcb1461018e578063688acc41146101b157600080fd5b806301ffc9a7146100fa57806314132f4814610122578063248a9ca314610137575b600080fd5b61010d610108366004610b84565b610255565b60405190151581526020015b60405180910390f35b610135610130366004610bca565b61028c565b005b61015a610145366004610c54565b60009081526020819052604090206001015490565b604051908152602001610119565b610135610176366004610c6d565b610490565b610135610189366004610c6d565b6104ba565b61010d61019c366004610c54565b60036020526000908152604090205460ff1681565b6002546101c4906001600160a01b031681565b6040516001600160a01b039091168152602001610119565b61010d6101ea366004610c6d565b610538565b61015a600081565b610135610205366004610ca7565b610561565b610135610218366004610c6d565b6105b8565b61013561022b366004610c54565b6105dd565b60025461010d90600160a01b900460ff1681565b61015a60015481565b610135610619565b60006001600160e01b03198216637965db0b60e01b148061028657506301ffc9a760e01b6001600160e01b03198316145b92915050565b600254600160a01b900460ff166102f45760405162461bcd60e51b815260206004820152602160248201527f41697264726f703a20436c61696d696e67206973206e6f74206f70656e2079656044820152601d60fa1b60648201526084015b60405180910390fd5b60006103008585610791565b60008181526003602052604090205490915060ff161561036e5760405162461bcd60e51b8152602060048201526024808201527f41697264726f703a20436c61696d2068617320616c7265616479206265656e206044820152631d5cd95960e21b60648201526084016102eb565b6103ab818484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506107df92505050565b6103f75760405162461bcd60e51b815260206004820152601d60248201527f41697264726f703a20496e76616c6964206d65726b6c652070726f6f6600000060448201526064016102eb565b60008181526003602052604090819020805460ff19166001179055600254905163a9059cbb60e01b81526001600160a01b038781166004830152602482018790529091169063a9059cbb906044016020604051808303816000875af1158015610464573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104889190610cc4565b505050505050565b6000828152602081905260409020600101546104ab816107f5565b6104b58383610802565b505050565b6001600160a01b038116331461052a5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016102eb565b6105348282610886565b5050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600061056c816107f5565b604051821515907fe9aa7c4d6fe933d410c93c79dd800937cf35f2051465f1d41591803c72b8b56b90600090a25060028054911515600160a01b0260ff60a01b19909216919091179055565b6000828152602081905260409020600101546105d3816107f5565b6104b58383610886565b60006105e8816107f5565b60405182907f90004c04698bc3322499a575ed3752dd4abf33e0a7294c06a787a0fe01bea94190600090a250600155565b6000610624816107f5565b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561066d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106919190610ce1565b9050600081116106e35760405162461bcd60e51b815260206004820152601760248201527f4e6f20746f6b656e73206c65667420746f20636c61696d00000000000000000060448201526064016102eb565b60408051338152602081018390527f1a615df8bf3120f94cd7e834a5e9fd11b133c5794100ae1faa1a497c1bc9f59a910160405180910390a160025460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561076d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b59190610cc4565b600081836040516020016107c192919091825260601b6bffffffffffffffffffffffff1916602082015260340190565b60405160208183030381529060405280519060200120905092915050565b60006107ee82600154856108eb565b9392505050565b6107ff8133610901565b50565b61080c8282610538565b610534576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556108423390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6108908282610538565b15610534576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000826108f8858461095a565b14949350505050565b61090b8282610538565b61053457610918816109a7565b6109238360206109b9565b604051602001610934929190610d1e565b60408051601f198184030181529082905262461bcd60e51b82526102eb91600401610d93565b600081815b845181101561099f5761098b8286838151811061097e5761097e610dc6565b6020026020010151610b55565b91508061099781610df2565b91505061095f565b509392505050565b60606102866001600160a01b03831660145b606060006109c8836002610e0b565b6109d3906002610e22565b67ffffffffffffffff8111156109eb576109eb610e35565b6040519080825280601f01601f191660200182016040528015610a15576020820181803683370190505b509050600360fc1b81600081518110610a3057610a30610dc6565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610a5f57610a5f610dc6565b60200101906001600160f81b031916908160001a9053506000610a83846002610e0b565b610a8e906001610e22565b90505b6001811115610b06576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610ac257610ac2610dc6565b1a60f81b828281518110610ad857610ad8610dc6565b60200101906001600160f81b031916908160001a90535060049490941c93610aff81610e4b565b9050610a91565b5083156107ee5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016102eb565b6000818310610b715760008281526020849052604090206107ee565b60008381526020839052604090206107ee565b600060208284031215610b9657600080fd5b81356001600160e01b0319811681146107ee57600080fd5b80356001600160a01b0381168114610bc557600080fd5b919050565b60008060008060608587031215610be057600080fd5b610be985610bae565b935060208501359250604085013567ffffffffffffffff80821115610c0d57600080fd5b818701915087601f830112610c2157600080fd5b813581811115610c3057600080fd5b8860208260051b8501011115610c4557600080fd5b95989497505060200194505050565b600060208284031215610c6657600080fd5b5035919050565b60008060408385031215610c8057600080fd5b82359150610c9060208401610bae565b90509250929050565b80151581146107ff57600080fd5b600060208284031215610cb957600080fd5b81356107ee81610c99565b600060208284031215610cd657600080fd5b81516107ee81610c99565b600060208284031215610cf357600080fd5b5051919050565b60005b83811015610d15578181015183820152602001610cfd565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351610d56816017850160208801610cfa565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610d87816028840160208801610cfa565b01602801949350505050565b6020815260008251806020840152610db2816040850160208701610cfa565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610e0457610e04610ddc565b5060010190565b808202811582820484141761028657610286610ddc565b8082018082111561028657610286610ddc565b634e487b7160e01b600052604160045260246000fd5b600081610e5a57610e5a610ddc565b50600019019056fea264697066735822122083b162e3d6d6aa90b6166d1d642d00a3286c1e693e8148550bee9b5ae8615f5164736f6c63430008140033dad6c8366d80cc2ec6ee9a48dec783a4d957ce73f56518797ae24b989977161e000000000000000000000000f2c88757f8d03634671208935974b60a2a28bdb3000000000000000000000000541ef0eee35546a9dae28ee79eb18300cbaeb593