diff --git a/api/api.descriptors b/api/api.descriptors index 9bb099ec8..98c568ea8 100644 Binary files a/api/api.descriptors and b/api/api.descriptors differ diff --git a/api/resource/definitions/enums/enums.proto b/api/resource/definitions/enums/enums.proto index 161692a19..5456dbb92 100755 --- a/api/resource/definitions/enums/enums.proto +++ b/api/resource/definitions/enums/enums.proto @@ -77,6 +77,15 @@ enum NethelpersBondXmitHashPolicy { BOND_XMIT_POLICY_ENCAP34 = 4; } +// NethelpersConntrackState is a conntrack state. +enum NethelpersConntrackState { + NETHELPERS_CONNTRACKSTATE_UNSPECIFIED = 0; + CONNTRACK_STATE_NEW = 8; + CONNTRACK_STATE_RELATED = 4; + CONNTRACK_STATE_ESTABLISHED = 2; + CONNTRACK_STATE_INVALID = 1; +} + // NethelpersDuplex wraps ethtool.Duplex for YAML marshaling. enum NethelpersDuplex { HALF = 0; @@ -259,8 +268,10 @@ enum NethelpersPrimaryReselect { // NethelpersProtocol is a inet protocol. enum NethelpersProtocol { NETHELPERS_PROTOCOL_UNSPECIFIED = 0; + PROTOCOL_ICMP = 1; PROTOCOL_TCP = 6; PROTOCOL_UDP = 17; + PROTOCOL_ICM_PV6 = 58; } // NethelpersRouteFlag wraps RTM_F_* constants. diff --git a/api/resource/definitions/network/network.proto b/api/resource/definitions/network/network.proto index 13c2d6529..83f1071fd 100755 --- a/api/resource/definitions/network/network.proto +++ b/api/resource/definitions/network/network.proto @@ -179,6 +179,7 @@ message NfTablesChainSpec { talos.resource.definitions.enums.NethelpersNfTablesChainHook hook = 2; talos.resource.definitions.enums.NethelpersNfTablesChainPriority priority = 3; repeated NfTablesRule rules = 4; + talos.resource.definitions.enums.NethelpersNfTablesVerdict policy = 5; } // NfTablesClampMSS describes the TCP MSS clamping operation. @@ -190,10 +191,15 @@ message NfTablesClampMSS { fixed32 mtu = 1; } +// NfTablesConntrackStateMatch describes the match on the connection tracking state. +message NfTablesConntrackStateMatch { + repeated uint32 states = 1; +} + // NfTablesIfNameMatch describes the match on the interface name. message NfTablesIfNameMatch { - string interface_name = 1; talos.resource.definitions.enums.NethelpersMatchOperator operator = 2; + repeated string interface_names = 3; } // NfTablesLayer4Match describes the match on the transport layer protocol. @@ -203,6 +209,11 @@ message NfTablesLayer4Match { NfTablesPortMatch match_destination_port = 3; } +// NfTablesLimitMatch describes the match on the packet rate. +message NfTablesLimitMatch { + uint64 packet_rate_per_second = 1; +} + // NfTablesMark encodes packet mark match/update operation. // // When used as a match computes the following condition: @@ -232,6 +243,9 @@ message NfTablesRule { NfTablesLayer4Match match_layer4 = 7; NfTablesIfNameMatch match_i_if_name = 8; NfTablesClampMSS clamp_mss = 9; + NfTablesLimitMatch match_limit = 10; + NfTablesConntrackStateMatch match_conntrack_state = 11; + bool anon_counter = 12; } // NodeAddressFilterSpec describes a filter for NodeAddresses. diff --git a/internal/app/machined/pkg/adapters/network/nftables_rule.go b/internal/app/machined/pkg/adapters/network/nftables_rule.go index a63dc26f4..a13104263 100644 --- a/internal/app/machined/pkg/adapters/network/nftables_rule.go +++ b/internal/app/machined/pkg/adapters/network/nftables_rule.go @@ -6,6 +6,7 @@ package network import ( "fmt" + "net/netip" "os" "slices" @@ -16,6 +17,7 @@ import ( "go4.org/netipx" "golang.org/x/sys/unix" + "github.com/siderolabs/talos/pkg/machinery/nethelpers" "github.com/siderolabs/talos/pkg/machinery/resources/network" ) @@ -40,13 +42,29 @@ const ( SetKindIPv4 SetKind = iota SetKindIPv6 SetKindPort + SetKindIfName + SetKindConntrackState ) // NfTablesSet is a compiled representation of the set. type NfTablesSet struct { - Kind SetKind - Addresses []netipx.IPRange - Ports [][2]uint16 + Kind SetKind + Addresses []netipx.IPRange + Ports [][2]uint16 + Strings [][]byte + ConntrackStates []nethelpers.ConntrackState +} + +// IsInterval returns true if the set is an interval set. +func (set NfTablesSet) IsInterval() bool { + switch set.Kind { + case SetKindIPv4, SetKindIPv6, SetKindPort: + return true + case SetKindIfName, SetKindConntrackState: + return false + default: + panic(fmt.Sprintf("unknown set kind: %d", set.Kind)) + } } // KeyType returns the type of the set. @@ -58,6 +76,10 @@ func (set NfTablesSet) KeyType() nftables.SetDatatype { return nftables.TypeIP6Addr case SetKindPort: return nftables.TypeInetService + case SetKindIfName: + return nftables.TypeIFName + case SetKindConntrackState: + return nftables.TypeCTState default: panic(fmt.Sprintf("unknown set kind: %d", set.Kind)) } @@ -91,7 +113,7 @@ func (set NfTablesSet) SetElements() []nftables.SetElement { for _, p := range set.Ports { from := binaryutil.BigEndian.PutUint16(p[0]) - to := binaryutil.BigEndian.PutUint16(p[1]) + to := binaryutil.BigEndian.PutUint16(p[1] + 1) elements = append(elements, nftables.SetElement{ @@ -105,6 +127,30 @@ func (set NfTablesSet) SetElements() []nftables.SetElement { ) } + return elements + case SetKindIfName: + elements := make([]nftables.SetElement, 0, len(set.Strings)) + + for _, s := range set.Strings { + elements = append(elements, + nftables.SetElement{ + Key: s, + }, + ) + } + + return elements + case SetKindConntrackState: + elements := make([]nftables.SetElement, 0, len(set.ConntrackStates)) + + for _, s := range set.ConntrackStates { + elements = append(elements, + nftables.SetElement{ + Key: binaryutil.NativeEndian.PutUint32(uint32(s)), + }, + ) + } + return elements default: panic(fmt.Sprintf("unknown set kind: %d", set.Kind)) @@ -145,6 +191,12 @@ var ( Data: []byte{byte(nftables.TableFamilyIPv6)}, }, } + + firstIPv4 = netip.MustParseAddr("0.0.0.0") + lastIPv4 = netip.MustParseAddr("255.255.255.255") + + firstIPv6 = netip.MustParseAddr("::") + lastIPv6 = netip.MustParseAddr("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff") ) // Compile translates the rule into the set of nftables instructions. @@ -161,6 +213,34 @@ func (a nftablesRule) Compile() (*NfTablesCompiled, error) { result NfTablesCompiled ) + matchIfNames := func(operator nethelpers.MatchOperator, ifnames []string) { + if len(ifnames) == 1 { + rulePre = append(rulePre, + // [ cmp eq/neq reg 1 ] + &expr.Cmp{ + Op: expr.CmpOp(operator), + Register: 1, + Data: ifname(ifnames[0]), + }, + ) + } else { + result.Sets = append(result.Sets, + NfTablesSet{ + Kind: SetKindIfName, + Strings: xslices.Map(ifnames, ifname), + }) + + rulePre = append(rulePre, + // Match from target set + &expr.Lookup{ + SourceRegister: 1, + SetID: uint32(len(result.Sets) - 1), // reference will be fixed up by the controller + Invert: operator == nethelpers.OperatorNotEqual, + }, + ) + } + } + if a.NfTablesRule.MatchIIfName != nil { match := a.NfTablesRule.MatchIIfName @@ -170,13 +250,9 @@ func (a nftablesRule) Compile() (*NfTablesCompiled, error) { Key: expr.MetaKeyIIFNAME, Register: 1, }, - // [ cmp eq/neq reg 1 ] - &expr.Cmp{ - Op: expr.CmpOp(match.Operator), - Register: 1, - Data: ifname(match.InterfaceName), - }, ) + + matchIfNames(match.Operator, match.InterfaceNames) } if a.NfTablesRule.MatchOIfName != nil { @@ -188,13 +264,9 @@ func (a nftablesRule) Compile() (*NfTablesCompiled, error) { Key: expr.MetaKeyOIFNAME, Register: 1, }, - // [ cmp eq/neq reg 1 ] - &expr.Cmp{ - Op: expr.CmpOp(match.Operator), - Register: 1, - Data: ifname(match.InterfaceName), - }, ) + + matchIfNames(match.Operator, match.InterfaceNames) } if a.NfTablesRule.MatchMark != nil { @@ -224,6 +296,53 @@ func (a nftablesRule) Compile() (*NfTablesCompiled, error) { ) } + if a.NfTablesRule.MatchConntrackState != nil { + match := a.NfTablesRule.MatchConntrackState + + if len(match.States) == 1 { + rulePre = append(rulePre, + // [ ct load state => reg 1 ] + &expr.Ct{ + Key: expr.CtKeySTATE, + Register: 1, + }, + // [ bitwise reg 1 = ( reg 1 & state ) ^ 0x00000000 ] + &expr.Bitwise{ + SourceRegister: 1, + DestRegister: 1, + Len: 4, + Mask: binaryutil.NativeEndian.PutUint32(match.States[0]), + Xor: []byte{0x0, 0x0, 0x0, 0x0}, + }, + // [ cmp neq reg 1 0x00000000 ] + &expr.Cmp{ + Op: expr.CmpOpNeq, + Register: 1, + Data: []byte{0x0, 0x0, 0x0, 0x0}, + }, + ) + } else { + result.Sets = append(result.Sets, + NfTablesSet{ + Kind: SetKindConntrackState, + ConntrackStates: xslices.Map(match.States, func(s uint32) nethelpers.ConntrackState { return nethelpers.ConntrackState(s) }), + }) + + rulePre = append(rulePre, + // [ ct load state => reg 1 ] + &expr.Ct{ + Key: expr.CtKeySTATE, + Register: 1, + }, + // [ lookup reg 1 set ] + &expr.Lookup{ + SourceRegister: 1, + SetID: uint32(len(result.Sets) - 1), // reference will be fixed up by the controller + }, + ) + } + } + addressMatchExpression := func(match *network.NfTablesAddressMatch, label string, offV4, offV6 uint32) error { ipSet, err := BuildIPSet(match.IncludeSubnets, match.ExcludeSubnets) if err != nil { @@ -237,71 +356,77 @@ func (a nftablesRule) Compile() (*NfTablesCompiled, error) { return os.ErrNotExist } - // skip v4 rule if there are not IPs to match for and not inverted - if v4Set != nil || match.Invert { - if v4Set == nil && match.Invert { - // match any v4 IP - if rule4 == nil { - rule4 = []expr.Any{} - } - } else { - // match specific v4 IPs - result.Sets = append(result.Sets, - NfTablesSet{ - Kind: SetKindIPv4, - Addresses: v4Set, - }, - ) + v4SetCoversAll := len(v4Set) == 1 && v4Set[0].From() == firstIPv4 && v4Set[0].To() == lastIPv4 + v6SetCoversAll := len(v6Set) == 1 && v6Set[0].From() == firstIPv6 && v6Set[0].To() == lastIPv6 - rule4 = append(rule4, - // Store the destination IP address to register 1 - &expr.Payload{ - DestRegister: 1, - Base: expr.PayloadBaseNetworkHeader, - Offset: offV4, - Len: 4, - }, - // Match from target set - &expr.Lookup{ - SourceRegister: 1, - SetID: uint32(len(result.Sets) - 1), // reference will be fixed up by the controller - Invert: match.Invert, - }, - ) - } + if v4SetCoversAll && v6SetCoversAll && match.Invert { + // this rule doesn't match anything + return os.ErrNotExist } - // skip v6 rule if there are not IPs to match for and not inverted - if v6Set != nil || match.Invert { - if v6Set == nil && match.Invert { - // match any v6 IP - if rule6 == nil { - rule6 = []expr.Any{} - } - } else { - // match specific v6 IPs - result.Sets = append(result.Sets, - NfTablesSet{ - Kind: SetKindIPv6, - Addresses: v6Set, - }) - - rule6 = append(rule6, - // Store the destination IP address to register 1 - &expr.Payload{ - DestRegister: 1, - Base: expr.PayloadBaseNetworkHeader, - Offset: offV6, - Len: 16, - }, - // Match from target set - &expr.Lookup{ - SourceRegister: 1, - SetID: uint32(len(result.Sets) - 1), // reference will be fixed up by the controller - Invert: match.Invert, - }, - ) + switch { //nolint:dupl + case v4SetCoversAll && !match.Invert, match.Invert && v4Set == nil: + // match any v4 IP + if rule4 == nil { + rule4 = []expr.Any{} } + case !v4SetCoversAll && match.Invert, !match.Invert && v4Set != nil: + // match specific v4 IPs + result.Sets = append(result.Sets, + NfTablesSet{ + Kind: SetKindIPv4, + Addresses: v4Set, + }, + ) + + rule4 = append(rule4, + // Store the destination IP address to register 1 + &expr.Payload{ + DestRegister: 1, + Base: expr.PayloadBaseNetworkHeader, + Offset: offV4, + Len: 4, + }, + // Match from target set + &expr.Lookup{ + SourceRegister: 1, + SetID: uint32(len(result.Sets) - 1), // reference will be fixed up by the controller + Invert: match.Invert, + }, + ) + default: // otherwise skip generating v4 rule, as it doesn't match anything + } + + switch { //nolint:dupl + case v6SetCoversAll && !match.Invert, match.Invert && v6Set == nil: + // match any v6 IP + if rule6 == nil { + rule6 = []expr.Any{} + } + case !v6SetCoversAll && match.Invert, !match.Invert && v6Set != nil: + // match specific v6 IPs + result.Sets = append(result.Sets, + NfTablesSet{ + Kind: SetKindIPv6, + Addresses: v6Set, + }) + + rule6 = append(rule6, + // Store the destination IP address to register 1 + &expr.Payload{ + DestRegister: 1, + Base: expr.PayloadBaseNetworkHeader, + Offset: offV6, + Len: 16, + }, + // Match from target set + &expr.Lookup{ + SourceRegister: 1, + SetID: uint32(len(result.Sets) - 1), // reference will be fixed up by the controller + Invert: match.Invert, + }, + ) + default: // otherwise skip generating v6 rule, as it doesn't match anything } return nil @@ -381,6 +506,20 @@ func (a nftablesRule) Compile() (*NfTablesCompiled, error) { } } + if a.NfTablesRule.MatchLimit != nil { + match := a.NfTablesRule.MatchLimit + + rulePost = append(rulePost, + // [ limit rate ] + &expr.Limit{ + Type: expr.LimitTypePkts, + Rate: match.PacketRatePerSecond, + Burst: uint32(match.PacketRatePerSecond), + Unit: expr.LimitTimeSecond, + }, + ) + } + clampMSS := func(family nftables.TableFamily, mtu uint16) []expr.Any { var mss uint16 @@ -487,6 +626,13 @@ func (a nftablesRule) Compile() (*NfTablesCompiled, error) { ) } + if a.NfTablesRule.AnonCounter { + rulePost = append(rulePost, + // [ counter ] + &expr.Counter{}, + ) + } + if a.NfTablesRule.Verdict != nil { rulePost = append(rulePost, // [ verdict accept|drop ] diff --git a/internal/app/machined/pkg/adapters/network/nftables_rule_test.go b/internal/app/machined/pkg/adapters/network/nftables_rule_test.go index b559b120e..c28294adf 100644 --- a/internal/app/machined/pkg/adapters/network/nftables_rule_test.go +++ b/internal/app/machined/pkg/adapters/network/nftables_rule_test.go @@ -38,8 +38,8 @@ func TestNfTablesRuleCompile(t *testing.T) { //nolint:tparallel name: "match oifname", spec: networkres.NfTablesRule{ MatchOIfName: &networkres.NfTablesIfNameMatch{ - InterfaceName: "eth0", - Operator: nethelpers.OperatorEqual, + InterfaceNames: []string{"eth0"}, + Operator: nethelpers.OperatorEqual, }, }, expectedRules: [][]expr.Any{ @@ -57,8 +57,8 @@ func TestNfTablesRuleCompile(t *testing.T) { //nolint:tparallel name: "match iifname", spec: networkres.NfTablesRule{ MatchIIfName: &networkres.NfTablesIfNameMatch{ - InterfaceName: "lo", - Operator: nethelpers.OperatorNotEqual, + InterfaceNames: []string{"lo"}, + Operator: nethelpers.OperatorNotEqual, }, }, expectedRules: [][]expr.Any{ @@ -72,12 +72,39 @@ func TestNfTablesRuleCompile(t *testing.T) { //nolint:tparallel }, }, }, + { + name: "match multiple iifname", + spec: networkres.NfTablesRule{ + MatchIIfName: &networkres.NfTablesIfNameMatch{ + InterfaceNames: []string{"siderolink", "kubespan"}, + Operator: nethelpers.OperatorEqual, + }, + }, + expectedRules: [][]expr.Any{ + { + &expr.Meta{Key: expr.MetaKeyIIFNAME, Register: 1}, + &expr.Lookup{ + SourceRegister: 1, + SetID: 0, + }, + }, + }, + expectedSets: []network.NfTablesSet{ + { + Kind: network.SetKindIfName, + Strings: [][]byte{ + []byte("siderolink\000\000\000\000\000\000"), + []byte("kubespan\000\000\000\000\000\000\000\000"), + }, + }, + }, + }, { name: "verdict accept", spec: networkres.NfTablesRule{ MatchOIfName: &networkres.NfTablesIfNameMatch{ - InterfaceName: "eth0", - Operator: nethelpers.OperatorNotEqual, + InterfaceNames: []string{"eth0"}, + Operator: nethelpers.OperatorNotEqual, }, Verdict: pointer.To(nethelpers.VerdictAccept), }, @@ -585,6 +612,97 @@ func TestNfTablesRuleCompile(t *testing.T) { //nolint:tparallel }, }, }, + { + name: "limit", + spec: networkres.NfTablesRule{ + MatchLimit: &networkres.NfTablesLimitMatch{ + PacketRatePerSecond: 5, + }, + }, + expectedRules: [][]expr.Any{ + { + &expr.Limit{ + Type: expr.LimitTypePkts, + Rate: 5, + Burst: 5, + Unit: expr.LimitTimeSecond, + }, + }, + }, + }, + { + name: "counter", + spec: networkres.NfTablesRule{ + AnonCounter: true, + }, + expectedRules: [][]expr.Any{ + { + &expr.Counter{}, + }, + }, + }, + { + name: "ct state", + spec: networkres.NfTablesRule{ + MatchConntrackState: &networkres.NfTablesConntrackStateMatch{ + States: []uint32{ + uint32(nethelpers.ConntrackStateInvalid), + }, + }, + }, + expectedRules: [][]expr.Any{ + { + &expr.Ct{ + Key: expr.CtKeySTATE, + Register: 1, + }, + &expr.Bitwise{ + DestRegister: 1, + SourceRegister: 1, + Len: 4, + Mask: []byte{0x01, 0x00, 0x00, 0x00}, + Xor: []byte{0x00, 0x00, 0x00, 0x00}, + }, + &expr.Cmp{ + Op: expr.CmpOpNeq, + Register: 1, + Data: []byte{0x00, 0x00, 0x00, 0x00}, + }, + }, + }, + }, + { + name: "ct states", + spec: networkres.NfTablesRule{ + MatchConntrackState: &networkres.NfTablesConntrackStateMatch{ + States: []uint32{ + uint32(nethelpers.ConntrackStateRelated), + uint32(nethelpers.ConntrackStateEstablished), + }, + }, + }, + expectedRules: [][]expr.Any{ + { + &expr.Ct{ + Key: expr.CtKeySTATE, + Register: 1, + }, + &expr.Lookup{ + SourceRegister: 1, + SetID: 0, + }, + }, + }, + expectedSets: []network.NfTablesSet{ + { + Kind: network.SetKindConntrackState, + ConntrackStates: []nethelpers.ConntrackState{ + nethelpers.ConntrackStateRelated, + nethelpers.ConntrackStateEstablished, + }, + }, + }, + }, } { t.Run(test.name, func(t *testing.T) { result, err := network.NfTablesRule(&test.spec).Compile() diff --git a/internal/app/machined/pkg/controllers/kubespan/manager.go b/internal/app/machined/pkg/controllers/kubespan/manager.go index c88c12d6c..659b1a2ed 100644 --- a/internal/app/machined/pkg/controllers/kubespan/manager.go +++ b/internal/app/machined/pkg/controllers/kubespan/manager.go @@ -476,6 +476,7 @@ func (ctrl *ManagerController) Run(ctx context.Context, r controller.Runtime, lo spec.Type = nethelpers.ChainTypeFilter spec.Hook = nethelpers.ChainHookPrerouting spec.Priority = nethelpers.ChainPriorityFilter + spec.Policy = nethelpers.VerdictAccept spec.Rules = []network.NfTablesRule{ { @@ -514,6 +515,7 @@ func (ctrl *ManagerController) Run(ctx context.Context, r controller.Runtime, lo spec.Type = nethelpers.ChainTypeRoute spec.Hook = nethelpers.ChainHookOutput spec.Priority = nethelpers.ChainPriorityFilter + spec.Policy = nethelpers.VerdictAccept spec.Rules = []network.NfTablesRule{ { @@ -525,7 +527,7 @@ func (ctrl *ManagerController) Run(ctx context.Context, r controller.Runtime, lo }, { MatchOIfName: &network.NfTablesIfNameMatch{ - InterfaceName: "lo", + InterfaceNames: []string{"lo"}, }, Verdict: pointer.To(nethelpers.VerdictAccept), }, diff --git a/internal/app/machined/pkg/controllers/kubespan/manager_test.go b/internal/app/machined/pkg/controllers/kubespan/manager_test.go index 939b2d700..dec32f953 100644 --- a/internal/app/machined/pkg/controllers/kubespan/manager_test.go +++ b/internal/app/machined/pkg/controllers/kubespan/manager_test.go @@ -241,6 +241,7 @@ func (suite *ManagerSuite) TestReconcile() { asrt.Equal(nethelpers.ChainTypeFilter, spec.Type) asrt.Equal(nethelpers.ChainHookPrerouting, spec.Hook) asrt.Equal(nethelpers.ChainPriorityFilter, spec.Priority) + asrt.Equal(nethelpers.VerdictAccept, spec.Policy) asrt.Len(spec.Rules, 2) if len(spec.Rules) != 2 { diff --git a/internal/app/machined/pkg/controllers/network/nftables_chain.go b/internal/app/machined/pkg/controllers/network/nftables_chain.go index ae00a22ea..26aa0f3b0 100644 --- a/internal/app/machined/pkg/controllers/network/nftables_chain.go +++ b/internal/app/machined/pkg/controllers/network/nftables_chain.go @@ -115,6 +115,7 @@ func (ctrl *NfTablesChainController) Run(ctx context.Context, r controller.Runti Hooknum: pointer.To(nftables.ChainHook(chain.TypedSpec().Hook)), Priority: pointer.To(nftables.ChainPriority(chain.TypedSpec().Priority)), Type: nftables.ChainType(chain.TypedSpec().Type), + Policy: pointer.To(nftables.ChainPolicy(chain.TypedSpec().Policy)), }) for _, rule := range chain.TypedSpec().Rules { @@ -127,14 +128,12 @@ func (ctrl *NfTablesChainController) Run(ctx context.Context, r controller.Runti // check for lookup rules and add/fix up the set ID if needed for i := range compiledRule { if lookup, ok := compiledRule[i].(*expr.Lookup); ok { - setID++ - if lookup.SetID >= uint32(len(compiled.Sets)) { return fmt.Errorf("invalid set ID %d in lookup", lookup.SetID) } set := compiled.Sets[lookup.SetID] - setName := "_set" + strconv.Itoa(int(setID)) + setName := "__set" + strconv.Itoa(int(setID)) if err = conn.AddSet(&nftables.Set{ Table: talosTable, @@ -142,14 +141,19 @@ func (ctrl *NfTablesChainController) Run(ctx context.Context, r controller.Runti Name: setName, Anonymous: true, Constant: true, - Interval: true, + Interval: set.IsInterval(), KeyType: set.KeyType(), }, set.SetElements()); err != nil { return fmt.Errorf("error adding nftables set for chain %s: %w", nfChain.Name, err) } - lookup.SetID = setID - lookup.SetName = setName + lookupOp := *lookup + lookupOp.SetID = setID + lookupOp.SetName = setName + + compiledRule[i] = &lookupOp + + setID++ } } diff --git a/internal/app/machined/pkg/controllers/network/nftables_chain_test.go b/internal/app/machined/pkg/controllers/network/nftables_chain_test.go index 28c64c385..e9ebb4a84 100644 --- a/internal/app/machined/pkg/controllers/network/nftables_chain_test.go +++ b/internal/app/machined/pkg/controllers/network/nftables_chain_test.go @@ -63,10 +63,11 @@ func (s *NfTablesChainSuite) TestAcceptLo() { chain.TypedSpec().Type = nethelpers.ChainTypeFilter chain.TypedSpec().Hook = nethelpers.ChainHookInput chain.TypedSpec().Priority = nethelpers.ChainPrioritySecurity + chain.TypedSpec().Policy = nethelpers.VerdictAccept chain.TypedSpec().Rules = []network.NfTablesRule{ { MatchOIfName: &network.NfTablesIfNameMatch{ - InterfaceName: "lo", + InterfaceNames: []string{"lo"}, }, Verdict: pointer.To(nethelpers.VerdictAccept), }, @@ -82,11 +83,127 @@ func (s *NfTablesChainSuite) TestAcceptLo() { }`) } +func (s *NfTablesChainSuite) TestAcceptMultipleIfnames() { + chain := network.NewNfTablesChain(network.NamespaceName, "test1") + chain.TypedSpec().Type = nethelpers.ChainTypeFilter + chain.TypedSpec().Hook = nethelpers.ChainHookInput + chain.TypedSpec().Priority = nethelpers.ChainPrioritySecurity + chain.TypedSpec().Policy = nethelpers.VerdictAccept + chain.TypedSpec().Rules = []network.NfTablesRule{ + { + MatchIIfName: &network.NfTablesIfNameMatch{ + InterfaceNames: []string{"eth0", "eth1"}, + }, + Verdict: pointer.To(nethelpers.VerdictAccept), + }, + } + + s.Require().NoError(s.State().Create(s.Ctx(), chain)) + + // this seems to be a bug in the nft cli, it doesn't decoded the ifname anonymous set correctly + // it might be that google/nftables doesn't set some magic on the anonymous set for the nft CLI to pick it up (?) + s.checkNftOutput(`table inet talos-test { + chain test1 { + type filter hook input priority security; policy accept; + iifname { "", "" } accept + } +}`) +} + +func (s *NfTablesChainSuite) TestPolicyDrop() { + chain := network.NewNfTablesChain(network.NamespaceName, "test1") + chain.TypedSpec().Type = nethelpers.ChainTypeFilter + chain.TypedSpec().Hook = nethelpers.ChainHookInput + chain.TypedSpec().Priority = nethelpers.ChainPrioritySecurity + chain.TypedSpec().Policy = nethelpers.VerdictDrop + chain.TypedSpec().Rules = []network.NfTablesRule{ + { + Verdict: pointer.To(nethelpers.VerdictAccept), + }, + } + + s.Require().NoError(s.State().Create(s.Ctx(), chain)) + + s.checkNftOutput(`table inet talos-test { + chain test1 { + type filter hook input priority security; policy drop; + accept + } +}`) +} + +func (s *NfTablesChainSuite) TestICMPLimit() { + chain := network.NewNfTablesChain(network.NamespaceName, "test1") + chain.TypedSpec().Type = nethelpers.ChainTypeFilter + chain.TypedSpec().Hook = nethelpers.ChainHookInput + chain.TypedSpec().Priority = nethelpers.ChainPrioritySecurity + chain.TypedSpec().Policy = nethelpers.VerdictAccept + chain.TypedSpec().Rules = []network.NfTablesRule{ + { + MatchLayer4: &network.NfTablesLayer4Match{ + Protocol: nethelpers.ProtocolICMP, + }, + MatchLimit: &network.NfTablesLimitMatch{ + PacketRatePerSecond: 5, + }, + Verdict: pointer.To(nethelpers.VerdictAccept), + }, + } + + s.Require().NoError(s.State().Create(s.Ctx(), chain)) + + s.checkNftOutput(`table inet talos-test { + chain test1 { + type filter hook input priority security; policy accept; + meta l4proto icmp limit rate 5/second accept + } +}`) +} + +func (s *NfTablesChainSuite) TestConntrackCounter() { + chain := network.NewNfTablesChain(network.NamespaceName, "test1") + chain.TypedSpec().Type = nethelpers.ChainTypeFilter + chain.TypedSpec().Hook = nethelpers.ChainHookInput + chain.TypedSpec().Priority = nethelpers.ChainPrioritySecurity + chain.TypedSpec().Policy = nethelpers.VerdictAccept + chain.TypedSpec().Rules = []network.NfTablesRule{ + { + MatchConntrackState: &network.NfTablesConntrackStateMatch{ + States: []uint32{ + uint32(nethelpers.ConntrackStateEstablished), + uint32(nethelpers.ConntrackStateRelated), + }, + }, + Verdict: pointer.To(nethelpers.VerdictAccept), + }, + { + MatchConntrackState: &network.NfTablesConntrackStateMatch{ + States: []uint32{ + uint32(nethelpers.ConntrackStateInvalid), + }, + }, + AnonCounter: true, + Verdict: pointer.To(nethelpers.VerdictDrop), + }, + } + + s.Require().NoError(s.State().Create(s.Ctx(), chain)) + + s.checkNftOutput(`table inet talos-test { + chain test1 { + type filter hook input priority security; policy accept; + ct state { established, related } accept + ct state invalid counter packets 0 bytes 0 drop + } +}`) +} + func (s *NfTablesChainSuite) TestMatchMarksSubnets() { chain1 := network.NewNfTablesChain(network.NamespaceName, "test1") chain1.TypedSpec().Type = nethelpers.ChainTypeFilter chain1.TypedSpec().Hook = nethelpers.ChainHookInput chain1.TypedSpec().Priority = nethelpers.ChainPriorityFilter + chain1.TypedSpec().Policy = nethelpers.VerdictAccept chain1.TypedSpec().Rules = []network.NfTablesRule{ { MatchMark: &network.NfTablesMark{ @@ -96,6 +213,7 @@ func (s *NfTablesChainSuite) TestMatchMarksSubnets() { MatchSourceAddress: &network.NfTablesAddressMatch{ IncludeSubnets: []netip.Prefix{ netip.MustParsePrefix("10.0.0.0/8"), + netip.MustParsePrefix("0::/0"), }, ExcludeSubnets: []netip.Prefix{ netip.MustParsePrefix("10.3.0.0/16"), @@ -117,6 +235,7 @@ func (s *NfTablesChainSuite) TestMatchMarksSubnets() { chain2.TypedSpec().Type = nethelpers.ChainTypeFilter chain2.TypedSpec().Hook = nethelpers.ChainHookInput chain2.TypedSpec().Priority = nethelpers.ChainPriorityFilter + chain2.TypedSpec().Policy = nethelpers.VerdictAccept chain2.TypedSpec().Rules = []network.NfTablesRule{ { MatchDestinationAddress: &network.NfTablesAddressMatch{ @@ -137,7 +256,6 @@ func (s *NfTablesChainSuite) TestMatchMarksSubnets() { chain test1 { type filter hook input priority filter; policy accept; meta mark & 0x00000060 == 0x00000020 ip saddr != { 10.0.0.0-10.2.255.255, 10.4.0.0-10.255.255.255 } ip daddr { 192.168.0.0/24 } accept - meta mark & 0x00000060 == 0x00000020 meta nfproto ipv6 accept } chain test2 { @@ -152,6 +270,7 @@ func (s *NfTablesChainSuite) TestUpdateChains() { chain.TypedSpec().Type = nethelpers.ChainTypeFilter chain.TypedSpec().Hook = nethelpers.ChainHookInput chain.TypedSpec().Priority = nethelpers.ChainPriorityFilter + chain.TypedSpec().Policy = nethelpers.VerdictAccept chain.TypedSpec().Rules = []network.NfTablesRule{ { MatchSourceAddress: &network.NfTablesAddressMatch{ @@ -221,6 +340,7 @@ func (s *NfTablesChainSuite) TestClampMSS() { chain.TypedSpec().Type = nethelpers.ChainTypeFilter chain.TypedSpec().Hook = nethelpers.ChainHookInput chain.TypedSpec().Priority = nethelpers.ChainPriorityFilter + chain.TypedSpec().Policy = nethelpers.VerdictAccept chain.TypedSpec().Rules = []network.NfTablesRule{ { ClampMSS: &network.NfTablesClampMSS{ @@ -245,6 +365,7 @@ func (s *NfTablesChainSuite) TestL4Match() { chain.TypedSpec().Type = nethelpers.ChainTypeFilter chain.TypedSpec().Hook = nethelpers.ChainHookInput chain.TypedSpec().Priority = nethelpers.ChainPriorityFilter + chain.TypedSpec().Policy = nethelpers.VerdictAccept chain.TypedSpec().Rules = []network.NfTablesRule{ { MatchDestinationAddress: &network.NfTablesAddressMatch{ @@ -277,8 +398,90 @@ func (s *NfTablesChainSuite) TestL4Match() { s.checkNftOutput(`table inet talos-test { chain test-tcp { type filter hook input priority filter; policy accept; - ip daddr { 10.0.0.0/8 } tcp dport { 1023-1024, 1027-1028 } drop - ip6 daddr { 2001::/16 } tcp dport { 1023-1024, 1027-1028 } drop + ip daddr { 10.0.0.0/8 } tcp dport { 1023-1025, 1027-1029 } drop + ip6 daddr { 2001::/16 } tcp dport { 1023-1025, 1027-1029 } drop + } +}`) +} + +func (s *NfTablesChainSuite) TestL4Match2() { + chain := network.NewNfTablesChain(network.NamespaceName, "test-tcp") + chain.TypedSpec().Type = nethelpers.ChainTypeFilter + chain.TypedSpec().Hook = nethelpers.ChainHookInput + chain.TypedSpec().Priority = nethelpers.ChainPriorityFilter + chain.TypedSpec().Policy = nethelpers.VerdictAccept + chain.TypedSpec().Rules = []network.NfTablesRule{ + { + MatchSourceAddress: &network.NfTablesAddressMatch{ + IncludeSubnets: []netip.Prefix{ + netip.MustParsePrefix("10.0.0.0/8"), + }, + Invert: true, + }, + MatchLayer4: &network.NfTablesLayer4Match{ + Protocol: nethelpers.ProtocolTCP, + MatchDestinationPort: &network.NfTablesPortMatch{ + Ranges: []network.PortRange{ + { + Lo: 1023, + Hi: 1023, + }, + { + Lo: 1024, + Hi: 1024, + }, + }, + }, + }, + Verdict: pointer.To(nethelpers.VerdictDrop), + }, + } + + s.Require().NoError(s.State().Create(s.Ctx(), chain)) + + s.checkNftOutput(`table inet talos-test { + chain test-tcp { + type filter hook input priority filter; policy accept; + ip saddr != { 10.0.0.0/8 } tcp dport { 1023, 1024 } drop + meta nfproto ipv6 tcp dport { 1023, 1024 } drop + } +}`) +} + +func (s *NfTablesChainSuite) TestL4MatchAny() { + chain := network.NewNfTablesChain(network.NamespaceName, "test-tcp") + chain.TypedSpec().Type = nethelpers.ChainTypeFilter + chain.TypedSpec().Hook = nethelpers.ChainHookInput + chain.TypedSpec().Priority = nethelpers.ChainPriorityFilter + chain.TypedSpec().Policy = nethelpers.VerdictAccept + chain.TypedSpec().Rules = []network.NfTablesRule{ + { + MatchSourceAddress: &network.NfTablesAddressMatch{ + IncludeSubnets: []netip.Prefix{ + netip.MustParsePrefix("0.0.0.0/0"), + }, + }, + MatchLayer4: &network.NfTablesLayer4Match{ + Protocol: nethelpers.ProtocolTCP, + MatchDestinationPort: &network.NfTablesPortMatch{ + Ranges: []network.PortRange{ + { + Lo: 1023, + Hi: 1023, + }, + }, + }, + }, + Verdict: pointer.To(nethelpers.VerdictAccept), + }, + } + + s.Require().NoError(s.State().Create(s.Ctx(), chain)) + + s.checkNftOutput(`table inet talos-test { + chain test-tcp { + type filter hook input priority filter; policy accept; + meta nfproto ipv4 tcp dport { 1023 } accept } }`) } diff --git a/pkg/machinery/api/resource/definitions/enums/enums.pb.go b/pkg/machinery/api/resource/definitions/enums/enums.pb.go index 0911fd1b9..0e4846bb6 100644 --- a/pkg/machinery/api/resource/definitions/enums/enums.pb.go +++ b/pkg/machinery/api/resource/definitions/enums/enums.pb.go @@ -429,6 +429,62 @@ func (NethelpersBondXmitHashPolicy) EnumDescriptor() ([]byte, []int) { return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{6} } +// NethelpersConntrackState is a conntrack state. +type NethelpersConntrackState int32 + +const ( + NethelpersConntrackState_NETHELPERS_CONNTRACKSTATE_UNSPECIFIED NethelpersConntrackState = 0 + NethelpersConntrackState_CONNTRACK_STATE_NEW NethelpersConntrackState = 8 + NethelpersConntrackState_CONNTRACK_STATE_RELATED NethelpersConntrackState = 4 + NethelpersConntrackState_CONNTRACK_STATE_ESTABLISHED NethelpersConntrackState = 2 + NethelpersConntrackState_CONNTRACK_STATE_INVALID NethelpersConntrackState = 1 +) + +// Enum value maps for NethelpersConntrackState. +var ( + NethelpersConntrackState_name = map[int32]string{ + 0: "NETHELPERS_CONNTRACKSTATE_UNSPECIFIED", + 8: "CONNTRACK_STATE_NEW", + 4: "CONNTRACK_STATE_RELATED", + 2: "CONNTRACK_STATE_ESTABLISHED", + 1: "CONNTRACK_STATE_INVALID", + } + NethelpersConntrackState_value = map[string]int32{ + "NETHELPERS_CONNTRACKSTATE_UNSPECIFIED": 0, + "CONNTRACK_STATE_NEW": 8, + "CONNTRACK_STATE_RELATED": 4, + "CONNTRACK_STATE_ESTABLISHED": 2, + "CONNTRACK_STATE_INVALID": 1, + } +) + +func (x NethelpersConntrackState) Enum() *NethelpersConntrackState { + p := new(NethelpersConntrackState) + *p = x + return p +} + +func (x NethelpersConntrackState) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NethelpersConntrackState) Descriptor() protoreflect.EnumDescriptor { + return file_resource_definitions_enums_enums_proto_enumTypes[7].Descriptor() +} + +func (NethelpersConntrackState) Type() protoreflect.EnumType { + return &file_resource_definitions_enums_enums_proto_enumTypes[7] +} + +func (x NethelpersConntrackState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use NethelpersConntrackState.Descriptor instead. +func (NethelpersConntrackState) EnumDescriptor() ([]byte, []int) { + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{7} +} + // NethelpersDuplex wraps ethtool.Duplex for YAML marshaling. type NethelpersDuplex int32 @@ -463,11 +519,11 @@ func (x NethelpersDuplex) String() string { } func (NethelpersDuplex) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[7].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[8].Descriptor() } func (NethelpersDuplex) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[7] + return &file_resource_definitions_enums_enums_proto_enumTypes[8] } func (x NethelpersDuplex) Number() protoreflect.EnumNumber { @@ -476,7 +532,7 @@ func (x NethelpersDuplex) Number() protoreflect.EnumNumber { // Deprecated: Use NethelpersDuplex.Descriptor instead. func (NethelpersDuplex) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{7} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{8} } // NethelpersFailOverMAC is a MAC failover mode. @@ -513,11 +569,11 @@ func (x NethelpersFailOverMAC) String() string { } func (NethelpersFailOverMAC) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[8].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[9].Descriptor() } func (NethelpersFailOverMAC) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[8] + return &file_resource_definitions_enums_enums_proto_enumTypes[9] } func (x NethelpersFailOverMAC) Number() protoreflect.EnumNumber { @@ -526,7 +582,7 @@ func (x NethelpersFailOverMAC) Number() protoreflect.EnumNumber { // Deprecated: Use NethelpersFailOverMAC.Descriptor instead. func (NethelpersFailOverMAC) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{8} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{9} } // NethelpersFamily is a network family. @@ -563,11 +619,11 @@ func (x NethelpersFamily) String() string { } func (NethelpersFamily) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[9].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[10].Descriptor() } func (NethelpersFamily) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[9] + return &file_resource_definitions_enums_enums_proto_enumTypes[10] } func (x NethelpersFamily) Number() protoreflect.EnumNumber { @@ -576,7 +632,7 @@ func (x NethelpersFamily) Number() protoreflect.EnumNumber { // Deprecated: Use NethelpersFamily.Descriptor instead. func (NethelpersFamily) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{9} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{10} } // NethelpersLACPRate is a LACP rate. @@ -610,11 +666,11 @@ func (x NethelpersLACPRate) String() string { } func (NethelpersLACPRate) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[10].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[11].Descriptor() } func (NethelpersLACPRate) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[10] + return &file_resource_definitions_enums_enums_proto_enumTypes[11] } func (x NethelpersLACPRate) Number() protoreflect.EnumNumber { @@ -623,7 +679,7 @@ func (x NethelpersLACPRate) Number() protoreflect.EnumNumber { // Deprecated: Use NethelpersLACPRate.Descriptor instead. func (NethelpersLACPRate) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{10} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{11} } // NethelpersLinkType is a link type. @@ -882,11 +938,11 @@ func (x NethelpersLinkType) String() string { } func (NethelpersLinkType) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[11].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[12].Descriptor() } func (NethelpersLinkType) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[11] + return &file_resource_definitions_enums_enums_proto_enumTypes[12] } func (x NethelpersLinkType) Number() protoreflect.EnumNumber { @@ -895,7 +951,7 @@ func (x NethelpersLinkType) Number() protoreflect.EnumNumber { // Deprecated: Use NethelpersLinkType.Descriptor instead. func (NethelpersLinkType) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{11} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{12} } // NethelpersMatchOperator is a netfilter match operator. @@ -929,11 +985,11 @@ func (x NethelpersMatchOperator) String() string { } func (NethelpersMatchOperator) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[12].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[13].Descriptor() } func (NethelpersMatchOperator) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[12] + return &file_resource_definitions_enums_enums_proto_enumTypes[13] } func (x NethelpersMatchOperator) Number() protoreflect.EnumNumber { @@ -942,7 +998,7 @@ func (x NethelpersMatchOperator) Number() protoreflect.EnumNumber { // Deprecated: Use NethelpersMatchOperator.Descriptor instead. func (NethelpersMatchOperator) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{12} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{13} } // NethelpersNfTablesChainHook wraps nftables.ChainHook for YAML marshaling. @@ -985,11 +1041,11 @@ func (x NethelpersNfTablesChainHook) String() string { } func (NethelpersNfTablesChainHook) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[13].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[14].Descriptor() } func (NethelpersNfTablesChainHook) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[13] + return &file_resource_definitions_enums_enums_proto_enumTypes[14] } func (x NethelpersNfTablesChainHook) Number() protoreflect.EnumNumber { @@ -998,7 +1054,7 @@ func (x NethelpersNfTablesChainHook) Number() protoreflect.EnumNumber { // Deprecated: Use NethelpersNfTablesChainHook.Descriptor instead. func (NethelpersNfTablesChainHook) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{13} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{14} } // NethelpersNfTablesChainPriority wraps nftables.ChainPriority for YAML marshaling. @@ -1068,11 +1124,11 @@ func (x NethelpersNfTablesChainPriority) String() string { } func (NethelpersNfTablesChainPriority) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[14].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[15].Descriptor() } func (NethelpersNfTablesChainPriority) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[14] + return &file_resource_definitions_enums_enums_proto_enumTypes[15] } func (x NethelpersNfTablesChainPriority) Number() protoreflect.EnumNumber { @@ -1081,7 +1137,7 @@ func (x NethelpersNfTablesChainPriority) Number() protoreflect.EnumNumber { // Deprecated: Use NethelpersNfTablesChainPriority.Descriptor instead. func (NethelpersNfTablesChainPriority) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{14} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{15} } // NethelpersNfTablesVerdict wraps nftables.Verdict for YAML marshaling. @@ -1115,11 +1171,11 @@ func (x NethelpersNfTablesVerdict) String() string { } func (NethelpersNfTablesVerdict) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[15].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[16].Descriptor() } func (NethelpersNfTablesVerdict) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[15] + return &file_resource_definitions_enums_enums_proto_enumTypes[16] } func (x NethelpersNfTablesVerdict) Number() protoreflect.EnumNumber { @@ -1128,7 +1184,7 @@ func (x NethelpersNfTablesVerdict) Number() protoreflect.EnumNumber { // Deprecated: Use NethelpersNfTablesVerdict.Descriptor instead. func (NethelpersNfTablesVerdict) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{15} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{16} } // NethelpersOperationalState wraps rtnetlink.OperationalState for YAML marshaling. @@ -1177,11 +1233,11 @@ func (x NethelpersOperationalState) String() string { } func (NethelpersOperationalState) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[16].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[17].Descriptor() } func (NethelpersOperationalState) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[16] + return &file_resource_definitions_enums_enums_proto_enumTypes[17] } func (x NethelpersOperationalState) Number() protoreflect.EnumNumber { @@ -1190,7 +1246,7 @@ func (x NethelpersOperationalState) Number() protoreflect.EnumNumber { // Deprecated: Use NethelpersOperationalState.Descriptor instead. func (NethelpersOperationalState) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{16} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{17} } // NethelpersPort wraps ethtool.Port for YAML marshaling. @@ -1242,11 +1298,11 @@ func (x NethelpersPort) String() string { } func (NethelpersPort) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[17].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[18].Descriptor() } func (NethelpersPort) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[17] + return &file_resource_definitions_enums_enums_proto_enumTypes[18] } func (x NethelpersPort) Number() protoreflect.EnumNumber { @@ -1255,7 +1311,7 @@ func (x NethelpersPort) Number() protoreflect.EnumNumber { // Deprecated: Use NethelpersPort.Descriptor instead. func (NethelpersPort) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{17} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{18} } // NethelpersPrimaryReselect is an ARP targets mode. @@ -1292,11 +1348,11 @@ func (x NethelpersPrimaryReselect) String() string { } func (NethelpersPrimaryReselect) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[18].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[19].Descriptor() } func (NethelpersPrimaryReselect) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[18] + return &file_resource_definitions_enums_enums_proto_enumTypes[19] } func (x NethelpersPrimaryReselect) Number() protoreflect.EnumNumber { @@ -1305,7 +1361,7 @@ func (x NethelpersPrimaryReselect) Number() protoreflect.EnumNumber { // Deprecated: Use NethelpersPrimaryReselect.Descriptor instead. func (NethelpersPrimaryReselect) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{18} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{19} } // NethelpersProtocol is a inet protocol. @@ -1313,21 +1369,27 @@ type NethelpersProtocol int32 const ( NethelpersProtocol_NETHELPERS_PROTOCOL_UNSPECIFIED NethelpersProtocol = 0 + NethelpersProtocol_PROTOCOL_ICMP NethelpersProtocol = 1 NethelpersProtocol_PROTOCOL_TCP NethelpersProtocol = 6 NethelpersProtocol_PROTOCOL_UDP NethelpersProtocol = 17 + NethelpersProtocol_PROTOCOL_ICM_PV6 NethelpersProtocol = 58 ) // Enum value maps for NethelpersProtocol. var ( NethelpersProtocol_name = map[int32]string{ 0: "NETHELPERS_PROTOCOL_UNSPECIFIED", + 1: "PROTOCOL_ICMP", 6: "PROTOCOL_TCP", 17: "PROTOCOL_UDP", + 58: "PROTOCOL_ICM_PV6", } NethelpersProtocol_value = map[string]int32{ "NETHELPERS_PROTOCOL_UNSPECIFIED": 0, + "PROTOCOL_ICMP": 1, "PROTOCOL_TCP": 6, "PROTOCOL_UDP": 17, + "PROTOCOL_ICM_PV6": 58, } ) @@ -1342,11 +1404,11 @@ func (x NethelpersProtocol) String() string { } func (NethelpersProtocol) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[19].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[20].Descriptor() } func (NethelpersProtocol) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[19] + return &file_resource_definitions_enums_enums_proto_enumTypes[20] } func (x NethelpersProtocol) Number() protoreflect.EnumNumber { @@ -1355,7 +1417,7 @@ func (x NethelpersProtocol) Number() protoreflect.EnumNumber { // Deprecated: Use NethelpersProtocol.Descriptor instead. func (NethelpersProtocol) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{19} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{20} } // NethelpersRouteFlag wraps RTM_F_* constants. @@ -1410,11 +1472,11 @@ func (x NethelpersRouteFlag) String() string { } func (NethelpersRouteFlag) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[20].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[21].Descriptor() } func (NethelpersRouteFlag) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[20] + return &file_resource_definitions_enums_enums_proto_enumTypes[21] } func (x NethelpersRouteFlag) Number() protoreflect.EnumNumber { @@ -1423,7 +1485,7 @@ func (x NethelpersRouteFlag) Number() protoreflect.EnumNumber { // Deprecated: Use NethelpersRouteFlag.Descriptor instead. func (NethelpersRouteFlag) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{20} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{21} } // NethelpersRouteProtocol is a routing protocol. @@ -1517,11 +1579,11 @@ func (x NethelpersRouteProtocol) String() string { } func (NethelpersRouteProtocol) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[21].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[22].Descriptor() } func (NethelpersRouteProtocol) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[21] + return &file_resource_definitions_enums_enums_proto_enumTypes[22] } func (x NethelpersRouteProtocol) Number() protoreflect.EnumNumber { @@ -1530,7 +1592,7 @@ func (x NethelpersRouteProtocol) Number() protoreflect.EnumNumber { // Deprecated: Use NethelpersRouteProtocol.Descriptor instead. func (NethelpersRouteProtocol) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{21} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{22} } // NethelpersRouteType is a route type. @@ -1594,11 +1656,11 @@ func (x NethelpersRouteType) String() string { } func (NethelpersRouteType) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[22].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[23].Descriptor() } func (NethelpersRouteType) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[22] + return &file_resource_definitions_enums_enums_proto_enumTypes[23] } func (x NethelpersRouteType) Number() protoreflect.EnumNumber { @@ -1607,7 +1669,7 @@ func (x NethelpersRouteType) Number() protoreflect.EnumNumber { // Deprecated: Use NethelpersRouteType.Descriptor instead. func (NethelpersRouteType) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{22} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{23} } // NethelpersRoutingTable is a routing table ID. @@ -1647,11 +1709,11 @@ func (x NethelpersRoutingTable) String() string { } func (NethelpersRoutingTable) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[23].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[24].Descriptor() } func (NethelpersRoutingTable) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[23] + return &file_resource_definitions_enums_enums_proto_enumTypes[24] } func (x NethelpersRoutingTable) Number() protoreflect.EnumNumber { @@ -1660,7 +1722,7 @@ func (x NethelpersRoutingTable) Number() protoreflect.EnumNumber { // Deprecated: Use NethelpersRoutingTable.Descriptor instead. func (NethelpersRoutingTable) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{23} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{24} } // NethelpersScope is an address scope. @@ -1703,11 +1765,11 @@ func (x NethelpersScope) String() string { } func (NethelpersScope) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[24].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[25].Descriptor() } func (NethelpersScope) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[24] + return &file_resource_definitions_enums_enums_proto_enumTypes[25] } func (x NethelpersScope) Number() protoreflect.EnumNumber { @@ -1716,7 +1778,7 @@ func (x NethelpersScope) Number() protoreflect.EnumNumber { // Deprecated: Use NethelpersScope.Descriptor instead. func (NethelpersScope) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{24} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{25} } // NethelpersVLANProtocol is a VLAN protocol. @@ -1753,11 +1815,11 @@ func (x NethelpersVLANProtocol) String() string { } func (NethelpersVLANProtocol) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[25].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[26].Descriptor() } func (NethelpersVLANProtocol) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[25] + return &file_resource_definitions_enums_enums_proto_enumTypes[26] } func (x NethelpersVLANProtocol) Number() protoreflect.EnumNumber { @@ -1766,7 +1828,7 @@ func (x NethelpersVLANProtocol) Number() protoreflect.EnumNumber { // Deprecated: Use NethelpersVLANProtocol.Descriptor instead. func (NethelpersVLANProtocol) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{25} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{26} } // KubespanPeerState is KubeSpan peer current state. @@ -1803,11 +1865,11 @@ func (x KubespanPeerState) String() string { } func (KubespanPeerState) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[26].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[27].Descriptor() } func (KubespanPeerState) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[26] + return &file_resource_definitions_enums_enums_proto_enumTypes[27] } func (x KubespanPeerState) Number() protoreflect.EnumNumber { @@ -1816,7 +1878,7 @@ func (x KubespanPeerState) Number() protoreflect.EnumNumber { // Deprecated: Use KubespanPeerState.Descriptor instead. func (KubespanPeerState) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{26} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{27} } // NetworkConfigLayer describes network configuration layers, with lowest priority first. @@ -1859,11 +1921,11 @@ func (x NetworkConfigLayer) String() string { } func (NetworkConfigLayer) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[27].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[28].Descriptor() } func (NetworkConfigLayer) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[27] + return &file_resource_definitions_enums_enums_proto_enumTypes[28] } func (x NetworkConfigLayer) Number() protoreflect.EnumNumber { @@ -1872,7 +1934,7 @@ func (x NetworkConfigLayer) Number() protoreflect.EnumNumber { // Deprecated: Use NetworkConfigLayer.Descriptor instead. func (NetworkConfigLayer) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{27} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{28} } // NetworkOperator enumerates Talos network operators. @@ -1909,11 +1971,11 @@ func (x NetworkOperator) String() string { } func (NetworkOperator) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[28].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[29].Descriptor() } func (NetworkOperator) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[28] + return &file_resource_definitions_enums_enums_proto_enumTypes[29] } func (x NetworkOperator) Number() protoreflect.EnumNumber { @@ -1922,7 +1984,7 @@ func (x NetworkOperator) Number() protoreflect.EnumNumber { // Deprecated: Use NetworkOperator.Descriptor instead. func (NetworkOperator) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{28} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{29} } // RuntimeMachineStage describes the stage of the machine boot/run process. @@ -1977,11 +2039,11 @@ func (x RuntimeMachineStage) String() string { } func (RuntimeMachineStage) Descriptor() protoreflect.EnumDescriptor { - return file_resource_definitions_enums_enums_proto_enumTypes[29].Descriptor() + return file_resource_definitions_enums_enums_proto_enumTypes[30].Descriptor() } func (RuntimeMachineStage) Type() protoreflect.EnumType { - return &file_resource_definitions_enums_enums_proto_enumTypes[29] + return &file_resource_definitions_enums_enums_proto_enumTypes[30] } func (x RuntimeMachineStage) Number() protoreflect.EnumNumber { @@ -1990,7 +2052,7 @@ func (x RuntimeMachineStage) Number() protoreflect.EnumNumber { // Deprecated: Use RuntimeMachineStage.Descriptor instead. func (RuntimeMachineStage) EnumDescriptor() ([]byte, []int) { - return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{29} + return file_resource_definitions_enums_enums_proto_rawDescGZIP(), []int{30} } var File_resource_definitions_enums_enums_proto protoreflect.FileDescriptor @@ -2069,323 +2131,337 @@ var file_resource_definitions_enums_enums_proto_rawDesc = []byte{ 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x58, 0x4d, 0x49, 0x54, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x45, 0x4e, 0x43, 0x41, 0x50, 0x32, 0x33, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x58, 0x4d, 0x49, 0x54, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x45, - 0x4e, 0x43, 0x41, 0x50, 0x33, 0x34, 0x10, 0x04, 0x2a, 0x34, 0x0a, 0x10, 0x4e, 0x65, 0x74, 0x68, - 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x44, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x12, 0x08, 0x0a, 0x04, - 0x48, 0x41, 0x4c, 0x46, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x55, 0x4c, 0x4c, 0x10, 0x01, - 0x12, 0x0c, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0xff, 0x01, 0x2a, 0x63, - 0x0a, 0x15, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x46, 0x61, 0x69, 0x6c, - 0x4f, 0x76, 0x65, 0x72, 0x4d, 0x41, 0x43, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x41, 0x49, 0x4c, 0x5f, - 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x4d, 0x41, 0x43, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, - 0x18, 0x0a, 0x14, 0x46, 0x41, 0x49, 0x4c, 0x5f, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x4d, 0x41, 0x43, - 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x41, 0x49, - 0x4c, 0x5f, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x4d, 0x41, 0x43, 0x5f, 0x46, 0x4f, 0x4c, 0x4c, 0x4f, - 0x57, 0x10, 0x02, 0x2a, 0x59, 0x0a, 0x10, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, - 0x73, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x21, 0x0a, 0x1d, 0x4e, 0x45, 0x54, 0x48, 0x45, - 0x4c, 0x50, 0x45, 0x52, 0x53, 0x5f, 0x46, 0x41, 0x4d, 0x49, 0x4c, 0x59, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x41, - 0x4d, 0x49, 0x4c, 0x59, 0x5f, 0x49, 0x4e, 0x45, 0x54, 0x34, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, - 0x46, 0x41, 0x4d, 0x49, 0x4c, 0x59, 0x5f, 0x49, 0x4e, 0x45, 0x54, 0x36, 0x10, 0x0a, 0x2a, 0x3c, - 0x0a, 0x12, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x4c, 0x41, 0x43, 0x50, - 0x52, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x43, 0x50, 0x5f, 0x52, 0x41, 0x54, - 0x45, 0x5f, 0x53, 0x4c, 0x4f, 0x57, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x43, 0x50, - 0x5f, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x10, 0x01, 0x2a, 0x93, 0x0b, 0x0a, - 0x12, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x4e, 0x45, 0x54, 0x52, - 0x4f, 0x4d, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x45, 0x54, 0x48, - 0x45, 0x52, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x45, 0x45, 0x54, - 0x48, 0x45, 0x52, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x41, 0x58, - 0x32, 0x35, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x50, 0x52, 0x4f, - 0x4e, 0x45, 0x54, 0x10, 0x04, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x43, 0x48, - 0x41, 0x4f, 0x53, 0x10, 0x05, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x49, 0x45, - 0x45, 0x38, 0x30, 0x32, 0x10, 0x06, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x41, - 0x52, 0x43, 0x4e, 0x45, 0x54, 0x10, 0x07, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, - 0x41, 0x54, 0x41, 0x4c, 0x4b, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, - 0x44, 0x4c, 0x43, 0x49, 0x10, 0x0f, 0x12, 0x0c, 0x0a, 0x08, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x41, - 0x54, 0x4d, 0x10, 0x13, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x4d, 0x45, 0x54, - 0x52, 0x49, 0x43, 0x4f, 0x4d, 0x10, 0x17, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, - 0x49, 0x45, 0x45, 0x45, 0x31, 0x33, 0x39, 0x34, 0x10, 0x18, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x49, - 0x4e, 0x4b, 0x5f, 0x45, 0x55, 0x49, 0x36, 0x34, 0x10, 0x1b, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x49, - 0x4e, 0x4b, 0x5f, 0x49, 0x4e, 0x46, 0x49, 0x4e, 0x49, 0x42, 0x41, 0x4e, 0x44, 0x10, 0x20, 0x12, - 0x0e, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x53, 0x4c, 0x49, 0x50, 0x10, 0x80, 0x02, 0x12, - 0x0f, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x4c, 0x49, 0x50, 0x10, 0x81, 0x02, - 0x12, 0x0f, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x53, 0x4c, 0x49, 0x50, 0x36, 0x10, 0x82, - 0x02, 0x12, 0x10, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x4c, 0x49, 0x50, 0x36, - 0x10, 0x83, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x52, 0x53, 0x52, 0x56, - 0x44, 0x10, 0x84, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x41, 0x44, 0x41, - 0x50, 0x54, 0x10, 0x88, 0x02, 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x52, 0x4f, - 0x53, 0x45, 0x10, 0x8e, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x58, 0x32, - 0x35, 0x10, 0x8f, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x48, 0x57, 0x58, - 0x32, 0x35, 0x10, 0x90, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x43, 0x41, - 0x4e, 0x10, 0x98, 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x50, 0x50, 0x50, - 0x10, 0x80, 0x04, 0x12, 0x0f, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x43, 0x49, 0x53, 0x43, - 0x4f, 0x10, 0x81, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x48, 0x44, 0x4c, - 0x43, 0x10, 0x81, 0x04, 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x4c, 0x41, 0x50, - 0x42, 0x10, 0x84, 0x04, 0x12, 0x0f, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x44, 0x44, 0x43, - 0x4d, 0x50, 0x10, 0x85, 0x04, 0x12, 0x11, 0x0a, 0x0c, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x52, 0x41, - 0x57, 0x48, 0x44, 0x4c, 0x43, 0x10, 0x86, 0x04, 0x12, 0x10, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x4b, - 0x5f, 0x54, 0x55, 0x4e, 0x4e, 0x45, 0x4c, 0x10, 0x80, 0x06, 0x12, 0x11, 0x0a, 0x0c, 0x4c, 0x49, - 0x4e, 0x4b, 0x5f, 0x54, 0x55, 0x4e, 0x4e, 0x45, 0x4c, 0x36, 0x10, 0x81, 0x06, 0x12, 0x0e, 0x0a, - 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x52, 0x41, 0x44, 0x10, 0x82, 0x06, 0x12, 0x0e, 0x0a, - 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x53, 0x4b, 0x49, 0x50, 0x10, 0x83, 0x06, 0x12, 0x11, 0x0a, - 0x0c, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x4c, 0x4f, 0x4f, 0x50, 0x42, 0x43, 0x4b, 0x10, 0x84, 0x06, - 0x12, 0x12, 0x0a, 0x0d, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x54, 0x4c, - 0x4b, 0x10, 0x85, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x44, 0x44, - 0x49, 0x10, 0x86, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x42, 0x49, 0x46, - 0x10, 0x87, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x53, 0x49, 0x54, 0x10, - 0x88, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x49, 0x50, 0x44, 0x44, 0x50, - 0x10, 0x89, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x49, 0x50, 0x47, 0x52, - 0x45, 0x10, 0x8a, 0x06, 0x12, 0x10, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x50, 0x49, 0x4d, - 0x52, 0x45, 0x47, 0x10, 0x8b, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x48, - 0x49, 0x50, 0x50, 0x49, 0x10, 0x8c, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, - 0x41, 0x53, 0x48, 0x10, 0x8d, 0x06, 0x12, 0x10, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x45, - 0x43, 0x4f, 0x4e, 0x45, 0x54, 0x10, 0x8e, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, - 0x5f, 0x49, 0x52, 0x44, 0x41, 0x10, 0x8f, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, - 0x5f, 0x46, 0x43, 0x50, 0x50, 0x10, 0x90, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, - 0x5f, 0x46, 0x43, 0x41, 0x4c, 0x10, 0x91, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, - 0x5f, 0x46, 0x43, 0x50, 0x4c, 0x10, 0x92, 0x06, 0x12, 0x12, 0x0a, 0x0d, 0x4c, 0x49, 0x4e, 0x4b, - 0x5f, 0x46, 0x43, 0x46, 0x41, 0x42, 0x52, 0x49, 0x43, 0x10, 0x93, 0x06, 0x12, 0x13, 0x0a, 0x0e, - 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x43, 0x46, 0x41, 0x42, 0x52, 0x49, 0x43, 0x31, 0x10, 0x94, + 0x4e, 0x43, 0x41, 0x50, 0x33, 0x34, 0x10, 0x04, 0x2a, 0xb9, 0x01, 0x0a, 0x18, 0x4e, 0x65, 0x74, + 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x0a, 0x25, 0x4e, 0x45, 0x54, 0x48, 0x45, 0x4c, 0x50, + 0x45, 0x52, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x54, 0x52, 0x41, 0x43, 0x4b, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x17, 0x0a, 0x13, 0x43, 0x4f, 0x4e, 0x4e, 0x54, 0x52, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x45, 0x57, 0x10, 0x08, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x4f, 0x4e, + 0x4e, 0x54, 0x52, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x4c, + 0x41, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x1f, 0x0a, 0x1b, 0x43, 0x4f, 0x4e, 0x4e, 0x54, 0x52, + 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x53, 0x54, 0x41, 0x42, 0x4c, + 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x4f, 0x4e, 0x4e, 0x54, + 0x52, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, + 0x49, 0x44, 0x10, 0x01, 0x2a, 0x34, 0x0a, 0x10, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, + 0x72, 0x73, 0x44, 0x75, 0x70, 0x6c, 0x65, 0x78, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x41, 0x4c, 0x46, + 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x55, 0x4c, 0x4c, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x07, + 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0xff, 0x01, 0x2a, 0x63, 0x0a, 0x15, 0x4e, 0x65, + 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x46, 0x61, 0x69, 0x6c, 0x4f, 0x76, 0x65, 0x72, + 0x4d, 0x41, 0x43, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x41, 0x49, 0x4c, 0x5f, 0x4f, 0x56, 0x45, 0x52, + 0x5f, 0x4d, 0x41, 0x43, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x46, + 0x41, 0x49, 0x4c, 0x5f, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x4d, 0x41, 0x43, 0x5f, 0x41, 0x43, 0x54, + 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x41, 0x49, 0x4c, 0x5f, 0x4f, 0x56, + 0x45, 0x52, 0x5f, 0x4d, 0x41, 0x43, 0x5f, 0x46, 0x4f, 0x4c, 0x4c, 0x4f, 0x57, 0x10, 0x02, 0x2a, + 0x59, 0x0a, 0x10, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x46, 0x61, 0x6d, + 0x69, 0x6c, 0x79, 0x12, 0x21, 0x0a, 0x1d, 0x4e, 0x45, 0x54, 0x48, 0x45, 0x4c, 0x50, 0x45, 0x52, + 0x53, 0x5f, 0x46, 0x41, 0x4d, 0x49, 0x4c, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x41, 0x4d, 0x49, 0x4c, 0x59, + 0x5f, 0x49, 0x4e, 0x45, 0x54, 0x34, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x41, 0x4d, 0x49, + 0x4c, 0x59, 0x5f, 0x49, 0x4e, 0x45, 0x54, 0x36, 0x10, 0x0a, 0x2a, 0x3c, 0x0a, 0x12, 0x4e, 0x65, + 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x4c, 0x41, 0x43, 0x50, 0x52, 0x61, 0x74, 0x65, + 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x43, 0x50, 0x5f, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x4c, + 0x4f, 0x57, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x43, 0x50, 0x5f, 0x52, 0x41, 0x54, + 0x45, 0x5f, 0x46, 0x41, 0x53, 0x54, 0x10, 0x01, 0x2a, 0x93, 0x0b, 0x0a, 0x12, 0x4e, 0x65, 0x74, + 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x0f, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x4e, 0x45, 0x54, 0x52, 0x4f, 0x4d, 0x10, 0x00, + 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x45, 0x54, 0x48, 0x45, 0x52, 0x10, 0x01, + 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x45, 0x45, 0x54, 0x48, 0x45, 0x52, 0x10, + 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x41, 0x58, 0x32, 0x35, 0x10, 0x03, + 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x50, 0x52, 0x4f, 0x4e, 0x45, 0x54, 0x10, + 0x04, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x43, 0x48, 0x41, 0x4f, 0x53, 0x10, + 0x05, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x49, 0x45, 0x45, 0x38, 0x30, 0x32, + 0x10, 0x06, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x41, 0x52, 0x43, 0x4e, 0x45, + 0x54, 0x10, 0x07, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x41, 0x54, 0x41, 0x4c, + 0x4b, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x44, 0x4c, 0x43, 0x49, + 0x10, 0x0f, 0x12, 0x0c, 0x0a, 0x08, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x41, 0x54, 0x4d, 0x10, 0x13, + 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x4f, + 0x4d, 0x10, 0x17, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x49, 0x45, 0x45, 0x45, + 0x31, 0x33, 0x39, 0x34, 0x10, 0x18, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x45, + 0x55, 0x49, 0x36, 0x34, 0x10, 0x1b, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x49, + 0x4e, 0x46, 0x49, 0x4e, 0x49, 0x42, 0x41, 0x4e, 0x44, 0x10, 0x20, 0x12, 0x0e, 0x0a, 0x09, 0x4c, + 0x49, 0x4e, 0x4b, 0x5f, 0x53, 0x4c, 0x49, 0x50, 0x10, 0x80, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x4c, + 0x49, 0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x4c, 0x49, 0x50, 0x10, 0x81, 0x02, 0x12, 0x0f, 0x0a, 0x0a, + 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x53, 0x4c, 0x49, 0x50, 0x36, 0x10, 0x82, 0x02, 0x12, 0x10, 0x0a, + 0x0b, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x4c, 0x49, 0x50, 0x36, 0x10, 0x83, 0x02, 0x12, + 0x0f, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x52, 0x53, 0x52, 0x56, 0x44, 0x10, 0x84, 0x02, + 0x12, 0x0f, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x41, 0x44, 0x41, 0x50, 0x54, 0x10, 0x88, + 0x02, 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x52, 0x4f, 0x53, 0x45, 0x10, 0x8e, + 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x58, 0x32, 0x35, 0x10, 0x8f, 0x02, + 0x12, 0x0f, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x48, 0x57, 0x58, 0x32, 0x35, 0x10, 0x90, + 0x02, 0x12, 0x0d, 0x0a, 0x08, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x43, 0x41, 0x4e, 0x10, 0x98, 0x02, + 0x12, 0x0d, 0x0a, 0x08, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x50, 0x50, 0x50, 0x10, 0x80, 0x04, 0x12, + 0x0f, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x43, 0x49, 0x53, 0x43, 0x4f, 0x10, 0x81, 0x04, + 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x48, 0x44, 0x4c, 0x43, 0x10, 0x81, 0x04, + 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x4c, 0x41, 0x50, 0x42, 0x10, 0x84, 0x04, + 0x12, 0x0f, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x44, 0x44, 0x43, 0x4d, 0x50, 0x10, 0x85, + 0x04, 0x12, 0x11, 0x0a, 0x0c, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x52, 0x41, 0x57, 0x48, 0x44, 0x4c, + 0x43, 0x10, 0x86, 0x04, 0x12, 0x10, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x54, 0x55, 0x4e, + 0x4e, 0x45, 0x4c, 0x10, 0x80, 0x06, 0x12, 0x11, 0x0a, 0x0c, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x54, + 0x55, 0x4e, 0x4e, 0x45, 0x4c, 0x36, 0x10, 0x81, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x49, 0x4e, + 0x4b, 0x5f, 0x46, 0x52, 0x41, 0x44, 0x10, 0x82, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x49, 0x4e, + 0x4b, 0x5f, 0x53, 0x4b, 0x49, 0x50, 0x10, 0x83, 0x06, 0x12, 0x11, 0x0a, 0x0c, 0x4c, 0x49, 0x4e, + 0x4b, 0x5f, 0x4c, 0x4f, 0x4f, 0x50, 0x42, 0x43, 0x4b, 0x10, 0x84, 0x06, 0x12, 0x12, 0x0a, 0x0d, + 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x54, 0x4c, 0x4b, 0x10, 0x85, 0x06, + 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x44, 0x44, 0x49, 0x10, 0x86, 0x06, + 0x12, 0x0d, 0x0a, 0x08, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x42, 0x49, 0x46, 0x10, 0x87, 0x06, 0x12, + 0x0d, 0x0a, 0x08, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x53, 0x49, 0x54, 0x10, 0x88, 0x06, 0x12, 0x0f, + 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x49, 0x50, 0x44, 0x44, 0x50, 0x10, 0x89, 0x06, 0x12, + 0x0f, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x49, 0x50, 0x47, 0x52, 0x45, 0x10, 0x8a, 0x06, + 0x12, 0x10, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x50, 0x49, 0x4d, 0x52, 0x45, 0x47, 0x10, + 0x8b, 0x06, 0x12, 0x0f, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x48, 0x49, 0x50, 0x50, 0x49, + 0x10, 0x8c, 0x06, 0x12, 0x0d, 0x0a, 0x08, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x41, 0x53, 0x48, 0x10, + 0x8d, 0x06, 0x12, 0x10, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x45, 0x43, 0x4f, 0x4e, 0x45, + 0x54, 0x10, 0x8e, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x49, 0x52, 0x44, + 0x41, 0x10, 0x8f, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x43, 0x50, + 0x50, 0x10, 0x90, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x43, 0x41, + 0x4c, 0x10, 0x91, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x43, 0x50, + 0x4c, 0x10, 0x92, 0x06, 0x12, 0x12, 0x0a, 0x0d, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x43, 0x46, + 0x41, 0x42, 0x52, 0x49, 0x43, 0x10, 0x93, 0x06, 0x12, 0x13, 0x0a, 0x0e, 0x4c, 0x49, 0x4e, 0x4b, + 0x5f, 0x46, 0x43, 0x46, 0x41, 0x42, 0x52, 0x49, 0x43, 0x31, 0x10, 0x94, 0x06, 0x12, 0x13, 0x0a, + 0x0e, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x43, 0x46, 0x41, 0x42, 0x52, 0x49, 0x43, 0x32, 0x10, + 0x95, 0x06, 0x12, 0x13, 0x0a, 0x0e, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x43, 0x46, 0x41, 0x42, + 0x52, 0x49, 0x43, 0x33, 0x10, 0x96, 0x06, 0x12, 0x13, 0x0a, 0x0e, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, + 0x46, 0x43, 0x46, 0x41, 0x42, 0x52, 0x49, 0x43, 0x34, 0x10, 0x97, 0x06, 0x12, 0x13, 0x0a, 0x0e, + 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x43, 0x46, 0x41, 0x42, 0x52, 0x49, 0x43, 0x35, 0x10, 0x98, 0x06, 0x12, 0x13, 0x0a, 0x0e, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x43, 0x46, 0x41, 0x42, 0x52, - 0x49, 0x43, 0x32, 0x10, 0x95, 0x06, 0x12, 0x13, 0x0a, 0x0e, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, - 0x43, 0x46, 0x41, 0x42, 0x52, 0x49, 0x43, 0x33, 0x10, 0x96, 0x06, 0x12, 0x13, 0x0a, 0x0e, 0x4c, - 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x43, 0x46, 0x41, 0x42, 0x52, 0x49, 0x43, 0x34, 0x10, 0x97, 0x06, + 0x49, 0x43, 0x36, 0x10, 0x99, 0x06, 0x12, 0x13, 0x0a, 0x0e, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, + 0x43, 0x46, 0x41, 0x42, 0x52, 0x49, 0x43, 0x37, 0x10, 0x9a, 0x06, 0x12, 0x13, 0x0a, 0x0e, 0x4c, + 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x43, 0x46, 0x41, 0x42, 0x52, 0x49, 0x43, 0x38, 0x10, 0x9b, 0x06, 0x12, 0x13, 0x0a, 0x0e, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x43, 0x46, 0x41, 0x42, 0x52, 0x49, - 0x43, 0x35, 0x10, 0x98, 0x06, 0x12, 0x13, 0x0a, 0x0e, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x43, - 0x46, 0x41, 0x42, 0x52, 0x49, 0x43, 0x36, 0x10, 0x99, 0x06, 0x12, 0x13, 0x0a, 0x0e, 0x4c, 0x49, - 0x4e, 0x4b, 0x5f, 0x46, 0x43, 0x46, 0x41, 0x42, 0x52, 0x49, 0x43, 0x37, 0x10, 0x9a, 0x06, 0x12, - 0x13, 0x0a, 0x0e, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x43, 0x46, 0x41, 0x42, 0x52, 0x49, 0x43, - 0x38, 0x10, 0x9b, 0x06, 0x12, 0x13, 0x0a, 0x0e, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x43, 0x46, - 0x41, 0x42, 0x52, 0x49, 0x43, 0x39, 0x10, 0x9c, 0x06, 0x12, 0x14, 0x0a, 0x0f, 0x4c, 0x49, 0x4e, - 0x4b, 0x5f, 0x46, 0x43, 0x46, 0x41, 0x42, 0x52, 0x49, 0x43, 0x31, 0x30, 0x10, 0x9d, 0x06, 0x12, - 0x14, 0x0a, 0x0f, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x43, 0x46, 0x41, 0x42, 0x52, 0x49, 0x43, - 0x31, 0x31, 0x10, 0x9e, 0x06, 0x12, 0x14, 0x0a, 0x0f, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x43, - 0x46, 0x41, 0x42, 0x52, 0x49, 0x43, 0x31, 0x32, 0x10, 0x9f, 0x06, 0x12, 0x12, 0x0a, 0x0d, 0x4c, - 0x49, 0x4e, 0x4b, 0x5f, 0x49, 0x45, 0x45, 0x38, 0x30, 0x32, 0x54, 0x52, 0x10, 0xa0, 0x06, 0x12, - 0x12, 0x0a, 0x0d, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x49, 0x45, 0x45, 0x38, 0x30, 0x32, 0x31, 0x31, - 0x10, 0xa1, 0x06, 0x12, 0x17, 0x0a, 0x12, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x49, 0x45, 0x45, 0x38, - 0x30, 0x32, 0x31, 0x31, 0x50, 0x52, 0x49, 0x53, 0x4d, 0x10, 0xa2, 0x06, 0x12, 0x1b, 0x0a, 0x16, - 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x49, 0x45, 0x45, 0x38, 0x30, 0x32, 0x31, 0x31, 0x5f, 0x52, 0x41, - 0x44, 0x49, 0x4f, 0x54, 0x41, 0x50, 0x10, 0xa3, 0x06, 0x12, 0x14, 0x0a, 0x0f, 0x4c, 0x49, 0x4e, - 0x4b, 0x5f, 0x49, 0x45, 0x45, 0x38, 0x30, 0x32, 0x31, 0x31, 0x35, 0x34, 0x10, 0xa4, 0x06, 0x12, - 0x1b, 0x0a, 0x16, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x49, 0x45, 0x45, 0x38, 0x30, 0x32, 0x31, 0x31, - 0x35, 0x34, 0x4d, 0x4f, 0x4e, 0x49, 0x54, 0x4f, 0x52, 0x10, 0xa5, 0x06, 0x12, 0x10, 0x0a, 0x0b, - 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x54, 0x10, 0xb4, 0x06, 0x12, 0x14, - 0x0a, 0x0f, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x54, 0x50, 0x49, 0x50, - 0x45, 0x10, 0xb5, 0x06, 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x43, 0x41, 0x49, - 0x46, 0x10, 0xb6, 0x06, 0x12, 0x10, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x49, 0x50, 0x36, - 0x47, 0x52, 0x45, 0x10, 0xb7, 0x06, 0x12, 0x11, 0x0a, 0x0c, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x4e, - 0x45, 0x54, 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0xb8, 0x06, 0x12, 0x11, 0x0a, 0x0c, 0x4c, 0x49, 0x4e, - 0x4b, 0x36, 0x5f, 0x4c, 0x4f, 0x57, 0x50, 0x41, 0x4e, 0x10, 0xb9, 0x06, 0x12, 0x0f, 0x0a, 0x09, - 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x56, 0x4f, 0x49, 0x44, 0x10, 0xff, 0xff, 0x03, 0x12, 0x0f, 0x0a, - 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0xfe, 0xff, 0x03, 0x1a, 0x02, - 0x10, 0x01, 0x2a, 0x45, 0x0a, 0x17, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, - 0x0e, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, - 0x00, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x4e, 0x4f, - 0x54, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, 0x01, 0x2a, 0x99, 0x01, 0x0a, 0x1b, 0x4e, 0x65, - 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x48, 0x41, - 0x49, 0x4e, 0x5f, 0x48, 0x4f, 0x4f, 0x4b, 0x5f, 0x50, 0x52, 0x45, 0x52, 0x4f, 0x55, 0x54, 0x49, - 0x4e, 0x47, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x48, 0x4f, - 0x4f, 0x4b, 0x5f, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x48, - 0x41, 0x49, 0x4e, 0x5f, 0x48, 0x4f, 0x4f, 0x4b, 0x5f, 0x46, 0x4f, 0x52, 0x57, 0x41, 0x52, 0x44, - 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x48, 0x4f, 0x4f, 0x4b, - 0x5f, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x48, 0x41, - 0x49, 0x4e, 0x5f, 0x48, 0x4f, 0x4f, 0x4b, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x52, 0x4f, 0x55, 0x54, - 0x49, 0x4e, 0x47, 0x10, 0x04, 0x2a, 0xa3, 0x04, 0x0a, 0x1f, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, + 0x43, 0x39, 0x10, 0x9c, 0x06, 0x12, 0x14, 0x0a, 0x0f, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x43, + 0x46, 0x41, 0x42, 0x52, 0x49, 0x43, 0x31, 0x30, 0x10, 0x9d, 0x06, 0x12, 0x14, 0x0a, 0x0f, 0x4c, + 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x43, 0x46, 0x41, 0x42, 0x52, 0x49, 0x43, 0x31, 0x31, 0x10, 0x9e, + 0x06, 0x12, 0x14, 0x0a, 0x0f, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x43, 0x46, 0x41, 0x42, 0x52, + 0x49, 0x43, 0x31, 0x32, 0x10, 0x9f, 0x06, 0x12, 0x12, 0x0a, 0x0d, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, + 0x49, 0x45, 0x45, 0x38, 0x30, 0x32, 0x54, 0x52, 0x10, 0xa0, 0x06, 0x12, 0x12, 0x0a, 0x0d, 0x4c, + 0x49, 0x4e, 0x4b, 0x5f, 0x49, 0x45, 0x45, 0x38, 0x30, 0x32, 0x31, 0x31, 0x10, 0xa1, 0x06, 0x12, + 0x17, 0x0a, 0x12, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x49, 0x45, 0x45, 0x38, 0x30, 0x32, 0x31, 0x31, + 0x50, 0x52, 0x49, 0x53, 0x4d, 0x10, 0xa2, 0x06, 0x12, 0x1b, 0x0a, 0x16, 0x4c, 0x49, 0x4e, 0x4b, + 0x5f, 0x49, 0x45, 0x45, 0x38, 0x30, 0x32, 0x31, 0x31, 0x5f, 0x52, 0x41, 0x44, 0x49, 0x4f, 0x54, + 0x41, 0x50, 0x10, 0xa3, 0x06, 0x12, 0x14, 0x0a, 0x0f, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x49, 0x45, + 0x45, 0x38, 0x30, 0x32, 0x31, 0x31, 0x35, 0x34, 0x10, 0xa4, 0x06, 0x12, 0x1b, 0x0a, 0x16, 0x4c, + 0x49, 0x4e, 0x4b, 0x5f, 0x49, 0x45, 0x45, 0x38, 0x30, 0x32, 0x31, 0x31, 0x35, 0x34, 0x4d, 0x4f, + 0x4e, 0x49, 0x54, 0x4f, 0x52, 0x10, 0xa5, 0x06, 0x12, 0x10, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x4b, + 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x54, 0x10, 0xb4, 0x06, 0x12, 0x14, 0x0a, 0x0f, 0x4c, 0x49, + 0x4e, 0x4b, 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x54, 0x50, 0x49, 0x50, 0x45, 0x10, 0xb5, 0x06, + 0x12, 0x0e, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x43, 0x41, 0x49, 0x46, 0x10, 0xb6, 0x06, + 0x12, 0x10, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x49, 0x50, 0x36, 0x47, 0x52, 0x45, 0x10, + 0xb7, 0x06, 0x12, 0x11, 0x0a, 0x0c, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x4e, 0x45, 0x54, 0x4c, 0x49, + 0x4e, 0x4b, 0x10, 0xb8, 0x06, 0x12, 0x11, 0x0a, 0x0c, 0x4c, 0x49, 0x4e, 0x4b, 0x36, 0x5f, 0x4c, + 0x4f, 0x57, 0x50, 0x41, 0x4e, 0x10, 0xb9, 0x06, 0x12, 0x0f, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x4b, + 0x5f, 0x56, 0x4f, 0x49, 0x44, 0x10, 0xff, 0xff, 0x03, 0x12, 0x0f, 0x0a, 0x09, 0x4c, 0x49, 0x4e, + 0x4b, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0xfe, 0xff, 0x03, 0x1a, 0x02, 0x10, 0x01, 0x2a, 0x45, + 0x0a, 0x17, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x0e, 0x4f, 0x50, 0x45, + 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x16, 0x0a, + 0x12, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x51, + 0x55, 0x41, 0x4c, 0x10, 0x01, 0x2a, 0x99, 0x01, 0x0a, 0x1b, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x30, 0x0a, 0x2c, 0x4e, 0x45, 0x54, - 0x48, 0x45, 0x4c, 0x50, 0x45, 0x52, 0x53, 0x5f, 0x4e, 0x46, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x53, - 0x43, 0x48, 0x41, 0x49, 0x4e, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x14, 0x43, - 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x46, 0x49, - 0x52, 0x53, 0x54, 0x10, 0x80, 0x80, 0x80, 0x80, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x2c, - 0x0a, 0x1f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, - 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x54, 0x52, 0x41, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x46, 0x52, 0x41, - 0x47, 0x10, 0xf0, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x1f, 0x0a, 0x12, - 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x52, - 0x41, 0x57, 0x10, 0xd4, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x2a, 0x0a, - 0x1d, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, - 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x4e, 0x55, 0x58, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x10, 0x9f, - 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x25, 0x0a, 0x18, 0x43, 0x48, 0x41, - 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, - 0x54, 0x52, 0x41, 0x43, 0x4b, 0x10, 0xb8, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, - 0x12, 0x22, 0x0a, 0x15, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, - 0x54, 0x59, 0x5f, 0x4d, 0x41, 0x4e, 0x47, 0x4c, 0x45, 0x10, 0xea, 0xfe, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x01, 0x12, 0x24, 0x0a, 0x17, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x50, 0x52, - 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x41, 0x54, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x10, - 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x48, - 0x41, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x46, 0x49, 0x4c, - 0x54, 0x45, 0x52, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x50, - 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x53, 0x45, 0x43, 0x55, 0x52, 0x49, 0x54, 0x59, - 0x10, 0x32, 0x12, 0x1d, 0x0a, 0x19, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x49, 0x4f, - 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, 0x41, 0x54, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x10, - 0x64, 0x12, 0x21, 0x0a, 0x1c, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, - 0x49, 0x54, 0x59, 0x5f, 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x4e, 0x55, 0x58, 0x5f, 0x4c, 0x41, 0x53, - 0x54, 0x10, 0xe1, 0x01, 0x12, 0x24, 0x0a, 0x1f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x50, 0x52, - 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x54, 0x52, 0x41, 0x43, 0x4b, - 0x5f, 0x48, 0x45, 0x4c, 0x50, 0x45, 0x52, 0x10, 0xac, 0x02, 0x12, 0x1b, 0x0a, 0x13, 0x43, 0x48, - 0x41, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4c, 0x41, 0x53, - 0x54, 0x10, 0xff, 0xff, 0xff, 0xff, 0x07, 0x1a, 0x02, 0x10, 0x01, 0x2a, 0x41, 0x0a, 0x19, 0x4e, - 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x12, 0x10, 0x0a, 0x0c, 0x56, 0x45, 0x52, 0x44, - 0x49, 0x43, 0x54, 0x5f, 0x44, 0x52, 0x4f, 0x50, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x56, 0x45, - 0x52, 0x44, 0x49, 0x43, 0x54, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x50, 0x54, 0x10, 0x01, 0x2a, 0xc9, - 0x01, 0x0a, 0x1a, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x4f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, - 0x12, 0x4f, 0x50, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x4f, 0x50, 0x45, 0x52, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, 0x4e, 0x54, 0x10, - 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x4f, 0x50, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, - 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x4f, 0x50, 0x45, 0x52, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x4c, 0x41, 0x59, 0x45, 0x52, - 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x45, 0x52, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, - 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x4f, - 0x52, 0x4d, 0x41, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, 0x4f, 0x50, 0x45, 0x52, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x50, 0x10, 0x06, 0x2a, 0x72, 0x0a, 0x0e, 0x4e, 0x65, - 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x0c, - 0x54, 0x57, 0x49, 0x53, 0x54, 0x45, 0x44, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x10, 0x00, 0x12, 0x07, - 0x0a, 0x03, 0x41, 0x55, 0x49, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x49, 0x49, 0x10, 0x02, - 0x12, 0x09, 0x0a, 0x05, 0x46, 0x49, 0x42, 0x52, 0x45, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x42, - 0x4e, 0x43, 0x10, 0x04, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x5f, 0x41, - 0x54, 0x54, 0x41, 0x43, 0x48, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, - 0xef, 0x01, 0x12, 0x0a, 0x0a, 0x05, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x10, 0xff, 0x01, 0x2a, 0x73, - 0x0a, 0x19, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x50, 0x72, 0x69, 0x6d, - 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x1b, 0x0a, 0x17, 0x50, - 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x5f, - 0x41, 0x4c, 0x57, 0x41, 0x59, 0x53, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x52, 0x49, 0x4d, - 0x41, 0x52, 0x59, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x5f, 0x42, 0x45, 0x54, - 0x54, 0x45, 0x52, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, - 0x5f, 0x52, 0x45, 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, - 0x45, 0x10, 0x02, 0x2a, 0x5d, 0x0a, 0x12, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, - 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x23, 0x0a, 0x1f, 0x4e, 0x45, 0x54, - 0x48, 0x45, 0x4c, 0x50, 0x45, 0x52, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x10, + 0x6e, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x48, + 0x4f, 0x4f, 0x4b, 0x5f, 0x50, 0x52, 0x45, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x00, + 0x12, 0x14, 0x0a, 0x10, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x48, 0x4f, 0x4f, 0x4b, 0x5f, 0x49, + 0x4e, 0x50, 0x55, 0x54, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, + 0x48, 0x4f, 0x4f, 0x4b, 0x5f, 0x46, 0x4f, 0x52, 0x57, 0x41, 0x52, 0x44, 0x10, 0x02, 0x12, 0x15, + 0x0a, 0x11, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x48, 0x4f, 0x4f, 0x4b, 0x5f, 0x4f, 0x55, 0x54, + 0x50, 0x55, 0x54, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x48, + 0x4f, 0x4f, 0x4b, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x52, 0x4f, 0x55, 0x54, 0x49, 0x4e, 0x47, 0x10, + 0x04, 0x2a, 0xa3, 0x04, 0x0a, 0x1f, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, + 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x72, 0x69, + 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x30, 0x0a, 0x2c, 0x4e, 0x45, 0x54, 0x48, 0x45, 0x4c, 0x50, + 0x45, 0x52, 0x53, 0x5f, 0x4e, 0x46, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x53, 0x43, 0x48, 0x41, 0x49, + 0x4e, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x14, 0x43, 0x48, 0x41, 0x49, 0x4e, + 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x10, + 0x80, 0x80, 0x80, 0x80, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x2c, 0x0a, 0x1f, 0x43, 0x48, + 0x41, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x4f, 0x4e, + 0x4e, 0x54, 0x52, 0x41, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x46, 0x52, 0x41, 0x47, 0x10, 0xf0, 0xfc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x1f, 0x0a, 0x12, 0x43, 0x48, 0x41, 0x49, + 0x4e, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x52, 0x41, 0x57, 0x10, 0xd4, + 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x2a, 0x0a, 0x1d, 0x43, 0x48, 0x41, + 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x53, 0x45, 0x5f, 0x4c, + 0x49, 0x4e, 0x55, 0x58, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x10, 0x9f, 0xfe, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x25, 0x0a, 0x18, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x50, + 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x54, 0x52, 0x41, 0x43, + 0x4b, 0x10, 0xb8, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x22, 0x0a, 0x15, + 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4d, + 0x41, 0x4e, 0x47, 0x4c, 0x45, 0x10, 0xea, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, + 0x12, 0x24, 0x0a, 0x17, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, + 0x54, 0x59, 0x5f, 0x4e, 0x41, 0x54, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x10, 0x9c, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, + 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x10, + 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, + 0x49, 0x54, 0x59, 0x5f, 0x53, 0x45, 0x43, 0x55, 0x52, 0x49, 0x54, 0x59, 0x10, 0x32, 0x12, 0x1d, + 0x0a, 0x19, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, + 0x5f, 0x4e, 0x41, 0x54, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x10, 0x64, 0x12, 0x21, 0x0a, + 0x1c, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, + 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x4e, 0x55, 0x58, 0x5f, 0x4c, 0x41, 0x53, 0x54, 0x10, 0xe1, 0x01, + 0x12, 0x24, 0x0a, 0x1f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, + 0x54, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x54, 0x52, 0x41, 0x43, 0x4b, 0x5f, 0x48, 0x45, 0x4c, + 0x50, 0x45, 0x52, 0x10, 0xac, 0x02, 0x12, 0x1b, 0x0a, 0x13, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, + 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4c, 0x41, 0x53, 0x54, 0x10, 0xff, 0xff, + 0xff, 0xff, 0x07, 0x1a, 0x02, 0x10, 0x01, 0x2a, 0x41, 0x0a, 0x19, 0x4e, 0x65, 0x74, 0x68, 0x65, + 0x6c, 0x70, 0x65, 0x72, 0x73, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x56, 0x65, 0x72, + 0x64, 0x69, 0x63, 0x74, 0x12, 0x10, 0x0a, 0x0c, 0x56, 0x45, 0x52, 0x44, 0x49, 0x43, 0x54, 0x5f, + 0x44, 0x52, 0x4f, 0x50, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x56, 0x45, 0x52, 0x44, 0x49, 0x43, + 0x54, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x50, 0x54, 0x10, 0x01, 0x2a, 0xc9, 0x01, 0x0a, 0x1a, 0x4e, + 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x45, + 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, + 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x4f, 0x50, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x13, 0x0a, + 0x0f, 0x4f, 0x50, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x4f, 0x57, 0x4e, + 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x4f, 0x50, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x44, 0x4f, 0x57, + 0x4e, 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x45, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x4f, + 0x50, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x4f, 0x52, 0x4d, 0x41, 0x4e, + 0x54, 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, 0x4f, 0x50, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x45, 0x5f, 0x55, 0x50, 0x10, 0x06, 0x2a, 0x72, 0x0a, 0x0e, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, + 0x70, 0x65, 0x72, 0x73, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x57, 0x49, 0x53, + 0x54, 0x45, 0x44, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x55, + 0x49, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x49, 0x49, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, + 0x46, 0x49, 0x42, 0x52, 0x45, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x42, 0x4e, 0x43, 0x10, 0x04, + 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x5f, 0x41, 0x54, 0x54, 0x41, 0x43, + 0x48, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0xef, 0x01, 0x12, 0x0a, + 0x0a, 0x05, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x10, 0xff, 0x01, 0x2a, 0x73, 0x0a, 0x19, 0x4e, 0x65, + 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x52, 0x49, 0x4d, 0x41, + 0x52, 0x59, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x5f, 0x41, 0x4c, 0x57, 0x41, + 0x59, 0x53, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x5f, + 0x52, 0x45, 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x5f, 0x42, 0x45, 0x54, 0x54, 0x45, 0x52, 0x10, + 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x5f, 0x52, 0x45, 0x53, + 0x45, 0x4c, 0x45, 0x43, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x02, 0x2a, + 0x86, 0x01, 0x0a, 0x12, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x23, 0x0a, 0x1f, 0x4e, 0x45, 0x54, 0x48, 0x45, 0x4c, + 0x50, 0x45, 0x52, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x50, + 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x49, 0x43, 0x4d, 0x50, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x54, 0x43, 0x50, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x55, 0x44, 0x50, - 0x10, 0x11, 0x2a, 0xdf, 0x01, 0x0a, 0x13, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, - 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x24, 0x0a, 0x20, 0x4e, 0x45, - 0x54, 0x48, 0x45, 0x4c, 0x50, 0x45, 0x52, 0x53, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x46, 0x4c, - 0x41, 0x47, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x11, 0x0a, 0x0c, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x59, - 0x10, 0x80, 0x02, 0x12, 0x11, 0x0a, 0x0c, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x43, 0x4c, 0x4f, - 0x4e, 0x45, 0x44, 0x10, 0x80, 0x04, 0x12, 0x13, 0x0a, 0x0e, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, - 0x45, 0x51, 0x55, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x10, 0x80, 0x08, 0x12, 0x11, 0x0a, 0x0c, 0x52, - 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x46, 0x49, 0x58, 0x10, 0x80, 0x10, 0x12, 0x17, - 0x0a, 0x12, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x54, - 0x41, 0x42, 0x4c, 0x45, 0x10, 0x80, 0x20, 0x12, 0x14, 0x0a, 0x0f, 0x52, 0x4f, 0x55, 0x54, 0x45, - 0x5f, 0x46, 0x49, 0x42, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x80, 0x40, 0x12, 0x13, 0x0a, - 0x0d, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x4f, 0x46, 0x46, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x80, - 0x80, 0x01, 0x12, 0x10, 0x0a, 0x0a, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x50, - 0x10, 0x80, 0x80, 0x02, 0x2a, 0xd2, 0x03, 0x0a, 0x17, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, - 0x65, 0x72, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, - 0x4c, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, - 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4b, 0x45, 0x52, 0x4e, 0x45, 0x4c, 0x10, - 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x42, 0x4f, - 0x4f, 0x54, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x52, 0x4f, - 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x52, 0x41, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, - 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4d, 0x52, 0x54, 0x10, 0x0a, 0x12, 0x12, 0x0a, 0x0e, - 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x5a, 0x45, 0x42, 0x52, 0x41, 0x10, 0x0b, - 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x42, 0x49, 0x52, - 0x44, 0x10, 0x0c, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, - 0x44, 0x4e, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x44, 0x10, 0x0d, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x52, - 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x58, 0x4f, 0x52, 0x50, 0x10, 0x0e, 0x12, 0x10, 0x0a, - 0x0c, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4e, 0x54, 0x4b, 0x10, 0x0f, 0x12, - 0x11, 0x0a, 0x0d, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x48, 0x43, 0x50, - 0x10, 0x10, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4d, - 0x52, 0x54, 0x44, 0x10, 0x11, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, - 0x4c, 0x5f, 0x4b, 0x45, 0x45, 0x50, 0x41, 0x4c, 0x49, 0x56, 0x45, 0x44, 0x10, 0x12, 0x12, 0x12, - 0x0a, 0x0e, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x42, 0x41, 0x42, 0x45, 0x4c, - 0x10, 0x2a, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4f, - 0x50, 0x45, 0x4e, 0x52, 0x10, 0x63, 0x12, 0x11, 0x0a, 0x0c, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, - 0x4f, 0x4c, 0x5f, 0x42, 0x47, 0x50, 0x10, 0xba, 0x01, 0x12, 0x12, 0x0a, 0x0d, 0x50, 0x52, 0x4f, - 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x49, 0x53, 0x49, 0x53, 0x10, 0xbb, 0x01, 0x12, 0x12, 0x0a, - 0x0d, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4f, 0x53, 0x50, 0x46, 0x10, 0xbc, - 0x01, 0x12, 0x11, 0x0a, 0x0c, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x52, 0x49, - 0x50, 0x10, 0xbd, 0x01, 0x12, 0x13, 0x0a, 0x0e, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, - 0x5f, 0x45, 0x49, 0x47, 0x52, 0x50, 0x10, 0xc0, 0x01, 0x2a, 0xf1, 0x01, 0x0a, 0x13, 0x4e, 0x65, - 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x43, 0x41, - 0x53, 0x54, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4c, 0x4f, 0x43, - 0x41, 0x4c, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x52, 0x4f, - 0x41, 0x44, 0x43, 0x41, 0x53, 0x54, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x41, 0x4e, 0x59, 0x43, 0x41, 0x53, 0x54, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x43, 0x41, 0x53, 0x54, 0x10, 0x05, 0x12, 0x12, - 0x0a, 0x0e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x4c, 0x41, 0x43, 0x4b, 0x48, 0x4f, 0x4c, 0x45, - 0x10, 0x06, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x52, 0x45, 0x41, - 0x43, 0x48, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x07, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x50, 0x52, 0x4f, 0x48, 0x49, 0x42, 0x49, 0x54, 0x10, 0x08, 0x12, 0x0e, 0x0a, 0x0a, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x54, 0x48, 0x52, 0x4f, 0x57, 0x10, 0x09, 0x12, 0x0c, 0x0a, 0x08, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x41, 0x54, 0x10, 0x0a, 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x58, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x4c, 0x56, 0x45, 0x10, 0x0b, 0x2a, 0x61, 0x0a, - 0x16, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x69, - 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x41, 0x42, 0x4c, 0x45, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0d, 0x54, 0x41, 0x42, - 0x4c, 0x45, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0xfd, 0x01, 0x12, 0x0f, 0x0a, - 0x0a, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x4d, 0x41, 0x49, 0x4e, 0x10, 0xfe, 0x01, 0x12, 0x10, - 0x0a, 0x0b, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x10, 0xff, 0x01, - 0x2a, 0x6a, 0x0a, 0x0f, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x53, 0x63, - 0x6f, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x47, 0x4c, 0x4f, - 0x42, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x53, - 0x49, 0x54, 0x45, 0x10, 0xc8, 0x01, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, - 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0xfd, 0x01, 0x12, 0x0f, 0x0a, 0x0a, 0x53, 0x43, 0x4f, 0x50, 0x45, - 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x10, 0xfe, 0x01, 0x12, 0x12, 0x0a, 0x0d, 0x53, 0x43, 0x4f, 0x50, - 0x45, 0x5f, 0x4e, 0x4f, 0x57, 0x48, 0x45, 0x52, 0x45, 0x10, 0xff, 0x01, 0x2a, 0x78, 0x0a, 0x16, - 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x56, 0x4c, 0x41, 0x4e, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x27, 0x0a, 0x23, 0x4e, 0x45, 0x54, 0x48, 0x45, 0x4c, - 0x50, 0x45, 0x52, 0x53, 0x5f, 0x56, 0x4c, 0x41, 0x4e, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, - 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x19, 0x0a, 0x13, 0x56, 0x4c, 0x41, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, - 0x38, 0x30, 0x32, 0x31, 0x5f, 0x51, 0x10, 0x80, 0x82, 0x02, 0x12, 0x1a, 0x0a, 0x14, 0x56, 0x4c, - 0x41, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x38, 0x30, 0x32, 0x31, 0x5f, - 0x41, 0x44, 0x10, 0xa8, 0x91, 0x02, 0x2a, 0x53, 0x0a, 0x11, 0x4b, 0x75, 0x62, 0x65, 0x73, 0x70, - 0x61, 0x6e, 0x50, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x50, - 0x45, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x45, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x45, 0x5f, 0x55, 0x50, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x45, 0x45, 0x52, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x02, 0x2a, 0x88, 0x01, 0x0a, 0x12, - 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x61, 0x79, - 0x65, 0x72, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x44, 0x45, 0x46, - 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, - 0x5f, 0x43, 0x4d, 0x44, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x4f, - 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x10, 0x02, 0x12, - 0x13, 0x0a, 0x0f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, - 0x4f, 0x52, 0x10, 0x03, 0x12, 0x20, 0x0a, 0x1c, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, - 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x2a, 0x4b, 0x0a, 0x0f, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x0e, 0x4f, 0x50, 0x45, - 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x44, 0x48, 0x43, 0x50, 0x34, 0x10, 0x00, 0x12, 0x12, 0x0a, - 0x0e, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x44, 0x48, 0x43, 0x50, 0x36, 0x10, - 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x56, 0x49, - 0x50, 0x10, 0x02, 0x2a, 0x9b, 0x02, 0x0a, 0x13, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x4d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x4d, - 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, - 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x47, 0x45, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, - 0x1d, 0x0a, 0x19, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, - 0x5f, 0x4d, 0x41, 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x03, 0x12, 0x19, - 0x0a, 0x15, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, - 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x1b, 0x0a, 0x17, 0x4d, 0x41, 0x43, - 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x45, 0x42, 0x4f, 0x4f, - 0x54, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x1f, 0x0a, 0x1b, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x48, 0x55, 0x54, 0x54, 0x49, 0x4e, 0x47, - 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x06, 0x12, 0x1b, 0x0a, 0x17, 0x4d, 0x41, 0x43, 0x48, 0x49, - 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x54, 0x54, 0x49, - 0x4e, 0x47, 0x10, 0x07, 0x12, 0x1b, 0x0a, 0x17, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, - 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, - 0x08, 0x42, 0x4a, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x73, 0x69, 0x64, 0x65, 0x72, 0x6f, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, - 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x10, 0x11, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x49, + 0x43, 0x4d, 0x5f, 0x50, 0x56, 0x36, 0x10, 0x3a, 0x2a, 0xdf, 0x01, 0x0a, 0x13, 0x4e, 0x65, 0x74, + 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, + 0x12, 0x24, 0x0a, 0x20, 0x4e, 0x45, 0x54, 0x48, 0x45, 0x4c, 0x50, 0x45, 0x52, 0x53, 0x5f, 0x52, + 0x4f, 0x55, 0x54, 0x45, 0x46, 0x4c, 0x41, 0x47, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0c, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, + 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x59, 0x10, 0x80, 0x02, 0x12, 0x11, 0x0a, 0x0c, 0x52, 0x4f, 0x55, + 0x54, 0x45, 0x5f, 0x43, 0x4c, 0x4f, 0x4e, 0x45, 0x44, 0x10, 0x80, 0x04, 0x12, 0x13, 0x0a, 0x0e, + 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x10, 0x80, + 0x08, 0x12, 0x11, 0x0a, 0x0c, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x46, 0x49, + 0x58, 0x10, 0x80, 0x10, 0x12, 0x17, 0x0a, 0x12, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x4c, 0x4f, + 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x80, 0x20, 0x12, 0x14, 0x0a, + 0x0f, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x46, 0x49, 0x42, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, + 0x10, 0x80, 0x40, 0x12, 0x13, 0x0a, 0x0d, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x4f, 0x46, 0x46, + 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x80, 0x80, 0x01, 0x12, 0x10, 0x0a, 0x0a, 0x52, 0x4f, 0x55, 0x54, + 0x45, 0x5f, 0x54, 0x52, 0x41, 0x50, 0x10, 0x80, 0x80, 0x02, 0x2a, 0xd2, 0x03, 0x0a, 0x17, 0x4e, + 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, + 0x4f, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x50, + 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, + 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4b, + 0x45, 0x52, 0x4e, 0x45, 0x4c, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x52, 0x4f, 0x54, 0x4f, + 0x43, 0x4f, 0x4c, 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x52, + 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x10, 0x04, 0x12, + 0x0f, 0x0a, 0x0b, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x52, 0x41, 0x10, 0x09, + 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4d, 0x52, 0x54, + 0x10, 0x0a, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x5a, + 0x45, 0x42, 0x52, 0x41, 0x10, 0x0b, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, + 0x4f, 0x4c, 0x5f, 0x42, 0x49, 0x52, 0x44, 0x10, 0x0c, 0x12, 0x15, 0x0a, 0x11, 0x50, 0x52, 0x4f, + 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x4e, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x44, 0x10, 0x0d, + 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x58, 0x4f, 0x52, + 0x50, 0x10, 0x0e, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, + 0x4e, 0x54, 0x4b, 0x10, 0x0f, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, + 0x4c, 0x5f, 0x44, 0x48, 0x43, 0x50, 0x10, 0x10, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x52, 0x4f, 0x54, + 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4d, 0x52, 0x54, 0x44, 0x10, 0x11, 0x12, 0x17, 0x0a, 0x13, 0x50, + 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4b, 0x45, 0x45, 0x50, 0x41, 0x4c, 0x49, 0x56, + 0x45, 0x44, 0x10, 0x12, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, + 0x5f, 0x42, 0x41, 0x42, 0x45, 0x4c, 0x10, 0x2a, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x52, 0x4f, 0x54, + 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x52, 0x10, 0x63, 0x12, 0x11, 0x0a, 0x0c, + 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x42, 0x47, 0x50, 0x10, 0xba, 0x01, 0x12, + 0x12, 0x0a, 0x0d, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x49, 0x53, 0x49, 0x53, + 0x10, 0xbb, 0x01, 0x12, 0x12, 0x0a, 0x0d, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, + 0x4f, 0x53, 0x50, 0x46, 0x10, 0xbc, 0x01, 0x12, 0x11, 0x0a, 0x0c, 0x50, 0x52, 0x4f, 0x54, 0x4f, + 0x43, 0x4f, 0x4c, 0x5f, 0x52, 0x49, 0x50, 0x10, 0xbd, 0x01, 0x12, 0x13, 0x0a, 0x0e, 0x50, 0x52, + 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x45, 0x49, 0x47, 0x52, 0x50, 0x10, 0xc0, 0x01, 0x2a, + 0xf1, 0x01, 0x0a, 0x13, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x52, 0x6f, + 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x55, 0x4e, 0x49, 0x43, 0x41, 0x53, 0x54, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x42, 0x52, 0x4f, 0x41, 0x44, 0x43, 0x41, 0x53, 0x54, 0x10, 0x03, 0x12, 0x10, + 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x4e, 0x59, 0x43, 0x41, 0x53, 0x54, 0x10, 0x04, + 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x43, 0x41, + 0x53, 0x54, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x4c, 0x41, + 0x43, 0x4b, 0x48, 0x4f, 0x4c, 0x45, 0x10, 0x06, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x55, 0x4e, 0x52, 0x45, 0x41, 0x43, 0x48, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x07, 0x12, 0x11, + 0x0a, 0x0d, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x48, 0x49, 0x42, 0x49, 0x54, 0x10, + 0x08, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x48, 0x52, 0x4f, 0x57, 0x10, + 0x09, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x41, 0x54, 0x10, 0x0a, 0x12, + 0x12, 0x0a, 0x0e, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x58, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x4c, 0x56, + 0x45, 0x10, 0x0b, 0x2a, 0x61, 0x0a, 0x16, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, + 0x73, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x10, 0x0a, + 0x0c, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x10, 0x00, 0x12, + 0x12, 0x0a, 0x0d, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, + 0x10, 0xfd, 0x01, 0x12, 0x0f, 0x0a, 0x0a, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x4d, 0x41, 0x49, + 0x4e, 0x10, 0xfe, 0x01, 0x12, 0x10, 0x0a, 0x0b, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x4c, 0x4f, + 0x43, 0x41, 0x4c, 0x10, 0xff, 0x01, 0x2a, 0x6a, 0x0a, 0x0f, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, + 0x70, 0x65, 0x72, 0x73, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x43, 0x4f, + 0x50, 0x45, 0x5f, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0a, 0x53, + 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x53, 0x49, 0x54, 0x45, 0x10, 0xc8, 0x01, 0x12, 0x0f, 0x0a, 0x0a, + 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0xfd, 0x01, 0x12, 0x0f, 0x0a, + 0x0a, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x10, 0xfe, 0x01, 0x12, 0x12, + 0x0a, 0x0d, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x57, 0x48, 0x45, 0x52, 0x45, 0x10, + 0xff, 0x01, 0x2a, 0x78, 0x0a, 0x16, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, + 0x56, 0x4c, 0x41, 0x4e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x27, 0x0a, 0x23, + 0x4e, 0x45, 0x54, 0x48, 0x45, 0x4c, 0x50, 0x45, 0x52, 0x53, 0x5f, 0x56, 0x4c, 0x41, 0x4e, 0x50, + 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x13, 0x56, 0x4c, 0x41, 0x4e, 0x5f, 0x50, 0x52, + 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x38, 0x30, 0x32, 0x31, 0x5f, 0x51, 0x10, 0x80, 0x82, 0x02, + 0x12, 0x1a, 0x0a, 0x14, 0x56, 0x4c, 0x41, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, + 0x4c, 0x38, 0x30, 0x32, 0x31, 0x5f, 0x41, 0x44, 0x10, 0xa8, 0x91, 0x02, 0x2a, 0x53, 0x0a, 0x11, + 0x4b, 0x75, 0x62, 0x65, 0x73, 0x70, 0x61, 0x6e, 0x50, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x45, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x45, 0x45, + 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x50, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, + 0x50, 0x45, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, + 0x02, 0x2a, 0x88, 0x01, 0x0a, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x4f, 0x4e, 0x46, + 0x49, 0x47, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, + 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x43, 0x4d, 0x44, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, + 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x50, 0x4c, 0x41, 0x54, 0x46, + 0x4f, 0x52, 0x4d, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, + 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x20, 0x0a, 0x1c, 0x43, 0x4f, + 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x43, 0x4f, 0x4e, + 0x46, 0x49, 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x2a, 0x4b, 0x0a, 0x0f, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, + 0x12, 0x0a, 0x0e, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x44, 0x48, 0x43, 0x50, + 0x34, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, + 0x44, 0x48, 0x43, 0x50, 0x36, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x45, 0x52, 0x41, + 0x54, 0x4f, 0x52, 0x5f, 0x56, 0x49, 0x50, 0x10, 0x02, 0x2a, 0x9b, 0x02, 0x0a, 0x13, 0x52, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x67, + 0x65, 0x12, 0x19, 0x0a, 0x15, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, + 0x47, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, + 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x42, 0x4f, + 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x4d, 0x41, 0x43, 0x48, 0x49, + 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, + 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, + 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x4d, 0x41, 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x41, 0x4e, + 0x43, 0x45, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, + 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, + 0x1b, 0x0a, 0x17, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, + 0x5f, 0x52, 0x45, 0x42, 0x4f, 0x4f, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x1f, 0x0a, 0x1b, + 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x48, + 0x55, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x06, 0x12, 0x1b, 0x0a, + 0x17, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x52, + 0x45, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x12, 0x1b, 0x0a, 0x17, 0x4d, 0x41, + 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x55, 0x50, 0x47, 0x52, + 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x08, 0x42, 0x4a, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x69, 0x64, 0x65, 0x72, 0x6f, 0x6c, 0x61, 0x62, 0x73, + 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x72, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x2f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x6e, + 0x75, 0x6d, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2400,7 +2476,7 @@ func file_resource_definitions_enums_enums_proto_rawDescGZIP() []byte { return file_resource_definitions_enums_enums_proto_rawDescData } -var file_resource_definitions_enums_enums_proto_enumTypes = make([]protoimpl.EnumInfo, 30) +var file_resource_definitions_enums_enums_proto_enumTypes = make([]protoimpl.EnumInfo, 31) var file_resource_definitions_enums_enums_proto_goTypes = []interface{}{ (MachineType)(0), // 0: talos.resource.definitions.enums.MachineType (NethelpersAddressFlag)(0), // 1: talos.resource.definitions.enums.NethelpersAddressFlag @@ -2409,29 +2485,30 @@ var file_resource_definitions_enums_enums_proto_goTypes = []interface{}{ (NethelpersARPValidate)(0), // 4: talos.resource.definitions.enums.NethelpersARPValidate (NethelpersBondMode)(0), // 5: talos.resource.definitions.enums.NethelpersBondMode (NethelpersBondXmitHashPolicy)(0), // 6: talos.resource.definitions.enums.NethelpersBondXmitHashPolicy - (NethelpersDuplex)(0), // 7: talos.resource.definitions.enums.NethelpersDuplex - (NethelpersFailOverMAC)(0), // 8: talos.resource.definitions.enums.NethelpersFailOverMAC - (NethelpersFamily)(0), // 9: talos.resource.definitions.enums.NethelpersFamily - (NethelpersLACPRate)(0), // 10: talos.resource.definitions.enums.NethelpersLACPRate - (NethelpersLinkType)(0), // 11: talos.resource.definitions.enums.NethelpersLinkType - (NethelpersMatchOperator)(0), // 12: talos.resource.definitions.enums.NethelpersMatchOperator - (NethelpersNfTablesChainHook)(0), // 13: talos.resource.definitions.enums.NethelpersNfTablesChainHook - (NethelpersNfTablesChainPriority)(0), // 14: talos.resource.definitions.enums.NethelpersNfTablesChainPriority - (NethelpersNfTablesVerdict)(0), // 15: talos.resource.definitions.enums.NethelpersNfTablesVerdict - (NethelpersOperationalState)(0), // 16: talos.resource.definitions.enums.NethelpersOperationalState - (NethelpersPort)(0), // 17: talos.resource.definitions.enums.NethelpersPort - (NethelpersPrimaryReselect)(0), // 18: talos.resource.definitions.enums.NethelpersPrimaryReselect - (NethelpersProtocol)(0), // 19: talos.resource.definitions.enums.NethelpersProtocol - (NethelpersRouteFlag)(0), // 20: talos.resource.definitions.enums.NethelpersRouteFlag - (NethelpersRouteProtocol)(0), // 21: talos.resource.definitions.enums.NethelpersRouteProtocol - (NethelpersRouteType)(0), // 22: talos.resource.definitions.enums.NethelpersRouteType - (NethelpersRoutingTable)(0), // 23: talos.resource.definitions.enums.NethelpersRoutingTable - (NethelpersScope)(0), // 24: talos.resource.definitions.enums.NethelpersScope - (NethelpersVLANProtocol)(0), // 25: talos.resource.definitions.enums.NethelpersVLANProtocol - (KubespanPeerState)(0), // 26: talos.resource.definitions.enums.KubespanPeerState - (NetworkConfigLayer)(0), // 27: talos.resource.definitions.enums.NetworkConfigLayer - (NetworkOperator)(0), // 28: talos.resource.definitions.enums.NetworkOperator - (RuntimeMachineStage)(0), // 29: talos.resource.definitions.enums.RuntimeMachineStage + (NethelpersConntrackState)(0), // 7: talos.resource.definitions.enums.NethelpersConntrackState + (NethelpersDuplex)(0), // 8: talos.resource.definitions.enums.NethelpersDuplex + (NethelpersFailOverMAC)(0), // 9: talos.resource.definitions.enums.NethelpersFailOverMAC + (NethelpersFamily)(0), // 10: talos.resource.definitions.enums.NethelpersFamily + (NethelpersLACPRate)(0), // 11: talos.resource.definitions.enums.NethelpersLACPRate + (NethelpersLinkType)(0), // 12: talos.resource.definitions.enums.NethelpersLinkType + (NethelpersMatchOperator)(0), // 13: talos.resource.definitions.enums.NethelpersMatchOperator + (NethelpersNfTablesChainHook)(0), // 14: talos.resource.definitions.enums.NethelpersNfTablesChainHook + (NethelpersNfTablesChainPriority)(0), // 15: talos.resource.definitions.enums.NethelpersNfTablesChainPriority + (NethelpersNfTablesVerdict)(0), // 16: talos.resource.definitions.enums.NethelpersNfTablesVerdict + (NethelpersOperationalState)(0), // 17: talos.resource.definitions.enums.NethelpersOperationalState + (NethelpersPort)(0), // 18: talos.resource.definitions.enums.NethelpersPort + (NethelpersPrimaryReselect)(0), // 19: talos.resource.definitions.enums.NethelpersPrimaryReselect + (NethelpersProtocol)(0), // 20: talos.resource.definitions.enums.NethelpersProtocol + (NethelpersRouteFlag)(0), // 21: talos.resource.definitions.enums.NethelpersRouteFlag + (NethelpersRouteProtocol)(0), // 22: talos.resource.definitions.enums.NethelpersRouteProtocol + (NethelpersRouteType)(0), // 23: talos.resource.definitions.enums.NethelpersRouteType + (NethelpersRoutingTable)(0), // 24: talos.resource.definitions.enums.NethelpersRoutingTable + (NethelpersScope)(0), // 25: talos.resource.definitions.enums.NethelpersScope + (NethelpersVLANProtocol)(0), // 26: talos.resource.definitions.enums.NethelpersVLANProtocol + (KubespanPeerState)(0), // 27: talos.resource.definitions.enums.KubespanPeerState + (NetworkConfigLayer)(0), // 28: talos.resource.definitions.enums.NetworkConfigLayer + (NetworkOperator)(0), // 29: talos.resource.definitions.enums.NetworkOperator + (RuntimeMachineStage)(0), // 30: talos.resource.definitions.enums.RuntimeMachineStage } var file_resource_definitions_enums_enums_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type @@ -2451,7 +2528,7 @@ func file_resource_definitions_enums_enums_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_resource_definitions_enums_enums_proto_rawDesc, - NumEnums: 30, + NumEnums: 31, NumMessages: 0, NumExtensions: 0, NumServices: 0, diff --git a/pkg/machinery/api/resource/definitions/network/network.pb.go b/pkg/machinery/api/resource/definitions/network/network.pb.go index 98713c424..593cbb94b 100644 --- a/pkg/machinery/api/resource/definitions/network/network.pb.go +++ b/pkg/machinery/api/resource/definitions/network/network.pb.go @@ -1475,6 +1475,7 @@ type NfTablesChainSpec struct { Hook enums.NethelpersNfTablesChainHook `protobuf:"varint,2,opt,name=hook,proto3,enum=talos.resource.definitions.enums.NethelpersNfTablesChainHook" json:"hook,omitempty"` Priority enums.NethelpersNfTablesChainPriority `protobuf:"varint,3,opt,name=priority,proto3,enum=talos.resource.definitions.enums.NethelpersNfTablesChainPriority" json:"priority,omitempty"` Rules []*NfTablesRule `protobuf:"bytes,4,rep,name=rules,proto3" json:"rules,omitempty"` + Policy enums.NethelpersNfTablesVerdict `protobuf:"varint,5,opt,name=policy,proto3,enum=talos.resource.definitions.enums.NethelpersNfTablesVerdict" json:"policy,omitempty"` } func (x *NfTablesChainSpec) Reset() { @@ -1537,6 +1538,13 @@ func (x *NfTablesChainSpec) GetRules() []*NfTablesRule { return nil } +func (x *NfTablesChainSpec) GetPolicy() enums.NethelpersNfTablesVerdict { + if x != nil { + return x.Policy + } + return enums.NethelpersNfTablesVerdict(0) +} + // NfTablesClampMSS describes the TCP MSS clamping operation. // // MSS is limited by the `MaxMTU` so that: @@ -1589,20 +1597,68 @@ func (x *NfTablesClampMSS) GetMtu() uint32 { return 0 } +// NfTablesConntrackStateMatch describes the match on the connection tracking state. +type NfTablesConntrackStateMatch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + States []uint32 `protobuf:"varint,1,rep,packed,name=states,proto3" json:"states,omitempty"` +} + +func (x *NfTablesConntrackStateMatch) Reset() { + *x = NfTablesConntrackStateMatch{} + if protoimpl.UnsafeEnabled { + mi := &file_resource_definitions_network_network_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NfTablesConntrackStateMatch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NfTablesConntrackStateMatch) ProtoMessage() {} + +func (x *NfTablesConntrackStateMatch) ProtoReflect() protoreflect.Message { + mi := &file_resource_definitions_network_network_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NfTablesConntrackStateMatch.ProtoReflect.Descriptor instead. +func (*NfTablesConntrackStateMatch) Descriptor() ([]byte, []int) { + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{17} +} + +func (x *NfTablesConntrackStateMatch) GetStates() []uint32 { + if x != nil { + return x.States + } + return nil +} + // NfTablesIfNameMatch describes the match on the interface name. type NfTablesIfNameMatch struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - InterfaceName string `protobuf:"bytes,1,opt,name=interface_name,json=interfaceName,proto3" json:"interface_name,omitempty"` - Operator enums.NethelpersMatchOperator `protobuf:"varint,2,opt,name=operator,proto3,enum=talos.resource.definitions.enums.NethelpersMatchOperator" json:"operator,omitempty"` + Operator enums.NethelpersMatchOperator `protobuf:"varint,2,opt,name=operator,proto3,enum=talos.resource.definitions.enums.NethelpersMatchOperator" json:"operator,omitempty"` + InterfaceNames []string `protobuf:"bytes,3,rep,name=interface_names,json=interfaceNames,proto3" json:"interface_names,omitempty"` } func (x *NfTablesIfNameMatch) Reset() { *x = NfTablesIfNameMatch{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[17] + mi := &file_resource_definitions_network_network_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1615,7 +1671,7 @@ func (x *NfTablesIfNameMatch) String() string { func (*NfTablesIfNameMatch) ProtoMessage() {} func (x *NfTablesIfNameMatch) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[17] + mi := &file_resource_definitions_network_network_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1628,14 +1684,7 @@ func (x *NfTablesIfNameMatch) ProtoReflect() protoreflect.Message { // Deprecated: Use NfTablesIfNameMatch.ProtoReflect.Descriptor instead. func (*NfTablesIfNameMatch) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{17} -} - -func (x *NfTablesIfNameMatch) GetInterfaceName() string { - if x != nil { - return x.InterfaceName - } - return "" + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{18} } func (x *NfTablesIfNameMatch) GetOperator() enums.NethelpersMatchOperator { @@ -1645,6 +1694,13 @@ func (x *NfTablesIfNameMatch) GetOperator() enums.NethelpersMatchOperator { return enums.NethelpersMatchOperator(0) } +func (x *NfTablesIfNameMatch) GetInterfaceNames() []string { + if x != nil { + return x.InterfaceNames + } + return nil +} + // NfTablesLayer4Match describes the match on the transport layer protocol. type NfTablesLayer4Match struct { state protoimpl.MessageState @@ -1659,7 +1715,7 @@ type NfTablesLayer4Match struct { func (x *NfTablesLayer4Match) Reset() { *x = NfTablesLayer4Match{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[18] + mi := &file_resource_definitions_network_network_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1672,7 +1728,7 @@ func (x *NfTablesLayer4Match) String() string { func (*NfTablesLayer4Match) ProtoMessage() {} func (x *NfTablesLayer4Match) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[18] + mi := &file_resource_definitions_network_network_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1685,7 +1741,7 @@ func (x *NfTablesLayer4Match) ProtoReflect() protoreflect.Message { // Deprecated: Use NfTablesLayer4Match.ProtoReflect.Descriptor instead. func (*NfTablesLayer4Match) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{18} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{19} } func (x *NfTablesLayer4Match) GetProtocol() enums.NethelpersProtocol { @@ -1709,6 +1765,54 @@ func (x *NfTablesLayer4Match) GetMatchDestinationPort() *NfTablesPortMatch { return nil } +// NfTablesLimitMatch describes the match on the packet rate. +type NfTablesLimitMatch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PacketRatePerSecond uint64 `protobuf:"varint,1,opt,name=packet_rate_per_second,json=packetRatePerSecond,proto3" json:"packet_rate_per_second,omitempty"` +} + +func (x *NfTablesLimitMatch) Reset() { + *x = NfTablesLimitMatch{} + if protoimpl.UnsafeEnabled { + mi := &file_resource_definitions_network_network_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NfTablesLimitMatch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NfTablesLimitMatch) ProtoMessage() {} + +func (x *NfTablesLimitMatch) ProtoReflect() protoreflect.Message { + mi := &file_resource_definitions_network_network_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NfTablesLimitMatch.ProtoReflect.Descriptor instead. +func (*NfTablesLimitMatch) Descriptor() ([]byte, []int) { + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{20} +} + +func (x *NfTablesLimitMatch) GetPacketRatePerSecond() uint64 { + if x != nil { + return x.PacketRatePerSecond + } + return 0 +} + // NfTablesMark encodes packet mark match/update operation. // // When used as a match computes the following condition: @@ -1729,7 +1833,7 @@ type NfTablesMark struct { func (x *NfTablesMark) Reset() { *x = NfTablesMark{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[19] + mi := &file_resource_definitions_network_network_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1742,7 +1846,7 @@ func (x *NfTablesMark) String() string { func (*NfTablesMark) ProtoMessage() {} func (x *NfTablesMark) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[19] + mi := &file_resource_definitions_network_network_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1755,7 +1859,7 @@ func (x *NfTablesMark) ProtoReflect() protoreflect.Message { // Deprecated: Use NfTablesMark.ProtoReflect.Descriptor instead. func (*NfTablesMark) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{19} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{21} } func (x *NfTablesMark) GetMask() uint32 { @@ -1791,7 +1895,7 @@ type NfTablesPortMatch struct { func (x *NfTablesPortMatch) Reset() { *x = NfTablesPortMatch{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[20] + mi := &file_resource_definitions_network_network_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1804,7 +1908,7 @@ func (x *NfTablesPortMatch) String() string { func (*NfTablesPortMatch) ProtoMessage() {} func (x *NfTablesPortMatch) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[20] + mi := &file_resource_definitions_network_network_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1817,7 +1921,7 @@ func (x *NfTablesPortMatch) ProtoReflect() protoreflect.Message { // Deprecated: Use NfTablesPortMatch.ProtoReflect.Descriptor instead. func (*NfTablesPortMatch) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{20} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{22} } func (x *NfTablesPortMatch) GetRanges() []*PortRange { @@ -1842,12 +1946,15 @@ type NfTablesRule struct { MatchLayer4 *NfTablesLayer4Match `protobuf:"bytes,7,opt,name=match_layer4,json=matchLayer4,proto3" json:"match_layer4,omitempty"` MatchIIfName *NfTablesIfNameMatch `protobuf:"bytes,8,opt,name=match_i_if_name,json=matchIIfName,proto3" json:"match_i_if_name,omitempty"` ClampMss *NfTablesClampMSS `protobuf:"bytes,9,opt,name=clamp_mss,json=clampMss,proto3" json:"clamp_mss,omitempty"` + MatchLimit *NfTablesLimitMatch `protobuf:"bytes,10,opt,name=match_limit,json=matchLimit,proto3" json:"match_limit,omitempty"` + MatchConntrackState *NfTablesConntrackStateMatch `protobuf:"bytes,11,opt,name=match_conntrack_state,json=matchConntrackState,proto3" json:"match_conntrack_state,omitempty"` + AnonCounter bool `protobuf:"varint,12,opt,name=anon_counter,json=anonCounter,proto3" json:"anon_counter,omitempty"` } func (x *NfTablesRule) Reset() { *x = NfTablesRule{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[21] + mi := &file_resource_definitions_network_network_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1860,7 +1967,7 @@ func (x *NfTablesRule) String() string { func (*NfTablesRule) ProtoMessage() {} func (x *NfTablesRule) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[21] + mi := &file_resource_definitions_network_network_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1873,7 +1980,7 @@ func (x *NfTablesRule) ProtoReflect() protoreflect.Message { // Deprecated: Use NfTablesRule.ProtoReflect.Descriptor instead. func (*NfTablesRule) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{21} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{23} } func (x *NfTablesRule) GetMatchOIfName() *NfTablesIfNameMatch { @@ -1939,6 +2046,27 @@ func (x *NfTablesRule) GetClampMss() *NfTablesClampMSS { return nil } +func (x *NfTablesRule) GetMatchLimit() *NfTablesLimitMatch { + if x != nil { + return x.MatchLimit + } + return nil +} + +func (x *NfTablesRule) GetMatchConntrackState() *NfTablesConntrackStateMatch { + if x != nil { + return x.MatchConntrackState + } + return nil +} + +func (x *NfTablesRule) GetAnonCounter() bool { + if x != nil { + return x.AnonCounter + } + return false +} + // NodeAddressFilterSpec describes a filter for NodeAddresses. type NodeAddressFilterSpec struct { state protoimpl.MessageState @@ -1952,7 +2080,7 @@ type NodeAddressFilterSpec struct { func (x *NodeAddressFilterSpec) Reset() { *x = NodeAddressFilterSpec{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[22] + mi := &file_resource_definitions_network_network_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1965,7 +2093,7 @@ func (x *NodeAddressFilterSpec) String() string { func (*NodeAddressFilterSpec) ProtoMessage() {} func (x *NodeAddressFilterSpec) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[22] + mi := &file_resource_definitions_network_network_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1978,7 +2106,7 @@ func (x *NodeAddressFilterSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use NodeAddressFilterSpec.ProtoReflect.Descriptor instead. func (*NodeAddressFilterSpec) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{22} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{24} } func (x *NodeAddressFilterSpec) GetIncludeSubnets() []*common.NetIPPrefix { @@ -2007,7 +2135,7 @@ type NodeAddressSpec struct { func (x *NodeAddressSpec) Reset() { *x = NodeAddressSpec{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[23] + mi := &file_resource_definitions_network_network_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2020,7 +2148,7 @@ func (x *NodeAddressSpec) String() string { func (*NodeAddressSpec) ProtoMessage() {} func (x *NodeAddressSpec) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[23] + mi := &file_resource_definitions_network_network_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2033,7 +2161,7 @@ func (x *NodeAddressSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use NodeAddressSpec.ProtoReflect.Descriptor instead. func (*NodeAddressSpec) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{23} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{25} } func (x *NodeAddressSpec) GetAddresses() []*common.NetIPPrefix { @@ -2061,7 +2189,7 @@ type OperatorSpecSpec struct { func (x *OperatorSpecSpec) Reset() { *x = OperatorSpecSpec{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[24] + mi := &file_resource_definitions_network_network_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2074,7 +2202,7 @@ func (x *OperatorSpecSpec) String() string { func (*OperatorSpecSpec) ProtoMessage() {} func (x *OperatorSpecSpec) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[24] + mi := &file_resource_definitions_network_network_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2087,7 +2215,7 @@ func (x *OperatorSpecSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use OperatorSpecSpec.ProtoReflect.Descriptor instead. func (*OperatorSpecSpec) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{24} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{26} } func (x *OperatorSpecSpec) GetOperator() enums.NetworkOperator { @@ -2154,7 +2282,7 @@ type PortRange struct { func (x *PortRange) Reset() { *x = PortRange{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[25] + mi := &file_resource_definitions_network_network_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2167,7 +2295,7 @@ func (x *PortRange) String() string { func (*PortRange) ProtoMessage() {} func (x *PortRange) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[25] + mi := &file_resource_definitions_network_network_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2180,7 +2308,7 @@ func (x *PortRange) ProtoReflect() protoreflect.Message { // Deprecated: Use PortRange.ProtoReflect.Descriptor instead. func (*PortRange) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{25} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{27} } func (x *PortRange) GetLo() uint32 { @@ -2212,7 +2340,7 @@ type ProbeSpecSpec struct { func (x *ProbeSpecSpec) Reset() { *x = ProbeSpecSpec{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[26] + mi := &file_resource_definitions_network_network_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2225,7 +2353,7 @@ func (x *ProbeSpecSpec) String() string { func (*ProbeSpecSpec) ProtoMessage() {} func (x *ProbeSpecSpec) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[26] + mi := &file_resource_definitions_network_network_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2238,7 +2366,7 @@ func (x *ProbeSpecSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use ProbeSpecSpec.ProtoReflect.Descriptor instead. func (*ProbeSpecSpec) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{26} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{28} } func (x *ProbeSpecSpec) GetInterval() *durationpb.Duration { @@ -2282,7 +2410,7 @@ type ProbeStatusSpec struct { func (x *ProbeStatusSpec) Reset() { *x = ProbeStatusSpec{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[27] + mi := &file_resource_definitions_network_network_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2295,7 +2423,7 @@ func (x *ProbeStatusSpec) String() string { func (*ProbeStatusSpec) ProtoMessage() {} func (x *ProbeStatusSpec) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[27] + mi := &file_resource_definitions_network_network_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2308,7 +2436,7 @@ func (x *ProbeStatusSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use ProbeStatusSpec.ProtoReflect.Descriptor instead. func (*ProbeStatusSpec) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{27} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{29} } func (x *ProbeStatusSpec) GetSuccess() bool { @@ -2338,7 +2466,7 @@ type ResolverSpecSpec struct { func (x *ResolverSpecSpec) Reset() { *x = ResolverSpecSpec{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[28] + mi := &file_resource_definitions_network_network_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2351,7 +2479,7 @@ func (x *ResolverSpecSpec) String() string { func (*ResolverSpecSpec) ProtoMessage() {} func (x *ResolverSpecSpec) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[28] + mi := &file_resource_definitions_network_network_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2364,7 +2492,7 @@ func (x *ResolverSpecSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolverSpecSpec.ProtoReflect.Descriptor instead. func (*ResolverSpecSpec) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{28} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{30} } func (x *ResolverSpecSpec) GetDnsServers() []*common.NetIP { @@ -2393,7 +2521,7 @@ type ResolverStatusSpec struct { func (x *ResolverStatusSpec) Reset() { *x = ResolverStatusSpec{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[29] + mi := &file_resource_definitions_network_network_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2406,7 +2534,7 @@ func (x *ResolverStatusSpec) String() string { func (*ResolverStatusSpec) ProtoMessage() {} func (x *ResolverStatusSpec) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[29] + mi := &file_resource_definitions_network_network_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2419,7 +2547,7 @@ func (x *ResolverStatusSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolverStatusSpec.ProtoReflect.Descriptor instead. func (*ResolverStatusSpec) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{29} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{31} } func (x *ResolverStatusSpec) GetDnsServers() []*common.NetIP { @@ -2453,7 +2581,7 @@ type RouteSpecSpec struct { func (x *RouteSpecSpec) Reset() { *x = RouteSpecSpec{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[30] + mi := &file_resource_definitions_network_network_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2466,7 +2594,7 @@ func (x *RouteSpecSpec) String() string { func (*RouteSpecSpec) ProtoMessage() {} func (x *RouteSpecSpec) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[30] + mi := &file_resource_definitions_network_network_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2479,7 +2607,7 @@ func (x *RouteSpecSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use RouteSpecSpec.ProtoReflect.Descriptor instead. func (*RouteSpecSpec) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{30} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{32} } func (x *RouteSpecSpec) GetFamily() enums.NethelpersFamily { @@ -2597,7 +2725,7 @@ type RouteStatusSpec struct { func (x *RouteStatusSpec) Reset() { *x = RouteStatusSpec{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[31] + mi := &file_resource_definitions_network_network_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2610,7 +2738,7 @@ func (x *RouteStatusSpec) String() string { func (*RouteStatusSpec) ProtoMessage() {} func (x *RouteStatusSpec) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[31] + mi := &file_resource_definitions_network_network_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2623,7 +2751,7 @@ func (x *RouteStatusSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use RouteStatusSpec.ProtoReflect.Descriptor instead. func (*RouteStatusSpec) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{31} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{33} } func (x *RouteStatusSpec) GetFamily() enums.NethelpersFamily { @@ -2729,7 +2857,7 @@ type STPSpec struct { func (x *STPSpec) Reset() { *x = STPSpec{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[32] + mi := &file_resource_definitions_network_network_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2742,7 +2870,7 @@ func (x *STPSpec) String() string { func (*STPSpec) ProtoMessage() {} func (x *STPSpec) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[32] + mi := &file_resource_definitions_network_network_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2755,7 +2883,7 @@ func (x *STPSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use STPSpec.ProtoReflect.Descriptor instead. func (*STPSpec) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{32} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{34} } func (x *STPSpec) GetEnabled() bool { @@ -2780,7 +2908,7 @@ type StatusSpec struct { func (x *StatusSpec) Reset() { *x = StatusSpec{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[33] + mi := &file_resource_definitions_network_network_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2793,7 +2921,7 @@ func (x *StatusSpec) String() string { func (*StatusSpec) ProtoMessage() {} func (x *StatusSpec) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[33] + mi := &file_resource_definitions_network_network_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2806,7 +2934,7 @@ func (x *StatusSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusSpec.ProtoReflect.Descriptor instead. func (*StatusSpec) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{33} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{35} } func (x *StatusSpec) GetAddressReady() bool { @@ -2850,7 +2978,7 @@ type TCPProbeSpec struct { func (x *TCPProbeSpec) Reset() { *x = TCPProbeSpec{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[34] + mi := &file_resource_definitions_network_network_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2863,7 +2991,7 @@ func (x *TCPProbeSpec) String() string { func (*TCPProbeSpec) ProtoMessage() {} func (x *TCPProbeSpec) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[34] + mi := &file_resource_definitions_network_network_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2876,7 +3004,7 @@ func (x *TCPProbeSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use TCPProbeSpec.ProtoReflect.Descriptor instead. func (*TCPProbeSpec) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{34} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{36} } func (x *TCPProbeSpec) GetEndpoint() string { @@ -2906,7 +3034,7 @@ type TimeServerSpecSpec struct { func (x *TimeServerSpecSpec) Reset() { *x = TimeServerSpecSpec{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[35] + mi := &file_resource_definitions_network_network_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2919,7 +3047,7 @@ func (x *TimeServerSpecSpec) String() string { func (*TimeServerSpecSpec) ProtoMessage() {} func (x *TimeServerSpecSpec) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[35] + mi := &file_resource_definitions_network_network_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2932,7 +3060,7 @@ func (x *TimeServerSpecSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use TimeServerSpecSpec.ProtoReflect.Descriptor instead. func (*TimeServerSpecSpec) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{35} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{37} } func (x *TimeServerSpecSpec) GetNtpServers() []string { @@ -2961,7 +3089,7 @@ type TimeServerStatusSpec struct { func (x *TimeServerStatusSpec) Reset() { *x = TimeServerStatusSpec{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[36] + mi := &file_resource_definitions_network_network_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2974,7 +3102,7 @@ func (x *TimeServerStatusSpec) String() string { func (*TimeServerStatusSpec) ProtoMessage() {} func (x *TimeServerStatusSpec) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[36] + mi := &file_resource_definitions_network_network_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2987,7 +3115,7 @@ func (x *TimeServerStatusSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use TimeServerStatusSpec.ProtoReflect.Descriptor instead. func (*TimeServerStatusSpec) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{36} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{38} } func (x *TimeServerStatusSpec) GetNtpServers() []string { @@ -3011,7 +3139,7 @@ type VIPEquinixMetalSpec struct { func (x *VIPEquinixMetalSpec) Reset() { *x = VIPEquinixMetalSpec{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[37] + mi := &file_resource_definitions_network_network_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3024,7 +3152,7 @@ func (x *VIPEquinixMetalSpec) String() string { func (*VIPEquinixMetalSpec) ProtoMessage() {} func (x *VIPEquinixMetalSpec) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[37] + mi := &file_resource_definitions_network_network_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3037,7 +3165,7 @@ func (x *VIPEquinixMetalSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use VIPEquinixMetalSpec.ProtoReflect.Descriptor instead. func (*VIPEquinixMetalSpec) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{37} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{39} } func (x *VIPEquinixMetalSpec) GetProjectId() string { @@ -3075,7 +3203,7 @@ type VIPHCloudSpec struct { func (x *VIPHCloudSpec) Reset() { *x = VIPHCloudSpec{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[38] + mi := &file_resource_definitions_network_network_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3088,7 +3216,7 @@ func (x *VIPHCloudSpec) String() string { func (*VIPHCloudSpec) ProtoMessage() {} func (x *VIPHCloudSpec) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[38] + mi := &file_resource_definitions_network_network_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3101,7 +3229,7 @@ func (x *VIPHCloudSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use VIPHCloudSpec.ProtoReflect.Descriptor instead. func (*VIPHCloudSpec) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{38} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{40} } func (x *VIPHCloudSpec) GetDeviceId() int64 { @@ -3140,7 +3268,7 @@ type VIPOperatorSpec struct { func (x *VIPOperatorSpec) Reset() { *x = VIPOperatorSpec{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[39] + mi := &file_resource_definitions_network_network_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3153,7 +3281,7 @@ func (x *VIPOperatorSpec) String() string { func (*VIPOperatorSpec) ProtoMessage() {} func (x *VIPOperatorSpec) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[39] + mi := &file_resource_definitions_network_network_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3166,7 +3294,7 @@ func (x *VIPOperatorSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use VIPOperatorSpec.ProtoReflect.Descriptor instead. func (*VIPOperatorSpec) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{39} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{41} } func (x *VIPOperatorSpec) GetIp() *common.NetIP { @@ -3210,7 +3338,7 @@ type VLANSpec struct { func (x *VLANSpec) Reset() { *x = VLANSpec{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[40] + mi := &file_resource_definitions_network_network_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3223,7 +3351,7 @@ func (x *VLANSpec) String() string { func (*VLANSpec) ProtoMessage() {} func (x *VLANSpec) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[40] + mi := &file_resource_definitions_network_network_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3236,7 +3364,7 @@ func (x *VLANSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use VLANSpec.ProtoReflect.Descriptor instead. func (*VLANSpec) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{40} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{42} } func (x *VLANSpec) GetVid() uint32 { @@ -3269,7 +3397,7 @@ type WireguardPeer struct { func (x *WireguardPeer) Reset() { *x = WireguardPeer{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[41] + mi := &file_resource_definitions_network_network_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3282,7 +3410,7 @@ func (x *WireguardPeer) String() string { func (*WireguardPeer) ProtoMessage() {} func (x *WireguardPeer) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[41] + mi := &file_resource_definitions_network_network_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3295,7 +3423,7 @@ func (x *WireguardPeer) ProtoReflect() protoreflect.Message { // Deprecated: Use WireguardPeer.ProtoReflect.Descriptor instead. func (*WireguardPeer) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{41} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{43} } func (x *WireguardPeer) GetPublicKey() string { @@ -3349,7 +3477,7 @@ type WireguardSpec struct { func (x *WireguardSpec) Reset() { *x = WireguardSpec{} if protoimpl.UnsafeEnabled { - mi := &file_resource_definitions_network_network_proto_msgTypes[42] + mi := &file_resource_definitions_network_network_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3362,7 +3490,7 @@ func (x *WireguardSpec) String() string { func (*WireguardSpec) ProtoMessage() {} func (x *WireguardSpec) ProtoReflect() protoreflect.Message { - mi := &file_resource_definitions_network_network_proto_msgTypes[42] + mi := &file_resource_definitions_network_network_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3375,7 +3503,7 @@ func (x *WireguardSpec) ProtoReflect() protoreflect.Message { // Deprecated: Use WireguardSpec.ProtoReflect.Descriptor instead. func (*WireguardSpec) Descriptor() ([]byte, []int) { - return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{42} + return file_resource_definitions_network_network_proto_rawDescGZIP(), []int{44} } func (x *WireguardSpec) GetPrivateKey() string { @@ -3758,7 +3886,7 @@ var file_resource_definitions_network_network_proto_rawDesc = []byte{ 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x49, 0x50, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x22, 0xa1, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x22, 0xf6, 0x02, 0x0a, 0x11, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x51, 0x0a, 0x04, 0x68, 0x6f, 0x6f, 0x6b, @@ -3777,378 +3905,407 @@ var file_resource_definitions_network_network_proto_rawDesc = []byte{ 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, - 0x65, 0x73, 0x22, 0x24, 0x0a, 0x10, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6c, - 0x61, 0x6d, 0x70, 0x4d, 0x53, 0x53, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x07, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x22, 0x93, 0x01, 0x0a, 0x13, 0x4e, 0x66, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x49, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x55, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x39, 0x2e, 0x74, 0x61, 0x6c, 0x6f, - 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, - 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0xb7, - 0x02, 0x0a, 0x13, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x4c, 0x61, 0x79, 0x65, 0x72, - 0x34, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x50, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, - 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x68, - 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x61, 0x0a, 0x11, 0x6d, 0x61, 0x74, 0x63, - 0x68, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x50, 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x0f, 0x6d, 0x61, 0x74, 0x63, - 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x6b, 0x0a, 0x16, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x74, 0x61, - 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, - 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x2e, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x50, 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x14, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x72, 0x74, 0x22, 0x4a, 0x0a, 0x0c, 0x4e, 0x66, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x4d, 0x61, 0x72, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x61, 0x73, 0x6b, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x12, 0x10, 0x0a, 0x03, - 0x78, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x78, 0x6f, 0x72, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x5a, 0x0a, 0x11, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x50, 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x45, 0x0a, 0x06, 0x72, 0x61, 0x6e, - 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x74, 0x61, 0x6c, 0x6f, - 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x50, - 0x6f, 0x72, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, - 0x22, 0xd4, 0x06, 0x0a, 0x0c, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x75, 0x6c, - 0x65, 0x12, 0x5e, 0x0a, 0x0f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6f, 0x5f, 0x69, 0x66, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x61, 0x6c, - 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, - 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x49, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x0c, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x49, 0x66, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x55, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x65, 0x73, 0x12, 0x53, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x52, - 0x07, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x12, 0x4f, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, - 0x68, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74, - 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x2e, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x4d, 0x61, 0x72, 0x6b, 0x52, 0x09, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x61, 0x72, 0x6b, 0x12, 0x4b, 0x0a, 0x08, 0x73, 0x65, 0x74, - 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74, 0x61, + 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x24, 0x0a, 0x10, 0x4e, 0x66, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x43, 0x6c, 0x61, 0x6d, 0x70, 0x4d, 0x53, 0x53, 0x12, 0x10, 0x0a, 0x03, 0x6d, + 0x74, 0x75, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x22, 0x35, 0x0a, + 0x1b, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x74, 0x72, 0x61, + 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x13, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x49, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x55, 0x0a, 0x08, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x39, + 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, + 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0xb7, 0x02, 0x0a, + 0x13, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x34, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x12, 0x50, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, + 0x70, 0x65, 0x72, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x61, 0x0a, 0x11, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x35, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x50, + 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x0f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x6b, 0x0a, 0x16, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x5f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, + 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x74, 0x61, 0x6c, 0x6f, + 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4e, + 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x50, 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x52, 0x14, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x6f, 0x72, 0x74, 0x22, 0x49, 0x0a, 0x12, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x33, 0x0a, 0x16, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x5f, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x52, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x22, 0x4a, 0x0a, 0x0c, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x4d, 0x61, 0x72, + 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x12, 0x10, 0x0a, 0x03, 0x78, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x03, 0x78, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x5a, 0x0a, + 0x11, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x50, 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x12, 0x45, 0x0a, 0x06, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x61, 0x6e, 0x67, + 0x65, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0xc5, 0x08, 0x0a, 0x0c, 0x4e, 0x66, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x5e, 0x0a, 0x0f, 0x6d, 0x61, + 0x74, 0x63, 0x68, 0x5f, 0x6f, 0x5f, 0x69, 0x66, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x49, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x0c, 0x6d, 0x61, + 0x74, 0x63, 0x68, 0x4f, 0x49, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x55, 0x0a, 0x07, 0x76, 0x65, + 0x72, 0x64, 0x69, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, - 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x2e, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x4d, 0x61, 0x72, 0x6b, 0x52, 0x07, 0x73, - 0x65, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x12, 0x6a, 0x0a, 0x14, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x12, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x74, 0x0a, 0x19, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x65, 0x73, 0x74, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, + 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x52, 0x07, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, + 0x74, 0x12, 0x4f, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4e, 0x66, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, - 0x17, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x5a, 0x0a, 0x0c, 0x6d, 0x61, 0x74, 0x63, - 0x68, 0x5f, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x34, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, + 0x6c, 0x65, 0x73, 0x4d, 0x61, 0x72, 0x6b, 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x61, + 0x72, 0x6b, 0x12, 0x4b, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x4d, 0x61, 0x72, 0x6b, 0x52, 0x07, 0x73, 0x65, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x12, + 0x6a, 0x0a, 0x14, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, + 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, + 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2e, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x12, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x74, 0x0a, 0x19, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x2e, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x4c, 0x61, 0x79, 0x65, - 0x72, 0x34, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x0b, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x61, - 0x79, 0x65, 0x72, 0x34, 0x12, 0x5e, 0x0a, 0x0f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x5f, - 0x69, 0x66, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, - 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, - 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x2e, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x49, 0x66, 0x4e, 0x61, 0x6d, - 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x0c, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x49, 0x66, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x5f, 0x6d, 0x73, - 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, + 0x6f, 0x72, 0x6b, 0x2e, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x17, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x44, + 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x5a, 0x0a, 0x0c, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x34, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4e, 0x66, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6c, 0x61, 0x6d, 0x70, 0x4d, 0x53, 0x53, 0x52, 0x08, 0x63, - 0x6c, 0x61, 0x6d, 0x70, 0x4d, 0x73, 0x73, 0x22, 0x93, 0x01, 0x0a, 0x15, 0x4e, 0x6f, 0x64, 0x65, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, - 0x63, 0x12, 0x3c, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x75, 0x62, - 0x6e, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x34, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x52, 0x0b, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x34, 0x12, 0x5e, 0x0a, + 0x0f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x5f, 0x69, 0x66, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4e, 0x66, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x49, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, + 0x0c, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x49, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x51, 0x0a, + 0x09, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x5f, 0x6d, 0x73, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x34, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4e, 0x66, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6c, + 0x61, 0x6d, 0x70, 0x4d, 0x53, 0x53, 0x52, 0x08, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x4d, 0x73, 0x73, + 0x12, 0x57, 0x0a, 0x0b, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4e, 0x66, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x0a, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x73, 0x0a, 0x15, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, + 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4e, 0x66, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x13, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x43, 0x6f, 0x6e, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x61, 0x6e, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x61, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, + 0x72, 0x22, 0x93, 0x01, 0x0a, 0x15, 0x4e, 0x6f, 0x64, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x3c, 0x0a, 0x0f, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, + 0x74, 0x49, 0x50, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x65, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x3c, 0x0a, 0x0f, 0x65, 0x78, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x49, + 0x50, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x22, 0x44, 0x0a, 0x0f, 0x4e, 0x6f, 0x64, 0x65, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x31, 0x0a, 0x09, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x49, 0x50, 0x50, 0x72, 0x65, 0x66, + 0x69, 0x78, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0xd7, 0x03, + 0x0a, 0x10, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x53, 0x70, + 0x65, 0x63, 0x12, 0x4d, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x69, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, + 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x5f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x55, 0x70, 0x12, 0x4b, 0x0a, + 0x05, 0x64, 0x68, 0x63, 0x70, 0x34, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x74, + 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x2e, 0x44, 0x48, 0x43, 0x50, 0x34, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x53, + 0x70, 0x65, 0x63, 0x52, 0x05, 0x64, 0x68, 0x63, 0x70, 0x34, 0x12, 0x4b, 0x0a, 0x05, 0x64, 0x68, + 0x63, 0x70, 0x36, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x74, 0x61, 0x6c, 0x6f, + 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x44, + 0x48, 0x43, 0x50, 0x36, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, + 0x52, 0x05, 0x64, 0x68, 0x63, 0x70, 0x36, 0x12, 0x45, 0x0a, 0x03, 0x76, 0x69, 0x70, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x56, 0x49, 0x50, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x03, 0x76, 0x69, 0x70, 0x12, 0x57, + 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x22, 0x2b, 0x0a, 0x09, 0x50, 0x6f, 0x72, 0x74, 0x52, + 0x61, 0x6e, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6c, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, + 0x52, 0x02, 0x6c, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x68, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, + 0x52, 0x02, 0x68, 0x69, 0x22, 0x90, 0x02, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x53, 0x70, + 0x65, 0x63, 0x53, 0x70, 0x65, 0x63, 0x12, 0x35, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, + 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x2b, 0x0a, + 0x11, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, + 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, + 0x65, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x42, 0x0a, 0x03, 0x74, 0x63, + 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x54, 0x43, 0x50, + 0x50, 0x72, 0x6f, 0x62, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x03, 0x74, 0x63, 0x70, 0x12, 0x57, + 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x22, 0x4a, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x62, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x22, 0x9b, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, + 0x53, 0x70, 0x65, 0x63, 0x53, 0x70, 0x65, 0x63, 0x12, 0x2e, 0x0a, 0x0b, 0x64, 0x6e, 0x73, 0x5f, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x49, 0x50, 0x52, 0x0a, 0x64, 0x6e, + 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x57, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x5f, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, + 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, + 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, + 0x61, 0x79, 0x65, 0x72, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x61, 0x79, 0x65, + 0x72, 0x22, 0x44, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x2e, 0x0a, 0x0b, 0x64, 0x6e, 0x73, 0x5f, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x49, 0x50, 0x52, 0x0a, 0x64, 0x6e, 0x73, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x22, 0xde, 0x05, 0x0a, 0x0d, 0x52, 0x6f, 0x75, 0x74, + 0x65, 0x53, 0x70, 0x65, 0x63, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4a, 0x0a, 0x06, 0x66, 0x61, 0x6d, + 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x74, 0x61, 0x6c, 0x6f, + 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, + 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x06, 0x66, + 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x35, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x49, 0x50, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, - 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, - 0x3c, 0x0a, 0x0f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x6e, 0x65, - 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x49, 0x50, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x0e, 0x65, - 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x22, 0x44, 0x0a, - 0x0f, 0x4e, 0x6f, 0x64, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x70, 0x65, 0x63, - 0x12, 0x31, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, 0x74, - 0x49, 0x50, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x22, 0xd7, 0x03, 0x0a, 0x10, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x53, 0x70, 0x65, 0x63, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4d, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x74, 0x61, 0x6c, - 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x69, 0x6e, 0x6b, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x5f, - 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x55, 0x70, 0x12, 0x4b, 0x0a, 0x05, 0x64, 0x68, 0x63, 0x70, 0x34, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x44, 0x48, 0x43, 0x50, 0x34, 0x4f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x64, 0x68, 0x63, 0x70, 0x34, - 0x12, 0x4b, 0x0a, 0x05, 0x64, 0x68, 0x63, 0x70, 0x36, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x35, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x44, 0x48, 0x43, 0x50, 0x36, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x64, 0x68, 0x63, 0x70, 0x36, 0x12, 0x45, 0x0a, - 0x03, 0x76, 0x69, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x74, 0x61, 0x6c, - 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, - 0x56, 0x49, 0x50, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, - 0x03, 0x76, 0x69, 0x70, 0x12, 0x57, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x74, 0x61, 0x6c, - 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x61, 0x79, 0x65, 0x72, - 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x22, 0x2b, 0x0a, - 0x09, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6c, 0x6f, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x02, 0x6c, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x68, 0x69, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x02, 0x68, 0x69, 0x22, 0x90, 0x02, 0x0a, 0x0d, 0x50, - 0x72, 0x6f, 0x62, 0x65, 0x53, 0x70, 0x65, 0x63, 0x53, 0x70, 0x65, 0x63, 0x12, 0x35, 0x0a, 0x08, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x76, 0x61, 0x6c, 0x12, 0x2b, 0x0a, 0x11, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x74, - 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, - 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, - 0x12, 0x42, 0x0a, 0x03, 0x74, 0x63, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, + 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x06, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x49, 0x50, 0x52, 0x06, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x07, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, + 0x74, 0x49, 0x50, 0x52, 0x07, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x22, 0x0a, 0x0d, + 0x6f, 0x75, 0x74, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x4e, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x38, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, + 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x52, 0x6f, 0x75, + 0x74, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x47, 0x0a, 0x05, + 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x74, 0x61, + 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, + 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x05, + 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x49, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, + 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x55, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x39, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, + 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x68, + 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x57, 0x0a, + 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x22, 0xad, 0x05, 0x0a, 0x0f, 0x52, 0x6f, 0x75, + 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4a, 0x0a, 0x06, + 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x74, + 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, + 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, + 0x52, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x35, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x49, 0x50, 0x50, 0x72, 0x65, 0x66, + 0x69, 0x78, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x25, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x49, 0x50, 0x52, 0x06, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x07, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x4e, 0x65, 0x74, 0x49, 0x50, 0x52, 0x07, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, + 0x24, 0x0a, 0x0e, 0x6f, 0x75, 0x74, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6f, 0x75, 0x74, 0x4c, 0x69, 0x6e, 0x6b, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x22, 0x0a, 0x0d, 0x6f, 0x75, 0x74, 0x5f, 0x6c, 0x69, 0x6e, + 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x75, + 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4e, 0x0a, 0x05, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, + 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x68, + 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, + 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x72, 0x69, + 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x47, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, + 0x72, 0x73, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x49, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x74, + 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, + 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, + 0x67, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, + 0x55, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x39, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, + 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x52, + 0x6f, 0x75, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x22, 0x23, 0x0a, 0x07, 0x53, 0x54, 0x50, 0x53, + 0x70, 0x65, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xaf, 0x01, + 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x23, 0x0a, 0x0d, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x61, 0x64, + 0x79, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, + 0x79, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x63, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x61, 0x64, 0x79, + 0x12, 0x25, 0x0a, 0x0e, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x61, + 0x64, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, + 0x6d, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x74, 0x63, 0x5f, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0d, 0x65, 0x74, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x61, 0x64, 0x79, 0x22, + 0x5f, 0x0a, 0x0c, 0x54, 0x43, 0x50, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, + 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x74, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x22, 0x8e, 0x01, 0x0a, 0x12, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, + 0x70, 0x65, 0x63, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x74, 0x70, 0x5f, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x74, + 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x57, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x5f, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, + 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, + 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, + 0x61, 0x79, 0x65, 0x72, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x61, 0x79, 0x65, + 0x72, 0x22, 0x37, 0x0a, 0x14, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x74, 0x70, + 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, + 0x6e, 0x74, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x22, 0x6e, 0x0a, 0x13, 0x56, 0x49, + 0x50, 0x45, 0x71, 0x75, 0x69, 0x6e, 0x69, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x53, 0x70, 0x65, + 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, + 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, + 0x09, 0x61, 0x70, 0x69, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x61, 0x70, 0x69, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x68, 0x0a, 0x0d, 0x56, 0x49, + 0x50, 0x48, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, 0x69, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x70, 0x69, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x81, 0x02, 0x0a, 0x0f, 0x56, 0x49, 0x50, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, + 0x74, 0x49, 0x50, 0x52, 0x02, 0x69, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x67, 0x72, 0x61, 0x74, 0x75, + 0x69, 0x74, 0x6f, 0x75, 0x73, 0x5f, 0x61, 0x72, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0d, 0x67, 0x72, 0x61, 0x74, 0x75, 0x69, 0x74, 0x6f, 0x75, 0x73, 0x41, 0x72, 0x70, 0x12, 0x5c, + 0x0a, 0x0d, 0x65, 0x71, 0x75, 0x69, 0x6e, 0x69, 0x78, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x56, 0x49, 0x50, 0x45, 0x71, + 0x75, 0x69, 0x6e, 0x69, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0c, + 0x65, 0x71, 0x75, 0x69, 0x6e, 0x69, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x12, 0x4a, 0x0a, 0x07, + 0x68, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x2e, 0x54, 0x43, 0x50, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, - 0x03, 0x74, 0x63, 0x70, 0x12, 0x57, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x74, 0x61, 0x6c, + 0x72, 0x6b, 0x2e, 0x56, 0x49, 0x50, 0x48, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x70, 0x65, 0x63, + 0x52, 0x06, 0x68, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x22, 0x72, 0x0a, 0x08, 0x56, 0x4c, 0x41, 0x4e, + 0x53, 0x70, 0x65, 0x63, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x07, 0x52, 0x03, 0x76, 0x69, 0x64, 0x12, 0x54, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, + 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x68, + 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x56, 0x4c, 0x41, 0x4e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x22, 0x84, 0x02, 0x0a, + 0x0d, 0x57, 0x69, 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, 0x50, 0x65, 0x65, 0x72, 0x12, 0x1d, + 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x23, 0x0a, + 0x0d, 0x70, 0x72, 0x65, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x65, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4b, + 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x5d, + 0x0a, 0x1d, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x65, + 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x1b, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x65, 0x70, + 0x61, 0x6c, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x34, 0x0a, + 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x69, 0x70, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x49, + 0x50, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, + 0x49, 0x70, 0x73, 0x22, 0xde, 0x01, 0x0a, 0x0d, 0x57, 0x69, 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x5f, + 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6c, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x72, 0x65, 0x77, 0x61, + 0x6c, 0x6c, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x66, + 0x69, 0x72, 0x65, 0x77, 0x61, 0x6c, 0x6c, 0x4d, 0x61, 0x72, 0x6b, 0x12, 0x47, 0x0a, 0x05, 0x70, + 0x65, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x61, 0x79, 0x65, 0x72, - 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x22, 0x4a, 0x0a, - 0x0f, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x70, 0x65, 0x63, - 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x61, - 0x73, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x6c, 0x61, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x9b, 0x01, 0x0a, 0x10, 0x52, 0x65, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x53, 0x70, 0x65, 0x63, 0x12, 0x2e, - 0x0a, 0x0b, 0x64, 0x6e, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, 0x74, - 0x49, 0x50, 0x52, 0x0a, 0x64, 0x6e, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x57, - 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x22, 0x44, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, 0x2e, 0x0a, - 0x0b, 0x64, 0x6e, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x49, - 0x50, 0x52, 0x0a, 0x64, 0x6e, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x22, 0xde, 0x05, - 0x0a, 0x0d, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x70, 0x65, 0x63, 0x53, 0x70, 0x65, 0x63, 0x12, - 0x4a, 0x0a, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x32, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, - 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x46, 0x61, 0x6d, - 0x69, 0x6c, 0x79, 0x52, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x35, 0x0a, 0x0b, 0x64, - 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x49, 0x50, 0x50, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x49, - 0x50, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x07, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x49, 0x50, 0x52, 0x07, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x12, 0x22, 0x0a, 0x0d, 0x6f, 0x75, 0x74, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x4c, 0x69, - 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4e, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, - 0x65, 0x72, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, - 0x74, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, - 0x74, 0x79, 0x12, 0x47, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x31, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, - 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x53, - 0x63, 0x6f, 0x70, 0x65, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x49, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x74, 0x61, 0x6c, 0x6f, - 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, - 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x55, 0x0a, 0x08, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x39, - 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, - 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x12, 0x57, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6c, 0x61, - 0x79, 0x65, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x74, 0x61, 0x6c, 0x6f, - 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x52, - 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, - 0x6d, 0x74, 0x75, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x22, 0xad, - 0x05, 0x0a, 0x0f, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x70, - 0x65, 0x63, 0x12, 0x4a, 0x0a, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, - 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x06, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x35, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, 0x74, - 0x49, 0x50, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, - 0x65, 0x74, 0x49, 0x50, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x07, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x49, 0x50, 0x52, 0x07, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x6f, 0x75, 0x74, 0x5f, 0x6c, 0x69, 0x6e, - 0x6b, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6f, - 0x75, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x22, 0x0a, 0x0d, 0x6f, - 0x75, 0x74, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x4e, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, - 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, - 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x52, 0x6f, 0x75, 0x74, - 0x69, 0x6e, 0x67, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x47, 0x0a, 0x05, 0x73, - 0x63, 0x6f, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x74, 0x61, 0x6c, - 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, - 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x05, 0x73, - 0x63, 0x6f, 0x70, 0x65, 0x12, 0x49, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, - 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x55, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x39, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x68, 0x65, - 0x6c, 0x70, 0x65, 0x72, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x10, 0x0a, 0x03, - 0x6d, 0x74, 0x75, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x22, 0x23, - 0x0a, 0x07, 0x53, 0x54, 0x50, 0x53, 0x70, 0x65, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x22, 0xaf, 0x01, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x70, - 0x65, 0x63, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, - 0x61, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, - 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, - 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x26, 0x0a, - 0x0f, 0x65, 0x74, 0x63, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x65, 0x74, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x61, 0x64, 0x79, 0x22, 0x5f, 0x0a, 0x0c, 0x54, 0x43, 0x50, 0x50, 0x72, 0x6f, 0x62, - 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x74, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0x8e, 0x01, 0x0a, 0x12, 0x54, 0x69, 0x6d, 0x65, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, - 0x0b, 0x6e, 0x74, 0x70, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x74, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x57, - 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x22, 0x37, 0x0a, 0x14, 0x54, 0x69, 0x6d, 0x65, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, - 0x1f, 0x0a, 0x0b, 0x6e, 0x74, 0x70, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x74, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, - 0x22, 0x6e, 0x0a, 0x13, 0x56, 0x49, 0x50, 0x45, 0x71, 0x75, 0x69, 0x6e, 0x69, 0x78, 0x4d, 0x65, - 0x74, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, 0x69, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x70, 0x69, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x22, 0x68, 0x0a, 0x0d, 0x56, 0x49, 0x50, 0x48, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x70, 0x65, - 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x12, 0x1b, 0x0a, - 0x09, 0x61, 0x70, 0x69, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x61, 0x70, 0x69, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x81, 0x02, 0x0a, 0x0f, 0x56, - 0x49, 0x50, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1d, - 0x0a, 0x02, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x49, 0x50, 0x52, 0x02, 0x69, 0x70, 0x12, 0x25, 0x0a, - 0x0e, 0x67, 0x72, 0x61, 0x74, 0x75, 0x69, 0x74, 0x6f, 0x75, 0x73, 0x5f, 0x61, 0x72, 0x70, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x67, 0x72, 0x61, 0x74, 0x75, 0x69, 0x74, 0x6f, 0x75, - 0x73, 0x41, 0x72, 0x70, 0x12, 0x5c, 0x0a, 0x0d, 0x65, 0x71, 0x75, 0x69, 0x6e, 0x69, 0x78, 0x5f, - 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x61, - 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, - 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x2e, 0x56, 0x49, 0x50, 0x45, 0x71, 0x75, 0x69, 0x6e, 0x69, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x6c, - 0x53, 0x70, 0x65, 0x63, 0x52, 0x0c, 0x65, 0x71, 0x75, 0x69, 0x6e, 0x69, 0x78, 0x4d, 0x65, 0x74, - 0x61, 0x6c, 0x12, 0x4a, 0x0a, 0x07, 0x68, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x56, 0x49, 0x50, 0x48, 0x43, 0x6c, 0x6f, - 0x75, 0x64, 0x53, 0x70, 0x65, 0x63, 0x52, 0x06, 0x68, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x22, 0x72, - 0x0a, 0x08, 0x56, 0x4c, 0x41, 0x4e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x03, 0x76, 0x69, 0x64, 0x12, 0x54, 0x0a, 0x08, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, - 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x65, 0x6e, 0x75, 0x6d, - 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x73, 0x56, 0x4c, 0x41, 0x4e, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x22, 0x84, 0x02, 0x0a, 0x0d, 0x57, 0x69, 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x50, 0x65, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x4b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, - 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x65, 0x73, - 0x68, 0x61, 0x72, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x5d, 0x0a, 0x1d, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x5f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1b, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x74, 0x4b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x76, 0x61, 0x6c, 0x12, 0x34, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x69, - 0x70, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x49, 0x50, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x0a, 0x61, - 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x49, 0x70, 0x73, 0x22, 0xde, 0x01, 0x0a, 0x0d, 0x57, 0x69, - 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x23, 0x0a, 0x0d, - 0x66, 0x69, 0x72, 0x65, 0x77, 0x61, 0x6c, 0x6c, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0c, 0x66, 0x69, 0x72, 0x65, 0x77, 0x61, 0x6c, 0x6c, 0x4d, 0x61, 0x72, - 0x6b, 0x12, 0x47, 0x0a, 0x05, 0x70, 0x65, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x2e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x57, 0x69, 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, 0x50, - 0x65, 0x65, 0x72, 0x52, 0x05, 0x70, 0x65, 0x65, 0x72, 0x73, 0x42, 0x4c, 0x5a, 0x4a, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x69, 0x64, 0x65, 0x72, 0x6f, 0x6c, - 0x61, 0x62, 0x73, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x61, - 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, + 0x57, 0x69, 0x72, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, 0x50, 0x65, 0x65, 0x72, 0x52, 0x05, 0x70, + 0x65, 0x65, 0x72, 0x73, 0x42, 0x4c, 0x5a, 0x4a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x73, 0x69, 0x64, 0x65, 0x72, 0x6f, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x74, 0x61, + 0x6c, 0x6f, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, + 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x64, + 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4163,7 +4320,7 @@ func file_resource_definitions_network_network_proto_rawDescGZIP() []byte { return file_resource_definitions_network_network_proto_rawDescData } -var file_resource_definitions_network_network_proto_msgTypes = make([]protoimpl.MessageInfo, 43) +var file_resource_definitions_network_network_proto_msgTypes = make([]protoimpl.MessageInfo, 45) var file_resource_definitions_network_network_proto_goTypes = []interface{}{ (*AddressSpecSpec)(nil), // 0: talos.resource.definitions.network.AddressSpecSpec (*AddressStatusSpec)(nil), // 1: talos.resource.definitions.network.AddressStatusSpec @@ -4182,163 +4339,168 @@ var file_resource_definitions_network_network_proto_goTypes = []interface{}{ (*NfTablesAddressMatch)(nil), // 14: talos.resource.definitions.network.NfTablesAddressMatch (*NfTablesChainSpec)(nil), // 15: talos.resource.definitions.network.NfTablesChainSpec (*NfTablesClampMSS)(nil), // 16: talos.resource.definitions.network.NfTablesClampMSS - (*NfTablesIfNameMatch)(nil), // 17: talos.resource.definitions.network.NfTablesIfNameMatch - (*NfTablesLayer4Match)(nil), // 18: talos.resource.definitions.network.NfTablesLayer4Match - (*NfTablesMark)(nil), // 19: talos.resource.definitions.network.NfTablesMark - (*NfTablesPortMatch)(nil), // 20: talos.resource.definitions.network.NfTablesPortMatch - (*NfTablesRule)(nil), // 21: talos.resource.definitions.network.NfTablesRule - (*NodeAddressFilterSpec)(nil), // 22: talos.resource.definitions.network.NodeAddressFilterSpec - (*NodeAddressSpec)(nil), // 23: talos.resource.definitions.network.NodeAddressSpec - (*OperatorSpecSpec)(nil), // 24: talos.resource.definitions.network.OperatorSpecSpec - (*PortRange)(nil), // 25: talos.resource.definitions.network.PortRange - (*ProbeSpecSpec)(nil), // 26: talos.resource.definitions.network.ProbeSpecSpec - (*ProbeStatusSpec)(nil), // 27: talos.resource.definitions.network.ProbeStatusSpec - (*ResolverSpecSpec)(nil), // 28: talos.resource.definitions.network.ResolverSpecSpec - (*ResolverStatusSpec)(nil), // 29: talos.resource.definitions.network.ResolverStatusSpec - (*RouteSpecSpec)(nil), // 30: talos.resource.definitions.network.RouteSpecSpec - (*RouteStatusSpec)(nil), // 31: talos.resource.definitions.network.RouteStatusSpec - (*STPSpec)(nil), // 32: talos.resource.definitions.network.STPSpec - (*StatusSpec)(nil), // 33: talos.resource.definitions.network.StatusSpec - (*TCPProbeSpec)(nil), // 34: talos.resource.definitions.network.TCPProbeSpec - (*TimeServerSpecSpec)(nil), // 35: talos.resource.definitions.network.TimeServerSpecSpec - (*TimeServerStatusSpec)(nil), // 36: talos.resource.definitions.network.TimeServerStatusSpec - (*VIPEquinixMetalSpec)(nil), // 37: talos.resource.definitions.network.VIPEquinixMetalSpec - (*VIPHCloudSpec)(nil), // 38: talos.resource.definitions.network.VIPHCloudSpec - (*VIPOperatorSpec)(nil), // 39: talos.resource.definitions.network.VIPOperatorSpec - (*VLANSpec)(nil), // 40: talos.resource.definitions.network.VLANSpec - (*WireguardPeer)(nil), // 41: talos.resource.definitions.network.WireguardPeer - (*WireguardSpec)(nil), // 42: talos.resource.definitions.network.WireguardSpec - (*common.NetIPPrefix)(nil), // 43: common.NetIPPrefix - (enums.NethelpersFamily)(0), // 44: talos.resource.definitions.enums.NethelpersFamily - (enums.NethelpersScope)(0), // 45: talos.resource.definitions.enums.NethelpersScope - (enums.NetworkConfigLayer)(0), // 46: talos.resource.definitions.enums.NetworkConfigLayer - (*common.NetIP)(nil), // 47: common.NetIP - (enums.NethelpersBondMode)(0), // 48: talos.resource.definitions.enums.NethelpersBondMode - (enums.NethelpersBondXmitHashPolicy)(0), // 49: talos.resource.definitions.enums.NethelpersBondXmitHashPolicy - (enums.NethelpersLACPRate)(0), // 50: talos.resource.definitions.enums.NethelpersLACPRate - (enums.NethelpersARPValidate)(0), // 51: talos.resource.definitions.enums.NethelpersARPValidate - (enums.NethelpersARPAllTargets)(0), // 52: talos.resource.definitions.enums.NethelpersARPAllTargets - (enums.NethelpersPrimaryReselect)(0), // 53: talos.resource.definitions.enums.NethelpersPrimaryReselect - (enums.NethelpersFailOverMAC)(0), // 54: talos.resource.definitions.enums.NethelpersFailOverMAC - (enums.NethelpersADSelect)(0), // 55: talos.resource.definitions.enums.NethelpersADSelect - (enums.NethelpersLinkType)(0), // 56: talos.resource.definitions.enums.NethelpersLinkType - (enums.NethelpersOperationalState)(0), // 57: talos.resource.definitions.enums.NethelpersOperationalState - (enums.NethelpersPort)(0), // 58: talos.resource.definitions.enums.NethelpersPort - (enums.NethelpersDuplex)(0), // 59: talos.resource.definitions.enums.NethelpersDuplex - (enums.NethelpersNfTablesChainHook)(0), // 60: talos.resource.definitions.enums.NethelpersNfTablesChainHook - (enums.NethelpersNfTablesChainPriority)(0), // 61: talos.resource.definitions.enums.NethelpersNfTablesChainPriority - (enums.NethelpersMatchOperator)(0), // 62: talos.resource.definitions.enums.NethelpersMatchOperator - (enums.NethelpersProtocol)(0), // 63: talos.resource.definitions.enums.NethelpersProtocol + (*NfTablesConntrackStateMatch)(nil), // 17: talos.resource.definitions.network.NfTablesConntrackStateMatch + (*NfTablesIfNameMatch)(nil), // 18: talos.resource.definitions.network.NfTablesIfNameMatch + (*NfTablesLayer4Match)(nil), // 19: talos.resource.definitions.network.NfTablesLayer4Match + (*NfTablesLimitMatch)(nil), // 20: talos.resource.definitions.network.NfTablesLimitMatch + (*NfTablesMark)(nil), // 21: talos.resource.definitions.network.NfTablesMark + (*NfTablesPortMatch)(nil), // 22: talos.resource.definitions.network.NfTablesPortMatch + (*NfTablesRule)(nil), // 23: talos.resource.definitions.network.NfTablesRule + (*NodeAddressFilterSpec)(nil), // 24: talos.resource.definitions.network.NodeAddressFilterSpec + (*NodeAddressSpec)(nil), // 25: talos.resource.definitions.network.NodeAddressSpec + (*OperatorSpecSpec)(nil), // 26: talos.resource.definitions.network.OperatorSpecSpec + (*PortRange)(nil), // 27: talos.resource.definitions.network.PortRange + (*ProbeSpecSpec)(nil), // 28: talos.resource.definitions.network.ProbeSpecSpec + (*ProbeStatusSpec)(nil), // 29: talos.resource.definitions.network.ProbeStatusSpec + (*ResolverSpecSpec)(nil), // 30: talos.resource.definitions.network.ResolverSpecSpec + (*ResolverStatusSpec)(nil), // 31: talos.resource.definitions.network.ResolverStatusSpec + (*RouteSpecSpec)(nil), // 32: talos.resource.definitions.network.RouteSpecSpec + (*RouteStatusSpec)(nil), // 33: talos.resource.definitions.network.RouteStatusSpec + (*STPSpec)(nil), // 34: talos.resource.definitions.network.STPSpec + (*StatusSpec)(nil), // 35: talos.resource.definitions.network.StatusSpec + (*TCPProbeSpec)(nil), // 36: talos.resource.definitions.network.TCPProbeSpec + (*TimeServerSpecSpec)(nil), // 37: talos.resource.definitions.network.TimeServerSpecSpec + (*TimeServerStatusSpec)(nil), // 38: talos.resource.definitions.network.TimeServerStatusSpec + (*VIPEquinixMetalSpec)(nil), // 39: talos.resource.definitions.network.VIPEquinixMetalSpec + (*VIPHCloudSpec)(nil), // 40: talos.resource.definitions.network.VIPHCloudSpec + (*VIPOperatorSpec)(nil), // 41: talos.resource.definitions.network.VIPOperatorSpec + (*VLANSpec)(nil), // 42: talos.resource.definitions.network.VLANSpec + (*WireguardPeer)(nil), // 43: talos.resource.definitions.network.WireguardPeer + (*WireguardSpec)(nil), // 44: talos.resource.definitions.network.WireguardSpec + (*common.NetIPPrefix)(nil), // 45: common.NetIPPrefix + (enums.NethelpersFamily)(0), // 46: talos.resource.definitions.enums.NethelpersFamily + (enums.NethelpersScope)(0), // 47: talos.resource.definitions.enums.NethelpersScope + (enums.NetworkConfigLayer)(0), // 48: talos.resource.definitions.enums.NetworkConfigLayer + (*common.NetIP)(nil), // 49: common.NetIP + (enums.NethelpersBondMode)(0), // 50: talos.resource.definitions.enums.NethelpersBondMode + (enums.NethelpersBondXmitHashPolicy)(0), // 51: talos.resource.definitions.enums.NethelpersBondXmitHashPolicy + (enums.NethelpersLACPRate)(0), // 52: talos.resource.definitions.enums.NethelpersLACPRate + (enums.NethelpersARPValidate)(0), // 53: talos.resource.definitions.enums.NethelpersARPValidate + (enums.NethelpersARPAllTargets)(0), // 54: talos.resource.definitions.enums.NethelpersARPAllTargets + (enums.NethelpersPrimaryReselect)(0), // 55: talos.resource.definitions.enums.NethelpersPrimaryReselect + (enums.NethelpersFailOverMAC)(0), // 56: talos.resource.definitions.enums.NethelpersFailOverMAC + (enums.NethelpersADSelect)(0), // 57: talos.resource.definitions.enums.NethelpersADSelect + (enums.NethelpersLinkType)(0), // 58: talos.resource.definitions.enums.NethelpersLinkType + (enums.NethelpersOperationalState)(0), // 59: talos.resource.definitions.enums.NethelpersOperationalState + (enums.NethelpersPort)(0), // 60: talos.resource.definitions.enums.NethelpersPort + (enums.NethelpersDuplex)(0), // 61: talos.resource.definitions.enums.NethelpersDuplex + (enums.NethelpersNfTablesChainHook)(0), // 62: talos.resource.definitions.enums.NethelpersNfTablesChainHook + (enums.NethelpersNfTablesChainPriority)(0), // 63: talos.resource.definitions.enums.NethelpersNfTablesChainPriority (enums.NethelpersNfTablesVerdict)(0), // 64: talos.resource.definitions.enums.NethelpersNfTablesVerdict - (enums.NetworkOperator)(0), // 65: talos.resource.definitions.enums.NetworkOperator - (*durationpb.Duration)(nil), // 66: google.protobuf.Duration - (enums.NethelpersRoutingTable)(0), // 67: talos.resource.definitions.enums.NethelpersRoutingTable - (enums.NethelpersRouteType)(0), // 68: talos.resource.definitions.enums.NethelpersRouteType - (enums.NethelpersRouteProtocol)(0), // 69: talos.resource.definitions.enums.NethelpersRouteProtocol - (enums.NethelpersVLANProtocol)(0), // 70: talos.resource.definitions.enums.NethelpersVLANProtocol + (enums.NethelpersMatchOperator)(0), // 65: talos.resource.definitions.enums.NethelpersMatchOperator + (enums.NethelpersProtocol)(0), // 66: talos.resource.definitions.enums.NethelpersProtocol + (enums.NetworkOperator)(0), // 67: talos.resource.definitions.enums.NetworkOperator + (*durationpb.Duration)(nil), // 68: google.protobuf.Duration + (enums.NethelpersRoutingTable)(0), // 69: talos.resource.definitions.enums.NethelpersRoutingTable + (enums.NethelpersRouteType)(0), // 70: talos.resource.definitions.enums.NethelpersRouteType + (enums.NethelpersRouteProtocol)(0), // 71: talos.resource.definitions.enums.NethelpersRouteProtocol + (enums.NethelpersVLANProtocol)(0), // 72: talos.resource.definitions.enums.NethelpersVLANProtocol } var file_resource_definitions_network_network_proto_depIdxs = []int32{ - 43, // 0: talos.resource.definitions.network.AddressSpecSpec.address:type_name -> common.NetIPPrefix - 44, // 1: talos.resource.definitions.network.AddressSpecSpec.family:type_name -> talos.resource.definitions.enums.NethelpersFamily - 45, // 2: talos.resource.definitions.network.AddressSpecSpec.scope:type_name -> talos.resource.definitions.enums.NethelpersScope - 46, // 3: talos.resource.definitions.network.AddressSpecSpec.config_layer:type_name -> talos.resource.definitions.enums.NetworkConfigLayer - 43, // 4: talos.resource.definitions.network.AddressStatusSpec.address:type_name -> common.NetIPPrefix - 47, // 5: talos.resource.definitions.network.AddressStatusSpec.local:type_name -> common.NetIP - 47, // 6: talos.resource.definitions.network.AddressStatusSpec.broadcast:type_name -> common.NetIP - 47, // 7: talos.resource.definitions.network.AddressStatusSpec.anycast:type_name -> common.NetIP - 47, // 8: talos.resource.definitions.network.AddressStatusSpec.multicast:type_name -> common.NetIP - 44, // 9: talos.resource.definitions.network.AddressStatusSpec.family:type_name -> talos.resource.definitions.enums.NethelpersFamily - 45, // 10: talos.resource.definitions.network.AddressStatusSpec.scope:type_name -> talos.resource.definitions.enums.NethelpersScope - 48, // 11: talos.resource.definitions.network.BondMasterSpec.mode:type_name -> talos.resource.definitions.enums.NethelpersBondMode - 49, // 12: talos.resource.definitions.network.BondMasterSpec.hash_policy:type_name -> talos.resource.definitions.enums.NethelpersBondXmitHashPolicy - 50, // 13: talos.resource.definitions.network.BondMasterSpec.lacp_rate:type_name -> talos.resource.definitions.enums.NethelpersLACPRate - 51, // 14: talos.resource.definitions.network.BondMasterSpec.arp_validate:type_name -> talos.resource.definitions.enums.NethelpersARPValidate - 52, // 15: talos.resource.definitions.network.BondMasterSpec.arp_all_targets:type_name -> talos.resource.definitions.enums.NethelpersARPAllTargets - 53, // 16: talos.resource.definitions.network.BondMasterSpec.primary_reselect:type_name -> talos.resource.definitions.enums.NethelpersPrimaryReselect - 54, // 17: talos.resource.definitions.network.BondMasterSpec.fail_over_mac:type_name -> talos.resource.definitions.enums.NethelpersFailOverMAC - 55, // 18: talos.resource.definitions.network.BondMasterSpec.ad_select:type_name -> talos.resource.definitions.enums.NethelpersADSelect - 32, // 19: talos.resource.definitions.network.BridgeMasterSpec.stp:type_name -> talos.resource.definitions.network.STPSpec - 46, // 20: talos.resource.definitions.network.HostnameSpecSpec.config_layer:type_name -> talos.resource.definitions.enums.NetworkConfigLayer - 56, // 21: talos.resource.definitions.network.LinkSpecSpec.type:type_name -> talos.resource.definitions.enums.NethelpersLinkType + 45, // 0: talos.resource.definitions.network.AddressSpecSpec.address:type_name -> common.NetIPPrefix + 46, // 1: talos.resource.definitions.network.AddressSpecSpec.family:type_name -> talos.resource.definitions.enums.NethelpersFamily + 47, // 2: talos.resource.definitions.network.AddressSpecSpec.scope:type_name -> talos.resource.definitions.enums.NethelpersScope + 48, // 3: talos.resource.definitions.network.AddressSpecSpec.config_layer:type_name -> talos.resource.definitions.enums.NetworkConfigLayer + 45, // 4: talos.resource.definitions.network.AddressStatusSpec.address:type_name -> common.NetIPPrefix + 49, // 5: talos.resource.definitions.network.AddressStatusSpec.local:type_name -> common.NetIP + 49, // 6: talos.resource.definitions.network.AddressStatusSpec.broadcast:type_name -> common.NetIP + 49, // 7: talos.resource.definitions.network.AddressStatusSpec.anycast:type_name -> common.NetIP + 49, // 8: talos.resource.definitions.network.AddressStatusSpec.multicast:type_name -> common.NetIP + 46, // 9: talos.resource.definitions.network.AddressStatusSpec.family:type_name -> talos.resource.definitions.enums.NethelpersFamily + 47, // 10: talos.resource.definitions.network.AddressStatusSpec.scope:type_name -> talos.resource.definitions.enums.NethelpersScope + 50, // 11: talos.resource.definitions.network.BondMasterSpec.mode:type_name -> talos.resource.definitions.enums.NethelpersBondMode + 51, // 12: talos.resource.definitions.network.BondMasterSpec.hash_policy:type_name -> talos.resource.definitions.enums.NethelpersBondXmitHashPolicy + 52, // 13: talos.resource.definitions.network.BondMasterSpec.lacp_rate:type_name -> talos.resource.definitions.enums.NethelpersLACPRate + 53, // 14: talos.resource.definitions.network.BondMasterSpec.arp_validate:type_name -> talos.resource.definitions.enums.NethelpersARPValidate + 54, // 15: talos.resource.definitions.network.BondMasterSpec.arp_all_targets:type_name -> talos.resource.definitions.enums.NethelpersARPAllTargets + 55, // 16: talos.resource.definitions.network.BondMasterSpec.primary_reselect:type_name -> talos.resource.definitions.enums.NethelpersPrimaryReselect + 56, // 17: talos.resource.definitions.network.BondMasterSpec.fail_over_mac:type_name -> talos.resource.definitions.enums.NethelpersFailOverMAC + 57, // 18: talos.resource.definitions.network.BondMasterSpec.ad_select:type_name -> talos.resource.definitions.enums.NethelpersADSelect + 34, // 19: talos.resource.definitions.network.BridgeMasterSpec.stp:type_name -> talos.resource.definitions.network.STPSpec + 48, // 20: talos.resource.definitions.network.HostnameSpecSpec.config_layer:type_name -> talos.resource.definitions.enums.NetworkConfigLayer + 58, // 21: talos.resource.definitions.network.LinkSpecSpec.type:type_name -> talos.resource.definitions.enums.NethelpersLinkType 3, // 22: talos.resource.definitions.network.LinkSpecSpec.bond_slave:type_name -> talos.resource.definitions.network.BondSlave 5, // 23: talos.resource.definitions.network.LinkSpecSpec.bridge_slave:type_name -> talos.resource.definitions.network.BridgeSlave - 40, // 24: talos.resource.definitions.network.LinkSpecSpec.vlan:type_name -> talos.resource.definitions.network.VLANSpec + 42, // 24: talos.resource.definitions.network.LinkSpecSpec.vlan:type_name -> talos.resource.definitions.network.VLANSpec 2, // 25: talos.resource.definitions.network.LinkSpecSpec.bond_master:type_name -> talos.resource.definitions.network.BondMasterSpec 4, // 26: talos.resource.definitions.network.LinkSpecSpec.bridge_master:type_name -> talos.resource.definitions.network.BridgeMasterSpec - 42, // 27: talos.resource.definitions.network.LinkSpecSpec.wireguard:type_name -> talos.resource.definitions.network.WireguardSpec - 46, // 28: talos.resource.definitions.network.LinkSpecSpec.config_layer:type_name -> talos.resource.definitions.enums.NetworkConfigLayer - 56, // 29: talos.resource.definitions.network.LinkStatusSpec.type:type_name -> talos.resource.definitions.enums.NethelpersLinkType - 57, // 30: talos.resource.definitions.network.LinkStatusSpec.operational_state:type_name -> talos.resource.definitions.enums.NethelpersOperationalState - 58, // 31: talos.resource.definitions.network.LinkStatusSpec.port:type_name -> talos.resource.definitions.enums.NethelpersPort - 59, // 32: talos.resource.definitions.network.LinkStatusSpec.duplex:type_name -> talos.resource.definitions.enums.NethelpersDuplex - 40, // 33: talos.resource.definitions.network.LinkStatusSpec.vlan:type_name -> talos.resource.definitions.network.VLANSpec + 44, // 27: talos.resource.definitions.network.LinkSpecSpec.wireguard:type_name -> talos.resource.definitions.network.WireguardSpec + 48, // 28: talos.resource.definitions.network.LinkSpecSpec.config_layer:type_name -> talos.resource.definitions.enums.NetworkConfigLayer + 58, // 29: talos.resource.definitions.network.LinkStatusSpec.type:type_name -> talos.resource.definitions.enums.NethelpersLinkType + 59, // 30: talos.resource.definitions.network.LinkStatusSpec.operational_state:type_name -> talos.resource.definitions.enums.NethelpersOperationalState + 60, // 31: talos.resource.definitions.network.LinkStatusSpec.port:type_name -> talos.resource.definitions.enums.NethelpersPort + 61, // 32: talos.resource.definitions.network.LinkStatusSpec.duplex:type_name -> talos.resource.definitions.enums.NethelpersDuplex + 42, // 33: talos.resource.definitions.network.LinkStatusSpec.vlan:type_name -> talos.resource.definitions.network.VLANSpec 4, // 34: talos.resource.definitions.network.LinkStatusSpec.bridge_master:type_name -> talos.resource.definitions.network.BridgeMasterSpec 2, // 35: talos.resource.definitions.network.LinkStatusSpec.bond_master:type_name -> talos.resource.definitions.network.BondMasterSpec - 42, // 36: talos.resource.definitions.network.LinkStatusSpec.wireguard:type_name -> talos.resource.definitions.network.WireguardSpec - 43, // 37: talos.resource.definitions.network.NfTablesAddressMatch.include_subnets:type_name -> common.NetIPPrefix - 43, // 38: talos.resource.definitions.network.NfTablesAddressMatch.exclude_subnets:type_name -> common.NetIPPrefix - 60, // 39: talos.resource.definitions.network.NfTablesChainSpec.hook:type_name -> talos.resource.definitions.enums.NethelpersNfTablesChainHook - 61, // 40: talos.resource.definitions.network.NfTablesChainSpec.priority:type_name -> talos.resource.definitions.enums.NethelpersNfTablesChainPriority - 21, // 41: talos.resource.definitions.network.NfTablesChainSpec.rules:type_name -> talos.resource.definitions.network.NfTablesRule - 62, // 42: talos.resource.definitions.network.NfTablesIfNameMatch.operator:type_name -> talos.resource.definitions.enums.NethelpersMatchOperator - 63, // 43: talos.resource.definitions.network.NfTablesLayer4Match.protocol:type_name -> talos.resource.definitions.enums.NethelpersProtocol - 20, // 44: talos.resource.definitions.network.NfTablesLayer4Match.match_source_port:type_name -> talos.resource.definitions.network.NfTablesPortMatch - 20, // 45: talos.resource.definitions.network.NfTablesLayer4Match.match_destination_port:type_name -> talos.resource.definitions.network.NfTablesPortMatch - 25, // 46: talos.resource.definitions.network.NfTablesPortMatch.ranges:type_name -> talos.resource.definitions.network.PortRange - 17, // 47: talos.resource.definitions.network.NfTablesRule.match_o_if_name:type_name -> talos.resource.definitions.network.NfTablesIfNameMatch - 64, // 48: talos.resource.definitions.network.NfTablesRule.verdict:type_name -> talos.resource.definitions.enums.NethelpersNfTablesVerdict - 19, // 49: talos.resource.definitions.network.NfTablesRule.match_mark:type_name -> talos.resource.definitions.network.NfTablesMark - 19, // 50: talos.resource.definitions.network.NfTablesRule.set_mark:type_name -> talos.resource.definitions.network.NfTablesMark - 14, // 51: talos.resource.definitions.network.NfTablesRule.match_source_address:type_name -> talos.resource.definitions.network.NfTablesAddressMatch - 14, // 52: talos.resource.definitions.network.NfTablesRule.match_destination_address:type_name -> talos.resource.definitions.network.NfTablesAddressMatch - 18, // 53: talos.resource.definitions.network.NfTablesRule.match_layer4:type_name -> talos.resource.definitions.network.NfTablesLayer4Match - 17, // 54: talos.resource.definitions.network.NfTablesRule.match_i_if_name:type_name -> talos.resource.definitions.network.NfTablesIfNameMatch - 16, // 55: talos.resource.definitions.network.NfTablesRule.clamp_mss:type_name -> talos.resource.definitions.network.NfTablesClampMSS - 43, // 56: talos.resource.definitions.network.NodeAddressFilterSpec.include_subnets:type_name -> common.NetIPPrefix - 43, // 57: talos.resource.definitions.network.NodeAddressFilterSpec.exclude_subnets:type_name -> common.NetIPPrefix - 43, // 58: talos.resource.definitions.network.NodeAddressSpec.addresses:type_name -> common.NetIPPrefix - 65, // 59: talos.resource.definitions.network.OperatorSpecSpec.operator:type_name -> talos.resource.definitions.enums.NetworkOperator - 6, // 60: talos.resource.definitions.network.OperatorSpecSpec.dhcp4:type_name -> talos.resource.definitions.network.DHCP4OperatorSpec - 7, // 61: talos.resource.definitions.network.OperatorSpecSpec.dhcp6:type_name -> talos.resource.definitions.network.DHCP6OperatorSpec - 39, // 62: talos.resource.definitions.network.OperatorSpecSpec.vip:type_name -> talos.resource.definitions.network.VIPOperatorSpec - 46, // 63: talos.resource.definitions.network.OperatorSpecSpec.config_layer:type_name -> talos.resource.definitions.enums.NetworkConfigLayer - 66, // 64: talos.resource.definitions.network.ProbeSpecSpec.interval:type_name -> google.protobuf.Duration - 34, // 65: talos.resource.definitions.network.ProbeSpecSpec.tcp:type_name -> talos.resource.definitions.network.TCPProbeSpec - 46, // 66: talos.resource.definitions.network.ProbeSpecSpec.config_layer:type_name -> talos.resource.definitions.enums.NetworkConfigLayer - 47, // 67: talos.resource.definitions.network.ResolverSpecSpec.dns_servers:type_name -> common.NetIP - 46, // 68: talos.resource.definitions.network.ResolverSpecSpec.config_layer:type_name -> talos.resource.definitions.enums.NetworkConfigLayer - 47, // 69: talos.resource.definitions.network.ResolverStatusSpec.dns_servers:type_name -> common.NetIP - 44, // 70: talos.resource.definitions.network.RouteSpecSpec.family:type_name -> talos.resource.definitions.enums.NethelpersFamily - 43, // 71: talos.resource.definitions.network.RouteSpecSpec.destination:type_name -> common.NetIPPrefix - 47, // 72: talos.resource.definitions.network.RouteSpecSpec.source:type_name -> common.NetIP - 47, // 73: talos.resource.definitions.network.RouteSpecSpec.gateway:type_name -> common.NetIP - 67, // 74: talos.resource.definitions.network.RouteSpecSpec.table:type_name -> talos.resource.definitions.enums.NethelpersRoutingTable - 45, // 75: talos.resource.definitions.network.RouteSpecSpec.scope:type_name -> talos.resource.definitions.enums.NethelpersScope - 68, // 76: talos.resource.definitions.network.RouteSpecSpec.type:type_name -> talos.resource.definitions.enums.NethelpersRouteType - 69, // 77: talos.resource.definitions.network.RouteSpecSpec.protocol:type_name -> talos.resource.definitions.enums.NethelpersRouteProtocol - 46, // 78: talos.resource.definitions.network.RouteSpecSpec.config_layer:type_name -> talos.resource.definitions.enums.NetworkConfigLayer - 44, // 79: talos.resource.definitions.network.RouteStatusSpec.family:type_name -> talos.resource.definitions.enums.NethelpersFamily - 43, // 80: talos.resource.definitions.network.RouteStatusSpec.destination:type_name -> common.NetIPPrefix - 47, // 81: talos.resource.definitions.network.RouteStatusSpec.source:type_name -> common.NetIP - 47, // 82: talos.resource.definitions.network.RouteStatusSpec.gateway:type_name -> common.NetIP - 67, // 83: talos.resource.definitions.network.RouteStatusSpec.table:type_name -> talos.resource.definitions.enums.NethelpersRoutingTable - 45, // 84: talos.resource.definitions.network.RouteStatusSpec.scope:type_name -> talos.resource.definitions.enums.NethelpersScope - 68, // 85: talos.resource.definitions.network.RouteStatusSpec.type:type_name -> talos.resource.definitions.enums.NethelpersRouteType - 69, // 86: talos.resource.definitions.network.RouteStatusSpec.protocol:type_name -> talos.resource.definitions.enums.NethelpersRouteProtocol - 66, // 87: talos.resource.definitions.network.TCPProbeSpec.timeout:type_name -> google.protobuf.Duration - 46, // 88: talos.resource.definitions.network.TimeServerSpecSpec.config_layer:type_name -> talos.resource.definitions.enums.NetworkConfigLayer - 47, // 89: talos.resource.definitions.network.VIPOperatorSpec.ip:type_name -> common.NetIP - 37, // 90: talos.resource.definitions.network.VIPOperatorSpec.equinix_metal:type_name -> talos.resource.definitions.network.VIPEquinixMetalSpec - 38, // 91: talos.resource.definitions.network.VIPOperatorSpec.h_cloud:type_name -> talos.resource.definitions.network.VIPHCloudSpec - 70, // 92: talos.resource.definitions.network.VLANSpec.protocol:type_name -> talos.resource.definitions.enums.NethelpersVLANProtocol - 66, // 93: talos.resource.definitions.network.WireguardPeer.persistent_keepalive_interval:type_name -> google.protobuf.Duration - 43, // 94: talos.resource.definitions.network.WireguardPeer.allowed_ips:type_name -> common.NetIPPrefix - 41, // 95: talos.resource.definitions.network.WireguardSpec.peers:type_name -> talos.resource.definitions.network.WireguardPeer - 96, // [96:96] is the sub-list for method output_type - 96, // [96:96] is the sub-list for method input_type - 96, // [96:96] is the sub-list for extension type_name - 96, // [96:96] is the sub-list for extension extendee - 0, // [0:96] is the sub-list for field type_name + 44, // 36: talos.resource.definitions.network.LinkStatusSpec.wireguard:type_name -> talos.resource.definitions.network.WireguardSpec + 45, // 37: talos.resource.definitions.network.NfTablesAddressMatch.include_subnets:type_name -> common.NetIPPrefix + 45, // 38: talos.resource.definitions.network.NfTablesAddressMatch.exclude_subnets:type_name -> common.NetIPPrefix + 62, // 39: talos.resource.definitions.network.NfTablesChainSpec.hook:type_name -> talos.resource.definitions.enums.NethelpersNfTablesChainHook + 63, // 40: talos.resource.definitions.network.NfTablesChainSpec.priority:type_name -> talos.resource.definitions.enums.NethelpersNfTablesChainPriority + 23, // 41: talos.resource.definitions.network.NfTablesChainSpec.rules:type_name -> talos.resource.definitions.network.NfTablesRule + 64, // 42: talos.resource.definitions.network.NfTablesChainSpec.policy:type_name -> talos.resource.definitions.enums.NethelpersNfTablesVerdict + 65, // 43: talos.resource.definitions.network.NfTablesIfNameMatch.operator:type_name -> talos.resource.definitions.enums.NethelpersMatchOperator + 66, // 44: talos.resource.definitions.network.NfTablesLayer4Match.protocol:type_name -> talos.resource.definitions.enums.NethelpersProtocol + 22, // 45: talos.resource.definitions.network.NfTablesLayer4Match.match_source_port:type_name -> talos.resource.definitions.network.NfTablesPortMatch + 22, // 46: talos.resource.definitions.network.NfTablesLayer4Match.match_destination_port:type_name -> talos.resource.definitions.network.NfTablesPortMatch + 27, // 47: talos.resource.definitions.network.NfTablesPortMatch.ranges:type_name -> talos.resource.definitions.network.PortRange + 18, // 48: talos.resource.definitions.network.NfTablesRule.match_o_if_name:type_name -> talos.resource.definitions.network.NfTablesIfNameMatch + 64, // 49: talos.resource.definitions.network.NfTablesRule.verdict:type_name -> talos.resource.definitions.enums.NethelpersNfTablesVerdict + 21, // 50: talos.resource.definitions.network.NfTablesRule.match_mark:type_name -> talos.resource.definitions.network.NfTablesMark + 21, // 51: talos.resource.definitions.network.NfTablesRule.set_mark:type_name -> talos.resource.definitions.network.NfTablesMark + 14, // 52: talos.resource.definitions.network.NfTablesRule.match_source_address:type_name -> talos.resource.definitions.network.NfTablesAddressMatch + 14, // 53: talos.resource.definitions.network.NfTablesRule.match_destination_address:type_name -> talos.resource.definitions.network.NfTablesAddressMatch + 19, // 54: talos.resource.definitions.network.NfTablesRule.match_layer4:type_name -> talos.resource.definitions.network.NfTablesLayer4Match + 18, // 55: talos.resource.definitions.network.NfTablesRule.match_i_if_name:type_name -> talos.resource.definitions.network.NfTablesIfNameMatch + 16, // 56: talos.resource.definitions.network.NfTablesRule.clamp_mss:type_name -> talos.resource.definitions.network.NfTablesClampMSS + 20, // 57: talos.resource.definitions.network.NfTablesRule.match_limit:type_name -> talos.resource.definitions.network.NfTablesLimitMatch + 17, // 58: talos.resource.definitions.network.NfTablesRule.match_conntrack_state:type_name -> talos.resource.definitions.network.NfTablesConntrackStateMatch + 45, // 59: talos.resource.definitions.network.NodeAddressFilterSpec.include_subnets:type_name -> common.NetIPPrefix + 45, // 60: talos.resource.definitions.network.NodeAddressFilterSpec.exclude_subnets:type_name -> common.NetIPPrefix + 45, // 61: talos.resource.definitions.network.NodeAddressSpec.addresses:type_name -> common.NetIPPrefix + 67, // 62: talos.resource.definitions.network.OperatorSpecSpec.operator:type_name -> talos.resource.definitions.enums.NetworkOperator + 6, // 63: talos.resource.definitions.network.OperatorSpecSpec.dhcp4:type_name -> talos.resource.definitions.network.DHCP4OperatorSpec + 7, // 64: talos.resource.definitions.network.OperatorSpecSpec.dhcp6:type_name -> talos.resource.definitions.network.DHCP6OperatorSpec + 41, // 65: talos.resource.definitions.network.OperatorSpecSpec.vip:type_name -> talos.resource.definitions.network.VIPOperatorSpec + 48, // 66: talos.resource.definitions.network.OperatorSpecSpec.config_layer:type_name -> talos.resource.definitions.enums.NetworkConfigLayer + 68, // 67: talos.resource.definitions.network.ProbeSpecSpec.interval:type_name -> google.protobuf.Duration + 36, // 68: talos.resource.definitions.network.ProbeSpecSpec.tcp:type_name -> talos.resource.definitions.network.TCPProbeSpec + 48, // 69: talos.resource.definitions.network.ProbeSpecSpec.config_layer:type_name -> talos.resource.definitions.enums.NetworkConfigLayer + 49, // 70: talos.resource.definitions.network.ResolverSpecSpec.dns_servers:type_name -> common.NetIP + 48, // 71: talos.resource.definitions.network.ResolverSpecSpec.config_layer:type_name -> talos.resource.definitions.enums.NetworkConfigLayer + 49, // 72: talos.resource.definitions.network.ResolverStatusSpec.dns_servers:type_name -> common.NetIP + 46, // 73: talos.resource.definitions.network.RouteSpecSpec.family:type_name -> talos.resource.definitions.enums.NethelpersFamily + 45, // 74: talos.resource.definitions.network.RouteSpecSpec.destination:type_name -> common.NetIPPrefix + 49, // 75: talos.resource.definitions.network.RouteSpecSpec.source:type_name -> common.NetIP + 49, // 76: talos.resource.definitions.network.RouteSpecSpec.gateway:type_name -> common.NetIP + 69, // 77: talos.resource.definitions.network.RouteSpecSpec.table:type_name -> talos.resource.definitions.enums.NethelpersRoutingTable + 47, // 78: talos.resource.definitions.network.RouteSpecSpec.scope:type_name -> talos.resource.definitions.enums.NethelpersScope + 70, // 79: talos.resource.definitions.network.RouteSpecSpec.type:type_name -> talos.resource.definitions.enums.NethelpersRouteType + 71, // 80: talos.resource.definitions.network.RouteSpecSpec.protocol:type_name -> talos.resource.definitions.enums.NethelpersRouteProtocol + 48, // 81: talos.resource.definitions.network.RouteSpecSpec.config_layer:type_name -> talos.resource.definitions.enums.NetworkConfigLayer + 46, // 82: talos.resource.definitions.network.RouteStatusSpec.family:type_name -> talos.resource.definitions.enums.NethelpersFamily + 45, // 83: talos.resource.definitions.network.RouteStatusSpec.destination:type_name -> common.NetIPPrefix + 49, // 84: talos.resource.definitions.network.RouteStatusSpec.source:type_name -> common.NetIP + 49, // 85: talos.resource.definitions.network.RouteStatusSpec.gateway:type_name -> common.NetIP + 69, // 86: talos.resource.definitions.network.RouteStatusSpec.table:type_name -> talos.resource.definitions.enums.NethelpersRoutingTable + 47, // 87: talos.resource.definitions.network.RouteStatusSpec.scope:type_name -> talos.resource.definitions.enums.NethelpersScope + 70, // 88: talos.resource.definitions.network.RouteStatusSpec.type:type_name -> talos.resource.definitions.enums.NethelpersRouteType + 71, // 89: talos.resource.definitions.network.RouteStatusSpec.protocol:type_name -> talos.resource.definitions.enums.NethelpersRouteProtocol + 68, // 90: talos.resource.definitions.network.TCPProbeSpec.timeout:type_name -> google.protobuf.Duration + 48, // 91: talos.resource.definitions.network.TimeServerSpecSpec.config_layer:type_name -> talos.resource.definitions.enums.NetworkConfigLayer + 49, // 92: talos.resource.definitions.network.VIPOperatorSpec.ip:type_name -> common.NetIP + 39, // 93: talos.resource.definitions.network.VIPOperatorSpec.equinix_metal:type_name -> talos.resource.definitions.network.VIPEquinixMetalSpec + 40, // 94: talos.resource.definitions.network.VIPOperatorSpec.h_cloud:type_name -> talos.resource.definitions.network.VIPHCloudSpec + 72, // 95: talos.resource.definitions.network.VLANSpec.protocol:type_name -> talos.resource.definitions.enums.NethelpersVLANProtocol + 68, // 96: talos.resource.definitions.network.WireguardPeer.persistent_keepalive_interval:type_name -> google.protobuf.Duration + 45, // 97: talos.resource.definitions.network.WireguardPeer.allowed_ips:type_name -> common.NetIPPrefix + 43, // 98: talos.resource.definitions.network.WireguardSpec.peers:type_name -> talos.resource.definitions.network.WireguardPeer + 99, // [99:99] is the sub-list for method output_type + 99, // [99:99] is the sub-list for method input_type + 99, // [99:99] is the sub-list for extension type_name + 99, // [99:99] is the sub-list for extension extendee + 0, // [0:99] is the sub-list for field type_name } func init() { file_resource_definitions_network_network_proto_init() } @@ -4552,7 +4714,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NfTablesIfNameMatch); i { + switch v := v.(*NfTablesConntrackStateMatch); i { case 0: return &v.state case 1: @@ -4564,7 +4726,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NfTablesLayer4Match); i { + switch v := v.(*NfTablesIfNameMatch); i { case 0: return &v.state case 1: @@ -4576,7 +4738,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NfTablesMark); i { + switch v := v.(*NfTablesLayer4Match); i { case 0: return &v.state case 1: @@ -4588,7 +4750,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NfTablesPortMatch); i { + switch v := v.(*NfTablesLimitMatch); i { case 0: return &v.state case 1: @@ -4600,7 +4762,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NfTablesRule); i { + switch v := v.(*NfTablesMark); i { case 0: return &v.state case 1: @@ -4612,7 +4774,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NodeAddressFilterSpec); i { + switch v := v.(*NfTablesPortMatch); i { case 0: return &v.state case 1: @@ -4624,7 +4786,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NodeAddressSpec); i { + switch v := v.(*NfTablesRule); i { case 0: return &v.state case 1: @@ -4636,7 +4798,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OperatorSpecSpec); i { + switch v := v.(*NodeAddressFilterSpec); i { case 0: return &v.state case 1: @@ -4648,7 +4810,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PortRange); i { + switch v := v.(*NodeAddressSpec); i { case 0: return &v.state case 1: @@ -4660,7 +4822,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProbeSpecSpec); i { + switch v := v.(*OperatorSpecSpec); i { case 0: return &v.state case 1: @@ -4672,7 +4834,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProbeStatusSpec); i { + switch v := v.(*PortRange); i { case 0: return &v.state case 1: @@ -4684,7 +4846,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResolverSpecSpec); i { + switch v := v.(*ProbeSpecSpec); i { case 0: return &v.state case 1: @@ -4696,7 +4858,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResolverStatusSpec); i { + switch v := v.(*ProbeStatusSpec); i { case 0: return &v.state case 1: @@ -4708,7 +4870,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RouteSpecSpec); i { + switch v := v.(*ResolverSpecSpec); i { case 0: return &v.state case 1: @@ -4720,7 +4882,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RouteStatusSpec); i { + switch v := v.(*ResolverStatusSpec); i { case 0: return &v.state case 1: @@ -4732,7 +4894,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*STPSpec); i { + switch v := v.(*RouteSpecSpec); i { case 0: return &v.state case 1: @@ -4744,7 +4906,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatusSpec); i { + switch v := v.(*RouteStatusSpec); i { case 0: return &v.state case 1: @@ -4756,7 +4918,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TCPProbeSpec); i { + switch v := v.(*STPSpec); i { case 0: return &v.state case 1: @@ -4768,7 +4930,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TimeServerSpecSpec); i { + switch v := v.(*StatusSpec); i { case 0: return &v.state case 1: @@ -4780,7 +4942,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TimeServerStatusSpec); i { + switch v := v.(*TCPProbeSpec); i { case 0: return &v.state case 1: @@ -4792,7 +4954,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VIPEquinixMetalSpec); i { + switch v := v.(*TimeServerSpecSpec); i { case 0: return &v.state case 1: @@ -4804,7 +4966,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VIPHCloudSpec); i { + switch v := v.(*TimeServerStatusSpec); i { case 0: return &v.state case 1: @@ -4816,7 +4978,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VIPOperatorSpec); i { + switch v := v.(*VIPEquinixMetalSpec); i { case 0: return &v.state case 1: @@ -4828,7 +4990,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VLANSpec); i { + switch v := v.(*VIPHCloudSpec); i { case 0: return &v.state case 1: @@ -4840,7 +5002,7 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WireguardPeer); i { + switch v := v.(*VIPOperatorSpec); i { case 0: return &v.state case 1: @@ -4852,6 +5014,30 @@ func file_resource_definitions_network_network_proto_init() { } } file_resource_definitions_network_network_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VLANSpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_resource_definitions_network_network_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WireguardPeer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_resource_definitions_network_network_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WireguardSpec); i { case 0: return &v.state @@ -4870,7 +5056,7 @@ func file_resource_definitions_network_network_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_resource_definitions_network_network_proto_rawDesc, NumEnums: 0, - NumMessages: 43, + NumMessages: 45, NumExtensions: 0, NumServices: 0, }, diff --git a/pkg/machinery/api/resource/definitions/network/network_vtproto.pb.go b/pkg/machinery/api/resource/definitions/network/network_vtproto.pb.go index ef8c40de8..9ad820230 100644 --- a/pkg/machinery/api/resource/definitions/network/network_vtproto.pb.go +++ b/pkg/machinery/api/resource/definitions/network/network_vtproto.pb.go @@ -1421,6 +1421,11 @@ func (m *NfTablesChainSpec) MarshalToSizedBufferVT(dAtA []byte) (int, error) { i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } + if m.Policy != 0 { + i = encodeVarint(dAtA, i, uint64(m.Policy)) + i-- + dAtA[i] = 0x28 + } if len(m.Rules) > 0 { for iNdEx := len(m.Rules) - 1; iNdEx >= 0; iNdEx-- { size, err := m.Rules[iNdEx].MarshalToSizedBufferVT(dAtA[:i]) @@ -1492,6 +1497,59 @@ func (m *NfTablesClampMSS) MarshalToSizedBufferVT(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *NfTablesConntrackStateMatch) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NfTablesConntrackStateMatch) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *NfTablesConntrackStateMatch) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.States) > 0 { + var pksize2 int + for _, num := range m.States { + pksize2 += sov(uint64(num)) + } + i -= pksize2 + j1 := i + for _, num := range m.States { + for num >= 1<<7 { + dAtA[j1] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j1++ + } + dAtA[j1] = uint8(num) + j1++ + } + i = encodeVarint(dAtA, i, uint64(pksize2)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *NfTablesIfNameMatch) MarshalVT() (dAtA []byte, err error) { if m == nil { return nil, nil @@ -1522,18 +1580,20 @@ func (m *NfTablesIfNameMatch) MarshalToSizedBufferVT(dAtA []byte) (int, error) { i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } + if len(m.InterfaceNames) > 0 { + for iNdEx := len(m.InterfaceNames) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.InterfaceNames[iNdEx]) + copy(dAtA[i:], m.InterfaceNames[iNdEx]) + i = encodeVarint(dAtA, i, uint64(len(m.InterfaceNames[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } if m.Operator != 0 { i = encodeVarint(dAtA, i, uint64(m.Operator)) i-- dAtA[i] = 0x10 } - if len(m.InterfaceName) > 0 { - i -= len(m.InterfaceName) - copy(dAtA[i:], m.InterfaceName) - i = encodeVarint(dAtA, i, uint64(len(m.InterfaceName))) - i-- - dAtA[i] = 0xa - } return len(dAtA) - i, nil } @@ -1595,6 +1655,44 @@ func (m *NfTablesLayer4Match) MarshalToSizedBufferVT(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *NfTablesLimitMatch) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NfTablesLimitMatch) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *NfTablesLimitMatch) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.PacketRatePerSecond != 0 { + i = encodeVarint(dAtA, i, uint64(m.PacketRatePerSecond)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *NfTablesMark) MarshalVT() (dAtA []byte, err error) { if m == nil { return nil, nil @@ -1718,6 +1816,36 @@ func (m *NfTablesRule) MarshalToSizedBufferVT(dAtA []byte) (int, error) { i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } + if m.AnonCounter { + i-- + if m.AnonCounter { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x60 + } + if m.MatchConntrackState != nil { + size, err := m.MatchConntrackState.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x5a + } + if m.MatchLimit != nil { + size, err := m.MatchLimit.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x52 + } if m.ClampMss != nil { size, err := m.ClampMss.MarshalToSizedBufferVT(dAtA[:i]) if err != nil { @@ -3892,6 +4020,9 @@ func (m *NfTablesChainSpec) SizeVT() (n int) { n += 1 + l + sov(uint64(l)) } } + if m.Policy != 0 { + n += 1 + sov(uint64(m.Policy)) + } n += len(m.unknownFields) return n } @@ -3909,19 +4040,38 @@ func (m *NfTablesClampMSS) SizeVT() (n int) { return n } +func (m *NfTablesConntrackStateMatch) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.States) > 0 { + l = 0 + for _, e := range m.States { + l += sov(uint64(e)) + } + n += 1 + sov(uint64(l)) + l + } + n += len(m.unknownFields) + return n +} + func (m *NfTablesIfNameMatch) SizeVT() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.InterfaceName) - if l > 0 { - n += 1 + l + sov(uint64(l)) - } if m.Operator != 0 { n += 1 + sov(uint64(m.Operator)) } + if len(m.InterfaceNames) > 0 { + for _, s := range m.InterfaceNames { + l = len(s) + n += 1 + l + sov(uint64(l)) + } + } n += len(m.unknownFields) return n } @@ -3947,6 +4097,19 @@ func (m *NfTablesLayer4Match) SizeVT() (n int) { return n } +func (m *NfTablesLimitMatch) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PacketRatePerSecond != 0 { + n += 1 + sov(uint64(m.PacketRatePerSecond)) + } + n += len(m.unknownFields) + return n +} + func (m *NfTablesMark) SizeVT() (n int) { if m == nil { return 0 @@ -4023,6 +4186,17 @@ func (m *NfTablesRule) SizeVT() (n int) { l = m.ClampMss.SizeVT() n += 1 + l + sov(uint64(l)) } + if m.MatchLimit != nil { + l = m.MatchLimit.SizeVT() + n += 1 + l + sov(uint64(l)) + } + if m.MatchConntrackState != nil { + l = m.MatchConntrackState.SizeVT() + n += 1 + l + sov(uint64(l)) + } + if m.AnonCounter { + n += 2 + } n += len(m.unknownFields) return n } @@ -8257,6 +8431,25 @@ func (m *NfTablesChainSpec) UnmarshalVT(dAtA []byte) error { return err } iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Policy", wireType) + } + m.Policy = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Policy |= enums.NethelpersNfTablesVerdict(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skip(dAtA[iNdEx:]) @@ -8340,6 +8533,133 @@ func (m *NfTablesClampMSS) UnmarshalVT(dAtA []byte) error { } return nil } +func (m *NfTablesConntrackStateMatch) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NfTablesConntrackStateMatch: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NfTablesConntrackStateMatch: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType == 0 { + var v uint32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.States = append(m.States, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLength + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.States) == 0 { + m.States = make([]uint32, 0, elementCount) + } + for iNdEx < postIndex { + var v uint32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.States = append(m.States, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field States", wireType) + } + default: + iNdEx = preIndex + skippy, err := skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *NfTablesIfNameMatch) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -8369,9 +8689,28 @@ func (m *NfTablesIfNameMatch) UnmarshalVT(dAtA []byte) error { return fmt.Errorf("proto: NfTablesIfNameMatch: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType) + } + m.Operator = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Operator |= enums.NethelpersMatchOperator(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InterfaceName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field InterfaceNames", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -8399,27 +8738,8 @@ func (m *NfTablesIfNameMatch) UnmarshalVT(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.InterfaceName = string(dAtA[iNdEx:postIndex]) + m.InterfaceNames = append(m.InterfaceNames, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType) - } - m.Operator = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflow - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Operator |= enums.NethelpersMatchOperator(b&0x7F) << shift - if b < 0x80 { - break - } - } default: iNdEx = preIndex skippy, err := skip(dAtA[iNdEx:]) @@ -8584,6 +8904,76 @@ func (m *NfTablesLayer4Match) UnmarshalVT(dAtA []byte) error { } return nil } +func (m *NfTablesLimitMatch) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NfTablesLimitMatch: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NfTablesLimitMatch: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PacketRatePerSecond", wireType) + } + m.PacketRatePerSecond = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PacketRatePerSecond |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *NfTablesMark) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -9113,6 +9503,98 @@ func (m *NfTablesRule) UnmarshalVT(dAtA []byte) error { return err } iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MatchLimit", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MatchLimit == nil { + m.MatchLimit = &NfTablesLimitMatch{} + } + if err := m.MatchLimit.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MatchConntrackState", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MatchConntrackState == nil { + m.MatchConntrackState = &NfTablesConntrackStateMatch{} + } + if err := m.MatchConntrackState.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AnonCounter", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AnonCounter = bool(v != 0) default: iNdEx = preIndex skippy, err := skip(dAtA[iNdEx:]) diff --git a/pkg/machinery/nethelpers/conntrack_state.go b/pkg/machinery/nethelpers/conntrack_state.go new file mode 100644 index 000000000..9b745b2c4 --- /dev/null +++ b/pkg/machinery/nethelpers/conntrack_state.go @@ -0,0 +1,20 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package nethelpers + +//go:generate enumer -type=ConntrackState -linecomment -text + +// ConntrackState is a conntrack state. +type ConntrackState uint32 + +// ConntrackState constants. +// +//structprotogen:gen_enum +const ( + ConntrackStateNew ConntrackState = 0x08 // new + ConntrackStateRelated ConntrackState = 0x04 // related + ConntrackStateEstablished ConntrackState = 0x02 // established + ConntrackStateInvalid ConntrackState = 0x01 // invalid +) diff --git a/pkg/machinery/nethelpers/conntrackstate_enumer.go b/pkg/machinery/nethelpers/conntrackstate_enumer.go new file mode 100644 index 000000000..0b3023e59 --- /dev/null +++ b/pkg/machinery/nethelpers/conntrackstate_enumer.go @@ -0,0 +1,78 @@ +// Code generated by "enumer -type=ConntrackState -linecomment -text"; DO NOT EDIT. + +package nethelpers + +import ( + "fmt" +) + +const ( + _ConntrackStateName_0 = "invalidestablished" + _ConntrackStateName_1 = "related" + _ConntrackStateName_2 = "new" +) + +var ( + _ConntrackStateIndex_0 = [...]uint8{0, 7, 18} + _ConntrackStateIndex_1 = [...]uint8{0, 7} + _ConntrackStateIndex_2 = [...]uint8{0, 3} +) + +func (i ConntrackState) String() string { + switch { + case 1 <= i && i <= 2: + i -= 1 + return _ConntrackStateName_0[_ConntrackStateIndex_0[i]:_ConntrackStateIndex_0[i+1]] + case i == 4: + return _ConntrackStateName_1 + case i == 8: + return _ConntrackStateName_2 + default: + return fmt.Sprintf("ConntrackState(%d)", i) + } +} + +var _ConntrackStateValues = []ConntrackState{1, 2, 4, 8} + +var _ConntrackStateNameToValueMap = map[string]ConntrackState{ + _ConntrackStateName_0[0:7]: 1, + _ConntrackStateName_0[7:18]: 2, + _ConntrackStateName_1[0:7]: 4, + _ConntrackStateName_2[0:3]: 8, +} + +// ConntrackStateString retrieves an enum value from the enum constants string name. +// Throws an error if the param is not part of the enum. +func ConntrackStateString(s string) (ConntrackState, error) { + if val, ok := _ConntrackStateNameToValueMap[s]; ok { + return val, nil + } + return 0, fmt.Errorf("%s does not belong to ConntrackState values", s) +} + +// ConntrackStateValues returns all values of the enum +func ConntrackStateValues() []ConntrackState { + return _ConntrackStateValues +} + +// IsAConntrackState returns "true" if the value is listed in the enum definition. "false" otherwise +func (i ConntrackState) IsAConntrackState() bool { + for _, v := range _ConntrackStateValues { + if i == v { + return true + } + } + return false +} + +// MarshalText implements the encoding.TextMarshaler interface for ConntrackState +func (i ConntrackState) MarshalText() ([]byte, error) { + return []byte(i.String()), nil +} + +// UnmarshalText implements the encoding.TextUnmarshaler interface for ConntrackState +func (i *ConntrackState) UnmarshalText(text []byte) error { + var err error + *i, err = ConntrackStateString(string(text)) + return err +} diff --git a/pkg/machinery/nethelpers/default_action.go b/pkg/machinery/nethelpers/default_action.go new file mode 100644 index 000000000..396353d0a --- /dev/null +++ b/pkg/machinery/nethelpers/default_action.go @@ -0,0 +1,16 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package nethelpers + +//go:generate enumer -type=DefaultAction -linecomment -text + +// DefaultAction is a default firewall action. +type DefaultAction int + +// DefaultAction constants. +const ( + DefaultActionAccept DefaultAction = iota // accept + DefaultActionBlock // block +) diff --git a/pkg/machinery/nethelpers/defaultaction_enumer.go b/pkg/machinery/nethelpers/defaultaction_enumer.go new file mode 100644 index 000000000..a755493d2 --- /dev/null +++ b/pkg/machinery/nethelpers/defaultaction_enumer.go @@ -0,0 +1,61 @@ +// Code generated by "enumer -type=DefaultAction -linecomment -text"; DO NOT EDIT. + +package nethelpers + +import ( + "fmt" +) + +const _DefaultActionName = "acceptblock" + +var _DefaultActionIndex = [...]uint8{0, 6, 11} + +func (i DefaultAction) String() string { + if i < 0 || i >= DefaultAction(len(_DefaultActionIndex)-1) { + return fmt.Sprintf("DefaultAction(%d)", i) + } + return _DefaultActionName[_DefaultActionIndex[i]:_DefaultActionIndex[i+1]] +} + +var _DefaultActionValues = []DefaultAction{0, 1} + +var _DefaultActionNameToValueMap = map[string]DefaultAction{ + _DefaultActionName[0:6]: 0, + _DefaultActionName[6:11]: 1, +} + +// DefaultActionString retrieves an enum value from the enum constants string name. +// Throws an error if the param is not part of the enum. +func DefaultActionString(s string) (DefaultAction, error) { + if val, ok := _DefaultActionNameToValueMap[s]; ok { + return val, nil + } + return 0, fmt.Errorf("%s does not belong to DefaultAction values", s) +} + +// DefaultActionValues returns all values of the enum +func DefaultActionValues() []DefaultAction { + return _DefaultActionValues +} + +// IsADefaultAction returns "true" if the value is listed in the enum definition. "false" otherwise +func (i DefaultAction) IsADefaultAction() bool { + for _, v := range _DefaultActionValues { + if i == v { + return true + } + } + return false +} + +// MarshalText implements the encoding.TextMarshaler interface for DefaultAction +func (i DefaultAction) MarshalText() ([]byte, error) { + return []byte(i.String()), nil +} + +// UnmarshalText implements the encoding.TextUnmarshaler interface for DefaultAction +func (i *DefaultAction) UnmarshalText(text []byte) error { + var err error + *i, err = DefaultActionString(string(text)) + return err +} diff --git a/pkg/machinery/nethelpers/protocol.go b/pkg/machinery/nethelpers/protocol.go index b18315908..dda80717a 100644 --- a/pkg/machinery/nethelpers/protocol.go +++ b/pkg/machinery/nethelpers/protocol.go @@ -13,6 +13,8 @@ type Protocol uint8 // //structprotogen:gen_enum const ( - ProtocolTCP Protocol = 0x6 // tcp - ProtocolUDP Protocol = 0x11 // udp + ProtocolICMP Protocol = 0x1 // icmp + ProtocolTCP Protocol = 0x6 // tcp + ProtocolUDP Protocol = 0x11 // udp + ProtocolICMPv6 Protocol = 0x3a // icmpv6 ) diff --git a/pkg/machinery/nethelpers/protocol_enumer.go b/pkg/machinery/nethelpers/protocol_enumer.go index e2c5587e2..28c63b4af 100644 --- a/pkg/machinery/nethelpers/protocol_enumer.go +++ b/pkg/machinery/nethelpers/protocol_enumer.go @@ -7,31 +7,41 @@ import ( ) const ( - _ProtocolName_0 = "tcp" - _ProtocolName_1 = "udp" + _ProtocolName_0 = "icmp" + _ProtocolName_1 = "tcp" + _ProtocolName_2 = "udp" + _ProtocolName_3 = "icmpv6" ) var ( - _ProtocolIndex_0 = [...]uint8{0, 3} + _ProtocolIndex_0 = [...]uint8{0, 4} _ProtocolIndex_1 = [...]uint8{0, 3} + _ProtocolIndex_2 = [...]uint8{0, 3} + _ProtocolIndex_3 = [...]uint8{0, 6} ) func (i Protocol) String() string { switch { - case i == 6: + case i == 1: return _ProtocolName_0 - case i == 17: + case i == 6: return _ProtocolName_1 + case i == 17: + return _ProtocolName_2 + case i == 58: + return _ProtocolName_3 default: return fmt.Sprintf("Protocol(%d)", i) } } -var _ProtocolValues = []Protocol{6, 17} +var _ProtocolValues = []Protocol{1, 6, 17, 58} var _ProtocolNameToValueMap = map[string]Protocol{ - _ProtocolName_0[0:3]: 6, - _ProtocolName_1[0:3]: 17, + _ProtocolName_0[0:4]: 1, + _ProtocolName_1[0:3]: 6, + _ProtocolName_2[0:3]: 17, + _ProtocolName_3[0:6]: 58, } // ProtocolString retrieves an enum value from the enum constants string name. diff --git a/pkg/machinery/resources/network/deep_copy.generated.go b/pkg/machinery/resources/network/deep_copy.generated.go index 415f6947f..dd4394a88 100644 --- a/pkg/machinery/resources/network/deep_copy.generated.go +++ b/pkg/machinery/resources/network/deep_copy.generated.go @@ -106,15 +106,31 @@ func (o NfTablesChainSpec) DeepCopy() NfTablesChainSpec { if o.Rules[i2].MatchIIfName != nil { cp.Rules[i2].MatchIIfName = new(NfTablesIfNameMatch) *cp.Rules[i2].MatchIIfName = *o.Rules[i2].MatchIIfName + if o.Rules[i2].MatchIIfName.InterfaceNames != nil { + cp.Rules[i2].MatchIIfName.InterfaceNames = make([]string, len(o.Rules[i2].MatchIIfName.InterfaceNames)) + copy(cp.Rules[i2].MatchIIfName.InterfaceNames, o.Rules[i2].MatchIIfName.InterfaceNames) + } } if o.Rules[i2].MatchOIfName != nil { cp.Rules[i2].MatchOIfName = new(NfTablesIfNameMatch) *cp.Rules[i2].MatchOIfName = *o.Rules[i2].MatchOIfName + if o.Rules[i2].MatchOIfName.InterfaceNames != nil { + cp.Rules[i2].MatchOIfName.InterfaceNames = make([]string, len(o.Rules[i2].MatchOIfName.InterfaceNames)) + copy(cp.Rules[i2].MatchOIfName.InterfaceNames, o.Rules[i2].MatchOIfName.InterfaceNames) + } } if o.Rules[i2].MatchMark != nil { cp.Rules[i2].MatchMark = new(NfTablesMark) *cp.Rules[i2].MatchMark = *o.Rules[i2].MatchMark } + if o.Rules[i2].MatchConntrackState != nil { + cp.Rules[i2].MatchConntrackState = new(NfTablesConntrackStateMatch) + *cp.Rules[i2].MatchConntrackState = *o.Rules[i2].MatchConntrackState + if o.Rules[i2].MatchConntrackState.States != nil { + cp.Rules[i2].MatchConntrackState.States = make([]uint32, len(o.Rules[i2].MatchConntrackState.States)) + copy(cp.Rules[i2].MatchConntrackState.States, o.Rules[i2].MatchConntrackState.States) + } + } if o.Rules[i2].MatchSourceAddress != nil { cp.Rules[i2].MatchSourceAddress = new(NfTablesAddressMatch) *cp.Rules[i2].MatchSourceAddress = *o.Rules[i2].MatchSourceAddress @@ -159,6 +175,10 @@ func (o NfTablesChainSpec) DeepCopy() NfTablesChainSpec { } } } + if o.Rules[i2].MatchLimit != nil { + cp.Rules[i2].MatchLimit = new(NfTablesLimitMatch) + *cp.Rules[i2].MatchLimit = *o.Rules[i2].MatchLimit + } if o.Rules[i2].ClampMSS != nil { cp.Rules[i2].ClampMSS = new(NfTablesClampMSS) *cp.Rules[i2].ClampMSS = *o.Rules[i2].ClampMSS diff --git a/pkg/machinery/resources/network/nftables_chain.go b/pkg/machinery/resources/network/nftables_chain.go index e10a930ba..8bb8a08d8 100644 --- a/pkg/machinery/resources/network/nftables_chain.go +++ b/pkg/machinery/resources/network/nftables_chain.go @@ -29,6 +29,7 @@ type NfTablesChainSpec struct { Type nethelpers.NfTablesChainType `yaml:"type" protobuf:"1"` Hook nethelpers.NfTablesChainHook `yaml:"hook" protobuf:"2"` Priority nethelpers.NfTablesChainPriority `yaml:"priority" protobuf:"3"` + Policy nethelpers.NfTablesVerdict `yaml:"policy" protobuf:"5"` Rules []NfTablesRule `yaml:"rules" protobuf:"4"` } @@ -37,24 +38,27 @@ type NfTablesChainSpec struct { // //gotagsrewrite:gen type NfTablesRule struct { - MatchIIfName *NfTablesIfNameMatch `yaml:"matchIIfName,omitempty" protobuf:"8"` - MatchOIfName *NfTablesIfNameMatch `yaml:"matchOIfName,omitempty" protobuf:"1"` - MatchMark *NfTablesMark `yaml:"matchMark,omitempty" protobuf:"3"` - MatchSourceAddress *NfTablesAddressMatch `yaml:"matchSourceAddress,omitempty" protobuf:"5"` - MatchDestinationAddress *NfTablesAddressMatch `yaml:"matchDestinationAddress,omitempty" protobuf:"6"` - MatchLayer4 *NfTablesLayer4Match `yaml:"matchLayer4,omitempty" protobuf:"7"` + MatchIIfName *NfTablesIfNameMatch `yaml:"matchIIfName,omitempty" protobuf:"8"` + MatchOIfName *NfTablesIfNameMatch `yaml:"matchOIfName,omitempty" protobuf:"1"` + MatchMark *NfTablesMark `yaml:"matchMark,omitempty" protobuf:"3"` + MatchConntrackState *NfTablesConntrackStateMatch `yaml:"matchConntrackState,omitempty" protobuf:"11"` + MatchSourceAddress *NfTablesAddressMatch `yaml:"matchSourceAddress,omitempty" protobuf:"5"` + MatchDestinationAddress *NfTablesAddressMatch `yaml:"matchDestinationAddress,omitempty" protobuf:"6"` + MatchLayer4 *NfTablesLayer4Match `yaml:"matchLayer4,omitempty" protobuf:"7"` + MatchLimit *NfTablesLimitMatch `yaml:"matchLimit,omitempty" protobuf:"10"` - ClampMSS *NfTablesClampMSS `yaml:"clampMSS,omitempty" protobuf:"9"` - SetMark *NfTablesMark `yaml:"setMark,omitempty" protobuf:"4"` - Verdict *nethelpers.NfTablesVerdict `yaml:"verdict,omitempty" protobuf:"2"` + ClampMSS *NfTablesClampMSS `yaml:"clampMSS,omitempty" protobuf:"9"` + SetMark *NfTablesMark `yaml:"setMark,omitempty" protobuf:"4"` + AnonCounter bool `yaml:"anonymousCounter,omitempty" protobuf:"12"` + Verdict *nethelpers.NfTablesVerdict `yaml:"verdict,omitempty" protobuf:"2"` } // NfTablesIfNameMatch describes the match on the interface name. // //gotagsrewrite:gen type NfTablesIfNameMatch struct { - InterfaceName string `yaml:"interfaceName" protobuf:"1"` - Operator nethelpers.MatchOperator `yaml:"operator" protobuf:"2"` + InterfaceNames []string `yaml:"interfaceName" protobuf:"3"` + Operator nethelpers.MatchOperator `yaml:"operator" protobuf:"2"` } // NfTablesMark encodes packet mark match/update operation. @@ -118,6 +122,21 @@ type NfTablesClampMSS struct { MTU uint16 `yaml:"mtu" protobuf:"1"` } +// NfTablesLimitMatch describes the match on the packet rate. +// +//gotagsrewrite:gen +type NfTablesLimitMatch struct { + PacketRatePerSecond uint64 `yaml:"packetRatePerSecond" protobuf:"1"` +} + +// NfTablesConntrackStateMatch describes the match on the connection tracking state. +// +//gotagsrewrite:gen +type NfTablesConntrackStateMatch struct { + // TODO: should be []nethelpers.ConntrackState, but structprotogen needs to be fixed to support it. + States []uint32 `yaml:"states" protobuf:"1"` +} + // NewNfTablesChain initializes a NfTablesChain resource. func NewNfTablesChain(namespace resource.Namespace, id resource.ID) *NfTablesChain { return typed.NewResource[NfTablesChainSpec, NfTablesChainExtension]( @@ -135,8 +154,25 @@ func (NfTablesChainExtension) ResourceDefinition() meta.ResourceDefinitionSpec { Type: NfTablesChainType, Aliases: []resource.Type{"chain", "chains"}, DefaultNamespace: NamespaceName, - PrintColumns: []meta.PrintColumn{}, - Sensitivity: meta.NonSensitive, + PrintColumns: []meta.PrintColumn{ + { + Name: "Type", + JSONPath: `{.type}`, + }, + { + Name: "Hook", + JSONPath: `{.hook}`, + }, + { + Name: "Priority", + JSONPath: `{.priority}`, + }, + { + Name: "Policy", + JSONPath: `{.policy}`, + }, + }, + Sensitivity: meta.NonSensitive, } } diff --git a/website/content/v1.6/reference/api.md b/website/content/v1.6/reference/api.md index 08e98a99b..0335c4abc 100644 --- a/website/content/v1.6/reference/api.md +++ b/website/content/v1.6/reference/api.md @@ -46,6 +46,7 @@ description: Talos gRPC API reference. - [NethelpersAddressFlag](#talos.resource.definitions.enums.NethelpersAddressFlag) - [NethelpersBondMode](#talos.resource.definitions.enums.NethelpersBondMode) - [NethelpersBondXmitHashPolicy](#talos.resource.definitions.enums.NethelpersBondXmitHashPolicy) + - [NethelpersConntrackState](#talos.resource.definitions.enums.NethelpersConntrackState) - [NethelpersDuplex](#talos.resource.definitions.enums.NethelpersDuplex) - [NethelpersFailOverMAC](#talos.resource.definitions.enums.NethelpersFailOverMAC) - [NethelpersFamily](#talos.resource.definitions.enums.NethelpersFamily) @@ -166,8 +167,10 @@ description: Talos gRPC API reference. - [NfTablesAddressMatch](#talos.resource.definitions.network.NfTablesAddressMatch) - [NfTablesChainSpec](#talos.resource.definitions.network.NfTablesChainSpec) - [NfTablesClampMSS](#talos.resource.definitions.network.NfTablesClampMSS) + - [NfTablesConntrackStateMatch](#talos.resource.definitions.network.NfTablesConntrackStateMatch) - [NfTablesIfNameMatch](#talos.resource.definitions.network.NfTablesIfNameMatch) - [NfTablesLayer4Match](#talos.resource.definitions.network.NfTablesLayer4Match) + - [NfTablesLimitMatch](#talos.resource.definitions.network.NfTablesLimitMatch) - [NfTablesMark](#talos.resource.definitions.network.NfTablesMark) - [NfTablesPortMatch](#talos.resource.definitions.network.NfTablesPortMatch) - [NfTablesRule](#talos.resource.definitions.network.NfTablesRule) @@ -1028,6 +1031,21 @@ NethelpersBondXmitHashPolicy is a bond hash policy. + + +### NethelpersConntrackState +NethelpersConntrackState is a conntrack state. + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NETHELPERS_CONNTRACKSTATE_UNSPECIFIED | 0 | | +| CONNTRACK_STATE_NEW | 8 | | +| CONNTRACK_STATE_RELATED | 4 | | +| CONNTRACK_STATE_ESTABLISHED | 2 | | +| CONNTRACK_STATE_INVALID | 1 | | + + + ### NethelpersDuplex @@ -1285,8 +1303,10 @@ NethelpersProtocol is a inet protocol. | Name | Number | Description | | ---- | ------ | ----------- | | NETHELPERS_PROTOCOL_UNSPECIFIED | 0 | | +| PROTOCOL_ICMP | 1 | | | PROTOCOL_TCP | 6 | | | PROTOCOL_UDP | 17 | | +| PROTOCOL_ICM_PV6 | 58 | | @@ -3041,6 +3061,7 @@ NfTablesChainSpec describes status of rendered secrets. | hook | [talos.resource.definitions.enums.NethelpersNfTablesChainHook](#talos.resource.definitions.enums.NethelpersNfTablesChainHook) | | | | priority | [talos.resource.definitions.enums.NethelpersNfTablesChainPriority](#talos.resource.definitions.enums.NethelpersNfTablesChainPriority) | | | | rules | [NfTablesRule](#talos.resource.definitions.network.NfTablesRule) | repeated | | +| policy | [talos.resource.definitions.enums.NethelpersNfTablesVerdict](#talos.resource.definitions.enums.NethelpersNfTablesVerdict) | | | @@ -3066,6 +3087,21 @@ MSS is limited by the `MaxMTU` so that: + + +### NfTablesConntrackStateMatch +NfTablesConntrackStateMatch describes the match on the connection tracking state. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| states | [uint32](#uint32) | repeated | | + + + + + + ### NfTablesIfNameMatch @@ -3074,8 +3110,8 @@ NfTablesIfNameMatch describes the match on the interface name. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| interface_name | [string](#string) | | | | operator | [talos.resource.definitions.enums.NethelpersMatchOperator](#talos.resource.definitions.enums.NethelpersMatchOperator) | | | +| interface_names | [string](#string) | repeated | | @@ -3099,6 +3135,21 @@ NfTablesLayer4Match describes the match on the transport layer protocol. + + +### NfTablesLimitMatch +NfTablesLimitMatch describes the match on the packet rate. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| packet_rate_per_second | [uint64](#uint64) | | | + + + + + + ### NfTablesMark @@ -3154,6 +3205,9 @@ NfTablesRule describes a single rule in the nftables chain. | match_layer4 | [NfTablesLayer4Match](#talos.resource.definitions.network.NfTablesLayer4Match) | | | | match_i_if_name | [NfTablesIfNameMatch](#talos.resource.definitions.network.NfTablesIfNameMatch) | | | | clamp_mss | [NfTablesClampMSS](#talos.resource.definitions.network.NfTablesClampMSS) | | | +| match_limit | [NfTablesLimitMatch](#talos.resource.definitions.network.NfTablesLimitMatch) | | | +| match_conntrack_state | [NfTablesConntrackStateMatch](#talos.resource.definitions.network.NfTablesConntrackStateMatch) | | | +| anon_counter | [bool](#bool) | | |