[YUNIKORN-490] define and generate the API (#35)

Instead of defining the API inside the core define the API as part of
the SI where it belongs. The core and shim both should import the same
generated API.

Regenerated proto files are a side effect from YUNIKORN-489

Fixes: #35
diff --git a/Makefile b/Makefile
index 4b22f16..a708501 100644
--- a/Makefile
+++ b/Makefile
@@ -51,6 +51,8 @@
 LIB_DIR := lib/go
 COMMON_LIB := $(LIB_DIR)/common
 CONSTANTS_GO := $(COMMON_LIB)/constants.go
+API_LIB := $(LIB_DIR)/api
+INTERFACE_GO := $(API_LIB)/interface.go
 
 define GENERATED_HEADER
 
@@ -84,8 +86,15 @@
 	(diff $@ $(CONSTANTS_GO) > /dev/null 2>&1 || mv -f $@ $(CONSTANTS_GO)) && \
 		rm -f $@
 
+$(INTERFACE_GO).tmp: $(SI_SPEC)
+	test -d $(API_LIB) || mkdir -p $(API_LIB)
+	@echo "$$GENERATED_HEADER" > $@
+	cat $< | sed -n -e '/``golang$$/,/^```$$/ p' | sed '/^```/d' >> $@
+	(diff $@ $(INTERFACE_GO) > /dev/null 2>&1 || mv -f $@ $(INTERFACE_GO)) && \
+		rm -f $@
+
 # Build the go language bindings from the spec via a generated proto
-build: $(SI_PROTO).tmp $(CONSTANTS_GO).tmp
+build: $(SI_PROTO).tmp $(CONSTANTS_GO).tmp $(INTERFACE_GO).tmp 
 	$(MAKE) -C $(LIB_DIR)
 
 # Set a empty recipe
diff --git a/lib/go/api/interface.go b/lib/go/api/interface.go
new file mode 100644
index 0000000..caacb1d
--- /dev/null
+++ b/lib/go/api/interface.go
@@ -0,0 +1,24 @@
+
+// Code generated by make build. DO NOT EDIT
+
+package api
+
+import "github.com/apache/incubator-yunikorn-scheduler-interface/lib/go/si"
+
+type SchedulerAPI interface {
+    // Register a new RM, if it is a reconnect from previous RM, cleanup 
+	// all in-memory data and resync with RM. 
+	RegisterResourceManager(request *si.RegisterResourceManagerRequest, callback ResourceManagerCallback) (*si.RegisterResourceManagerResponse, error)
+
+	// Update Scheduler status (including node status update, allocation request 
+	// updates, etc. 
+	Update(request *si.UpdateRequest) error
+
+	// Notify scheduler to reload configuration and hot-refresh in-memory state based on configuration changes 
+	ReloadConfiguration(clusterID string) error
+}
+
+// RM side needs to implement this API
+type ResourceManagerCallback interface {
+	RecvUpdateResponse(response *si.UpdateResponse) error
+}
diff --git a/lib/go/si/si.pb.go b/lib/go/si/si.pb.go
index 6df1dd3..de425e1 100644
--- a/lib/go/si/si.pb.go
+++ b/lib/go/si/si.pb.go
@@ -84,40 +84,6 @@
 	return fileDescriptor_bcd2636ebca16c8c, []int{3, 0}
 }
 
-// Following 4 operators can be specified, by default is "IN".
-// When EXIST/NOT_EXISTS specified, scheduler only check if given targetKey
-// appears on node attribute or allocation tag.
-type AffinityTargetExpression_AffinityTargetOperator int32
-
-const (
-	AffinityTargetExpression_IN        AffinityTargetExpression_AffinityTargetOperator = 0
-	AffinityTargetExpression_NOT_IN    AffinityTargetExpression_AffinityTargetOperator = 1
-	AffinityTargetExpression_EXIST     AffinityTargetExpression_AffinityTargetOperator = 2
-	AffinityTargetExpression_NOT_EXIST AffinityTargetExpression_AffinityTargetOperator = 3
-)
-
-var AffinityTargetExpression_AffinityTargetOperator_name = map[int32]string{
-	0: "IN",
-	1: "NOT_IN",
-	2: "EXIST",
-	3: "NOT_EXIST",
-}
-
-var AffinityTargetExpression_AffinityTargetOperator_value = map[string]int32{
-	"IN":        0,
-	"NOT_IN":    1,
-	"EXIST":     2,
-	"NOT_EXIST": 3,
-}
-
-func (x AffinityTargetExpression_AffinityTargetOperator) String() string {
-	return proto.EnumName(AffinityTargetExpression_AffinityTargetOperator_name, int32(x))
-}
-
-func (AffinityTargetExpression_AffinityTargetOperator) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{20, 0}
-}
-
 // Action from RM
 type UpdateNodeInfo_ActionFromRM int32
 
@@ -153,7 +119,7 @@
 }
 
 func (UpdateNodeInfo_ActionFromRM) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{26, 0}
+	return fileDescriptor_bcd2636ebca16c8c, []int{21, 0}
 }
 
 // container scheduling states
@@ -190,7 +156,7 @@
 }
 
 func (UpdateContainerSchedulingStateRequest_SchedulingState) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{34, 0}
+	return fileDescriptor_bcd2636ebca16c8c, []int{27, 0}
 }
 
 type EventRecord_Type int32
@@ -221,7 +187,7 @@
 }
 
 func (EventRecord_Type) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{37, 0}
+	return fileDescriptor_bcd2636ebca16c8c, []int{30, 0}
 }
 
 //
@@ -336,15 +302,13 @@
 	// - Allocation-related changes with the node.
 	// - Realtime Utilizations.
 	UpdatedNodes []*UpdateNodeInfo `protobuf:"bytes,4,rep,name=updatedNodes,proto3" json:"updatedNodes,omitempty"`
-	// UtilizationReports for allocation and nodes.
-	UtilizationReports []*UtilizationReport `protobuf:"bytes,5,rep,name=utilizationReports,proto3" json:"utilizationReports,omitempty"`
 	// ID of RM, this will be used to identify which RM of the request comes from.
-	RmID string `protobuf:"bytes,6,opt,name=rmID,proto3" json:"rmID,omitempty"`
+	RmID string `protobuf:"bytes,5,opt,name=rmID,proto3" json:"rmID,omitempty"`
 	// RM should explicitly add application when allocation request also explictly belongs to application.
 	// This is optional if allocation request doesn't belong to a application. (Independent allocation)
-	NewApplications []*AddApplicationRequest `protobuf:"bytes,8,rep,name=newApplications,proto3" json:"newApplications,omitempty"`
+	NewApplications []*AddApplicationRequest `protobuf:"bytes,6,rep,name=newApplications,proto3" json:"newApplications,omitempty"`
 	// RM can also remove applications, all allocation/allocation requests associated with the application will be removed
-	RemoveApplications   []*RemoveApplicationRequest `protobuf:"bytes,9,rep,name=removeApplications,proto3" json:"removeApplications,omitempty"`
+	RemoveApplications   []*RemoveApplicationRequest `protobuf:"bytes,7,rep,name=removeApplications,proto3" json:"removeApplications,omitempty"`
 	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
 	XXX_unrecognized     []byte                      `json:"-"`
 	XXX_sizecache        int32                       `json:"-"`
@@ -403,13 +367,6 @@
 	return nil
 }
 
