From 05e00f2f739e1bed1744e950a90305c339d1d4c5 Mon Sep 17 00:00:00 2001 From: liuxiaolong <736321739@qq.com> Date: 星期四, 13 二月 2020 20:27:06 +0800 Subject: [PATCH] re make --- sysset.pb.go | 570 +++++++++++++++++++++++++++----------------------------- 1 files changed, 272 insertions(+), 298 deletions(-) diff --git a/sysset.pb.go b/sysset.pb.go index c0a611d..f762669 100644 --- a/sysset.pb.go +++ b/sysset.pb.go @@ -20,7 +20,7 @@ // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package type LocalConfig struct { ServerId string `protobuf:"bytes,1,opt,name=server_id,json=serverId,proto3" json:"server_id,omitempty"` @@ -57,7 +57,7 @@ return xxx_messageInfo_LocalConfig.Marshal(b, m, deterministic) } else { b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) + n, err := m.MarshalTo(b) if err != nil { return nil, err } @@ -224,7 +224,7 @@ return xxx_messageInfo_PollConfig.Marshal(b, m, deterministic) } else { b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) + n, err := m.MarshalTo(b) if err != nil { return nil, err } @@ -300,7 +300,7 @@ return xxx_messageInfo_Cluster.Marshal(b, m, deterministic) } else { b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) + n, err := m.MarshalTo(b) if err != nil { return nil, err } @@ -378,7 +378,7 @@ return xxx_messageInfo_ClusterNode.Marshal(b, m, deterministic) } else { b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) + n, err := m.MarshalTo(b) if err != nil { return nil, err } @@ -467,7 +467,7 @@ return xxx_messageInfo_ResourceConfig.Marshal(b, m, deterministic) } else { b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) + n, err := m.MarshalTo(b) if err != nil { return nil, err } @@ -574,7 +574,7 @@ func (m *LocalConfig) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) + n, err := m.MarshalTo(dAtA) if err != nil { return nil, err } @@ -582,136 +582,122 @@ } func (m *LocalConfig) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *LocalConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) + var i int _ = i var l int _ = l - if m.AlarmThreshold != 0 { - i = encodeVarintSysset(dAtA, i, uint64(m.AlarmThreshold)) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0x90 - } - if m.AlarmThresholdType != 0 { - i = encodeVarintSysset(dAtA, i, uint64(m.AlarmThresholdType)) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0x88 - } - if m.RealMax != 0 { - i = encodeVarintSysset(dAtA, i, uint64(m.RealMax)) - i-- - dAtA[i] = 0x1 - i-- - dAtA[i] = 0x80 - } - if len(m.NetMask) > 0 { - i -= len(m.NetMask) - copy(dAtA[i:], m.NetMask) - i = encodeVarintSysset(dAtA, i, uint64(len(m.NetMask))) - i-- - dAtA[i] = 0x7a - } - if len(m.GateWay) > 0 { - i -= len(m.GateWay) - copy(dAtA[i:], m.GateWay) - i = encodeVarintSysset(dAtA, i, uint64(len(m.GateWay))) - i-- - dAtA[i] = 0x72 - } - if len(m.Reserved) > 0 { - i -= len(m.Reserved) - copy(dAtA[i:], m.Reserved) - i = encodeVarintSysset(dAtA, i, uint64(len(m.Reserved))) - i-- - dAtA[i] = 0x6a - } - if m.CutMinDuration != 0 { - i = encodeVarintSysset(dAtA, i, uint64(m.CutMinDuration)) - i-- - dAtA[i] = 0x60 - } - if m.CutMaxDuration != 0 { - i = encodeVarintSysset(dAtA, i, uint64(m.CutMaxDuration)) - i-- - dAtA[i] = 0x58 - } - if m.EsPicPort != 0 { - i = encodeVarintSysset(dAtA, i, uint64(m.EsPicPort)) - i-- - dAtA[i] = 0x50 - } - if len(m.EsPicIp) > 0 { - i -= len(m.EsPicIp) - copy(dAtA[i:], m.EsPicIp) - i = encodeVarintSysset(dAtA, i, uint64(len(m.EsPicIp))) - i-- - dAtA[i] = 0x4a - } - if m.WebPicPort != 0 { - i = encodeVarintSysset(dAtA, i, uint64(m.WebPicPort)) - i-- - dAtA[i] = 0x40 - } - if len(m.WebPicIp) > 0 { - i -= len(m.WebPicIp) - copy(dAtA[i:], m.WebPicIp) - i = encodeVarintSysset(dAtA, i, uint64(len(m.WebPicIp))) - i-- - dAtA[i] = 0x3a - } - if m.AlarmPort != 0 { - i = encodeVarintSysset(dAtA, i, uint64(m.AlarmPort)) - i-- - dAtA[i] = 0x30 - } - if len(m.AlarmIp) > 0 { - i -= len(m.AlarmIp) - copy(dAtA[i:], m.AlarmIp) - i = encodeVarintSysset(dAtA, i, uint64(len(m.AlarmIp))) - i-- - dAtA[i] = 0x2a - } - if len(m.ServerIp) > 0 { - i -= len(m.ServerIp) - copy(dAtA[i:], m.ServerIp) - i = encodeVarintSysset(dAtA, i, uint64(len(m.ServerIp))) - i-- - dAtA[i] = 0x22 - } - if m.ServerType != 0 { - i = encodeVarintSysset(dAtA, i, uint64(m.ServerType)) - i-- - dAtA[i] = 0x18 + if len(m.ServerId) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.ServerId))) + i += copy(dAtA[i:], m.ServerId) } if len(m.ServerName) > 0 { - i -= len(m.ServerName) - copy(dAtA[i:], m.ServerName) - i = encodeVarintSysset(dAtA, i, uint64(len(m.ServerName))) - i-- dAtA[i] = 0x12 + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.ServerName))) + i += copy(dAtA[i:], m.ServerName) } - if len(m.ServerId) > 0 { - i -= len(m.ServerId) - copy(dAtA[i:], m.ServerId) - i = encodeVarintSysset(dAtA, i, uint64(len(m.ServerId))) - i-- - dAtA[i] = 0xa + if m.ServerType != 0 { + dAtA[i] = 0x18 + i++ + i = encodeVarintSysset(dAtA, i, uint64(m.ServerType)) } - return len(dAtA) - i, nil + if len(m.ServerIp) > 0 { + dAtA[i] = 0x22 + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.ServerIp))) + i += copy(dAtA[i:], m.ServerIp) + } + if len(m.AlarmIp) > 0 { + dAtA[i] = 0x2a + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.AlarmIp))) + i += copy(dAtA[i:], m.AlarmIp) + } + if m.AlarmPort != 0 { + dAtA[i] = 0x30 + i++ + i = encodeVarintSysset(dAtA, i, uint64(m.AlarmPort)) + } + if len(m.WebPicIp) > 0 { + dAtA[i] = 0x3a + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.WebPicIp))) + i += copy(dAtA[i:], m.WebPicIp) + } + if m.WebPicPort != 0 { + dAtA[i] = 0x40 + i++ + i = encodeVarintSysset(dAtA, i, uint64(m.WebPicPort)) + } + if len(m.EsPicIp) > 0 { + dAtA[i] = 0x4a + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.EsPicIp))) + i += copy(dAtA[i:], m.EsPicIp) + } + if m.EsPicPort != 0 { + dAtA[i] = 0x50 + i++ + i = encodeVarintSysset(dAtA, i, uint64(m.EsPicPort)) + } + if m.CutMaxDuration != 0 { + dAtA[i] = 0x58 + i++ + i = encodeVarintSysset(dAtA, i, uint64(m.CutMaxDuration)) + } + if m.CutMinDuration != 0 { + dAtA[i] = 0x60 + i++ + i = encodeVarintSysset(dAtA, i, uint64(m.CutMinDuration)) + } + if len(m.Reserved) > 0 { + dAtA[i] = 0x6a + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.Reserved))) + i += copy(dAtA[i:], m.Reserved) + } + if len(m.GateWay) > 0 { + dAtA[i] = 0x72 + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.GateWay))) + i += copy(dAtA[i:], m.GateWay) + } + if len(m.NetMask) > 0 { + dAtA[i] = 0x7a + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.NetMask))) + i += copy(dAtA[i:], m.NetMask) + } + if m.RealMax != 0 { + dAtA[i] = 0x80 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintSysset(dAtA, i, uint64(m.RealMax)) + } + if m.AlarmThresholdType != 0 { + dAtA[i] = 0x88 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintSysset(dAtA, i, uint64(m.AlarmThresholdType)) + } + if m.AlarmThreshold != 0 { + dAtA[i] = 0x90 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintSysset(dAtA, i, uint64(m.AlarmThreshold)) + } + return i, nil } func (m *PollConfig) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) + n, err := m.MarshalTo(dAtA) if err != nil { return nil, err } @@ -719,54 +705,48 @@ } func (m *PollConfig) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *PollConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) + var i int _ = i var l int _ = l - if m.PollChannelCount != 0 { - i = encodeVarintSysset(dAtA, i, uint64(m.PollChannelCount)) - i-- - dAtA[i] = 0x28 + if len(m.ServerId) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.ServerId))) + i += copy(dAtA[i:], m.ServerId) + } + if m.PollPeriod != 0 { + dAtA[i] = 0x10 + i++ + i = encodeVarintSysset(dAtA, i, uint64(m.PollPeriod)) + } + if m.Delay != 0 { + dAtA[i] = 0x18 + i++ + i = encodeVarintSysset(dAtA, i, uint64(m.Delay)) } if m.Enable { - i-- + dAtA[i] = 0x20 + i++ if m.Enable { dAtA[i] = 1 } else { dAtA[i] = 0 } - i-- - dAtA[i] = 0x20 + i++ } - if m.Delay != 0 { - i = encodeVarintSysset(dAtA, i, uint64(m.Delay)) - i-- - dAtA[i] = 0x18 + if m.PollChannelCount != 0 { + dAtA[i] = 0x28 + i++ + i = encodeVarintSysset(dAtA, i, uint64(m.PollChannelCount)) } - if m.PollPeriod != 0 { - i = encodeVarintSysset(dAtA, i, uint64(m.PollPeriod)) - i-- - dAtA[i] = 0x10 - } - if len(m.ServerId) > 0 { - i -= len(m.ServerId) - copy(dAtA[i:], m.ServerId) - i = encodeVarintSysset(dAtA, i, uint64(len(m.ServerId))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil + return i, nil } func (m *Cluster) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) + n, err := m.MarshalTo(dAtA) if err != nil { return nil, err } @@ -774,64 +754,53 @@ } func (m *Cluster) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Cluster) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) + var i int _ = i var l int _ = l - if len(m.Nodes) > 0 { - for iNdEx := len(m.Nodes) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Nodes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintSysset(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - } - } - if len(m.VirtualIp) > 0 { - i -= len(m.VirtualIp) - copy(dAtA[i:], m.VirtualIp) - i = encodeVarintSysset(dAtA, i, uint64(len(m.VirtualIp))) - i-- - dAtA[i] = 0x22 - } - if len(m.Password) > 0 { - i -= len(m.Password) - copy(dAtA[i:], m.Password) - i = encodeVarintSysset(dAtA, i, uint64(len(m.Password))) - i-- - dAtA[i] = 0x1a + if len(m.ClusterId) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.ClusterId))) + i += copy(dAtA[i:], m.ClusterId) } if len(m.ClusterName) > 0 { - i -= len(m.ClusterName) - copy(dAtA[i:], m.ClusterName) - i = encodeVarintSysset(dAtA, i, uint64(len(m.ClusterName))) - i-- dAtA[i] = 0x12 + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.ClusterName))) + i += copy(dAtA[i:], m.ClusterName) } - if len(m.ClusterId) > 0 { - i -= len(m.ClusterId) - copy(dAtA[i:], m.ClusterId) - i = encodeVarintSysset(dAtA, i, uint64(len(m.ClusterId))) - i-- - dAtA[i] = 0xa + if len(m.Password) > 0 { + dAtA[i] = 0x1a + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.Password))) + i += copy(dAtA[i:], m.Password) } - return len(dAtA) - i, nil + if len(m.VirtualIp) > 0 { + dAtA[i] = 0x22 + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.VirtualIp))) + i += copy(dAtA[i:], m.VirtualIp) + } + if len(m.Nodes) > 0 { + for _, msg := range m.Nodes { + dAtA[i] = 0x2a + i++ + i = encodeVarintSysset(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil } func (m *ClusterNode) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) + n, err := m.MarshalTo(dAtA) if err != nil { return nil, err } @@ -839,71 +808,59 @@ } func (m *ClusterNode) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ClusterNode) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) + var i int _ = i var l int _ = l - if len(m.CreateTime) > 0 { - i -= len(m.CreateTime) - copy(dAtA[i:], m.CreateTime) - i = encodeVarintSysset(dAtA, i, uint64(len(m.CreateTime))) - i-- - dAtA[i] = 0x3a - } - if len(m.NodeIp) > 0 { - i -= len(m.NodeIp) - copy(dAtA[i:], m.NodeIp) - i = encodeVarintSysset(dAtA, i, uint64(len(m.NodeIp))) - i-- - dAtA[i] = 0x32 - } - if len(m.NodeId) > 0 { - i -= len(m.NodeId) - copy(dAtA[i:], m.NodeId) - i = encodeVarintSysset(dAtA, i, uint64(len(m.NodeId))) - i-- - dAtA[i] = 0x2a - } - if len(m.ServerName) > 0 { - i -= len(m.ServerName) - copy(dAtA[i:], m.ServerName) - i = encodeVarintSysset(dAtA, i, uint64(len(m.ServerName))) - i-- - dAtA[i] = 0x22 - } - if len(m.ServerId) > 0 { - i -= len(m.ServerId) - copy(dAtA[i:], m.ServerId) - i = encodeVarintSysset(dAtA, i, uint64(len(m.ServerId))) - i-- - dAtA[i] = 0x1a + if len(m.Id) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.Id))) + i += copy(dAtA[i:], m.Id) } if len(m.ClusterId) > 0 { - i -= len(m.ClusterId) - copy(dAtA[i:], m.ClusterId) - i = encodeVarintSysset(dAtA, i, uint64(len(m.ClusterId))) - i-- dAtA[i] = 0x12 + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.ClusterId))) + i += copy(dAtA[i:], m.ClusterId) } - if len(m.Id) > 0 { - i -= len(m.Id) - copy(dAtA[i:], m.Id) - i = encodeVarintSysset(dAtA, i, uint64(len(m.Id))) - i-- - dAtA[i] = 0xa + if len(m.ServerId) > 0 { + dAtA[i] = 0x1a + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.ServerId))) + i += copy(dAtA[i:], m.ServerId) } - return len(dAtA) - i, nil + if len(m.ServerName) > 0 { + dAtA[i] = 0x22 + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.ServerName))) + i += copy(dAtA[i:], m.ServerName) + } + if len(m.NodeId) > 0 { + dAtA[i] = 0x2a + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.NodeId))) + i += copy(dAtA[i:], m.NodeId) + } + if len(m.NodeIp) > 0 { + dAtA[i] = 0x32 + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.NodeIp))) + i += copy(dAtA[i:], m.NodeIp) + } + if len(m.CreateTime) > 0 { + dAtA[i] = 0x3a + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.CreateTime))) + i += copy(dAtA[i:], m.CreateTime) + } + return i, nil } func (m *ResourceConfig) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) + n, err := m.MarshalTo(dAtA) if err != nil { return nil, err } @@ -911,52 +868,43 @@ } func (m *ResourceConfig) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ResourceConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) + var i int _ = i var l int _ = l - if m.FilePort != 0 { - i = encodeVarintSysset(dAtA, i, uint64(m.FilePort)) - i-- - dAtA[i] = 0x20 - } - if len(m.Domain) > 0 { - i -= len(m.Domain) - copy(dAtA[i:], m.Domain) - i = encodeVarintSysset(dAtA, i, uint64(len(m.Domain))) - i-- - dAtA[i] = 0x1a + if m.IpType != 0 { + dAtA[i] = 0x8 + i++ + i = encodeVarintSysset(dAtA, i, uint64(m.IpType)) } if len(m.ServiceIp) > 0 { - i -= len(m.ServiceIp) - copy(dAtA[i:], m.ServiceIp) - i = encodeVarintSysset(dAtA, i, uint64(len(m.ServiceIp))) - i-- dAtA[i] = 0x12 + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.ServiceIp))) + i += copy(dAtA[i:], m.ServiceIp) } - if m.IpType != 0 { - i = encodeVarintSysset(dAtA, i, uint64(m.IpType)) - i-- - dAtA[i] = 0x8 + if len(m.Domain) > 0 { + dAtA[i] = 0x1a + i++ + i = encodeVarintSysset(dAtA, i, uint64(len(m.Domain))) + i += copy(dAtA[i:], m.Domain) } - return len(dAtA) - i, nil + if m.FilePort != 0 { + dAtA[i] = 0x20 + i++ + i = encodeVarintSysset(dAtA, i, uint64(m.FilePort)) + } + return i, nil } func encodeVarintSysset(dAtA []byte, offset int, v uint64) int { - offset -= sovSysset(v) - base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return base + return offset + 1 } func (m *LocalConfig) Size() (n int) { if m == nil { @@ -2476,7 +2424,6 @@ func skipSysset(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 - depth := 0 for iNdEx < l { var wire uint64 for shift := uint(0); ; shift += 7 { @@ -2508,8 +2455,10 @@ break } } + return iNdEx, nil case 1: iNdEx += 8 + return iNdEx, nil case 2: var length int for shift := uint(0); ; shift += 7 { @@ -2530,30 +2479,55 @@ return 0, ErrInvalidLengthSysset } iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupSysset + if iNdEx < 0 { + return 0, ErrInvalidLengthSysset } - depth-- + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowSysset + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipSysset(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthSysset + } + } + return iNdEx, nil + case 4: + return iNdEx, nil case 5: iNdEx += 4 + return iNdEx, nil default: return 0, fmt.Errorf("proto: illegal wireType %d", wireType) } - if iNdEx < 0 { - return 0, ErrInvalidLengthSysset - } - if depth == 0 { - return iNdEx, nil - } } - return 0, io.ErrUnexpectedEOF + panic("unreachable") } var ( - ErrInvalidLengthSysset = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowSysset = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupSysset = fmt.Errorf("proto: unexpected end of group") + ErrInvalidLengthSysset = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowSysset = fmt.Errorf("proto: integer overflow") ) -- Gitblit v1.8.0