protocol Defination