-func (m *UpdateRequest) GetUtilizationReports() []*UtilizationReport {
-	if m != nil {
-		return m.UtilizationReports
-	}
-	return nil
-}
-
 func (m *UpdateRequest) GetRmID() string {
 	if m != nil {
 		return m.RmID
@@ -444,23 +401,16 @@
 	ReleasedAllocationAsks []*AllocationAskRelease `protobuf:"bytes,4,rep,name=releasedAllocationAsks,proto3" json:"releasedAllocationAsks,omitempty"`
 	// Rejected allocation requests
 	RejectedAllocations []*RejectedAllocationAsk `protobuf:"bytes,5,rep,name=rejectedAllocations,proto3" json:"rejectedAllocations,omitempty"`
-	// Suggested node update.
-	// This could include:
-	// 1) Schedulable resources on each node. This can be used when we want to run
-	//    two resource management systems side-by-side. For example, YARN/K8s running side by side.
-	//    and update YARN NodeManager / Kubelet resource dynamically.
-	// 2) Other recommendations.
-	NodeRecommendations []*NodeRecommendation `protobuf:"bytes,6,rep,name=nodeRecommendations,proto3" json:"nodeRecommendations,omitempty"`
 	// Rejected Applications
-	RejectedApplications []*RejectedApplication `protobuf:"bytes,7,rep,name=rejectedApplications,proto3" json:"rejectedApplications,omitempty"`
+	RejectedApplications []*RejectedApplication `protobuf:"bytes,6,rep,name=rejectedApplications,proto3" json:"rejectedApplications,omitempty"`
 	// Accepted Applications
-	AcceptedApplications []*AcceptedApplication `protobuf:"bytes,8,rep,name=acceptedApplications,proto3" json:"acceptedApplications,omitempty"`
+	AcceptedApplications []*AcceptedApplication `protobuf:"bytes,7,rep,name=acceptedApplications,proto3" json:"acceptedApplications,omitempty"`
 	// Updated Applications
-	UpdatedApplications []*UpdatedApplication `protobuf:"bytes,9,rep,name=updatedApplications,proto3" json:"updatedApplications,omitempty"`
+	UpdatedApplications []*UpdatedApplication `protobuf:"bytes,8,rep,name=updatedApplications,proto3" json:"updatedApplications,omitempty"`
 	// Rejected Node Registrations
-	RejectedNodes []*RejectedNode `protobuf:"bytes,10,rep,name=rejectedNodes,proto3" json:"rejectedNodes,omitempty"`
+	RejectedNodes []*RejectedNode `protobuf:"bytes,9,rep,name=rejectedNodes,proto3" json:"rejectedNodes,omitempty"`
 	// Accepted Node Registrations
-	AcceptedNodes        []*AcceptedNode `protobuf:"bytes,11,rep,name=acceptedNodes,proto3" json:"acceptedNodes,omitempty"`
+	AcceptedNodes        []*AcceptedNode `protobuf:"bytes,10,rep,name=acceptedNodes,proto3" json:"acceptedNodes,omitempty"`
 	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
 	XXX_unrecognized     []byte          `json:"-"`
 	XXX_sizecache        int32           `json:"-"`
@@ -526,13 +476,6 @@
 	return nil
 }
 
-func (m *UpdateResponse) GetNodeRecommendations() []*NodeRecommendation {
-	if m != nil {
-		return m.NodeRecommendations
-	}
-	return nil
-}
-
 func (m *UpdateResponse) GetRejectedApplications() []*RejectedApplication {
 	if m != nil {
 		return m.RejectedApplications
@@ -997,14 +940,11 @@
 	// ask on nodes in the cluster. These tags are used in the PlacementConstraints.
 	// These tags are optional.
 	Tags map[string]string `protobuf:"bytes,8,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-	// Placement constraint defines how this allocation should be placed in the cluster.
-	// if not set, no placement constraint will be applied.
-	PlacementConstraint *PlacementConstraint `protobuf:"bytes,9,opt,name=placementConstraint,proto3" json:"placementConstraint,omitempty"`
 	// The name of the TaskGroup this ask belongs to
-	TaskGroupName string `protobuf:"bytes,10,opt,name=taskGroupName,proto3" json:"taskGroupName,omitempty"`
+	TaskGroupName string `protobuf:"bytes,9,opt,name=taskGroupName,proto3" json:"taskGroupName,omitempty"`
 	// Is this a placeholder ask (true) or a real ask (false), defaults to false
 	// ignored if the taskGroupName is not set
-	Placeholder          bool     `protobuf:"varint,11,opt,name=placeholder,proto3" json:"placeholder,omitempty"`
+	Placeholder          bool     `protobuf:"varint,10,opt,name=placeholder,proto3" json:"placeholder,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
@@ -1091,13 +1031,6 @@
 	return nil
 }
 
-func (m *AllocationAsk) GetPlacementConstraint() *PlacementConstraint {
-	if m != nil {
-		return m.PlacementConstraint
-	}
-	return nil
-}
-
 func (m *AllocationAsk) GetTaskGroupName() string {
 	if m != nil {
 		return m.TaskGroupName
@@ -1308,304 +1241,6 @@
 	return nil
 }
 
-// PlacementConstraint could have simplePlacementConstraint or
-// CompositePlacementConstraint. One of them will be set.
-type PlacementConstraint struct {
-	// Types that are valid to be assigned to Constraint:
-	//	*PlacementConstraint_SimpleConstraint
-	Constraint           isPlacementConstraint_Constraint `protobuf_oneof:"constraint"`
-	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
-	XXX_unrecognized     []byte                           `json:"-"`
-	XXX_sizecache        int32                            `json:"-"`
-}
-
-func (m *PlacementConstraint) Reset()         { *m = PlacementConstraint{} }
-func (m *PlacementConstraint) String() string { return proto.CompactTextString(m) }
-func (*PlacementConstraint) ProtoMessage()    {}
-func (*PlacementConstraint) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{16}
-}
-
-func (m *PlacementConstraint) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_PlacementConstraint.Unmarshal(m, b)
-}
-func (m *PlacementConstraint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_PlacementConstraint.Marshal(b, m, deterministic)
-}
-func (m *PlacementConstraint) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_PlacementConstraint.Merge(m, src)
-}
-func (m *PlacementConstraint) XXX_Size() int {
-	return xxx_messageInfo_PlacementConstraint.Size(m)
-}
-func (m *PlacementConstraint) XXX_DiscardUnknown() {
-	xxx_messageInfo_PlacementConstraint.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_PlacementConstraint proto.InternalMessageInfo
-
-type isPlacementConstraint_Constraint interface {
-	isPlacementConstraint_Constraint()
-}
-
-type PlacementConstraint_SimpleConstraint struct {
-	SimpleConstraint *SimplePlacementConstraint `protobuf:"bytes,1,opt,name=simpleConstraint,proto3,oneof"`
-}
-
-func (*PlacementConstraint_SimpleConstraint) isPlacementConstraint_Constraint() {}
-
-func (m *PlacementConstraint) GetConstraint() isPlacementConstraint_Constraint {
-	if m != nil {
-		return m.Constraint
-	}
-	return nil
-}
-
-func (m *PlacementConstraint) GetSimpleConstraint() *SimplePlacementConstraint {
-	if x, ok := m.GetConstraint().(*PlacementConstraint_SimpleConstraint); ok {
-		return x.SimpleConstraint
-	}
-	return nil
-}
-
-// XXX_OneofWrappers is for the internal use of the proto package.
-func (*PlacementConstraint) XXX_OneofWrappers() []interface{} {
-	return []interface{}{
-		(*PlacementConstraint_SimpleConstraint)(nil),
-	}
-}
-
-// Simple placement constraint represent constraint for affinity/anti-affinity
-// to node attribute or allocation tags.
-// When both of NodeAffinityConstraints and AllocationAffinityConstraints
-// specified, both will be checked and verified while scheduling.
-type SimplePlacementConstraint struct {
-	// Constraint
-	NodeAffinityConstraint      *NodeAffinityConstraints       `protobuf:"bytes,1,opt,name=nodeAffinityConstraint,proto3" json:"nodeAffinityConstraint,omitempty"`
-	AllocationAffinityAttribute *AllocationAffinityConstraints `protobuf:"bytes,2,opt,name=allocationAffinityAttribute,proto3" json:"allocationAffinityAttribute,omitempty"`
-	XXX_NoUnkeyedLiteral        struct{}                       `json:"-"`
-	XXX_unrecognized            []byte                         `json:"-"`
-	XXX_sizecache               int32                          `json:"-"`
-}
-
-func (m *SimplePlacementConstraint) Reset()         { *m = SimplePlacementConstraint{} }
-func (m *SimplePlacementConstraint) String() string { return proto.CompactTextString(m) }
-func (*SimplePlacementConstraint) ProtoMessage()    {}
-func (*SimplePlacementConstraint) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{17}
-}
-
-func (m *SimplePlacementConstraint) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_SimplePlacementConstraint.Unmarshal(m, b)
-}
-func (m *SimplePlacementConstraint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_SimplePlacementConstraint.Marshal(b, m, deterministic)
-}
-func (m *SimplePlacementConstraint) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_SimplePlacementConstraint.Merge(m, src)
-}
-func (m *SimplePlacementConstraint) XXX_Size() int {
-	return xxx_messageInfo_SimplePlacementConstraint.Size(m)
-}
-func (m *SimplePlacementConstraint) XXX_DiscardUnknown() {
-	xxx_messageInfo_SimplePlacementConstraint.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_SimplePlacementConstraint proto.InternalMessageInfo
-
-func (m *SimplePlacementConstraint) GetNodeAffinityConstraint() *NodeAffinityConstraints {
-	if m != nil {
-		return m.NodeAffinityConstraint
-	}
-	return nil
-}
-
-func (m *SimplePlacementConstraint) GetAllocationAffinityAttribute() *AllocationAffinityConstraints {
-	if m != nil {
-		return m.AllocationAffinityAttribute
-	}
-	return nil
-}
-
-// Affinity to node, multiple AffinityTargetExpression will be specified,
-// They will be connected by AND.
-type NodeAffinityConstraints struct {
-	TargetExpressions    []*AffinityTargetExpression `protobuf:"bytes,2,rep,name=targetExpressions,proto3" json:"targetExpressions,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
-	XXX_unrecognized     []byte                      `json:"-"`
-	XXX_sizecache        int32                       `json:"-"`
-}
-
-func (m *NodeAffinityConstraints) Reset()         { *m = NodeAffinityConstraints{} }
-func (m *NodeAffinityConstraints) String() string { return proto.CompactTextString(m) }
-func (*NodeAffinityConstraints) ProtoMessage()    {}
-func (*NodeAffinityConstraints) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{18}
-}
-
-func (m *NodeAffinityConstraints) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_NodeAffinityConstraints.Unmarshal(m, b)
-}
-func (m *NodeAffinityConstraints) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_NodeAffinityConstraints.Marshal(b, m, deterministic)
-}
-func (m *NodeAffinityConstraints) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_NodeAffinityConstraints.Merge(m, src)
-}
-func (m *NodeAffinityConstraints) XXX_Size() int {
-	return xxx_messageInfo_NodeAffinityConstraints.Size(m)
-}
-func (m *NodeAffinityConstraints) XXX_DiscardUnknown() {
-	xxx_messageInfo_NodeAffinityConstraints.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NodeAffinityConstraints proto.InternalMessageInfo
-
-func (m *NodeAffinityConstraints) GetTargetExpressions() []*AffinityTargetExpression {
-	if m != nil {
-		return m.TargetExpressions
-	}
-	return nil
-}
-
-// Affinity to allocations (containers).
-// Affinity is single-direction, which means if RM wants to do mutual affinity/
-// anti-affinity between allocations, same constraints need to be added
-// to all allocation asks.
-type AllocationAffinityConstraints struct {
-	// Scope: scope is key of node attribute, which determines if >1 allocations
-	// in the same group or not.
-	// When allocations on node(s) which have same node attribute value
-	// for given node attribute key == scope. They're in the same group.
-	//
-	// e.g. when user wants to do anti-affinity between allocation on node
-	// basis, scope can be set to "hostname", max-cardinality = 1;
-	Scope             string                      `protobuf:"bytes,1,opt,name=scope,proto3" json:"scope,omitempty"`
-	TragetExpressions []*AffinityTargetExpression `protobuf:"bytes,2,rep,name=tragetExpressions,proto3" json:"tragetExpressions,omitempty"`
-	MinCardinality    int32                       `protobuf:"varint,3,opt,name=minCardinality,proto3" json:"minCardinality,omitempty"`
-	MaxCardinality    int32                       `protobuf:"varint,4,opt,name=maxCardinality,proto3" json:"maxCardinality,omitempty"`
-	// Is this a required (hard) or preferred (soft) request.
-	Required             bool     `protobuf:"varint,5,opt,name=required,proto3" json:"required,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
-}
-
-func (m *AllocationAffinityConstraints) Reset()         { *m = AllocationAffinityConstraints{} }
-func (m *AllocationAffinityConstraints) String() string { return proto.CompactTextString(m) }
-func (*AllocationAffinityConstraints) ProtoMessage()    {}
-func (*AllocationAffinityConstraints) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{19}
-}
-
-func (m *AllocationAffinityConstraints) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_AllocationAffinityConstraints.Unmarshal(m, b)
-}
-func (m *AllocationAffinityConstraints) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_AllocationAffinityConstraints.Marshal(b, m, deterministic)
-}
-func (m *AllocationAffinityConstraints) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_AllocationAffinityConstraints.Merge(m, src)
-}
-func (m *AllocationAffinityConstraints) XXX_Size() int {
-	return xxx_messageInfo_AllocationAffinityConstraints.Size(m)
-}
-func (m *AllocationAffinityConstraints) XXX_DiscardUnknown() {
-	xxx_messageInfo_AllocationAffinityConstraints.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AllocationAffinityConstraints proto.InternalMessageInfo
-
-func (m *AllocationAffinityConstraints) GetScope() string {
-	if m != nil {
-		return m.Scope
-	}
-	return ""
-}
-
-func (m *AllocationAffinityConstraints) GetTragetExpressions() []*AffinityTargetExpression {
-	if m != nil {
-		return m.TragetExpressions
-	}
-	return nil
-}
-
-func (m *AllocationAffinityConstraints) GetMinCardinality() int32 {
-	if m != nil {
-		return m.MinCardinality
-	}
-	return 0
-}
-
-func (m *AllocationAffinityConstraints) GetMaxCardinality() int32 {
-	if m != nil {
-		return m.MaxCardinality
-	}
-	return 0
-}
-
-func (m *AllocationAffinityConstraints) GetRequired() bool {
-	if m != nil {
-		return m.Required
-	}
-	return false
-}
-
-type AffinityTargetExpression struct {
-	TargetOperator       *AffinityTargetExpression `protobuf:"bytes,1,opt,name=targetOperator,proto3" json:"targetOperator,omitempty"`
-	TargetKey            string                    `protobuf:"bytes,2,opt,name=targetKey,proto3" json:"targetKey,omitempty"`
-	TargetValues         []string                  `protobuf:"bytes,3,rep,name=targetValues,proto3" json:"targetValues,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}                  `json:"-"`
-	XXX_unrecognized     []byte                    `json:"-"`
-	XXX_sizecache        int32                     `json:"-"`
-}
-
-func (m *AffinityTargetExpression) Reset()         { *m = AffinityTargetExpression{} }
-func (m *AffinityTargetExpression) String() string { return proto.CompactTextString(m) }
-func (*AffinityTargetExpression) ProtoMessage()    {}
-func (*AffinityTargetExpression) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{20}
-}
-
-func (m *AffinityTargetExpression) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_AffinityTargetExpression.Unmarshal(m, b)
-}
-func (m *AffinityTargetExpression) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_AffinityTargetExpression.Marshal(b, m, deterministic)
-}
-func (m *AffinityTargetExpression) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_AffinityTargetExpression.Merge(m, src)
-}
-func (m *AffinityTargetExpression) XXX_Size() int {
-	return xxx_messageInfo_AffinityTargetExpression.Size(m)
-}
-func (m *AffinityTargetExpression) XXX_DiscardUnknown() {
-	xxx_messageInfo_AffinityTargetExpression.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AffinityTargetExpression proto.InternalMessageInfo
-
-func (m *AffinityTargetExpression) GetTargetOperator() *AffinityTargetExpression {
-	if m != nil {
-		return m.TargetOperator
-	}
-	return nil
-}
-
-func (m *AffinityTargetExpression) GetTargetKey() string {
-	if m != nil {
-		return m.TargetKey
-	}
-	return ""
-}
-
-func (m *AffinityTargetExpression) GetTargetValues() []string {
-	if m != nil {
-		return m.TargetValues
-	}
-	return nil
-}
-
 type Allocation struct {
 	// AllocationKey from AllocationAsk
 	AllocationKey string `protobuf:"bytes,1,opt,name=allocationKey,proto3" json:"allocationKey,omitempty"`
@@ -1639,7 +1274,7 @@
 func (m *Allocation) String() string { return proto.CompactTextString(m) }
 func (*Allocation) ProtoMessage()    {}
 func (*Allocation) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{21}
+	return fileDescriptor_bcd2636ebca16c8c, []int{16}
 }
 
 func (m *Allocation) XXX_Unmarshal(b []byte) error {
@@ -1751,7 +1386,7 @@
 func (m *AllocationReleasesRequest) String() string { return proto.CompactTextString(m) }
 func (*AllocationReleasesRequest) ProtoMessage()    {}
 func (*AllocationReleasesRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{22}
+	return fileDescriptor_bcd2636ebca16c8c, []int{17}
 }
 
 func (m *AllocationReleasesRequest) XXX_Unmarshal(b []byte) error {
@@ -1810,7 +1445,7 @@
 func (m *AllocationRelease) String() string { return proto.CompactTextString(m) }
 func (*AllocationRelease) ProtoMessage()    {}
 func (*AllocationRelease) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{23}
+	return fileDescriptor_bcd2636ebca16c8c, []int{18}
 }
 
 func (m *AllocationRelease) XXX_Unmarshal(b []byte) error {
@@ -1888,7 +1523,7 @@
 func (m *AllocationAskRelease) String() string { return proto.CompactTextString(m) }
 func (*AllocationAskRelease) ProtoMessage()    {}
 func (*AllocationAskRelease) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{24}
+	return fileDescriptor_bcd2636ebca16c8c, []int{19}
 }
 
 func (m *AllocationAskRelease) XXX_Unmarshal(b []byte) error {
@@ -1964,7 +1599,7 @@
 func (m *NewNodeInfo) String() string { return proto.CompactTextString(m) }
 func (*NewNodeInfo) ProtoMessage()    {}
 func (*NewNodeInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{25}
+	return fileDescriptor_bcd2636ebca16c8c, []int{20}
 }
 
 func (m *NewNodeInfo) XXX_Unmarshal(b []byte) error {
@@ -2042,7 +1677,7 @@
 func (m *UpdateNodeInfo) String() string { return proto.CompactTextString(m) }
 func (*UpdateNodeInfo) ProtoMessage()    {}
 func (*UpdateNodeInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{26}
+	return fileDescriptor_bcd2636ebca16c8c, []int{21}
 }
 
 func (m *UpdateNodeInfo) XXX_Unmarshal(b []byte) error {
@@ -2098,55 +1733,6 @@
 	return UpdateNodeInfo_UPDATE
 }
 
-type UtilizationReport struct {
-	// it could be either a nodeID or allocation UUID.
-	ID string `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"`
-	// Actual used resource
-	ActualUsedResource   *Resource `protobuf:"bytes,2,opt,name=actualUsedResource,proto3" json:"actualUsedResource,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
-	XXX_unrecognized     []byte    `json:"-"`
-	XXX_sizecache        int32     `json:"-"`
-}
-
-func (m *UtilizationReport) Reset()         { *m = UtilizationReport{} }
-func (m *UtilizationReport) String() string { return proto.CompactTextString(m) }
-func (*UtilizationReport) ProtoMessage()    {}
-func (*UtilizationReport) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{27}
-}
-
-func (m *UtilizationReport) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_UtilizationReport.Unmarshal(m, b)
-}
-func (m *UtilizationReport) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_UtilizationReport.Marshal(b, m, deterministic)
-}
-func (m *UtilizationReport) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_UtilizationReport.Merge(m, src)
-}
-func (m *UtilizationReport) XXX_Size() int {
-	return xxx_messageInfo_UtilizationReport.Size(m)
-}
-func (m *UtilizationReport) XXX_DiscardUnknown() {
-	xxx_messageInfo_UtilizationReport.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_UtilizationReport proto.InternalMessageInfo
-
-func (m *UtilizationReport) GetID() string {
-	if m != nil {
-		return m.ID
-	}
-	return ""
-}
-
-func (m *UtilizationReport) GetActualUsedResource() *Resource {
-	if m != nil {
-		return m.ActualUsedResource
-	}
-	return nil
-}
-
 type RejectedAllocationAsk struct {
 	AllocationKey string `protobuf:"bytes,1,opt,name=allocationKey,proto3" json:"allocationKey,omitempty"`
 	// The ID of the application
@@ -2162,7 +1748,7 @@
 func (m *RejectedAllocationAsk) String() string { return proto.CompactTextString(m) }
 func (*RejectedAllocationAsk) ProtoMessage()    {}
 func (*RejectedAllocationAsk) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{28}
+	return fileDescriptor_bcd2636ebca16c8c, []int{22}
 }
 
 func (m *RejectedAllocationAsk) XXX_Unmarshal(b []byte) error {
@@ -2204,54 +1790,6 @@
 	return ""
 }
 
-type NodeRecommendation struct {
-	RecommendedSchedulableResource *Resource `protobuf:"bytes,1,opt,name=recommendedSchedulableResource,proto3" json:"recommendedSchedulableResource,omitempty"`
-	// Any other human-readable message
-	Message              string   `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
-}
-
-func (m *NodeRecommendation) Reset()         { *m = NodeRecommendation{} }
-func (m *NodeRecommendation) String() string { return proto.CompactTextString(m) }
-func (*NodeRecommendation) ProtoMessage()    {}
-func (*NodeRecommendation) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{29}
-}
-
-func (m *NodeRecommendation) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_NodeRecommendation.Unmarshal(m, b)
-}
-func (m *NodeRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_NodeRecommendation.Marshal(b, m, deterministic)
-}
-func (m *NodeRecommendation) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_NodeRecommendation.Merge(m, src)
-}
-func (m *NodeRecommendation) XXX_Size() int {
-	return xxx_messageInfo_NodeRecommendation.Size(m)
-}
-func (m *NodeRecommendation) XXX_DiscardUnknown() {
-	xxx_messageInfo_NodeRecommendation.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NodeRecommendation proto.InternalMessageInfo
-
-func (m *NodeRecommendation) GetRecommendedSchedulableResource() *Resource {
-	if m != nil {
-		return m.RecommendedSchedulableResource
-	}
-	return nil
-}
-
-func (m *NodeRecommendation) GetMessage() string {
-	if m != nil {
-		return m.Message
-	}
-	return ""
-}
-
 type PredicatesArgs struct {
 	// allocation key identifies a container, the predicates function is going to check
 	// if this container is eligible to be placed ont to a node.
@@ -2269,7 +1807,7 @@
 func (m *PredicatesArgs) String() string { return proto.CompactTextString(m) }
 func (*PredicatesArgs) ProtoMessage()    {}
 func (*PredicatesArgs) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{30}
+	return fileDescriptor_bcd2636ebca16c8c, []int{23}
 }
 
 func (m *PredicatesArgs) XXX_Unmarshal(b []byte) error {
@@ -2325,7 +1863,7 @@
 func (m *ReSyncSchedulerCacheArgs) String() string { return proto.CompactTextString(m) }
 func (*ReSyncSchedulerCacheArgs) ProtoMessage()    {}
 func (*ReSyncSchedulerCacheArgs) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{31}
+	return fileDescriptor_bcd2636ebca16c8c, []int{24}
 }
 
 func (m *ReSyncSchedulerCacheArgs) XXX_Unmarshal(b []byte) error {
@@ -2374,7 +1912,7 @@
 func (m *AssumedAllocation) String() string { return proto.CompactTextString(m) }
 func (*AssumedAllocation) ProtoMessage()    {}
 func (*AssumedAllocation) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{32}
+	return fileDescriptor_bcd2636ebca16c8c, []int{25}
 }
 
 func (m *AssumedAllocation) XXX_Unmarshal(b []byte) error {
@@ -2421,7 +1959,7 @@
 func (m *ForgotAllocation) String() string { return proto.CompactTextString(m) }
 func (*ForgotAllocation) ProtoMessage()    {}
 func (*ForgotAllocation) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{33}
+	return fileDescriptor_bcd2636ebca16c8c, []int{26}
 }
 
 func (m *ForgotAllocation) XXX_Unmarshal(b []byte) error {
@@ -2467,7 +2005,7 @@
 func (m *UpdateContainerSchedulingStateRequest) String() string { return proto.CompactTextString(m) }
 func (*UpdateContainerSchedulingStateRequest) ProtoMessage()    {}
 func (*UpdateContainerSchedulingStateRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{34}
+	return fileDescriptor_bcd2636ebca16c8c, []int{27}
 }
 
 func (m *UpdateContainerSchedulingStateRequest) XXX_Unmarshal(b []byte) error {
@@ -2528,7 +2066,7 @@
 func (m *UpdateConfigurationRequest) String() string { return proto.CompactTextString(m) }
 func (*UpdateConfigurationRequest) ProtoMessage()    {}
 func (*UpdateConfigurationRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{35}
+	return fileDescriptor_bcd2636ebca16c8c, []int{28}
 }
 
 func (m *UpdateConfigurationRequest) XXX_Unmarshal(b []byte) error {
@@ -2572,7 +2110,7 @@
 func (m *UpdateConfigurationResponse) String() string { return proto.CompactTextString(m) }
 func (*UpdateConfigurationResponse) ProtoMessage()    {}
 func (*UpdateConfigurationResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{36}
+	return fileDescriptor_bcd2636ebca16c8c, []int{29}
 }
 
 func (m *UpdateConfigurationResponse) XXX_Unmarshal(b []byte) error {
@@ -2637,7 +2175,7 @@
 func (m *EventRecord) String() string { return proto.CompactTextString(m) }
 func (*EventRecord) ProtoMessage()    {}
 func (*EventRecord) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{37}
+	return fileDescriptor_bcd2636ebca16c8c, []int{30}
 }
 
 func (m *EventRecord) XXX_Unmarshal(b []byte) error {
@@ -2700,105 +2238,6 @@
 	return 0
 }
 
-// auto scaling metrics at a certain point of time
-type AutoScalingMetrics struct {
-	// a list of outstanding requests that desires for additional resources
-	OutstandingRequests  []*OutstandingResourceRequest `protobuf:"bytes,1,rep,name=outstandingRequests,proto3" json:"outstandingRequests,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
-	XXX_unrecognized     []byte                        `json:"-"`
-	XXX_sizecache        int32                         `json:"-"`
-}
-
-func (m *AutoScalingMetrics) Reset()         { *m = AutoScalingMetrics{} }
-func (m *AutoScalingMetrics) String() string { return proto.CompactTextString(m) }
-func (*AutoScalingMetrics) ProtoMessage()    {}
-func (*AutoScalingMetrics) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{38}
-}
-
-func (m *AutoScalingMetrics) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_AutoScalingMetrics.Unmarshal(m, b)
-}
-func (m *AutoScalingMetrics) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_AutoScalingMetrics.Marshal(b, m, deterministic)
-}
-func (m *AutoScalingMetrics) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_AutoScalingMetrics.Merge(m, src)
-}
-func (m *AutoScalingMetrics) XXX_Size() int {
-	return xxx_messageInfo_AutoScalingMetrics.Size(m)
-}
-func (m *AutoScalingMetrics) XXX_DiscardUnknown() {
-	xxx_messageInfo_AutoScalingMetrics.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AutoScalingMetrics proto.InternalMessageInfo
-
-func (m *AutoScalingMetrics) GetOutstandingRequests() []*OutstandingResourceRequest {
-	if m != nil {
-		return m.OutstandingRequests
-	}
-	return nil
-}
-
-type OutstandingResourceRequest struct {
-	// an unique ID
-	RequestID string `protobuf:"bytes,1,opt,name=requestID,proto3" json:"requestID,omitempty"`
-	// resource specification
-	Resource *Resource `protobuf:"bytes,2,opt,name=resource,proto3" json:"resource,omitempty"`
-	// an arbitrary map for tags, this stores some useful information that can help the decision
-	Tags                 map[string]string `protobuf:"bytes,3,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
-	XXX_unrecognized     []byte            `json:"-"`
-	XXX_sizecache        int32             `json:"-"`
-}
-
-func (m *OutstandingResourceRequest) Reset()         { *m = OutstandingResourceRequest{} }
-func (m *OutstandingResourceRequest) String() string { return proto.CompactTextString(m) }
-func (*OutstandingResourceRequest) ProtoMessage()    {}
-func (*OutstandingResourceRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_bcd2636ebca16c8c, []int{39}
-}
-
-func (m *OutstandingResourceRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_OutstandingResourceRequest.Unmarshal(m, b)
-}
-func (m *OutstandingResourceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_OutstandingResourceRequest.Marshal(b, m, deterministic)
-}
-func (m *OutstandingResourceRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_OutstandingResourceRequest.Merge(m, src)
-}
-func (m *OutstandingResourceRequest) XXX_Size() int {
-	return xxx_messageInfo_OutstandingResourceRequest.Size(m)
-}
-func (m *OutstandingResourceRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_OutstandingResourceRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_OutstandingResourceRequest proto.InternalMessageInfo
-
-func (m *OutstandingResourceRequest) GetRequestID() string {
-	if m != nil {
-		return m.RequestID
-	}
-	return ""
-}
-
-func (m *OutstandingResourceRequest) GetResource() *Resource {
-	if m != nil {
-		return m.Resource
-	}
-	return nil
-}
-
-func (m *OutstandingResourceRequest) GetTags() map[string]string {
-	if m != nil {
-		return m.Tags
-	}
-	return nil
-}
-
 var E_SiSecret = &proto.ExtensionDesc{
 	ExtendedType:  (*descriptor.FieldOptions)(nil),
 	ExtensionType: (*bool)(nil),
@@ -2811,7 +2250,6 @@
 func init() {
 	proto.RegisterEnum("si.v1.TerminationType", TerminationType_name, TerminationType_value)
 	proto.RegisterEnum("si.v1.UpdateResponse_ActionFromScheduler", UpdateResponse_ActionFromScheduler_name, UpdateResponse_ActionFromScheduler_value)
-	proto.RegisterEnum("si.v1.AffinityTargetExpression_AffinityTargetOperator", AffinityTargetExpression_AffinityTargetOperator_name, AffinityTargetExpression_AffinityTargetOperator_value)
 	proto.RegisterEnum("si.v1.UpdateNodeInfo_ActionFromRM", UpdateNodeInfo_ActionFromRM_name, UpdateNodeInfo_ActionFromRM_value)
 	proto.RegisterEnum("si.v1.UpdateContainerSchedulingStateRequest_SchedulingState", UpdateContainerSchedulingStateRequest_SchedulingState_name, UpdateContainerSchedulingStateRequest_SchedulingState_value)
 	proto.RegisterEnum("si.v1.EventRecord_Type", EventRecord_Type_name, EventRecord_Type_value)
@@ -2834,11 +2272,6 @@
 	proto.RegisterMapType((map[string]string)(nil), "si.v1.AddApplicationRequest.TagsEntry")
 	proto.RegisterType((*RemoveApplicationRequest)(nil), "si.v1.RemoveApplicationRequest")
 	proto.RegisterType((*UserGroupInformation)(nil), "si.v1.UserGroupInformation")
-	proto.RegisterType((*PlacementConstraint)(nil), "si.v1.PlacementConstraint")
-	proto.RegisterType((*SimplePlacementConstraint)(nil), "si.v1.SimplePlacementConstraint")
-	proto.RegisterType((*NodeAffinityConstraints)(nil), "si.v1.NodeAffinityConstraints")
-	proto.RegisterType((*AllocationAffinityConstraints)(nil), "si.v1.AllocationAffinityConstraints")
-	proto.RegisterType((*AffinityTargetExpression)(nil), "si.v1.AffinityTargetExpression")
 	proto.RegisterType((*Allocation)(nil), "si.v1.Allocation")
 	proto.RegisterMapType((map[string]string)(nil), "si.v1.Allocation.AllocationTagsEntry")
 	proto.RegisterType((*AllocationReleasesRequest)(nil), "si.v1.AllocationReleasesRequest")
@@ -2848,9 +2281,7 @@
 	proto.RegisterMapType((map[string]string)(nil), "si.v1.NewNodeInfo.AttributesEntry")
 	proto.RegisterType((*UpdateNodeInfo)(nil), "si.v1.UpdateNodeInfo")
 	proto.RegisterMapType((map[string]string)(nil), "si.v1.UpdateNodeInfo.AttributesEntry")
-	proto.RegisterType((*UtilizationReport)(nil), "si.v1.UtilizationReport")
 	proto.RegisterType((*RejectedAllocationAsk)(nil), "si.v1.RejectedAllocationAsk")
-	proto.RegisterType((*NodeRecommendation)(nil), "si.v1.NodeRecommendation")
 	proto.RegisterType((*PredicatesArgs)(nil), "si.v1.PredicatesArgs")
 	proto.RegisterType((*ReSyncSchedulerCacheArgs)(nil), "si.v1.ReSyncSchedulerCacheArgs")
 	proto.RegisterType((*AssumedAllocation)(nil), "si.v1.AssumedAllocation")
@@ -2859,9 +2290,6 @@
 	proto.RegisterType((*UpdateConfigurationRequest)(nil), "si.v1.UpdateConfigurationRequest")
 	proto.RegisterType((*UpdateConfigurationResponse)(nil), "si.v1.UpdateConfigurationResponse")
 	proto.RegisterType((*EventRecord)(nil), "si.v1.EventRecord")
-	proto.RegisterType((*AutoScalingMetrics)(nil), "si.v1.AutoScalingMetrics")
-	proto.RegisterType((*OutstandingResourceRequest)(nil), "si.v1.OutstandingResourceRequest")
-	proto.RegisterMapType((map[string]string)(nil), "si.v1.OutstandingResourceRequest.TagsEntry")
 	proto.RegisterExtension(E_SiSecret)
 }
 
@@ -2870,169 +2298,138 @@
 }
 
 var fileDescriptor_bcd2636ebca16c8c = []byte{
-	// 2583 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcd, 0x72, 0xdb, 0xc8,
-	0xf1, 0x17, 0x48, 0x4a, 0x22, 0x9b, 0x12, 0x45, 0x0d, 0x65, 0x99, 0xd6, 0xee, 0x7a, 0xb5, 0xa8,
-	0xb5, 0x4a, 0xff, 0xff, 0x96, 0xe9, 0x58, 0xa9, 0xca, 0xae, 0x3f, 0x92, 0x0d, 0x25, 0x42, 0x16,
-	0x63, 0x89, 0xa4, 0x87, 0xa4, 0x93, 0xcd, 0x45, 0x05, 0x81, 0x23, 0x1a, 0x16, 0x09, 0xd0, 0x33,
-	0x80, 0x6c, 0x25, 0x0f, 0x90, 0x4b, 0xee, 0xb9, 0x27, 0x55, 0x39, 0x24, 0xd7, 0x3c, 0x40, 0xf2,
-	0x04, 0xc9, 0x3d, 0x97, 0xa4, 0x2a, 0xd7, 0xad, 0xe4, 0x9e, 0x4b, 0x6a, 0x06, 0x03, 0x10, 0x5f,
-	0xb4, 0x68, 0xef, 0xa6, 0x2a, 0x37, 0x4c, 0xe3, 0xd7, 0x8d, 0x9e, 0xee, 0x9e, 0xee, 0x9e, 0x26,
-	0xe1, 0x9e, 0x69, 0x19, 0xee, 0x99, 0xee, 0xd8, 0xf4, 0xee, 0x95, 0x6b, 0x99, 0x17, 0x36, 0xb5,
-	0xee, 0x32, 0xe3, 0x05, 0x19, 0xb8, 0x23, 0x42, 0xef, 0x9a, 0x96, 0x43, 0xe8, 0xb9, 0x6e, 0x90,
-	0x7b, 0xcc, 0xac, 0x4d, 0xa8, 0xed, 0xd8, 0x68, 0x91, 0x99, 0xb5, 0xcb, 0xfb, 0x5b, 0xdb, 0x43,
-	0xdb, 0x1e, 0x8e, 0xc8, 0x3d, 0x41, 0x3c, 0x73, 0xcf, 0xef, 0x0d, 0x08, 0x33, 0xa8, 0x39, 0x71,
-	0x6c, 0xea, 0x01, 0xd5, 0x09, 0xdc, 0xc6, 0x64, 0x68, 0x32, 0x87, 0x50, 0x4c, 0x98, 0xed, 0x52,
-	0x83, 0x9c, 0xe8, 0x96, 0x3e, 0xe4, 0xcb, 0x57, 0x2e, 0x61, 0x0e, 0x42, 0x90, 0xa3, 0xe3, 0x66,
-	0xa3, 0xaa, 0x6c, 0x2b, 0xbb, 0x05, 0x2c, 0x9e, 0x51, 0x15, 0x96, 0x2f, 0x09, 0x65, 0xa6, 0x6d,
-	0x55, 0x33, 0x82, 0xec, 0x2f, 0xd1, 0x36, 0x14, 0x27, 0xf6, 0xc8, 0x34, 0xae, 0x9e, 0x50, 0xdb,
-	0x9d, 0x54, 0xb3, 0xe2, 0x6d, 0x98, 0xa4, 0x7e, 0x02, 0x1f, 0xcf, 0xfc, 0x22, 0x9b, 0xd8, 0x16,
-	0x23, 0xea, 0x3f, 0xb3, 0xb0, 0xda, 0x9f, 0x0c, 0x74, 0x87, 0xf8, 0x4a, 0xec, 0x42, 0x4e, 0x67,
-	0x17, 0xac, 0xaa, 0x6c, 0x67, 0x77, 0x8b, 0x7b, 0x1b, 0x35, 0xb1, 0xbd, 0x5a, 0x7d, 0x34, 0xb2,
-	0x0d, 0xdd, 0x31, 0x6d, 0xab, 0xce, 0x2e, 0xb0, 0x40, 0xa0, 0xc7, 0x90, 0xa7, 0x64, 0x44, 0x74,
-	0x46, 0x98, 0xd0, 0xad, 0xb8, 0xb7, 0x9d, 0x40, 0x63, 0x09, 0x90, 0xd2, 0x71, 0xc0, 0x81, 0x1a,
-	0x50, 0xb1, 0xc8, 0xeb, 0xae, 0x67, 0x5a, 0xfd, 0x6c, 0x44, 0x5a, 0xf6, 0x80, 0xb0, 0x6a, 0x56,
-	0x7c, 0x16, 0x49, 0x41, 0x2d, 0xf2, 0x9a, 0x93, 0x9b, 0xd6, 0xb9, 0x8d, 0xd3, 0xe0, 0xe8, 0x01,
-	0xac, 0xb8, 0x42, 0xfd, 0x81, 0xc7, 0x9e, 0x13, 0xec, 0x37, 0x24, 0xbb, 0xb7, 0xb3, 0x40, 0x42,
-	0x04, 0x8a, 0x8e, 0x00, 0xb9, 0x8e, 0x39, 0x32, 0x7f, 0x26, 0x15, 0x9d, 0xd8, 0xd4, 0x61, 0xd5,
-	0x45, 0x21, 0xa0, 0xea, 0x0b, 0x88, 0x03, 0x70, 0x0a, 0x4f, 0xe0, 0xb7, 0xa5, 0x90, 0xdf, 0x0e,
-	0x61, 0xcd, 0x22, 0xaf, 0xeb, 0x93, 0xc9, 0xc8, 0xf4, 0x2c, 0xc1, 0xaa, 0x79, 0x21, 0xfa, 0x43,
-	0xdf, 0x46, 0x83, 0x41, 0xe8, 0xad, 0x6f, 0x9f, 0x38, 0x13, 0x6a, 0x03, 0xa2, 0x64, 0x6c, 0x5f,
-	0x92, 0x88, 0xa8, 0x82, 0x10, 0xf5, 0xb1, 0x14, 0x85, 0xe3, 0x00, 0x5f, 0x5a, 0x0a, 0xab, 0xfa,
-	0xb7, 0x25, 0x28, 0xf9, 0x1e, 0xf7, 0x82, 0x00, 0xd5, 0x61, 0x49, 0x37, 0xf8, 0x5b, 0x11, 0x79,
-	0xa5, 0xbd, 0xff, 0x8b, 0x98, 0xcf, 0x87, 0xd5, 0xea, 0x02, 0x73, 0x48, 0xed, 0x71, 0xd7, 0x3f,
-	0x10, 0x58, 0x32, 0xa2, 0x07, 0x50, 0xe2, 0x9a, 0x07, 0x7e, 0xe7, 0x11, 0xc1, 0x55, 0x5c, 0x4f,
-	0x46, 0x44, 0x0c, 0x88, 0x7e, 0x04, 0x15, 0x19, 0x14, 0x83, 0x30, 0x7f, 0x36, 0xe2, 0x88, 0x44,
-	0x44, 0xe1, 0x34, 0x26, 0xd4, 0x85, 0xcd, 0x24, 0xb9, 0xce, 0xc3, 0xd9, 0x0b, 0x8c, 0x0f, 0x52,
-	0xc3, 0x59, 0x4a, 0x9c, 0xc1, 0x8a, 0x5a, 0x5c, 0xc1, 0x97, 0xc4, 0x70, 0xa2, 0x0a, 0x2e, 0x46,
-	0xdc, 0x89, 0x13, 0x08, 0x2e, 0x39, 0x8d, 0x11, 0x3d, 0x85, 0x8a, 0x65, 0x0f, 0x08, 0x26, 0x86,
-	0x3d, 0x1e, 0x13, 0x6b, 0x20, 0xe5, 0x2d, 0x09, 0x79, 0xb7, 0xfc, 0xc8, 0x4f, 0x20, 0x70, 0x1a,
-	0x17, 0x6a, 0xc1, 0x46, 0xf0, 0x8d, 0x70, 0x84, 0x2c, 0x0b, 0x69, 0x5b, 0x71, 0xed, 0x42, 0x31,
-	0x92, 0xca, 0xc7, 0xe5, 0xe9, 0x86, 0x41, 0x26, 0x71, 0x79, 0xf9, 0x88, 0xbc, 0x7a, 0x12, 0x82,
-	0x53, 0xf9, 0xf8, 0x66, 0xe5, 0xa9, 0x4b, 0x09, 0xe0, 0x5b, 0x91, 0x40, 0x8b, 0x48, 0x4b, 0xe3,
-	0x42, 0x0f, 0x60, 0xd5, 0x57, 0xda, 0x3b, 0xee, 0x20, 0xc4, 0x54, 0x62, 0xbb, 0x14, 0xb6, 0x8b,
-	0x22, 0x39, 0xab, 0xaf, 0x9f, 0xc7, 0x5a, 0x8c, 0xb0, 0xd6, 0x43, 0xef, 0x70, 0x14, 0xa9, 0xde,
-	0x83, 0x4a, 0x4a, 0xe8, 0xa3, 0x15, 0xc8, 0xb7, 0xda, 0xf5, 0x83, 0x5e, 0xb3, 0xdd, 0x2a, 0x2f,
-	0x20, 0x80, 0x25, 0xac, 0x75, 0xbf, 0x6a, 0x1d, 0x94, 0x15, 0xf5, 0xb7, 0x0a, 0xa0, 0xe4, 0x96,
-	0xd0, 0xa7, 0xb0, 0xaa, 0x4f, 0x97, 0x41, 0x9e, 0x8f, 0x12, 0xd1, 0x06, 0x2c, 0x32, 0x47, 0x77,
-	0x88, 0x4c, 0xf7, 0xde, 0x02, 0x3d, 0x84, 0xaa, 0x78, 0xe8, 0x51, 0xdd, 0x62, 0x26, 0x87, 0xf6,
-	0xcc, 0x31, 0x61, 0x8e, 0x3e, 0xf6, 0x32, 0x7f, 0x16, 0xcf, 0x7c, 0xcf, 0x4b, 0xc8, 0x98, 0x30,
-	0xa6, 0x0f, 0x49, 0x35, 0xe7, 0x95, 0x10, 0xb9, 0x54, 0xbb, 0x50, 0x49, 0x89, 0x8c, 0x39, 0x15,
-	0xdd, 0x84, 0x25, 0x4a, 0x74, 0x16, 0x14, 0x26, 0xb9, 0x52, 0x1f, 0x71, 0x73, 0x25, 0x22, 0x61,
-	0x3e, 0xa1, 0xea, 0x0f, 0x60, 0x25, 0xec, 0x45, 0xfe, 0x11, 0x1e, 0xf5, 0x01, 0x5c, 0xae, 0x66,
-	0x7e, 0x7c, 0x07, 0x56, 0xc2, 0xae, 0x9c, 0xc5, 0xaf, 0x5a, 0x90, 0xef, 0x50, 0xd3, 0xa6, 0xa6,
-	0x73, 0x85, 0x76, 0x60, 0x75, 0x22, 0x9f, 0x9f, 0xeb, 0x23, 0x97, 0x08, 0xe8, 0xe2, 0xd1, 0x02,
-	0x8e, 0x92, 0x51, 0x0d, 0xd6, 0x7d, 0xc2, 0xc1, 0x48, 0x67, 0xac, 0xa5, 0x8f, 0xa5, 0x97, 0x8e,
-	0x16, 0x70, 0xf2, 0xd5, 0x3e, 0x40, 0xde, 0x27, 0xaa, 0xbf, 0x52, 0x20, 0xef, 0xd7, 0x60, 0xf4,
-	0x18, 0x0a, 0x54, 0x3e, 0xfb, 0x75, 0xf6, 0x76, 0x10, 0xc2, 0x1e, 0x3d, 0x78, 0x60, 0x9a, 0xe5,
-	0xd0, 0x2b, 0x3c, 0x65, 0xd8, 0x3a, 0x81, 0x52, 0xf4, 0x25, 0x2a, 0x43, 0xf6, 0x82, 0x5c, 0xc9,
-	0x1d, 0xf2, 0x47, 0x74, 0x07, 0x16, 0x2f, 0xc5, 0x56, 0xbc, 0xba, 0xbc, 0x26, 0xa5, 0x3f, 0x73,
-	0x75, 0xcb, 0x31, 0x9d, 0x2b, 0xec, 0xbd, 0x7d, 0x98, 0xf9, 0x42, 0x51, 0xb7, 0x21, 0xef, 0x93,
-	0x79, 0xec, 0x5d, 0x06, 0x16, 0xc8, 0x4a, 0x94, 0xfa, 0x97, 0x1c, 0xac, 0x46, 0xd2, 0x9a, 0xf0,
-	0x65, 0x40, 0x78, 0x1a, 0x7c, 0x3a, 0x4a, 0x4c, 0x7a, 0x3c, 0x93, 0x16, 0x46, 0x9f, 0xc2, 0xea,
-	0x44, 0xa7, 0x8e, 0x88, 0x59, 0x61, 0x51, 0xaf, 0x91, 0x89, 0x12, 0xd1, 0x7d, 0x28, 0xfa, 0x16,
-	0xa8, 0xb3, 0x0b, 0x11, 0xc7, 0xd3, 0x6d, 0xf9, 0xe6, 0xc0, 0x61, 0x0c, 0xda, 0x81, 0xd2, 0x58,
-	0x7f, 0x13, 0xcd, 0xd8, 0xca, 0xee, 0x22, 0x8e, 0x51, 0xd1, 0x67, 0x53, 0x37, 0x89, 0x0a, 0x3e,
-	0x95, 0xeb, 0x47, 0x08, 0x0e, 0x00, 0x68, 0x1f, 0x3e, 0x24, 0x6f, 0x88, 0xe1, 0xfa, 0x27, 0xcc,
-	0x76, 0x9d, 0x13, 0x73, 0x34, 0x32, 0xbb, 0xc4, 0xb0, 0xad, 0x01, 0x4f, 0xbb, 0xdc, 0x70, 0x6f,
-	0xc5, 0xa0, 0x3d, 0xc8, 0x39, 0xfa, 0xd0, 0x4f, 0xa9, 0xb7, 0xd3, 0x4a, 0x52, 0xad, 0xa7, 0x0f,
-	0xa5, 0xe7, 0x05, 0x16, 0x1d, 0x43, 0x65, 0x32, 0xd2, 0x0d, 0x32, 0x26, 0x96, 0x73, 0x60, 0x5b,
-	0xcc, 0xa1, 0xba, 0x69, 0x39, 0xd5, 0x82, 0xd0, 0xd7, 0xcf, 0xca, 0x9d, 0x24, 0x02, 0xa7, 0xb1,
-	0x71, 0x9b, 0x3b, 0x3a, 0xbb, 0x10, 0x5d, 0xa2, 0xb0, 0x39, 0x78, 0x36, 0x8f, 0x10, 0x45, 0x83,
-	0xc9, 0x99, 0x5f, 0xd8, 0xa3, 0x01, 0xa1, 0xd5, 0xe2, 0xb6, 0xb2, 0x9b, 0xc7, 0x61, 0xd2, 0xd6,
-	0xe7, 0x50, 0x08, 0x14, 0x4d, 0x89, 0xc2, 0x8d, 0x70, 0x14, 0x16, 0xc2, 0x41, 0xf7, 0xeb, 0x2c,
-	0xdc, 0x48, 0x6d, 0x80, 0xe6, 0xcc, 0x3d, 0x1f, 0x42, 0xe1, 0x95, 0x4b, 0x5c, 0x32, 0x3d, 0x82,
-	0x78, 0x4a, 0x98, 0x33, 0xa4, 0xee, 0x42, 0xd6, 0x1d, 0x9a, 0x32, 0x94, 0xfc, 0xc6, 0xa0, 0xcf,
-	0x08, 0x15, 0x16, 0xe0, 0x0d, 0x23, 0x1d, 0x7b, 0xaa, 0x71, 0x1c, 0x7a, 0x28, 0xbd, 0xe6, 0x95,
-	0xfd, 0x9d, 0xb7, 0x75, 0x71, 0x09, 0xef, 0x5d, 0x17, 0x35, 0x4b, 0x73, 0x44, 0xcd, 0xe7, 0x50,
-	0x0a, 0x99, 0x9e, 0x1f, 0x82, 0xe5, 0xf4, 0x43, 0x10, 0x83, 0xbd, 0xbf, 0x93, 0xce, 0xa1, 0x3a,
-	0xab, 0xb3, 0x9c, 0xd3, 0x4d, 0x09, 0x47, 0x64, 0x52, 0x1c, 0xa1, 0xee, 0xc3, 0x46, 0x9a, 0xd9,
-	0x79, 0x5b, 0xed, 0x32, 0x42, 0xfd, 0xeb, 0x10, 0x7f, 0xe6, 0xf9, 0x7c, 0xc8, 0x71, 0x5e, 0x7f,
-	0x59, 0xc0, 0x72, 0xa5, 0x32, 0xa8, 0xa4, 0x44, 0x3f, 0x6a, 0x41, 0x99, 0x99, 0xe3, 0xc9, 0x88,
-	0x84, 0xce, 0x8c, 0x12, 0xb9, 0xaa, 0x74, 0xc5, 0xeb, 0x14, 0xde, 0xa3, 0x05, 0x9c, 0xe0, 0xdd,
-	0x5f, 0x01, 0x30, 0x82, 0x95, 0xfa, 0x57, 0x05, 0x6e, 0xcd, 0xe4, 0x47, 0xcf, 0x61, 0x93, 0x17,
-	0x9b, 0xfa, 0xf9, 0xb9, 0x69, 0xf1, 0xba, 0x10, 0xd7, 0xe0, 0x76, 0xa8, 0xd3, 0x4b, 0x82, 0x18,
-	0x9e, 0xc1, 0x8d, 0xce, 0xe1, 0x83, 0x69, 0x9e, 0xf5, 0xdf, 0xd7, 0x1d, 0x87, 0x9a, 0x67, 0xae,
-	0xe3, 0x67, 0xfc, 0x4f, 0x93, 0x59, 0x25, 0xe5, 0x13, 0x6f, 0x13, 0xa4, 0xbe, 0x80, 0x9b, 0x33,
-	0x54, 0x43, 0x27, 0xb0, 0xee, 0xe8, 0x74, 0x48, 0x1c, 0xed, 0xcd, 0x84, 0x12, 0xc6, 0x42, 0x0d,
-	0xbf, 0x7f, 0x27, 0xf1, 0xd9, 0x7a, 0x31, 0x1c, 0x4e, 0x72, 0xaa, 0xff, 0x52, 0xe0, 0xa3, 0xb7,
-	0x2a, 0x2a, 0x9a, 0x22, 0xc3, 0x9e, 0x10, 0x19, 0x0b, 0xde, 0x42, 0xa8, 0x41, 0xf5, 0xf7, 0x55,
-	0x23, 0xce, 0x29, 0x0a, 0x86, 0x69, 0x1d, 0xe8, 0x74, 0x60, 0x5a, 0xfa, 0x88, 0x97, 0x83, 0xac,
-	0x2c, 0x18, 0x11, 0xaa, 0x2c, 0x2c, 0x61, 0x5c, 0x2e, 0x28, 0x2c, 0x61, 0xdc, 0x16, 0xbf, 0x1f,
-	0xbf, 0x72, 0x4d, 0x4a, 0x06, 0xa2, 0xf4, 0xe4, 0x71, 0xb0, 0x56, 0xbf, 0x56, 0xa0, 0x3a, 0x4b,
-	0x37, 0xf4, 0x04, 0x4a, 0x9e, 0x91, 0xda, 0x13, 0x42, 0x75, 0xc7, 0xa6, 0x32, 0x62, 0xae, 0xdd,
-	0x54, 0x8c, 0x8d, 0xa7, 0x49, 0x8f, 0xc2, 0x6b, 0xb4, 0x4c, 0x93, 0x01, 0x01, 0xa9, 0xb0, 0xe2,
-	0x2d, 0x44, 0x7b, 0xe3, 0xdd, 0xb8, 0x0a, 0x38, 0x42, 0x53, 0x0f, 0x61, 0x33, 0xfa, 0xb5, 0x40,
-	0xf6, 0x12, 0x64, 0x9a, 0xb2, 0xf1, 0x6d, 0xb5, 0x7b, 0xa7, 0xcd, 0x56, 0x59, 0x41, 0x05, 0x58,
-	0xd4, 0x7e, 0xd2, 0xec, 0xf6, 0xca, 0x19, 0xb4, 0x0a, 0x05, 0x4e, 0xf6, 0x96, 0x59, 0xf5, 0x97,
-	0x39, 0x80, 0xa9, 0x8b, 0xe7, 0x6c, 0x20, 0x4e, 0xa0, 0x34, 0x25, 0xf0, 0x1c, 0x26, 0x9d, 0x7b,
-	0x27, 0x11, 0xdc, 0xa1, 0xc7, 0x69, 0xee, 0x8d, 0x31, 0xf3, 0x7c, 0xd2, 0xef, 0x37, 0x1b, 0xb2,
-	0x1a, 0x88, 0x67, 0xf4, 0x08, 0xca, 0x7e, 0xcf, 0xd0, 0x21, 0x54, 0x48, 0x11, 0xbe, 0x4a, 0xc9,
-	0xab, 0x09, 0xe0, 0xbb, 0x75, 0x0e, 0x91, 0x92, 0xb5, 0x1c, 0x2f, 0x59, 0xd3, 0x3e, 0x35, 0x1f,
-	0xe9, 0x73, 0x13, 0x79, 0xb6, 0x30, 0x57, 0x9e, 0x85, 0xb4, 0x82, 0x97, 0xa8, 0xfa, 0xc5, 0x39,
-	0xaa, 0xfe, 0x4a, 0xb2, 0xea, 0xd7, 0xa1, 0x92, 0x62, 0xee, 0x77, 0x2a, 0x2d, 0x7f, 0x54, 0xe0,
-	0xd6, 0xcc, 0x21, 0x11, 0x3a, 0x86, 0x8d, 0xa9, 0xeb, 0x58, 0xcf, 0x96, 0xef, 0x65, 0xab, 0x3c,
-	0x7b, 0x24, 0x90, 0xca, 0x85, 0xfa, 0x70, 0x53, 0x8f, 0x5c, 0xe8, 0xa7, 0x02, 0x33, 0xd7, 0x0f,
-	0x05, 0x66, 0xf1, 0xaa, 0x7f, 0x56, 0x60, 0x3d, 0xa1, 0x42, 0xd2, 0x13, 0xca, 0x0c, 0x4f, 0xcc,
-	0xd1, 0x19, 0xa7, 0xc5, 0xeb, 0x0f, 0x61, 0xcd, 0x21, 0x74, 0x6c, 0x5a, 0x9e, 0xf1, 0xaf, 0x26,
-	0xde, 0x9d, 0xae, 0xb4, 0xb7, 0x29, 0x37, 0xd1, 0x8b, 0xbe, 0xc5, 0x71, 0x78, 0xf8, 0x36, 0xb8,
-	0x18, 0xbd, 0x0d, 0xfe, 0x43, 0x81, 0x8d, 0x34, 0x1b, 0x7c, 0xab, 0x9b, 0x8a, 0x9c, 0x7c, 0x1e,
-	0x2f, 0xd9, 0xf8, 0xc9, 0xe7, 0x91, 0xf3, 0xdf, 0xdc, 0xe6, 0xd7, 0x19, 0x28, 0x86, 0xe6, 0x8a,
-	0x33, 0xaf, 0x98, 0xfb, 0x00, 0xba, 0x5f, 0x0c, 0xfd, 0xcc, 0xa3, 0x26, 0xe7, 0x92, 0xb5, 0xa0,
-	0x62, 0xca, 0xb4, 0x13, 0xe2, 0x42, 0x75, 0xa8, 0xb0, 0xe9, 0xc8, 0xd2, 0x4f, 0x25, 0x62, 0xcf,
-	0x29, 0x19, 0x26, 0x0d, 0xcb, 0x33, 0x94, 0x6d, 0x18, 0xee, 0xc4, 0x24, 0x83, 0x80, 0x7f, 0xc6,
-	0xf5, 0x27, 0x01, 0x44, 0x07, 0x50, 0x21, 0x6f, 0x4c, 0xe6, 0x98, 0xd6, 0x30, 0x39, 0xba, 0x4a,
-	0x99, 0xcd, 0xa5, 0xa1, 0xb7, 0xbe, 0x0f, 0x6b, 0xb1, 0x3d, 0xbe, 0xd3, 0x59, 0xff, 0x53, 0xd6,
-	0x1f, 0x38, 0x5e, 0x6b, 0x72, 0x2d, 0xc5, 0xe4, 0x77, 0x52, 0x67, 0xb9, 0xff, 0xd3, 0x56, 0x7f,
-	0x18, 0xcc, 0x53, 0x17, 0x45, 0xd0, 0xaa, 0x33, 0xb6, 0x10, 0x0c, 0x95, 0xf0, 0x89, 0x3f, 0x48,
-	0xfd, 0xa6, 0xc6, 0xee, 0xc3, 0x4a, 0x58, 0x2c, 0xaf, 0xce, 0xfd, 0x4e, 0xa3, 0xde, 0xd3, 0xca,
-	0x0b, 0xa8, 0x04, 0xd0, 0xc0, 0xf5, 0x66, 0xeb, 0xb4, 0xd5, 0x6e, 0x68, 0x65, 0x05, 0xad, 0x41,
-	0xb1, 0xa1, 0x1d, 0xb4, 0x4f, 0x9a, 0xdd, 0x6e, 0xb3, 0xdd, 0x2a, 0x67, 0x50, 0x15, 0x36, 0x3c,
-	0x40, 0xaf, 0x7d, 0xda, 0x3d, 0x38, 0xd2, 0x1a, 0xfd, 0xe3, 0xfa, 0xfe, 0xb1, 0x56, 0xce, 0xaa,
-	0x03, 0x58, 0x4f, 0x8c, 0xc2, 0x51, 0x09, 0x32, 0x81, 0x07, 0x33, 0xcd, 0x06, 0xfa, 0x12, 0x90,
-	0x6e, 0x38, 0xae, 0x3e, 0xea, 0xb3, 0x90, 0xd5, 0x32, 0xe9, 0x56, 0x4b, 0x81, 0xaa, 0x3f, 0x87,
-	0x1b, 0xa9, 0x63, 0xd4, 0x6f, 0x75, 0xde, 0x30, 0x9d, 0x1c, 0x65, 0x23, 0x93, 0xa3, 0x5f, 0x28,
-	0x80, 0x92, 0x43, 0x57, 0xf4, 0x63, 0xb8, 0x4d, 0x7d, 0x0a, 0x19, 0x74, 0x53, 0xc2, 0x4a, 0x49,
-	0xdf, 0xe0, 0x35, 0x6c, 0xe1, 0x04, 0x95, 0x89, 0x26, 0xa8, 0x97, 0x50, 0xea, 0x50, 0x32, 0xe0,
-	0x2a, 0x13, 0x56, 0xa7, 0x43, 0x36, 0xe7, 0xfe, 0xa7, 0xa7, 0x2a, 0x13, 0x39, 0x55, 0x5b, 0x90,
-	0x97, 0x40, 0xef, 0x0c, 0xe4, 0x71, 0xb0, 0x56, 0x7f, 0xaf, 0xf0, 0x4b, 0x5e, 0xf7, 0xca, 0x32,
-	0x82, 0xc1, 0xe6, 0x81, 0x6e, 0xbc, 0x20, 0xe2, 0xb3, 0x47, 0x80, 0x74, 0xc6, 0xdc, 0x71, 0x74,
-	0xee, 0x1d, 0xab, 0xc2, 0x71, 0x00, 0x4e, 0xe1, 0x41, 0x1a, 0xac, 0x9f, 0xdb, 0xbc, 0x7d, 0x4c,
-	0xfe, 0x42, 0x70, 0x53, 0x0a, 0x3a, 0xb4, 0xe9, 0xd0, 0x0e, 0xbd, 0xc7, 0x49, 0x0e, 0xf5, 0x19,
-	0xac, 0x27, 0xbe, 0xf7, 0xcd, 0x8c, 0xa3, 0x7e, 0x01, 0xe5, 0xf8, 0x97, 0xe7, 0x93, 0xa8, 0xfe,
-	0x2e, 0x03, 0x77, 0xbc, 0x13, 0x7d, 0x60, 0x5b, 0x8e, 0x6e, 0x5a, 0x84, 0x4a, 0x1b, 0x9a, 0xd6,
-	0xb0, 0xeb, 0x84, 0x7e, 0x52, 0xdb, 0x81, 0x92, 0x8c, 0x41, 0x1a, 0xb9, 0x2d, 0xc7, 0xa8, 0xc9,
-	0xef, 0x66, 0xd2, 0x76, 0x82, 0xfd, 0x01, 0x71, 0x56, 0x24, 0x97, 0xc7, 0x91, 0xe4, 0x72, 0x8d,
-	0x2a, 0xb5, 0x38, 0x59, 0x8e, 0x97, 0xa7, 0x87, 0x22, 0x17, 0x39, 0x14, 0x4f, 0x60, 0x2d, 0xc6,
-	0x81, 0x8a, 0xb0, 0xdc, 0x7d, 0xda, 0xec, 0x74, 0xb4, 0x46, 0x79, 0x81, 0x77, 0xf9, 0x32, 0x51,
-	0x68, 0x8d, 0xb2, 0x82, 0x56, 0x20, 0x8f, 0xb5, 0xae, 0x86, 0x9f, 0x6b, 0x8d, 0x72, 0x86, 0xe7,
-	0x9e, 0xc3, 0x7a, 0x93, 0xbf, 0xc9, 0xaa, 0xdf, 0x83, 0xad, 0x40, 0xc1, 0x73, 0x73, 0xe8, 0xd2,
-	0xc8, 0x34, 0xa1, 0x0a, 0xcb, 0x86, 0xa0, 0x33, 0x69, 0x19, 0x7f, 0xa9, 0x8e, 0xe1, 0x83, 0x54,
-	0x3e, 0xf9, 0xcb, 0x55, 0x15, 0x96, 0x99, 0x6b, 0x18, 0x84, 0x79, 0x8c, 0x79, 0xec, 0x2f, 0x79,
-	0xbb, 0x6d, 0x8f, 0x06, 0x1e, 0x97, 0x7f, 0xf5, 0x09, 0x08, 0x33, 0x93, 0xc0, 0xbf, 0x15, 0x28,
-	0x6a, 0x97, 0xc4, 0x72, 0x78, 0x16, 0xa0, 0x03, 0xf4, 0x19, 0xe4, 0x9c, 0x2b, 0x79, 0xed, 0x2c,
-	0x05, 0xa1, 0x1a, 0x42, 0xd4, 0x44, 0xf7, 0x21, 0x40, 0xfc, 0x9c, 0xd9, 0x67, 0x3c, 0x7d, 0x05,
-	0x41, 0x16, 0xac, 0xb9, 0xa2, 0x62, 0x52, 0x11, 0xb4, 0x73, 0xfe, 0x72, 0x96, 0xe9, 0x67, 0x37,
-	0x30, 0xa2, 0x8f, 0xf7, 0x87, 0xfb, 0x2d, 0xdd, 0xb2, 0xe5, 0xf8, 0x28, 0x4a, 0x54, 0xef, 0x43,
-	0x4e, 0x34, 0x42, 0x45, 0x58, 0xc6, 0xda, 0xb3, 0xbe, 0xd6, 0xed, 0x95, 0x17, 0xd0, 0x32, 0x64,
-	0xeb, 0x9d, 0x4e, 0x59, 0x41, 0x79, 0xc8, 0x89, 0x2a, 0x90, 0xe1, 0x77, 0xb6, 0x67, 0x7d, 0xad,
-	0xcf, 0xb3, 0xbc, 0x09, 0xa8, 0xee, 0x3a, 0x76, 0xd7, 0xd0, 0xb9, 0xbb, 0x4f, 0x88, 0x43, 0x4d,
-	0x83, 0xa1, 0x2e, 0x54, 0x6c, 0xd7, 0x61, 0x8e, 0x6e, 0x0d, 0x4c, 0x6b, 0x28, 0x5d, 0xe6, 0xa7,
-	0x81, 0x4f, 0xa4, 0x49, 0xda, 0x61, 0x84, 0xcc, 0x80, 0xf2, 0x47, 0xc8, 0x34, 0x6e, 0xf5, 0xef,
-	0x0a, 0x6c, 0xcd, 0xe6, 0xe1, 0xde, 0xa3, 0xde, 0x63, 0x70, 0x58, 0xa6, 0x04, 0x7e, 0xef, 0xa2,
-	0xd7, 0x94, 0x97, 0x00, 0x80, 0xbe, 0x94, 0x73, 0x3b, 0xef, 0xf7, 0xc4, 0xcf, 0xae, 0xd5, 0x37,
-	0x3e, 0xbc, 0x7b, 0xef, 0xf9, 0xd9, 0xff, 0x0f, 0x61, 0x2d, 0xd6, 0xa6, 0xa2, 0x75, 0x58, 0xed,
-	0xf6, 0xda, 0xfc, 0xf0, 0x9c, 0xee, 0x7f, 0x75, 0x8a, 0x4f, 0xca, 0x0b, 0xdc, 0x3f, 0xbd, 0xe6,
-	0x89, 0xd6, 0xee, 0xf7, 0xca, 0x0a, 0xda, 0x82, 0xcd, 0x0e, 0xd6, 0xb4, 0x93, 0x4e, 0xcf, 0x43,
-	0xf8, 0x87, 0x0b, 0x7b, 0xd5, 0xb9, 0x73, 0x5c, 0x3f, 0xd0, 0x8e, 0xda, 0xc7, 0x0d, 0x0d, 0x9f,
-	0x62, 0x4d, 0xac, 0x1a, 0xe5, 0xec, 0xde, 0x1f, 0x14, 0x28, 0x4c, 0x7f, 0x97, 0x7a, 0x09, 0x37,
-	0x67, 0xfc, 0xea, 0x8f, 0xee, 0x04, 0x66, 0x7a, 0xdb, 0xff, 0x10, 0xb6, 0x76, 0xae, 0x83, 0xc9,
-	0x3f, 0x0f, 0x2c, 0xa0, 0x47, 0xb0, 0xe4, 0x1d, 0x4f, 0xb4, 0x11, 0xfb, 0xcd, 0xd8, 0x93, 0x74,
-	0x23, 0xf5, 0x97, 0x64, 0x75, 0x61, 0x57, 0xf9, 0x8e, 0xf2, 0xf0, 0x11, 0x14, 0x98, 0x79, 0xca,
-	0x88, 0x41, 0x89, 0x83, 0x3e, 0xaa, 0x79, 0x7f, 0xa0, 0xa8, 0xf9, 0x7f, 0xa0, 0xa8, 0x1d, 0x9a,
-	0x64, 0x34, 0x68, 0x4f, 0xbc, 0x5a, 0xf1, 0x9b, 0xbc, 0x57, 0xb8, 0x98, 0xd9, 0x15, 0xf8, 0xfd,
-	0xdc, 0x4f, 0x33, 0xcc, 0x3c, 0x5b, 0x12, 0xe8, 0xef, 0xfe, 0x27, 0x00, 0x00, 0xff, 0xff, 0xd1,
-	0x2d, 0xb5, 0xaa, 0xb6, 0x21, 0x00, 0x00,
+	// 2092 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0x4f, 0x73, 0x1b, 0x49,
+	0x15, 0xf7, 0xe8, 0x8f, 0x25, 0x3d, 0xd9, 0xb2, 0xdc, 0x76, 0x12, 0xad, 0x37, 0x64, 0xcd, 0xd4,
+	0xc6, 0x65, 0xd8, 0x8a, 0x4c, 0x4c, 0x15, 0xbb, 0x71, 0x02, 0xc5, 0xd8, 0x1a, 0xaf, 0x4d, 0x6c,
+	0x49, 0x69, 0x49, 0x5b, 0xb5, 0x5c, 0x5c, 0xe3, 0x51, 0x5b, 0x99, 0x58, 0x9a, 0xd1, 0x76, 0xcf,
+	0x38, 0x71, 0x71, 0xe3, 0xcc, 0x8d, 0x03, 0x77, 0x28, 0x38, 0xc0, 0x95, 0x0f, 0x00, 0x9f, 0x80,
+	0x2f, 0xc1, 0x95, 0x4f, 0xc0, 0x85, 0xea, 0x9e, 0x9e, 0xd1, 0xfc, 0x53, 0xac, 0xb0, 0x4b, 0x15,
+	0xb7, 0xe9, 0xd7, 0xbf, 0xf7, 0xba, 0xfb, 0xbd, 0x5f, 0xbf, 0x7e, 0xdd, 0x03, 0x7b, 0x96, 0x6d,
+	0x7a, 0x97, 0x86, 0xeb, 0xd0, 0x27, 0xb7, 0x9e, 0x6d, 0x5d, 0x3b, 0xd4, 0x7e, 0xc2, 0xcc, 0xd7,
+	0x64, 0xe8, 0x8d, 0x09, 0x7d, 0x62, 0xd9, 0x2e, 0xa1, 0x57, 0x86, 0x49, 0xf6, 0x98, 0xd5, 0x9c,
+	0x52, 0xc7, 0x75, 0x50, 0x91, 0x59, 0xcd, 0x9b, 0xa7, 0x5b, 0xdb, 0x23, 0xc7, 0x19, 0x8d, 0xc9,
+	0x9e, 0x10, 0x5e, 0x7a, 0x57, 0x7b, 0x43, 0xc2, 0x4c, 0x6a, 0x4d, 0x5d, 0x87, 0xfa, 0x40, 0x75,
+	0x0a, 0x8f, 0x30, 0x19, 0x59, 0xcc, 0x25, 0x14, 0x13, 0xe6, 0x78, 0xd4, 0x24, 0xe7, 0x86, 0x6d,
+	0x8c, 0x78, 0xf3, 0x1b, 0x8f, 0x30, 0x17, 0x21, 0x28, 0xd0, 0xc9, 0x69, 0xab, 0xa1, 0x6c, 0x2b,
+	0xbb, 0x15, 0x2c, 0xbe, 0x51, 0x03, 0x4a, 0x37, 0x84, 0x32, 0xcb, 0xb1, 0x1b, 0x39, 0x21, 0x0e,
+	0x9a, 0x68, 0x1b, 0xaa, 0x53, 0x67, 0x6c, 0x99, 0xb7, 0x5f, 0x52, 0xc7, 0x9b, 0x36, 0xf2, 0xa2,
+	0x37, 0x2a, 0x52, 0xbf, 0x0f, 0x9f, 0xcc, 0x1d, 0x91, 0x4d, 0x1d, 0x9b, 0x11, 0xf5, 0x8f, 0x79,
+	0x58, 0x1d, 0x4c, 0x87, 0x86, 0x4b, 0x82, 0x49, 0xec, 0x42, 0xc1, 0x60, 0xd7, 0xac, 0xa1, 0x6c,
+	0xe7, 0x77, 0xab, 0xfb, 0x9b, 0x4d, 0xb1, 0xbc, 0xa6, 0x36, 0x1e, 0x3b, 0xa6, 0xe1, 0x5a, 0x8e,
+	0xad, 0xb1, 0x6b, 0x2c, 0x10, 0xe8, 0x05, 0x94, 0x29, 0x19, 0x13, 0x83, 0x11, 0x26, 0xe6, 0x56,
+	0xdd, 0xdf, 0x4e, 0xa1, 0xb1, 0x04, 0x48, 0xeb, 0x38, 0xd4, 0x40, 0x2d, 0xd8, 0xb0, 0xc9, 0xdb,
+	0x9e, 0xef, 0x5a, 0xe3, 0x72, 0x4c, 0xda, 0xce, 0x90, 0xb0, 0x46, 0x5e, 0x0c, 0x8b, 0xa4, 0xa1,
+	0x36, 0x79, 0xcb, 0xc5, 0xa7, 0xf6, 0x95, 0x83, 0xb3, 0xe0, 0xe8, 0x19, 0xac, 0x78, 0x62, 0xfa,
+	0x43, 0x5f, 0xbd, 0x20, 0xd4, 0xef, 0x49, 0x75, 0x7f, 0x65, 0xa1, 0x85, 0x18, 0x34, 0xf4, 0x76,
+	0x31, 0xe2, 0xed, 0x63, 0x58, 0xb3, 0xc9, 0x5b, 0x6d, 0x3a, 0x1d, 0x5b, 0xfe, 0xfc, 0x59, 0x63,
+	0x59, 0x58, 0x7c, 0x18, 0xac, 0x6c, 0x38, 0x8c, 0xf4, 0x06, 0xab, 0x4a, 0x2a, 0xa1, 0x0e, 0x20,
+	0x4a, 0x26, 0xce, 0x0d, 0x89, 0x99, 0x2a, 0x09, 0x53, 0x9f, 0x48, 0x53, 0x38, 0x09, 0x08, 0xac,
+	0x65, 0xa8, 0xaa, 0xbf, 0x5d, 0x86, 0x5a, 0x10, 0x27, 0x3f, 0x74, 0x48, 0x83, 0x65, 0xc3, 0xe4,
+	0xbd, 0x82, 0x2f, 0xb5, 0xfd, 0x1f, 0xc4, 0x16, 0x1d, 0xc0, 0x9a, 0x9a, 0xc0, 0x1c, 0x53, 0x67,
+	0xd2, 0x0b, 0x68, 0x8c, 0xa5, 0x22, 0x7a, 0x06, 0x35, 0x3e, 0xf3, 0x30, 0x5a, 0x3c, 0x8e, 0x7c,
+	0x8a, 0xeb, 0xe9, 0x38, 0x26, 0x80, 0xe8, 0x17, 0xb0, 0x21, 0x43, 0x39, 0x8c, 0xea, 0xfb, 0xe1,
+	0x6b, 0xcc, 0xe3, 0x01, 0xce, 0x52, 0x42, 0x3d, 0xb8, 0x9f, 0x16, 0x6b, 0x9c, 0x84, 0x7e, 0x38,
+	0x3f, 0xce, 0x24, 0xa1, 0xb4, 0x38, 0x47, 0x15, 0xb5, 0xf9, 0x04, 0xdf, 0x10, 0xd3, 0x8d, 0x4f,
+	0xb0, 0x18, 0x0b, 0x27, 0x4e, 0x21, 0xb8, 0xe5, 0x2c, 0x45, 0xd4, 0x86, 0xcd, 0x50, 0x9c, 0xe6,
+	0xc7, 0x56, 0xd2, 0x60, 0x24, 0xac, 0x99, 0x7a, 0xdc, 0x9e, 0x61, 0x9a, 0x64, 0x9a, 0xb4, 0x57,
+	0x8a, 0xd9, 0xd3, 0xd2, 0x10, 0x9c, 0xa9, 0x87, 0x5e, 0xc2, 0x86, 0xa4, 0x77, 0xcc, 0x5c, 0x59,
+	0x98, 0xfb, 0x28, 0xc6, 0x8d, 0x98, 0xb5, 0x2c, 0x2d, 0xf4, 0x0c, 0x56, 0x83, 0x49, 0xfb, 0xfb,
+	0xaa, 0x22, 0xcc, 0x6c, 0x24, 0x56, 0xc9, 0xfb, 0x70, 0x1c, 0xc9, 0x55, 0x83, 0xf9, 0xf9, 0xaa,
+	0x10, 0x53, 0xd5, 0x22, 0x7d, 0x38, 0x8e, 0x54, 0xf7, 0x60, 0x23, 0x83, 0xad, 0x68, 0x05, 0xca,
+	0xed, 0x8e, 0x76, 0xd4, 0x3f, 0xed, 0xb4, 0xeb, 0x4b, 0x08, 0x60, 0x19, 0xeb, 0xbd, 0xaf, 0xdb,
+	0x47, 0x75, 0x45, 0xfd, 0x93, 0x02, 0x28, 0xbd, 0x24, 0xf4, 0x29, 0xac, 0x1a, 0xb3, 0x66, 0x98,
+	0x50, 0xe3, 0x42, 0xb4, 0x09, 0x45, 0xe6, 0x1a, 0x2e, 0x91, 0x79, 0xd5, 0x6f, 0xa0, 0x03, 0x68,
+	0x88, 0x8f, 0x3e, 0x35, 0x6c, 0x66, 0x71, 0x68, 0xdf, 0x9a, 0x10, 0xe6, 0x1a, 0x13, 0x3f, 0xc5,
+	0xe6, 0xf1, 0xdc, 0x7e, 0x9e, 0xab, 0x27, 0x84, 0x31, 0x63, 0x44, 0x1a, 0x05, 0x3f, 0x57, 0xcb,
+	0xa6, 0xda, 0x83, 0x8d, 0x0c, 0x66, 0x2c, 0x38, 0xd1, 0xfb, 0xb0, 0x4c, 0x89, 0xc1, 0xc2, 0x13,
+	0x40, 0xb6, 0xd4, 0xe7, 0xdc, 0x5d, 0x29, 0x26, 0x2c, 0x66, 0x54, 0xfd, 0x19, 0xac, 0x44, 0xa3,
+	0xc8, 0x07, 0xb1, 0x79, 0x9e, 0x0c, 0xe0, 0xb2, 0x35, 0x77, 0xf0, 0x1d, 0x58, 0x89, 0x86, 0x72,
+	0x9e, 0xbe, 0x6a, 0x43, 0xb9, 0x4b, 0x2d, 0x87, 0x5a, 0xee, 0x2d, 0xda, 0x81, 0xd5, 0xa9, 0xfc,
+	0xfe, 0xca, 0x18, 0x7b, 0x44, 0x40, 0x8b, 0x27, 0x4b, 0x38, 0x2e, 0x46, 0x4d, 0x58, 0x0f, 0x04,
+	0x47, 0x63, 0x83, 0xb1, 0xb6, 0x31, 0x91, 0x51, 0x3a, 0x59, 0xc2, 0xe9, 0xae, 0x43, 0x80, 0x72,
+	0x20, 0x54, 0x7f, 0xa7, 0x40, 0x39, 0x38, 0xec, 0xd0, 0x0b, 0xa8, 0x50, 0xf9, 0x1d, 0x1c, 0x68,
+	0x8f, 0x42, 0x0a, 0xfb, 0xf2, 0xf0, 0x83, 0xe9, 0xb6, 0x4b, 0x6f, 0xf1, 0x4c, 0x61, 0xeb, 0x1c,
+	0x6a, 0xf1, 0x4e, 0x54, 0x87, 0xfc, 0x35, 0xb9, 0x95, 0x2b, 0xe4, 0x9f, 0xe8, 0x31, 0x14, 0x6f,
+	0xc4, 0x52, 0xfc, 0x03, 0x70, 0x4d, 0x5a, 0x7f, 0xe5, 0x19, 0xb6, 0x6b, 0xb9, 0xb7, 0xd8, 0xef,
+	0x3d, 0xc8, 0x7d, 0xa1, 0xa8, 0xdb, 0x50, 0x0e, 0xc4, 0x9c, 0x7b, 0x37, 0xa1, 0x07, 0xf2, 0x12,
+	0xa5, 0xfe, 0xba, 0x00, 0xab, 0xb1, 0x4c, 0x24, 0x62, 0x19, 0x0a, 0x5e, 0x86, 0x43, 0xc7, 0x85,
+	0xe9, 0x88, 0xe7, 0xb2, 0x68, 0xf4, 0x29, 0xac, 0x4e, 0x0d, 0xea, 0x0a, 0xce, 0x0a, 0x8f, 0xfa,
+	0x15, 0x43, 0x5c, 0x88, 0x9e, 0x42, 0x35, 0xf0, 0x80, 0xc6, 0xae, 0x05, 0x8f, 0x67, 0xcb, 0x0a,
+	0xdc, 0x81, 0xa3, 0x18, 0xb4, 0x03, 0xb5, 0x89, 0xf1, 0x2e, 0x9e, 0x64, 0x95, 0xdd, 0x22, 0x4e,
+	0x48, 0xd1, 0x67, 0xb3, 0x30, 0x35, 0x96, 0x63, 0x76, 0x03, 0x86, 0xe0, 0x10, 0x80, 0x0e, 0xe1,
+	0x21, 0x79, 0x47, 0x4c, 0x2f, 0xd8, 0x61, 0x8e, 0xe7, 0x9e, 0x5b, 0xe3, 0xb1, 0xd5, 0x23, 0xa6,
+	0x63, 0x0f, 0x79, 0x9a, 0xe4, 0x8e, 0x7b, 0x2f, 0x06, 0xed, 0x43, 0xc1, 0x35, 0x46, 0x41, 0x0e,
+	0x7c, 0x94, 0x75, 0x8a, 0x34, 0xfb, 0xc6, 0x48, 0x46, 0x5e, 0x60, 0xb9, 0x97, 0x5c, 0x83, 0x5d,
+	0x8b, 0x02, 0x4a, 0x78, 0xa9, 0xe2, 0x7b, 0x29, 0x26, 0x14, 0xb5, 0xd7, 0xd8, 0x30, 0xc9, 0x6b,
+	0x67, 0x3c, 0x24, 0xb4, 0x01, 0xdb, 0xca, 0x6e, 0x19, 0x47, 0x45, 0x5b, 0x9f, 0x43, 0x25, 0x34,
+	0x9d, 0xc1, 0x9b, 0xcd, 0x28, 0x6f, 0x2a, 0x51, 0x9a, 0xfc, 0x3e, 0x0f, 0xf7, 0x32, 0xab, 0x8c,
+	0x05, 0xb3, 0xc5, 0x43, 0xa8, 0x7c, 0xe3, 0x11, 0x8f, 0xcc, 0x36, 0x0d, 0x9e, 0x09, 0x16, 0x24,
+	0xc1, 0x13, 0xc8, 0x7b, 0x23, 0x4b, 0x06, 0x3f, 0x38, 0x7d, 0x07, 0x8c, 0x50, 0xe1, 0x01, 0x5e,
+	0x4b, 0xd1, 0x89, 0x3f, 0x35, 0x8e, 0x43, 0x07, 0xd2, 0xcf, 0xfe, 0xd9, 0xba, 0xf3, 0xbe, 0x52,
+	0x29, 0xe5, 0xef, 0xbb, 0xe2, 0xbc, 0xbc, 0x40, 0x9c, 0x3f, 0x87, 0x5a, 0xc4, 0xf5, 0x9c, 0xb6,
+	0xa5, 0x6c, 0xda, 0x26, 0x60, 0xff, 0x7d, 0x90, 0xae, 0xa0, 0x31, 0xaf, 0x7c, 0x5b, 0x30, 0x4c,
+	0xa9, 0x40, 0xe4, 0x32, 0x02, 0xa1, 0x1e, 0xc2, 0x66, 0x96, 0xdb, 0x79, 0xed, 0xea, 0x31, 0x42,
+	0x83, 0x9b, 0x02, 0xff, 0xe6, 0x19, 0x78, 0xc4, 0x71, 0x7e, 0x11, 0x57, 0xc1, 0xb2, 0xa5, 0xfe,
+	0xa6, 0x00, 0x30, 0xe3, 0xfc, 0x82, 0x29, 0xe5, 0x1c, 0x6a, 0x33, 0x01, 0xf7, 0x91, 0xac, 0x0c,
+	0x1f, 0xa7, 0x36, 0x51, 0xe4, 0x73, 0x16, 0xdb, 0x84, 0x32, 0x9f, 0xef, 0x60, 0x70, 0xda, 0x92,
+	0x6c, 0x13, 0xdf, 0xe8, 0x39, 0xd4, 0x83, 0x2c, 0xd2, 0x25, 0x54, 0x58, 0x11, 0x89, 0x23, 0x23,
+	0x6e, 0x29, 0xe0, 0x87, 0xe5, 0x92, 0xd8, 0x96, 0x28, 0x25, 0xb7, 0xc4, 0xec, 0xe4, 0x2a, 0xc7,
+	0x4e, 0xbe, 0x54, 0x1c, 0x2b, 0x0b, 0xc5, 0x11, 0xb2, 0x36, 0x54, 0x2a, 0xab, 0x54, 0x17, 0xc8,
+	0x2a, 0x2b, 0xe9, 0xac, 0xa2, 0xc1, 0x46, 0x86, 0xbb, 0x3f, 0x88, 0xba, 0x7f, 0x53, 0xe0, 0xa3,
+	0xb9, 0xf7, 0x33, 0x74, 0x06, 0x9b, 0xb3, 0xd0, 0xb1, 0xbe, 0x23, 0xfb, 0xe5, 0xe1, 0x39, 0xbf,
+	0xae, 0xcf, 0xd4, 0x42, 0x03, 0x78, 0x60, 0xc4, 0xaa, 0xf2, 0x99, 0xc1, 0xdc, 0xdd, 0x95, 0xfd,
+	0x3c, 0x5d, 0xf5, 0x1f, 0x0a, 0xac, 0xa7, 0xa6, 0x90, 0x8e, 0x84, 0x32, 0x27, 0x12, 0x0b, 0x9c,
+	0x95, 0x59, 0x7c, 0xfd, 0x39, 0xac, 0xb9, 0x84, 0x4e, 0x2c, 0xdb, 0x77, 0xfe, 0xed, 0xd4, 0xaf,
+	0xf2, 0x6a, 0xfb, 0xf7, 0xe5, 0x22, 0xfa, 0xf1, 0x5e, 0x9c, 0x84, 0x47, 0xeb, 0xc3, 0x62, 0xbc,
+	0x3e, 0xfc, 0xa7, 0x02, 0x9b, 0x59, 0x3e, 0xf8, 0x4e, 0x17, 0x15, 0xdb, 0xf9, 0x9c, 0x2f, 0xf9,
+	0xe4, 0xce, 0xe7, 0xcc, 0xf9, 0x5f, 0x2e, 0xf3, 0x5f, 0x39, 0xa8, 0x46, 0xae, 0xf4, 0x73, 0x8b,
+	0xce, 0x43, 0x00, 0xc3, 0x75, 0xa9, 0x75, 0xe9, 0xb9, 0x24, 0xc8, 0x3c, 0x6a, 0xfa, 0x49, 0xa0,
+	0xa9, 0x85, 0x20, 0x3f, 0xed, 0x44, 0xb4, 0x90, 0x06, 0x1b, 0x6c, 0xf6, 0x5a, 0x10, 0xa4, 0x12,
+	0xb1, 0xe6, 0x8c, 0x0c, 0x93, 0x85, 0xe5, 0x19, 0xca, 0x31, 0x4d, 0x6f, 0x6a, 0x91, 0x61, 0xa8,
+	0x3f, 0xa7, 0x20, 0x4a, 0x01, 0xd1, 0x11, 0x6c, 0x90, 0x77, 0x16, 0x73, 0x2d, 0x7b, 0x94, 0xbe,
+	0x7f, 0x66, 0x5c, 0xb0, 0xb3, 0xd0, 0x5b, 0x3f, 0x85, 0xb5, 0xc4, 0x1a, 0x3f, 0x68, 0xaf, 0xff,
+	0x3d, 0x1f, 0xbc, 0x1a, 0xdc, 0xe9, 0x72, 0x3d, 0xc3, 0xe5, 0x8f, 0x33, 0x9f, 0x51, 0xfe, 0xaf,
+	0xbd, 0x7e, 0x10, 0x3e, 0x8a, 0x14, 0x05, 0x69, 0xd5, 0x39, 0x4b, 0x08, 0xaf, 0x99, 0xf8, 0x3c,
+	0x78, 0x0d, 0xf9, 0xb6, 0xce, 0x1e, 0xf0, 0x1b, 0xd1, 0xcc, 0x2c, 0xbf, 0xa8, 0x0e, 0xba, 0x2d,
+	0xad, 0xaf, 0xd7, 0x97, 0x50, 0x0d, 0xa0, 0x85, 0xb5, 0xd3, 0xf6, 0x45, 0xbb, 0xd3, 0xd2, 0xeb,
+	0x0a, 0x5a, 0x83, 0x6a, 0x4b, 0x3f, 0xea, 0x9c, 0x9f, 0xf6, 0x7a, 0xfc, 0x56, 0x9b, 0x43, 0x0d,
+	0xd8, 0xf4, 0x01, 0xfd, 0xce, 0x45, 0xef, 0xe8, 0x44, 0x6f, 0x0d, 0xce, 0xb4, 0xc3, 0x33, 0xbd,
+	0x9e, 0x57, 0x7f, 0x05, 0xf7, 0x32, 0x5f, 0x29, 0xbe, 0xd3, 0xbb, 0xc1, 0xec, 0x96, 0x97, 0x8f,
+	0xdd, 0xf2, 0xde, 0x40, 0xad, 0x4b, 0xc9, 0x90, 0x03, 0x09, 0xd3, 0xa8, 0x5f, 0x1f, 0x2f, 0x30,
+	0xea, 0x8c, 0x65, 0xb9, 0x18, 0xcb, 0xb6, 0xa0, 0x2c, 0x81, 0x3e, 0x27, 0xca, 0x38, 0x6c, 0xab,
+	0x7f, 0x51, 0x78, 0x51, 0xd5, 0xbb, 0xb5, 0xcd, 0xf0, 0xea, 0x7f, 0x64, 0x98, 0xaf, 0x89, 0x18,
+	0xf6, 0x04, 0x90, 0xc1, 0x98, 0x37, 0x89, 0x3f, 0xe6, 0x24, 0x4e, 0xa5, 0x24, 0x00, 0x67, 0xe8,
+	0x20, 0x1d, 0xd6, 0xaf, 0x1c, 0x3a, 0x22, 0x6e, 0xfa, 0xd9, 0xeb, 0x81, 0x34, 0x74, 0xec, 0xd0,
+	0x91, 0x13, 0xe9, 0xc7, 0x69, 0x0d, 0xf5, 0x15, 0xac, 0xa7, 0xc6, 0xfb, 0x76, 0xce, 0x51, 0xbf,
+	0x80, 0x7a, 0x72, 0xe4, 0xc5, 0x2c, 0xaa, 0x7f, 0xce, 0xc1, 0x63, 0x9f, 0xe1, 0x47, 0x8e, 0xed,
+	0x1a, 0x96, 0x4d, 0xa8, 0xf4, 0xa1, 0x65, 0x8f, 0x7a, 0x6e, 0xe4, 0x75, 0x77, 0x07, 0x6a, 0x32,
+	0xf2, 0x34, 0x56, 0x9d, 0x26, 0xa4, 0xe9, 0x71, 0x73, 0x59, 0x2b, 0xc1, 0xc1, 0x13, 0x4a, 0x5e,
+	0x6c, 0xb6, 0x17, 0xb1, 0xcd, 0x76, 0xc7, 0x54, 0x9a, 0x49, 0xb1, 0x7c, 0x80, 0x99, 0x51, 0xb1,
+	0x10, 0xa3, 0xe2, 0x97, 0xb0, 0x96, 0xd0, 0x40, 0x55, 0x28, 0xf5, 0x5e, 0x9e, 0x76, 0xbb, 0x7a,
+	0xab, 0xbe, 0x84, 0x56, 0xa1, 0x22, 0x37, 0x8e, 0xde, 0xaa, 0x2b, 0x68, 0x05, 0xca, 0x58, 0xef,
+	0xe9, 0xf8, 0x2b, 0xbd, 0x55, 0xcf, 0xf1, 0xbd, 0x78, 0xac, 0x9d, 0xf2, 0x9e, 0xbc, 0xfa, 0x13,
+	0xd8, 0x0a, 0x27, 0x78, 0x65, 0x8d, 0x3c, 0x1a, 0xab, 0xde, 0x1b, 0x50, 0x32, 0x85, 0x9c, 0x49,
+	0xcf, 0x04, 0x4d, 0x75, 0x02, 0x1f, 0x67, 0xea, 0xc9, 0xe7, 0xd8, 0x06, 0x94, 0x98, 0x67, 0x9a,
+	0x84, 0xf9, 0x8a, 0x65, 0x1c, 0x34, 0x79, 0xf9, 0xe9, 0x8c, 0x87, 0xbe, 0x56, 0x70, 0x23, 0x0b,
+	0x05, 0x73, 0xb7, 0xde, 0xbf, 0x15, 0xa8, 0xea, 0x37, 0xc4, 0x76, 0x31, 0x31, 0x1d, 0x3a, 0x44,
+	0x9f, 0x41, 0xc1, 0xe5, 0x87, 0xb1, 0xff, 0xd8, 0x1b, 0x50, 0x35, 0x82, 0x68, 0x8a, 0xd3, 0x58,
+	0x80, 0xf8, 0x3e, 0x73, 0x2e, 0x79, 0xd2, 0x08, 0x49, 0x16, 0xb6, 0xf9, 0x44, 0xc5, 0xcd, 0x20,
+	0x2c, 0x6f, 0x82, 0xe6, 0x3c, 0xd7, 0xcf, 0x3f, 0xd0, 0x45, 0x5d, 0x1b, 0x3c, 0x7f, 0xb5, 0x0d,
+	0xdb, 0x91, 0xd7, 0xb5, 0xb8, 0x50, 0x7d, 0x0a, 0x05, 0x51, 0x18, 0x54, 0xa1, 0x84, 0xf5, 0x57,
+	0x03, 0xbd, 0xd7, 0xaf, 0x2f, 0xa1, 0x12, 0xe4, 0xb5, 0x6e, 0xb7, 0xae, 0xa0, 0x32, 0x14, 0x44,
+	0x56, 0xcc, 0xa1, 0x0a, 0x14, 0x5f, 0x0d, 0xf4, 0x81, 0x5e, 0xcf, 0xff, 0x70, 0x04, 0x6b, 0x89,
+	0x3a, 0x03, 0xad, 0xc3, 0x6a, 0xaf, 0xdf, 0xe1, 0xd1, 0xbe, 0x38, 0xfc, 0xfa, 0x02, 0x9f, 0xd7,
+	0x97, 0xb8, 0xc1, 0xfe, 0xe9, 0xb9, 0xde, 0x19, 0xf4, 0xeb, 0x0a, 0xda, 0x82, 0xfb, 0x5d, 0xac,
+	0xeb, 0xe7, 0xdd, 0xbe, 0x8f, 0x08, 0xd8, 0x80, 0xfd, 0xf4, 0xda, 0x3d, 0xd3, 0x8e, 0xf4, 0x93,
+	0xce, 0x59, 0x4b, 0xc7, 0x17, 0x58, 0x17, 0xad, 0x56, 0x3d, 0xbf, 0xff, 0x57, 0x05, 0x2a, 0xb3,
+	0xa7, 0xc6, 0x37, 0xf0, 0x60, 0xce, 0x1f, 0x13, 0xf4, 0x38, 0x3c, 0x7c, 0xde, 0xf7, 0x0f, 0x67,
+	0x6b, 0xe7, 0x2e, 0x98, 0xfc, 0xf1, 0xb2, 0x84, 0x9e, 0xc3, 0xb2, 0xcf, 0x27, 0xb4, 0x99, 0x78,
+	0xb9, 0xf7, 0x2d, 0xdd, 0xcb, 0x7c, 0xcf, 0x57, 0x97, 0x76, 0x95, 0x1f, 0x29, 0x07, 0xcf, 0xa1,
+	0xc2, 0xac, 0x0b, 0x46, 0x4c, 0x4a, 0x5c, 0xf4, 0xbd, 0xa6, 0xff, 0xf3, 0xa9, 0x19, 0xfc, 0x7c,
+	0x6a, 0x1e, 0x5b, 0x64, 0x3c, 0xec, 0x4c, 0xfd, 0xe4, 0xf6, 0x87, 0xb2, 0x9f, 0x69, 0x19, 0xbf,
+	0x30, 0x53, 0xe2, 0x1e, 0x16, 0x7e, 0x99, 0x63, 0xd6, 0xe5, 0xb2, 0x40, 0xff, 0xf8, 0x3f, 0x01,
+	0x00, 0x00, 0xff, 0xff, 0xf2, 0x5e, 0xd7, 0x23, 0xf2, 0x1a, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
diff --git a/scheduler-interface-spec.md b/scheduler-interface-spec.md
index 01961ac..c928876 100644
--- a/scheduler-interface-spec.md
+++ b/scheduler-interface-spec.md
@@ -134,19 +134,22 @@
 
 import "github.com/apache/incubator-yunikorn-scheduler-interface/lib/go/si"
 
-type SchedulerApi interface {
-    // Register a new RM, if it is a reconnect from previous RM, cleanup
-    // all in-memory data and resync with RM.
-    RegisterResourceManager(request *si.RegisterResourceManagerRequest, callback *ResourceManagerCallback) (*si.RegisterResourceManagerResponse, error)
+type SchedulerAPI interface {
+    // Register a new RM, if it is a reconnect from previous RM, cleanup 
+	// all in-memory data and resync with RM. 
+	RegisterResourceManager(request *si.RegisterResourceManagerRequest, callback ResourceManagerCallback) (*si.RegisterResourceManagerResponse, error)
 
-    // Update Scheduler status (including node status update, allocation request
-    // updates, etc.
-    Update(request *si.UpdateRequest) error
+	// Update Scheduler status (including node status update, allocation request 
+	// updates, etc. 
+	Update(request *si.UpdateRequest) error
+
+	// Notify scheduler to reload configuration and hot-refresh in-memory state based on configuration changes 
+	ReloadConfiguration(clusterID string) error
 }
 
 // RM side needs to implement this API
 type ResourceManagerCallback interface {
-    RecvUpdateResponse(response *si.UpdateResponse) error
+	RecvUpdateResponse(response *si.UpdateResponse) error
 }
 ```
 
@@ -396,6 +399,9 @@
   int32 maxAllocations = 5;
   // Priority of ask
   Priority priority = 6;
+  // Execution timeout: How long this allocation will be terminated (by scheduler)
+  // once allocated by scheduler, 0 or negative value means never expire.
+  int64 executionTimeoutMilliSeconds = 7;
   // A set of tags for this spscific AllocationAsk. Allocation level tags are used in placing this specific
   // ask on nodes in the cluster. These tags are used in the PlacementConstraints.
   // These tags are optional.
diff --git a/si.proto b/si.proto
index 4610a6c..b0cebab 100644
--- a/si.proto
+++ b/si.proto
@@ -79,18 +79,15 @@
   // - Realtime Utilizations.
   repeated UpdateNodeInfo updatedNodes = 4;
 
-  // UtilizationReports for allocation and nodes.
-  repeated UtilizationReport utilizationReports = 5;
-
   // ID of RM, this will be used to identify which RM of the request comes from.
-  string rmID = 6;
+  string rmID = 5;
 
   // RM should explicitly add application when allocation request also explictly belongs to application.
   // This is optional if allocation request doesn't belong to a application. (Independent allocation)
-  repeated AddApplicationRequest newApplications = 8;
+  repeated AddApplicationRequest newApplications = 6;
 
   // RM can also remove applications, all allocation/allocation requests associated with the application will be removed
-  repeated RemoveApplicationRequest removeApplications = 9;
+  repeated RemoveApplicationRequest removeApplications = 7;
 }
 
 message UpdateResponse {
@@ -120,28 +117,20 @@
   // Rejected allocation requests
   repeated RejectedAllocationAsk rejectedAllocations = 5;
 
-  // Suggested node update.
-  // This could include:
-  // 1) Schedulable resources on each node. This can be used when we want to run
-  //    two resource management systems side-by-side. For example, YARN/K8s running side by side.
-  //    and update YARN NodeManager / Kubelet resource dynamically.
-  // 2) Other recommendations.
-  repeated NodeRecommendation nodeRecommendations = 6;
-
   // Rejected Applications
-  repeated RejectedApplication rejectedApplications = 7;
+  repeated RejectedApplication rejectedApplications = 6;
 
   // Accepted Applications
-  repeated AcceptedApplication acceptedApplications = 8;
+  repeated AcceptedApplication acceptedApplications = 7;
 
   // Updated Applications
-  repeated UpdatedApplication updatedApplications = 9;
+  repeated UpdatedApplication updatedApplications = 8;
 
   // Rejected Node Registrations
-  repeated RejectedNode rejectedNodes = 10;
+  repeated RejectedNode rejectedNodes = 9;
 
   // Accepted Node Registrations
-  repeated AcceptedNode acceptedNodes = 11;
+  repeated AcceptedNode acceptedNodes = 10;
 }
 
 message UpdatedApplication {
@@ -223,14 +212,11 @@
   // ask on nodes in the cluster. These tags are used in the PlacementConstraints.
   // These tags are optional.
   map<string, string> tags = 8;
-  // Placement constraint defines how this allocation should be placed in the cluster.
-  // if not set, no placement constraint will be applied.
-  PlacementConstraint placementConstraint = 9;
   // The name of the TaskGroup this ask belongs to
-  string taskGroupName = 10;
+  string taskGroupName = 9;
   // Is this a placeholder ask (true) or a real ask (false), defaults to false
   // ignored if the taskGroupName is not set
-  bool placeholder = 11;
+  bool placeholder = 10;
 }
 message AddApplicationRequest {
   // The ID of the application, must be unique
@@ -265,72 +251,6 @@
   // the list of groups of the user, can be empty
   repeated string groups = 2;
 }
-// PlacementConstraint could have simplePlacementConstraint or
-// CompositePlacementConstraint. One of them will be set.
-message PlacementConstraint {
-  oneof constraint {
-    SimplePlacementConstraint simpleConstraint = 1;
-
-    // This protocol can extended to support complex constraints
-    // To make an easier scheduler implementation and avoid confusing user.
-    // Protocol related to CompositePlacementConstraints will be
-    // commented and only for your references.
-    // CompositePlacementConstraint compositeConstraint = 2;
-  }
-}
-
-// Simple placement constraint represent constraint for affinity/anti-affinity
-// to node attribute or allocation tags.
-// When both of NodeAffinityConstraints and AllocationAffinityConstraints
-// specified, both will be checked and verified while scheduling.
-message SimplePlacementConstraint {
-  // Constraint
-  NodeAffinityConstraints nodeAffinityConstraint = 1;
-  AllocationAffinityConstraints allocationAffinityAttribute = 2;
-}
-
-// Affinity to node, multiple AffinityTargetExpression will be specified,
-// They will be connected by AND.
-message NodeAffinityConstraints {
-  repeated AffinityTargetExpression targetExpressions = 2;
-}
-
-// Affinity to allocations (containers).
-// Affinity is single-direction, which means if RM wants to do mutual affinity/
-// anti-affinity between allocations, same constraints need to be added
-// to all allocation asks.
-message AllocationAffinityConstraints {
-  // Scope: scope is key of node attribute, which determines if >1 allocations
-  // in the same group or not.
-  // When allocations on node(s) which have same node attribute value
-  // for given node attribute key == scope. They're in the same group.
-  //
-  // e.g. when user wants to do anti-affinity between allocation on node
-  // basis, scope can be set to "hostname", max-cardinality = 1;
-  string scope = 1;
-  repeated AffinityTargetExpression tragetExpressions = 2;
-  int32 minCardinality = 3;
-  int32 maxCardinality = 4;
-
-  // Is this a required (hard) or preferred (soft) request.
-  bool required = 5;
-}
-
-message AffinityTargetExpression {
-  // Following 4 operators can be specified, by default is "IN".
-  // When EXIST/NOT_EXISTS specified, scheduler only check if given targetKey
-  // appears on node attribute or allocation tag.
-  enum AffinityTargetOperator {
-    IN = 0;
-    NOT_IN = 1;
-    EXIST = 2;
-    NOT_EXIST = 3;
-  }
-
-  AffinityTargetExpression targetOperator = 1;
-  string targetKey = 2;
-  repeated string targetValues = 3;
-}
 message Allocation {
   // AllocationKey from AllocationAsk
   string allocationKey = 1;
@@ -445,13 +365,6 @@
   // Action to perform by the scheduler
   ActionFromRM action = 5;
 }
-message UtilizationReport {
-  // it could be either a nodeID or allocation UUID.
-  string ID = 1;
-
-  // Actual used resource
-  Resource actualUsedResource = 2;
-}
 message RejectedAllocationAsk {
   string allocationKey = 1;
   // The ID of the application
@@ -459,12 +372,6 @@
   // A human-readable reason message
   string reason = 3;
 }
-message NodeRecommendation {
-  Resource recommendedSchedulableResource = 1;
-
-  // Any other human-readable message
-  string message = 2;
-}
 message PredicatesArgs {
     // allocation key identifies a container, the predicates function is going to check
     // if this container is eligible to be placed ont to a node.
@@ -558,17 +465,3 @@
    // timestamp of the event
    int64 timestampNano = 6;
 }
-// auto scaling metrics at a certain point of time
-message AutoScalingMetrics {
-  // a list of outstanding requests that desires for additional resources
-  repeated OutstandingResourceRequest outstandingRequests = 1;
-}
-
-message OutstandingResourceRequest {
-  // an unique ID
-  string requestID = 1;
-  // resource specification
-  Resource resource = 2;
-  // an arbitrary map for tags, this stores some useful information that can help the decision
-  map<string, string> tags = 3;
-}