Fix #I4KI81 reason: modify kata-containers version and update it to 1.11.1 Signed-off-by: holyfei <yangfeiyu20092010@163.com>
1721 lines
85 KiB
Diff
1721 lines
85 KiB
Diff
From 60b6a9c63a116db6d60a91b3dc875de3f33aa57c Mon Sep 17 00:00:00 2001
|
|
From: LiangZhang <zhangliang5@Huawei.com>
|
|
Date: Mon, 21 Sep 2020 15:33:17 +0800
|
|
Subject: [PATCH] runtime: add support of new sandbox StratoVirt
|
|
|
|
Signed-off-by: LiangZhang <zhangliang5@Huawei.com>
|
|
---
|
|
pkg/katautils/config.go | 5 +-
|
|
.../agent/protocols/grpc/agent.pb.go | 636 +++++++++++++--------
|
|
virtcontainers/agent.go | 3 +
|
|
virtcontainers/hypervisor.go | 12 +
|
|
virtcontainers/kata_agent.go | 73 ++-
|
|
virtcontainers/noop_agent.go | 5 +
|
|
virtcontainers/stratovirt.go | 617 ++++++++++++++++++++
|
|
7 files changed, 1090 insertions(+), 261 deletions(-)
|
|
create mode 100644 virtcontainers/stratovirt.go
|
|
|
|
diff --git a/pkg/katautils/config.go b/pkg/katautils/config.go
|
|
index 3365b3f..ed6f03c 100644
|
|
--- a/pkg/katautils/config.go
|
|
+++ b/pkg/katautils/config.go
|
|
@@ -52,7 +52,7 @@ const (
|
|
clhHypervisorTableType = "clh"
|
|
qemuHypervisorTableType = "qemu"
|
|
acrnHypervisorTableType = "acrn"
|
|
-
|
|
+ stratovirtHypervisorTableType = "stratovirt"
|
|
// supported proxy component types
|
|
kataProxyTableType = "kata"
|
|
|
|
@@ -921,6 +921,9 @@ func updateRuntimeConfigHypervisor(configPath string, tomlConf tomlConfig, confi
|
|
case clhHypervisorTableType:
|
|
config.HypervisorType = vc.ClhHypervisor
|
|
hConfig, err = newClhHypervisorConfig(hypervisor)
|
|
+ case stratovirtHypervisorTableType:
|
|
+ config.HypervisorType = vc.StratovirtHypervisor
|
|
+ hConfig, err = newQemuHypervisorConfig(hypervisor)
|
|
}
|
|
|
|
if err != nil {
|
|
diff --git a/vendor/github.com/kata-containers/agent/protocols/grpc/agent.pb.go b/vendor/github.com/kata-containers/agent/protocols/grpc/agent.pb.go
|
|
index c50ecb5..181fcb6 100644
|
|
--- a/vendor/github.com/kata-containers/agent/protocols/grpc/agent.pb.go
|
|
+++ b/vendor/github.com/kata-containers/agent/protocols/grpc/agent.pb.go
|
|
@@ -50,6 +50,7 @@
|
|
Interfaces
|
|
Routes
|
|
UpdateInterfaceRequest
|
|
+ UpdateInterfaceHwAddrByNameRequest
|
|
UpdateRoutesRequest
|
|
ListInterfacesRequest
|
|
ListRoutesRequest
|
|
@@ -1491,6 +1492,24 @@ func (m *UpdateInterfaceRequest) GetInterface() *types.Interface {
|
|
return nil
|
|
}
|
|
|
|
+type UpdateInterfaceHwAddrByNameRequest struct {
|
|
+ Interface *types.Interface `protobuf:"bytes,1,opt,name=interface" json:"interface,omitempty"`
|
|
+}
|
|
+
|
|
+func (m *UpdateInterfaceHwAddrByNameRequest) Reset() { *m = UpdateInterfaceHwAddrByNameRequest{} }
|
|
+func (m *UpdateInterfaceHwAddrByNameRequest) String() string { return proto.CompactTextString(m) }
|
|
+func (*UpdateInterfaceHwAddrByNameRequest) ProtoMessage() {}
|
|
+func (*UpdateInterfaceHwAddrByNameRequest) Descriptor() ([]byte, []int) {
|
|
+ return fileDescriptorAgent, []int{40}
|
|
+}
|
|
+
|
|
+func (m *UpdateInterfaceHwAddrByNameRequest) GetInterface() *types.Interface {
|
|
+ if m != nil {
|
|
+ return m.Interface
|
|
+ }
|
|
+ return nil
|
|
+}
|
|
+
|
|
type UpdateRoutesRequest struct {
|
|
Routes *Routes `protobuf:"bytes,1,opt,name=routes" json:"routes,omitempty"`
|
|
Increment bool `protobuf:"varint,2,opt,name=increment,proto3" json:"increment,omitempty"`
|
|
@@ -1499,7 +1518,7 @@ type UpdateRoutesRequest struct {
|
|
func (m *UpdateRoutesRequest) Reset() { *m = UpdateRoutesRequest{} }
|
|
func (m *UpdateRoutesRequest) String() string { return proto.CompactTextString(m) }
|
|
func (*UpdateRoutesRequest) ProtoMessage() {}
|
|
-func (*UpdateRoutesRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{40} }
|
|
+func (*UpdateRoutesRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{41} }
|
|
|
|
func (m *UpdateRoutesRequest) GetRoutes() *Routes {
|
|
if m != nil {
|
|
@@ -1521,7 +1540,7 @@ type ListInterfacesRequest struct {
|
|
func (m *ListInterfacesRequest) Reset() { *m = ListInterfacesRequest{} }
|
|
func (m *ListInterfacesRequest) String() string { return proto.CompactTextString(m) }
|
|
func (*ListInterfacesRequest) ProtoMessage() {}
|
|
-func (*ListInterfacesRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{41} }
|
|
+func (*ListInterfacesRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{42} }
|
|
|
|
type ListRoutesRequest struct {
|
|
}
|
|
@@ -1529,7 +1548,7 @@ type ListRoutesRequest struct {
|
|
func (m *ListRoutesRequest) Reset() { *m = ListRoutesRequest{} }
|
|
func (m *ListRoutesRequest) String() string { return proto.CompactTextString(m) }
|
|
func (*ListRoutesRequest) ProtoMessage() {}
|
|
-func (*ListRoutesRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{42} }
|
|
+func (*ListRoutesRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{43} }
|
|
|
|
type OnlineCPUMemRequest struct {
|
|
// Wait specifies if the caller waits for the agent to online all resources.
|
|
@@ -1545,7 +1564,7 @@ type OnlineCPUMemRequest struct {
|
|
func (m *OnlineCPUMemRequest) Reset() { *m = OnlineCPUMemRequest{} }
|
|
func (m *OnlineCPUMemRequest) String() string { return proto.CompactTextString(m) }
|
|
func (*OnlineCPUMemRequest) ProtoMessage() {}
|
|
-func (*OnlineCPUMemRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{43} }
|
|
+func (*OnlineCPUMemRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{44} }
|
|
|
|
func (m *OnlineCPUMemRequest) GetWait() bool {
|
|
if m != nil {
|
|
@@ -1576,7 +1595,7 @@ type ReseedRandomDevRequest struct {
|
|
func (m *ReseedRandomDevRequest) Reset() { *m = ReseedRandomDevRequest{} }
|
|
func (m *ReseedRandomDevRequest) String() string { return proto.CompactTextString(m) }
|
|
func (*ReseedRandomDevRequest) ProtoMessage() {}
|
|
-func (*ReseedRandomDevRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{44} }
|
|
+func (*ReseedRandomDevRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{45} }
|
|
|
|
func (m *ReseedRandomDevRequest) GetData() []byte {
|
|
if m != nil {
|
|
@@ -1603,7 +1622,7 @@ type AgentDetails struct {
|
|
func (m *AgentDetails) Reset() { *m = AgentDetails{} }
|
|
func (m *AgentDetails) String() string { return proto.CompactTextString(m) }
|
|
func (*AgentDetails) ProtoMessage() {}
|
|
-func (*AgentDetails) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{45} }
|
|
+func (*AgentDetails) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{46} }
|
|
|
|
func (m *AgentDetails) GetVersion() string {
|
|
if m != nil {
|
|
@@ -1654,7 +1673,7 @@ type GuestDetailsRequest struct {
|
|
func (m *GuestDetailsRequest) Reset() { *m = GuestDetailsRequest{} }
|
|
func (m *GuestDetailsRequest) String() string { return proto.CompactTextString(m) }
|
|
func (*GuestDetailsRequest) ProtoMessage() {}
|
|
-func (*GuestDetailsRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{46} }
|
|
+func (*GuestDetailsRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{47} }
|
|
|
|
func (m *GuestDetailsRequest) GetMemBlockSize() bool {
|
|
if m != nil {
|
|
@@ -1680,7 +1699,7 @@ type GuestDetailsResponse struct {
|
|
func (m *GuestDetailsResponse) Reset() { *m = GuestDetailsResponse{} }
|
|
func (m *GuestDetailsResponse) String() string { return proto.CompactTextString(m) }
|
|
func (*GuestDetailsResponse) ProtoMessage() {}
|
|
-func (*GuestDetailsResponse) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{47} }
|
|
+func (*GuestDetailsResponse) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{48} }
|
|
|
|
func (m *GuestDetailsResponse) GetMemBlockSizeBytes() uint64 {
|
|
if m != nil {
|
|
@@ -1712,7 +1731,7 @@ type MemHotplugByProbeRequest struct {
|
|
func (m *MemHotplugByProbeRequest) Reset() { *m = MemHotplugByProbeRequest{} }
|
|
func (m *MemHotplugByProbeRequest) String() string { return proto.CompactTextString(m) }
|
|
func (*MemHotplugByProbeRequest) ProtoMessage() {}
|
|
-func (*MemHotplugByProbeRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{48} }
|
|
+func (*MemHotplugByProbeRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{49} }
|
|
|
|
func (m *MemHotplugByProbeRequest) GetMemHotplugProbeAddr() []uint64 {
|
|
if m != nil {
|
|
@@ -1731,7 +1750,7 @@ type SetGuestDateTimeRequest struct {
|
|
func (m *SetGuestDateTimeRequest) Reset() { *m = SetGuestDateTimeRequest{} }
|
|
func (m *SetGuestDateTimeRequest) String() string { return proto.CompactTextString(m) }
|
|
func (*SetGuestDateTimeRequest) ProtoMessage() {}
|
|
-func (*SetGuestDateTimeRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{49} }
|
|
+func (*SetGuestDateTimeRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{50} }
|
|
|
|
func (m *SetGuestDateTimeRequest) GetSec() int64 {
|
|
if m != nil {
|
|
@@ -1780,7 +1799,7 @@ type Storage struct {
|
|
func (m *Storage) Reset() { *m = Storage{} }
|
|
func (m *Storage) String() string { return proto.CompactTextString(m) }
|
|
func (*Storage) ProtoMessage() {}
|
|
-func (*Storage) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{50} }
|
|
+func (*Storage) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{51} }
|
|
|
|
func (m *Storage) GetDriver() string {
|
|
if m != nil {
|
|
@@ -1863,7 +1882,7 @@ type Device struct {
|
|
func (m *Device) Reset() { *m = Device{} }
|
|
func (m *Device) String() string { return proto.CompactTextString(m) }
|
|
func (*Device) ProtoMessage() {}
|
|
-func (*Device) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{51} }
|
|
+func (*Device) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{52} }
|
|
|
|
func (m *Device) GetId() string {
|
|
if m != nil {
|
|
@@ -1909,7 +1928,7 @@ type StringUser struct {
|
|
func (m *StringUser) Reset() { *m = StringUser{} }
|
|
func (m *StringUser) String() string { return proto.CompactTextString(m) }
|
|
func (*StringUser) ProtoMessage() {}
|
|
-func (*StringUser) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{52} }
|
|
+func (*StringUser) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{53} }
|
|
|
|
func (m *StringUser) GetUid() string {
|
|
if m != nil {
|
|
@@ -1957,7 +1976,7 @@ type CopyFileRequest struct {
|
|
func (m *CopyFileRequest) Reset() { *m = CopyFileRequest{} }
|
|
func (m *CopyFileRequest) String() string { return proto.CompactTextString(m) }
|
|
func (*CopyFileRequest) ProtoMessage() {}
|
|
-func (*CopyFileRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{53} }
|
|
+func (*CopyFileRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{54} }
|
|
|
|
func (m *CopyFileRequest) GetPath() string {
|
|
if m != nil {
|
|
@@ -2021,7 +2040,7 @@ type StartTracingRequest struct {
|
|
func (m *StartTracingRequest) Reset() { *m = StartTracingRequest{} }
|
|
func (m *StartTracingRequest) String() string { return proto.CompactTextString(m) }
|
|
func (*StartTracingRequest) ProtoMessage() {}
|
|
-func (*StartTracingRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{54} }
|
|
+func (*StartTracingRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{55} }
|
|
|
|
type StopTracingRequest struct {
|
|
}
|
|
@@ -2029,7 +2048,7 @@ type StopTracingRequest struct {
|
|
func (m *StopTracingRequest) Reset() { *m = StopTracingRequest{} }
|
|
func (m *StopTracingRequest) String() string { return proto.CompactTextString(m) }
|
|
func (*StopTracingRequest) ProtoMessage() {}
|
|
-func (*StopTracingRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{55} }
|
|
+func (*StopTracingRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{56} }
|
|
|
|
type UpdateIPVSRequest struct {
|
|
// IPVS_req is the IPVS rule message needed to update
|
|
@@ -2039,7 +2058,7 @@ type UpdateIPVSRequest struct {
|
|
func (m *UpdateIPVSRequest) Reset() { *m = UpdateIPVSRequest{} }
|
|
func (m *UpdateIPVSRequest) String() string { return proto.CompactTextString(m) }
|
|
func (*UpdateIPVSRequest) ProtoMessage() {}
|
|
-func (*UpdateIPVSRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{56} }
|
|
+func (*UpdateIPVSRequest) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{57} }
|
|
|
|
func (m *UpdateIPVSRequest) GetIPVSReq() string {
|
|
if m != nil {
|
|
@@ -2056,7 +2075,7 @@ type IPVSResponse struct {
|
|
func (m *IPVSResponse) Reset() { *m = IPVSResponse{} }
|
|
func (m *IPVSResponse) String() string { return proto.CompactTextString(m) }
|
|
func (*IPVSResponse) ProtoMessage() {}
|
|
-func (*IPVSResponse) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{57} }
|
|
+func (*IPVSResponse) Descriptor() ([]byte, []int) { return fileDescriptorAgent, []int{58} }
|
|
|
|
func (m *IPVSResponse) GetIPVSRes() string {
|
|
if m != nil {
|
|
@@ -2106,6 +2125,7 @@ func init() {
|
|
proto.RegisterType((*Interfaces)(nil), "grpc.Interfaces")
|
|
proto.RegisterType((*Routes)(nil), "grpc.Routes")
|
|
proto.RegisterType((*UpdateInterfaceRequest)(nil), "grpc.UpdateInterfaceRequest")
|
|
+ proto.RegisterType((*UpdateInterfaceHwAddrByNameRequest)(nil), "grpc.UpdateInterfaceHwAddrByNameRequest")
|
|
proto.RegisterType((*UpdateRoutesRequest)(nil), "grpc.UpdateRoutesRequest")
|
|
proto.RegisterType((*ListInterfacesRequest)(nil), "grpc.ListInterfacesRequest")
|
|
proto.RegisterType((*ListRoutesRequest)(nil), "grpc.ListRoutesRequest")
|
|
@@ -2163,6 +2183,7 @@ type AgentServiceClient interface {
|
|
TtyWinResize(ctx context.Context, in *TtyWinResizeRequest, opts ...grpc1.CallOption) (*google_protobuf2.Empty, error)
|
|
// networking
|
|
UpdateInterface(ctx context.Context, in *UpdateInterfaceRequest, opts ...grpc1.CallOption) (*types.Interface, error)
|
|
+ UpdateInterfaceHwAddrByName(ctx context.Context, in *UpdateInterfaceHwAddrByNameRequest, opts ...grpc1.CallOption) (*types.Interface, error)
|
|
UpdateRoutes(ctx context.Context, in *UpdateRoutesRequest, opts ...grpc1.CallOption) (*Routes, error)
|
|
ListInterfaces(ctx context.Context, in *ListInterfacesRequest, opts ...grpc1.CallOption) (*Interfaces, error)
|
|
ListRoutes(ctx context.Context, in *ListRoutesRequest, opts ...grpc1.CallOption) (*Routes, error)
|
|
@@ -2342,6 +2363,15 @@ func (c *agentServiceClient) UpdateInterface(ctx context.Context, in *UpdateInte
|
|
return out, nil
|
|
}
|
|
|
|
+func (c *agentServiceClient) UpdateInterfaceHwAddrByName(ctx context.Context, in *UpdateInterfaceHwAddrByNameRequest, opts ...grpc1.CallOption) (*types.Interface, error) {
|
|
+ out := new(types.Interface)
|
|
+ err := grpc1.Invoke(ctx, "/grpc.AgentService/UpdateInterfaceHwAddrByName", in, out, c.cc, opts...)
|
|
+ if err != nil {
|
|
+ return nil, err
|
|
+ }
|
|
+ return out, nil
|
|
+}
|
|
+
|
|
func (c *agentServiceClient) UpdateRoutes(ctx context.Context, in *UpdateRoutesRequest, opts ...grpc1.CallOption) (*Routes, error) {
|
|
out := new(Routes)
|
|
err := grpc1.Invoke(ctx, "/grpc.AgentService/UpdateRoutes", in, out, c.cc, opts...)
|
|
@@ -2497,6 +2527,7 @@ type AgentServiceServer interface {
|
|
TtyWinResize(context.Context, *TtyWinResizeRequest) (*google_protobuf2.Empty, error)
|
|
// networking
|
|
UpdateInterface(context.Context, *UpdateInterfaceRequest) (*types.Interface, error)
|
|
+ UpdateInterfaceHwAddrByName(context.Context, *UpdateInterfaceHwAddrByNameRequest) (*types.Interface, error)
|
|
UpdateRoutes(context.Context, *UpdateRoutesRequest) (*Routes, error)
|
|
ListInterfaces(context.Context, *ListInterfacesRequest) (*Interfaces, error)
|
|
ListRoutes(context.Context, *ListRoutesRequest) (*Routes, error)
|
|
@@ -2825,6 +2856,24 @@ func _AgentService_UpdateInterface_Handler(srv interface{}, ctx context.Context,
|
|
return interceptor(ctx, in, info, handler)
|
|
}
|
|
|
|
+func _AgentService_UpdateInterfaceHwAddrByName_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc1.UnaryServerInterceptor) (interface{}, error) {
|
|
+ in := new(UpdateInterfaceHwAddrByNameRequest)
|
|
+ if err := dec(in); err != nil {
|
|
+ return nil, err
|
|
+ }
|
|
+ if interceptor == nil {
|
|
+ return srv.(AgentServiceServer).UpdateInterfaceHwAddrByName(ctx, in)
|
|
+ }
|
|
+ info := &grpc1.UnaryServerInfo{
|
|
+ Server: srv,
|
|
+ FullMethod: "/grpc.AgentService/UpdateInterfaceHwAddrByName",
|
|
+ }
|
|
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
|
+ return srv.(AgentServiceServer).UpdateInterfaceHwAddrByName(ctx, req.(*UpdateInterfaceHwAddrByNameRequest))
|
|
+ }
|
|
+ return interceptor(ctx, in, info, handler)
|
|
+}
|
|
+
|
|
func _AgentService_UpdateRoutes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc1.UnaryServerInterceptor) (interface{}, error) {
|
|
in := new(UpdateRoutesRequest)
|
|
if err := dec(in); err != nil {
|
|
@@ -3150,6 +3199,10 @@ var _AgentService_serviceDesc = grpc1.ServiceDesc{
|
|
Handler: _AgentService_UpdateInterface_Handler,
|
|
},
|
|
{
|
|
+ MethodName: "UpdateInterfaceHwAddrByName",
|
|
+ Handler: _AgentService_UpdateInterfaceHwAddrByName_Handler,
|
|
+ },
|
|
+ {
|
|
MethodName: "UpdateRoutes",
|
|
Handler: _AgentService_UpdateRoutes_Handler,
|
|
},
|
|
@@ -4899,6 +4952,34 @@ func (m *UpdateInterfaceRequest) MarshalTo(dAtA []byte) (int, error) {
|
|
return i, nil
|
|
}
|
|
|
|
+func (m *UpdateInterfaceHwAddrByNameRequest) Marshal() (dAtA []byte, err error) {
|
|
+ size := m.Size()
|
|
+ dAtA = make([]byte, size)
|
|
+ n, err := m.MarshalTo(dAtA)
|
|
+ if err != nil {
|
|
+ return nil, err
|
|
+ }
|
|
+ return dAtA[:n], nil
|
|
+}
|
|
+
|
|
+func (m *UpdateInterfaceHwAddrByNameRequest) MarshalTo(dAtA []byte) (int, error) {
|
|
+ var i int
|
|
+ _ = i
|
|
+ var l int
|
|
+ _ = l
|
|
+ if m.Interface != nil {
|
|
+ dAtA[i] = 0xa
|
|
+ i++
|
|
+ i = encodeVarintAgent(dAtA, i, uint64(m.Interface.Size()))
|
|
+ n25, err := m.Interface.MarshalTo(dAtA[i:])
|
|
+ if err != nil {
|
|
+ return 0, err
|
|
+ }
|
|
+ i += n25
|
|
+ }
|
|
+ return i, nil
|
|
+}
|
|
+
|
|
func (m *UpdateRoutesRequest) Marshal() (dAtA []byte, err error) {
|
|
size := m.Size()
|
|
dAtA = make([]byte, size)
|
|
@@ -4918,11 +4999,11 @@ func (m *UpdateRoutesRequest) MarshalTo(dAtA []byte) (int, error) {
|
|
dAtA[i] = 0xa
|
|
i++
|
|
i = encodeVarintAgent(dAtA, i, uint64(m.Routes.Size()))
|
|
- n25, err := m.Routes.MarshalTo(dAtA[i:])
|
|
+ n26, err := m.Routes.MarshalTo(dAtA[i:])
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
- i += n25
|
|
+ i += n26
|
|
}
|
|
if m.Increment {
|
|
dAtA[i] = 0x10
|
|
@@ -5176,11 +5257,11 @@ func (m *GuestDetailsResponse) MarshalTo(dAtA []byte) (int, error) {
|
|
dAtA[i] = 0x12
|
|
i++
|
|
i = encodeVarintAgent(dAtA, i, uint64(m.AgentDetails.Size()))
|
|
- n26, err := m.AgentDetails.MarshalTo(dAtA[i:])
|
|
+ n27, err := m.AgentDetails.MarshalTo(dAtA[i:])
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
- i += n26
|
|
+ i += n27
|
|
}
|
|
if m.SupportMemHotplugProbe {
|
|
dAtA[i] = 0x18
|
|
@@ -5211,21 +5292,21 @@ func (m *MemHotplugByProbeRequest) MarshalTo(dAtA []byte) (int, error) {
|
|
var l int
|
|
_ = l
|
|
if len(m.MemHotplugProbeAddr) > 0 {
|
|
- dAtA28 := make([]byte, len(m.MemHotplugProbeAddr)*10)
|
|
- var j27 int
|
|
+ dAtA29 := make([]byte, len(m.MemHotplugProbeAddr)*10)
|
|
+ var j28 int
|
|
for _, num := range m.MemHotplugProbeAddr {
|
|
for num >= 1<<7 {
|
|
- dAtA28[j27] = uint8(uint64(num)&0x7f | 0x80)
|
|
+ dAtA29[j28] = uint8(uint64(num)&0x7f | 0x80)
|
|
num >>= 7
|
|
- j27++
|
|
+ j28++
|
|
}
|
|
- dAtA28[j27] = uint8(num)
|
|
- j27++
|
|
+ dAtA29[j28] = uint8(num)
|
|
+ j28++
|
|
}
|
|
dAtA[i] = 0xa
|
|
i++
|
|
- i = encodeVarintAgent(dAtA, i, uint64(j27))
|
|
- i += copy(dAtA[i:], dAtA28[:j27])
|
|
+ i = encodeVarintAgent(dAtA, i, uint64(j28))
|
|
+ i += copy(dAtA[i:], dAtA29[:j28])
|
|
}
|
|
return i, nil
|
|
}
|
|
@@ -6333,6 +6414,16 @@ func (m *UpdateInterfaceRequest) Size() (n int) {
|
|
return n
|
|
}
|
|
|
|
+func (m *UpdateInterfaceHwAddrByNameRequest) Size() (n int) {
|
|
+ var l int
|
|
+ _ = l
|
|
+ if m.Interface != nil {
|
|
+ l = m.Interface.Size()
|
|
+ n += 1 + l + sovAgent(uint64(l))
|
|
+ }
|
|
+ return n
|
|
+}
|
|
+
|
|
func (m *UpdateRoutesRequest) Size() (n int) {
|
|
var l int
|
|
_ = l
|
|
@@ -12114,6 +12205,89 @@ func (m *UpdateInterfaceRequest) Unmarshal(dAtA []byte) error {
|
|
}
|
|
return nil
|
|
}
|
|
+func (m *UpdateInterfaceHwAddrByNameRequest) Unmarshal(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 ErrIntOverflowAgent
|
|
+ }
|
|
+ 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: UpdateInterfaceHwAddrByNameRequest: wiretype end group for non-group")
|
|
+ }
|
|
+ if fieldNum <= 0 {
|
|
+ return fmt.Errorf("proto: UpdateInterfaceHwAddrByNameRequest: illegal tag %d (wire type %d)", fieldNum, wire)
|
|
+ }
|
|
+ switch fieldNum {
|
|
+ case 1:
|
|
+ if wireType != 2 {
|
|
+ return fmt.Errorf("proto: wrong wireType = %d for field Interface", wireType)
|
|
+ }
|
|
+ var msglen int
|
|
+ for shift := uint(0); ; shift += 7 {
|
|
+ if shift >= 64 {
|
|
+ return ErrIntOverflowAgent
|
|
+ }
|
|
+ if iNdEx >= l {
|
|
+ return io.ErrUnexpectedEOF
|
|
+ }
|
|
+ b := dAtA[iNdEx]
|
|
+ iNdEx++
|
|
+ msglen |= (int(b) & 0x7F) << shift
|
|
+ if b < 0x80 {
|
|
+ break
|
|
+ }
|
|
+ }
|
|
+ if msglen < 0 {
|
|
+ return ErrInvalidLengthAgent
|
|
+ }
|
|
+ postIndex := iNdEx + msglen
|
|
+ if postIndex > l {
|
|
+ return io.ErrUnexpectedEOF
|
|
+ }
|
|
+ if m.Interface == nil {
|
|
+ m.Interface = &types.Interface{}
|
|
+ }
|
|
+ if err := m.Interface.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
|
|
+ return err
|
|
+ }
|
|
+ iNdEx = postIndex
|
|
+ default:
|
|
+ iNdEx = preIndex
|
|
+ skippy, err := skipAgent(dAtA[iNdEx:])
|
|
+ if err != nil {
|
|
+ return err
|
|
+ }
|
|
+ if skippy < 0 {
|
|
+ return ErrInvalidLengthAgent
|
|
+ }
|
|
+ if (iNdEx + skippy) > l {
|
|
+ return io.ErrUnexpectedEOF
|
|
+ }
|
|
+ iNdEx += skippy
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if iNdEx > l {
|
|
+ return io.ErrUnexpectedEOF
|
|
+ }
|
|
+ return nil
|
|
+}
|
|
func (m *UpdateRoutesRequest) Unmarshal(dAtA []byte) error {
|
|
l := len(dAtA)
|
|
iNdEx := 0
|
|
@@ -14242,204 +14416,206 @@ var (
|
|
func init() { proto.RegisterFile("agent.proto", fileDescriptorAgent) }
|
|
|
|
var fileDescriptorAgent = []byte{
|
|
- // 3183 bytes of a gzipped FileDescriptorProto
|
|
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x39, 0x4b, 0x6f, 0x1c, 0xc7,
|
|
- 0x99, 0x98, 0x07, 0x39, 0x33, 0xdf, 0xbc, 0xc8, 0x22, 0x45, 0x8d, 0x46, 0xb2, 0x2c, 0xb7, 0x6d,
|
|
- 0x99, 0x5e, 0xaf, 0x49, 0x8b, 0x36, 0xfc, 0x84, 0x57, 0x10, 0x29, 0xad, 0xc8, 0xb5, 0xb4, 0xe2,
|
|
- 0xf6, 0x88, 0xeb, 0x5d, 0x2c, 0x16, 0x8d, 0x66, 0x77, 0x71, 0x58, 0xe6, 0x74, 0x57, 0xbb, 0xaa,
|
|
- 0x9a, 0xe2, 0x78, 0x81, 0x3d, 0x26, 0xd7, 0x9c, 0x72, 0xcb, 0x1f, 0x08, 0x72, 0xcb, 0x2d, 0xb9,
|
|
- 0xe6, 0x60, 0x04, 0x39, 0x04, 0xf9, 0x01, 0x41, 0xe0, 0x9f, 0x90, 0x5f, 0x10, 0xd4, 0xab, 0x1f,
|
|
- 0x33, 0x43, 0x1a, 0x11, 0x04, 0xe4, 0xd2, 0xe8, 0xef, 0x51, 0xdf, 0xab, 0xaa, 0xbe, 0xfa, 0xbe,
|
|
- 0x2a, 0x68, 0xfb, 0x63, 0x1c, 0x8b, 0xad, 0x84, 0x51, 0x41, 0x51, 0x7d, 0xcc, 0x92, 0x60, 0xd8,
|
|
- 0xa2, 0x01, 0xd1, 0x88, 0xe1, 0xc7, 0x63, 0x22, 0x4e, 0xd3, 0xe3, 0xad, 0x80, 0x46, 0xdb, 0x67,
|
|
- 0xbe, 0xf0, 0xdf, 0x0f, 0x68, 0x2c, 0x7c, 0x12, 0x63, 0xc6, 0xb7, 0xd5, 0xc0, 0xed, 0xe4, 0x6c,
|
|
- 0xbc, 0x2d, 0xa6, 0x09, 0xe6, 0xfa, 0x6b, 0xc6, 0xdd, 0x1c, 0x53, 0x3a, 0x9e, 0xe0, 0x6d, 0x05,
|
|
- 0x1d, 0xa7, 0x27, 0xdb, 0x38, 0x4a, 0xc4, 0x54, 0x13, 0x9d, 0x5f, 0x54, 0x61, 0x63, 0x8f, 0x61,
|
|
- 0x5f, 0xe0, 0x3d, 0x2b, 0xcd, 0xc5, 0xdf, 0xa6, 0x98, 0x0b, 0xf4, 0x06, 0x74, 0x32, 0x0d, 0x1e,
|
|
- 0x09, 0x07, 0x95, 0x3b, 0x95, 0xcd, 0x96, 0xdb, 0xce, 0x70, 0x07, 0x21, 0xba, 0x0e, 0x0d, 0x7c,
|
|
- 0x81, 0x03, 0x49, 0xad, 0x2a, 0xea, 0xb2, 0x04, 0x0f, 0x42, 0x74, 0x0f, 0xda, 0x5c, 0x30, 0x12,
|
|
- 0x8f, 0xbd, 0x94, 0x63, 0x36, 0xa8, 0xdd, 0xa9, 0x6c, 0xb6, 0x77, 0x56, 0xb6, 0xa4, 0x4b, 0x5b,
|
|
- 0x23, 0x45, 0x38, 0xe2, 0x98, 0xb9, 0xc0, 0xb3, 0x7f, 0x74, 0x17, 0x1a, 0x21, 0x3e, 0x27, 0x01,
|
|
- 0xe6, 0x83, 0xfa, 0x9d, 0xda, 0x66, 0x7b, 0xa7, 0xa3, 0xd9, 0x1f, 0x2a, 0xa4, 0x6b, 0x89, 0xe8,
|
|
- 0x5d, 0x68, 0x72, 0x41, 0x99, 0x3f, 0xc6, 0x7c, 0xb0, 0xa4, 0x18, 0xbb, 0x56, 0xae, 0xc2, 0xba,
|
|
- 0x19, 0x19, 0xdd, 0x82, 0xda, 0xb3, 0xbd, 0x83, 0xc1, 0xb2, 0xd2, 0x0e, 0x86, 0x2b, 0xc1, 0x81,
|
|
- 0x2b, 0xd1, 0xe8, 0x4d, 0xe8, 0x72, 0x3f, 0x0e, 0x8f, 0xe9, 0x85, 0x97, 0x90, 0x30, 0xe6, 0x83,
|
|
- 0xc6, 0x9d, 0xca, 0x66, 0xd3, 0xed, 0x18, 0xe4, 0xa1, 0xc4, 0x39, 0x9f, 0xc3, 0xb5, 0x91, 0xf0,
|
|
- 0x99, 0x78, 0x89, 0xe8, 0x38, 0x47, 0xb0, 0xe1, 0xe2, 0x88, 0x9e, 0xbf, 0x54, 0x68, 0x07, 0xd0,
|
|
- 0x10, 0x24, 0xc2, 0x34, 0x15, 0x2a, 0xb4, 0x5d, 0xd7, 0x82, 0xce, 0xaf, 0x2a, 0x80, 0x1e, 0x5d,
|
|
- 0xe0, 0xe0, 0x90, 0xd1, 0x00, 0x73, 0xfe, 0x0f, 0x9a, 0xae, 0x77, 0xa0, 0x91, 0x68, 0x03, 0x06,
|
|
- 0x75, 0xc5, 0x6e, 0x66, 0xc1, 0x5a, 0x65, 0xa9, 0xce, 0x37, 0xb0, 0x3e, 0x22, 0xe3, 0xd8, 0x9f,
|
|
- 0xbc, 0x42, 0x7b, 0x37, 0x60, 0x99, 0x2b, 0x99, 0xca, 0xd4, 0xae, 0x6b, 0x20, 0xe7, 0x10, 0xd0,
|
|
- 0xd7, 0x3e, 0x11, 0xaf, 0x4e, 0x93, 0xf3, 0x3e, 0xac, 0x95, 0x24, 0xf2, 0x84, 0xc6, 0x1c, 0x2b,
|
|
- 0x03, 0x84, 0x2f, 0x52, 0xae, 0x84, 0x2d, 0xb9, 0x06, 0x72, 0x30, 0xac, 0x3f, 0x21, 0xdc, 0xb2,
|
|
- 0xe3, 0xbf, 0xc7, 0x84, 0x0d, 0x58, 0x3e, 0xa1, 0x2c, 0xf2, 0x85, 0xb5, 0x40, 0x43, 0x08, 0x41,
|
|
- 0xdd, 0x67, 0x63, 0x3e, 0xa8, 0xdd, 0xa9, 0x6d, 0xb6, 0x5c, 0xf5, 0x2f, 0x57, 0xe5, 0x8c, 0x1a,
|
|
- 0x63, 0xd7, 0x1b, 0xd0, 0x31, 0x71, 0xf7, 0x26, 0x84, 0x0b, 0xa5, 0xa7, 0xe3, 0xb6, 0x0d, 0x4e,
|
|
- 0x8e, 0x71, 0x28, 0x6c, 0x1c, 0x25, 0xe1, 0x4b, 0x6e, 0xf8, 0x1d, 0x68, 0x31, 0xcc, 0x69, 0xca,
|
|
- 0xe4, 0x36, 0xad, 0xaa, 0x79, 0x5f, 0xd7, 0xf3, 0xfe, 0x84, 0xc4, 0xe9, 0x85, 0x6b, 0x69, 0x6e,
|
|
- 0xce, 0x66, 0xb6, 0x90, 0xe0, 0x2f, 0xb3, 0x85, 0x3e, 0x87, 0x6b, 0x87, 0x7e, 0xca, 0x5f, 0xc6,
|
|
- 0x56, 0xe7, 0x0b, 0xb9, 0xfd, 0x78, 0x1a, 0xbd, 0xd4, 0xe0, 0x5f, 0x56, 0xa0, 0xb9, 0x97, 0xa4,
|
|
- 0x47, 0xdc, 0x1f, 0x63, 0xf4, 0x3a, 0xb4, 0x05, 0x15, 0xfe, 0xc4, 0x4b, 0x25, 0xa8, 0xd8, 0xeb,
|
|
- 0x2e, 0x28, 0x94, 0x66, 0x90, 0x61, 0xc7, 0x2c, 0x48, 0x52, 0xc3, 0x51, 0xbd, 0x53, 0xdb, 0xac,
|
|
- 0xbb, 0x6d, 0x8d, 0xd3, 0x2c, 0x5b, 0xb0, 0xa6, 0x68, 0x1e, 0x89, 0xbd, 0x33, 0xcc, 0x62, 0x3c,
|
|
- 0x89, 0x68, 0x88, 0xd5, 0xfa, 0xad, 0xbb, 0xab, 0x8a, 0x74, 0x10, 0x7f, 0x95, 0x11, 0xd0, 0x3f,
|
|
- 0xc1, 0x6a, 0xc6, 0x2f, 0x37, 0xa5, 0xe2, 0xae, 0x2b, 0xee, 0xbe, 0xe1, 0x3e, 0x32, 0x68, 0xe7,
|
|
- 0xff, 0xa1, 0xf7, 0xfc, 0x94, 0x51, 0x21, 0x26, 0x24, 0x1e, 0x3f, 0xf4, 0x85, 0x2f, 0xb3, 0x47,
|
|
- 0x82, 0x19, 0xa1, 0x21, 0x37, 0xd6, 0x5a, 0x10, 0xbd, 0x07, 0xab, 0x42, 0xf3, 0xe2, 0xd0, 0xb3,
|
|
- 0x3c, 0x55, 0xc5, 0xb3, 0x92, 0x11, 0x0e, 0x0d, 0xf3, 0xdb, 0xd0, 0xcb, 0x99, 0x65, 0xfe, 0x31,
|
|
- 0xf6, 0x76, 0x33, 0xec, 0x73, 0x12, 0x61, 0xe7, 0x5c, 0xc5, 0x4a, 0x4d, 0x32, 0x7a, 0x0f, 0x5a,
|
|
- 0x79, 0x1c, 0x2a, 0x6a, 0x85, 0xf4, 0xf4, 0x0a, 0xb1, 0xe1, 0x74, 0x9b, 0x59, 0x50, 0xbe, 0x84,
|
|
- 0xbe, 0xc8, 0x0c, 0xf7, 0x42, 0x5f, 0xf8, 0xe5, 0x45, 0x55, 0xf6, 0xca, 0xed, 0x89, 0x12, 0xec,
|
|
- 0x7c, 0x01, 0xad, 0x43, 0x12, 0x72, 0xad, 0x78, 0x00, 0x8d, 0x20, 0x65, 0x0c, 0xc7, 0xc2, 0xba,
|
|
- 0x6c, 0x40, 0xb4, 0x0e, 0x4b, 0x13, 0x12, 0x11, 0x61, 0xdc, 0xd4, 0x80, 0x43, 0x01, 0x9e, 0xe2,
|
|
- 0x88, 0xb2, 0xa9, 0x0a, 0xd8, 0x3a, 0x2c, 0x15, 0x27, 0x57, 0x03, 0xe8, 0x26, 0xb4, 0x22, 0xff,
|
|
- 0x22, 0x9b, 0x54, 0x49, 0x69, 0x46, 0xfe, 0x85, 0x36, 0x7e, 0x00, 0x8d, 0x13, 0x9f, 0x4c, 0x82,
|
|
- 0x58, 0x98, 0xa8, 0x58, 0x30, 0x57, 0x58, 0x2f, 0x2a, 0xfc, 0x5d, 0x15, 0xda, 0x5a, 0xa3, 0x36,
|
|
- 0x78, 0x1d, 0x96, 0x02, 0x3f, 0x38, 0xcd, 0x54, 0x2a, 0x00, 0xdd, 0xb5, 0x86, 0x54, 0x8b, 0x49,
|
|
- 0x38, 0xb7, 0xd4, 0x9a, 0xb6, 0x0d, 0xc0, 0x5f, 0xf8, 0x89, 0xb1, 0xad, 0x76, 0x09, 0x73, 0x4b,
|
|
- 0xf2, 0x68, 0x73, 0x3f, 0x84, 0x8e, 0x5e, 0x77, 0x66, 0x48, 0xfd, 0x92, 0x21, 0x6d, 0xcd, 0xa5,
|
|
- 0x07, 0xbd, 0x09, 0xdd, 0x94, 0x63, 0xef, 0x94, 0x60, 0xe6, 0xb3, 0xe0, 0x74, 0x3a, 0x58, 0xd2,
|
|
- 0x67, 0x64, 0xca, 0xf1, 0xbe, 0xc5, 0xa1, 0x1d, 0x58, 0x92, 0xe9, 0x8f, 0x0f, 0x96, 0xd5, 0x71,
|
|
- 0x7c, 0xab, 0x28, 0x52, 0xb9, 0xba, 0xa5, 0xbe, 0x8f, 0x62, 0xc1, 0xa6, 0xae, 0x66, 0x1d, 0x7e,
|
|
- 0x0a, 0x90, 0x23, 0xd1, 0x0a, 0xd4, 0xce, 0xf0, 0xd4, 0xec, 0x43, 0xf9, 0x2b, 0x83, 0x73, 0xee,
|
|
- 0x4f, 0x52, 0x1b, 0x75, 0x0d, 0x7c, 0x5e, 0xfd, 0xb4, 0xe2, 0x04, 0xd0, 0xdf, 0x9d, 0x9c, 0x11,
|
|
- 0x5a, 0x18, 0xbe, 0x0e, 0x4b, 0x91, 0xff, 0x0d, 0x65, 0x36, 0x92, 0x0a, 0x50, 0x58, 0x12, 0x53,
|
|
- 0x66, 0x45, 0x28, 0x00, 0xf5, 0xa0, 0x4a, 0x13, 0x15, 0xaf, 0x96, 0x5b, 0xa5, 0x49, 0xae, 0xa8,
|
|
- 0x5e, 0x50, 0xe4, 0xfc, 0xb9, 0x0e, 0x90, 0x6b, 0x41, 0x2e, 0x0c, 0x09, 0xf5, 0x38, 0x66, 0xb2,
|
|
- 0x04, 0xf1, 0x8e, 0xa7, 0x02, 0x73, 0x8f, 0xe1, 0x20, 0x65, 0x9c, 0x9c, 0xcb, 0xf9, 0x93, 0x6e,
|
|
- 0x5f, 0xd3, 0x6e, 0xcf, 0xd8, 0xe6, 0x5e, 0x27, 0x74, 0xa4, 0xc7, 0xed, 0xca, 0x61, 0xae, 0x1d,
|
|
- 0x85, 0x0e, 0xe0, 0x5a, 0x2e, 0x33, 0x2c, 0x88, 0xab, 0x5e, 0x25, 0x6e, 0x2d, 0x13, 0x17, 0xe6,
|
|
- 0xa2, 0x1e, 0xc1, 0x1a, 0xa1, 0xde, 0xb7, 0x29, 0x4e, 0x4b, 0x82, 0x6a, 0x57, 0x09, 0x5a, 0x25,
|
|
- 0xf4, 0x3f, 0xd4, 0x80, 0x5c, 0xcc, 0x21, 0xdc, 0x28, 0x78, 0x29, 0xb7, 0x7b, 0x41, 0x58, 0xfd,
|
|
- 0x2a, 0x61, 0x1b, 0x99, 0x55, 0x32, 0x1f, 0xe4, 0x12, 0xff, 0x0d, 0x36, 0x08, 0xf5, 0x5e, 0xf8,
|
|
- 0x44, 0xcc, 0x8a, 0x5b, 0xfa, 0x11, 0x27, 0xe5, 0xa1, 0x5b, 0x96, 0xa5, 0x9d, 0x8c, 0x30, 0x1b,
|
|
- 0x97, 0x9c, 0x5c, 0xfe, 0x11, 0x27, 0x9f, 0xaa, 0x01, 0xb9, 0x98, 0x07, 0xb0, 0x4a, 0xe8, 0xac,
|
|
- 0x35, 0x8d, 0xab, 0x84, 0xf4, 0x09, 0x2d, 0x5b, 0xb2, 0x0b, 0xab, 0x1c, 0x07, 0x82, 0xb2, 0xe2,
|
|
- 0x22, 0x68, 0x5e, 0x25, 0x62, 0xc5, 0xf0, 0x67, 0x32, 0x9c, 0xff, 0x81, 0xce, 0x7e, 0x3a, 0xc6,
|
|
- 0x62, 0x72, 0x9c, 0x25, 0x83, 0x57, 0x96, 0x7f, 0x9c, 0xbf, 0x56, 0xa1, 0xbd, 0x37, 0x66, 0x34,
|
|
- 0x4d, 0x4a, 0x39, 0x59, 0x6f, 0xd2, 0xd9, 0x9c, 0xac, 0x58, 0x54, 0x4e, 0xd6, 0xcc, 0x1f, 0x41,
|
|
- 0x27, 0x52, 0x5b, 0xd7, 0xf0, 0xeb, 0x3c, 0xb4, 0x3a, 0xb7, 0xa9, 0xdd, 0x76, 0x54, 0x48, 0x66,
|
|
- 0x5b, 0x00, 0x09, 0x09, 0xb9, 0x19, 0xa3, 0xd3, 0x51, 0xdf, 0x54, 0x84, 0x36, 0x45, 0xbb, 0xad,
|
|
- 0x24, 0xcb, 0xd6, 0xf7, 0xa0, 0x7d, 0x2c, 0x83, 0x64, 0x06, 0x94, 0x92, 0x51, 0x1e, 0x3d, 0x17,
|
|
- 0x8e, 0xf3, 0x4d, 0xb8, 0x0f, 0xdd, 0x53, 0x1d, 0x32, 0x33, 0x48, 0xaf, 0xa1, 0x37, 0x8d, 0x27,
|
|
- 0xb9, 0xbf, 0x5b, 0xc5, 0xc8, 0xea, 0x09, 0xe8, 0x9c, 0x16, 0x50, 0xc3, 0x11, 0xac, 0xce, 0xb1,
|
|
- 0x2c, 0xc8, 0x41, 0x9b, 0xc5, 0x1c, 0xd4, 0xde, 0x41, 0x5a, 0x51, 0x71, 0x64, 0x31, 0x2f, 0xfd,
|
|
- 0xac, 0x0a, 0xbd, 0x83, 0x58, 0x60, 0x76, 0xe2, 0x07, 0x58, 0x5b, 0x8c, 0xa0, 0x1e, 0xfb, 0x11,
|
|
- 0x36, 0x32, 0xd5, 0x3f, 0xba, 0x01, 0x4d, 0x76, 0xa1, 0x53, 0x88, 0x99, 0xd1, 0x06, 0xbb, 0x50,
|
|
- 0xa9, 0x01, 0xbd, 0x06, 0xc0, 0x2e, 0xbc, 0xc4, 0x0f, 0xce, 0xb0, 0x89, 0x61, 0xdd, 0x6d, 0xb1,
|
|
- 0x8b, 0x43, 0x8d, 0x90, 0x8b, 0x81, 0x5d, 0x78, 0x98, 0x31, 0xca, 0xb8, 0xc9, 0x56, 0x4d, 0x76,
|
|
- 0xf1, 0x48, 0xc1, 0x66, 0x6c, 0xc8, 0x68, 0x92, 0xe0, 0x50, 0x65, 0x69, 0x35, 0xf6, 0xa1, 0x46,
|
|
- 0x48, 0xad, 0xc2, 0x6a, 0x5d, 0xd6, 0x5a, 0x45, 0xae, 0x55, 0xe4, 0x5a, 0x1b, 0x7a, 0xa4, 0x28,
|
|
- 0x6a, 0x15, 0x99, 0xd6, 0xa6, 0xd6, 0x2a, 0x0a, 0x5a, 0x45, 0xae, 0xb5, 0x65, 0xc7, 0x1a, 0xad,
|
|
- 0xce, 0x6f, 0xaa, 0xd0, 0x78, 0x1e, 0xa8, 0x49, 0x41, 0x77, 0xa0, 0x8d, 0xb9, 0xf0, 0x8f, 0x27,
|
|
- 0x84, 0x9f, 0xe2, 0xd0, 0x2c, 0xf3, 0x22, 0x4a, 0xda, 0xc8, 0xa7, 0xb1, 0xc7, 0xe5, 0x09, 0x6e,
|
|
- 0x22, 0xc3, 0xa7, 0xf1, 0x48, 0x9e, 0xe0, 0x86, 0xc4, 0x70, 0x70, 0x6e, 0xd7, 0x3a, 0x9f, 0xc6,
|
|
- 0x2e, 0x0e, 0xce, 0xa5, 0x7d, 0x27, 0x24, 0x56, 0x39, 0xe6, 0x9e, 0x8d, 0xca, 0x09, 0x89, 0x65,
|
|
- 0xfe, 0xb8, 0x57, 0x24, 0xee, 0x98, 0xa0, 0x58, 0xe2, 0x8e, 0xf2, 0x4c, 0xa6, 0x01, 0x49, 0x35,
|
|
- 0x41, 0x69, 0x4a, 0x84, 0xa4, 0xaa, 0xc3, 0x79, 0x42, 0x39, 0x36, 0x01, 0xd1, 0x80, 0xf4, 0x57,
|
|
- 0xfd, 0xe8, 0x31, 0x3a, 0x1a, 0x2d, 0x85, 0x51, 0x83, 0x6e, 0x40, 0x73, 0xe2, 0x73, 0xe1, 0xf9,
|
|
- 0xc1, 0x99, 0x09, 0x46, 0x43, 0xc2, 0x0f, 0x82, 0x33, 0x59, 0xdd, 0xcb, 0x82, 0x1c, 0xc7, 0x03,
|
|
- 0x50, 0x04, 0x03, 0xa9, 0xaa, 0x65, 0x42, 0x39, 0x89, 0xc7, 0x83, 0xb6, 0xa9, 0x5a, 0x34, 0xe8,
|
|
- 0xa4, 0xd0, 0x38, 0x0a, 0x75, 0xec, 0xf2, 0xc1, 0x95, 0xd9, 0xc1, 0x36, 0xf6, 0x26, 0x60, 0x06,
|
|
- 0x34, 0x6b, 0x45, 0x9f, 0x08, 0x26, 0x62, 0x4d, 0x76, 0xa1, 0x13, 0xbe, 0x99, 0x52, 0x43, 0xac,
|
|
- 0xdb, 0x29, 0xd5, 0x44, 0xe7, 0x0f, 0x15, 0xe8, 0xfc, 0x3b, 0x16, 0x2f, 0x28, 0x3b, 0xb3, 0xf9,
|
|
- 0x00, 0x88, 0x5d, 0xd6, 0xdc, 0x9c, 0x75, 0xa6, 0x3c, 0x2b, 0x2f, 0x77, 0xb7, 0xc0, 0x87, 0x5e,
|
|
- 0x87, 0x9a, 0x08, 0x12, 0xb3, 0x73, 0x4c, 0x6b, 0x68, 0x96, 0x82, 0x2b, 0x29, 0xe8, 0x0d, 0xa8,
|
|
- 0x8b, 0x20, 0xf9, 0xd8, 0xa4, 0x8a, 0x19, 0x0e, 0x45, 0x92, 0x32, 0xd2, 0x30, 0x29, 0xb7, 0x97,
|
|
- 0x26, 0x24, 0xae, 0xa4, 0x48, 0x19, 0x69, 0x98, 0x7c, 0xac, 0x66, 0x76, 0x8e, 0x43, 0x91, 0x9c,
|
|
- 0x9f, 0x56, 0x60, 0x63, 0xb6, 0xfb, 0x30, 0xbd, 0xd2, 0x47, 0xd0, 0x09, 0x54, 0xd2, 0x28, 0x25,
|
|
- 0xc6, 0xd5, 0xb9, 0x74, 0xe2, 0xb6, 0x83, 0x42, 0x2e, 0xfd, 0x04, 0xba, 0xb1, 0x0e, 0x4f, 0x29,
|
|
- 0x3f, 0x9a, 0xe4, 0x50, 0x8c, 0x9c, 0xdb, 0x89, 0x0b, 0x90, 0x13, 0x02, 0xfa, 0x9a, 0x11, 0x81,
|
|
- 0x47, 0x82, 0x61, 0x3f, 0x7a, 0x15, 0x5d, 0x30, 0x82, 0xba, 0x2a, 0x99, 0x6b, 0xaa, 0xc9, 0x53,
|
|
- 0xff, 0xce, 0x3b, 0xb0, 0x56, 0xd2, 0x62, 0x7c, 0x5d, 0x81, 0xda, 0xc4, 0x2c, 0x9f, 0xae, 0x2b,
|
|
- 0x7f, 0x1d, 0x1f, 0x56, 0x5d, 0xec, 0x87, 0xaf, 0xce, 0x1a, 0xa3, 0xa2, 0x96, 0xab, 0xd8, 0x04,
|
|
- 0x54, 0x54, 0x61, 0x4c, 0xb1, 0x56, 0x57, 0x0a, 0x56, 0x3f, 0x83, 0xd5, 0x3d, 0xb9, 0x8b, 0x46,
|
|
- 0x22, 0x24, 0xf1, 0xab, 0x68, 0xdb, 0xff, 0x0f, 0xd6, 0x9e, 0x8b, 0xe9, 0xd7, 0x52, 0x18, 0x27,
|
|
- 0xdf, 0xe1, 0x57, 0xe4, 0x1f, 0xa3, 0x2f, 0xac, 0x7f, 0x8c, 0xbe, 0x90, 0xdb, 0x32, 0xa0, 0x93,
|
|
- 0x34, 0x8a, 0xd5, 0x12, 0xed, 0xba, 0x06, 0x72, 0x76, 0xa1, 0xa3, 0x1b, 0xb9, 0xa7, 0x34, 0x4c,
|
|
- 0x27, 0x78, 0xe1, 0x31, 0x70, 0x1b, 0x20, 0xf1, 0x99, 0x1f, 0x61, 0x81, 0x19, 0x57, 0x25, 0x5f,
|
|
- 0xcb, 0x2d, 0x60, 0x9c, 0x9f, 0x57, 0x61, 0x5d, 0xdf, 0xcb, 0x8d, 0xf4, 0x75, 0x94, 0x75, 0x61,
|
|
- 0x08, 0xcd, 0x53, 0xca, 0x45, 0x41, 0x60, 0x06, 0x4b, 0x13, 0xc3, 0xd8, 0x4a, 0x93, 0xbf, 0xa5,
|
|
- 0xcb, 0xb2, 0xda, 0xd5, 0x97, 0x65, 0x73, 0xd7, 0x61, 0xf5, 0xf9, 0xeb, 0x30, 0x99, 0x00, 0x2d,
|
|
- 0x13, 0xd1, 0xc7, 0x4c, 0xcb, 0x6d, 0x19, 0xcc, 0x41, 0x88, 0xee, 0x42, 0x7f, 0x2c, 0xad, 0xf4,
|
|
- 0x4e, 0x29, 0x3d, 0xf3, 0x12, 0x5f, 0x9c, 0xaa, 0xc4, 0xda, 0x72, 0xbb, 0x0a, 0xbd, 0x4f, 0xe9,
|
|
- 0xd9, 0xa1, 0x2f, 0x4e, 0xd1, 0x67, 0xd0, 0x33, 0xbd, 0x48, 0xa4, 0x42, 0xc4, 0x4d, 0x05, 0x66,
|
|
- 0x76, 0x51, 0x31, 0x7a, 0x6e, 0xf7, 0xac, 0x00, 0x71, 0xe7, 0x3a, 0x5c, 0x7b, 0x88, 0xb9, 0x60,
|
|
- 0x74, 0x5a, 0x0e, 0x8c, 0xf3, 0x2f, 0x00, 0x07, 0x79, 0xfe, 0xf9, 0xa0, 0x08, 0x99, 0xac, 0xb5,
|
|
- 0xb2, 0xa5, 0xaf, 0x45, 0x33, 0x82, 0x5b, 0xe0, 0x71, 0xb6, 0x60, 0xd9, 0xa5, 0xa9, 0x3c, 0x11,
|
|
- 0xdf, 0xb2, 0x7f, 0x66, 0x5c, 0xc7, 0x8c, 0x53, 0x48, 0xd7, 0xd0, 0x9c, 0x7d, 0x7b, 0x8f, 0x92,
|
|
- 0x8b, 0x33, 0x53, 0xb4, 0x05, 0xad, 0x2c, 0x13, 0x9a, 0xac, 0x32, 0xaf, 0x3a, 0x67, 0x71, 0xfe,
|
|
- 0x1b, 0xd6, 0xb4, 0x24, 0x2d, 0xd9, 0x8a, 0x79, 0x0b, 0x96, 0x99, 0x35, 0xa3, 0x92, 0xdf, 0x87,
|
|
- 0x1a, 0x26, 0x43, 0x43, 0xb7, 0xa4, 0xb2, 0x80, 0xe1, 0xc8, 0x1e, 0x9b, 0x4d, 0x37, 0x47, 0xc8,
|
|
- 0x68, 0x3d, 0x21, 0x5c, 0xe4, 0x6e, 0xda, 0x68, 0xad, 0xc1, 0xaa, 0x24, 0x94, 0x34, 0x3a, 0xff,
|
|
- 0x0b, 0x6b, 0xcf, 0xe2, 0x09, 0x89, 0xf1, 0xde, 0xe1, 0xd1, 0x53, 0x9c, 0x65, 0x05, 0x04, 0x75,
|
|
- 0x75, 0xde, 0x55, 0x94, 0x74, 0xf5, 0x2f, 0xb7, 0x49, 0x7c, 0xec, 0x05, 0x49, 0xca, 0xcd, 0xf5,
|
|
- 0xe4, 0x72, 0x7c, 0xbc, 0x97, 0xa4, 0x5c, 0x9e, 0x81, 0xb2, 0xd6, 0xa4, 0xf1, 0x64, 0xaa, 0xf6,
|
|
- 0x4a, 0xd3, 0x6d, 0x04, 0x49, 0xfa, 0x2c, 0x9e, 0x4c, 0x9d, 0x7f, 0x56, 0x17, 0x32, 0x18, 0x87,
|
|
- 0xae, 0x1f, 0x87, 0x34, 0x7a, 0x88, 0xcf, 0x0b, 0x1a, 0xb2, 0xe6, 0xdf, 0xe6, 0x84, 0xef, 0x2b,
|
|
- 0xd0, 0x79, 0x30, 0xc6, 0xb1, 0x78, 0x88, 0x85, 0x4f, 0x26, 0xaa, 0xc1, 0x3f, 0xc7, 0x8c, 0x13,
|
|
- 0x1a, 0x9b, 0x85, 0x6f, 0x41, 0xf4, 0x3a, 0xb4, 0x49, 0x4c, 0x84, 0x17, 0xfa, 0x38, 0xa2, 0xb1,
|
|
- 0x89, 0x02, 0x48, 0xd4, 0x43, 0x85, 0x41, 0xef, 0x40, 0x5f, 0x5f, 0x1f, 0x7b, 0xa7, 0x7e, 0x1c,
|
|
- 0x4e, 0xe4, 0x96, 0xd3, 0xd7, 0x69, 0x3d, 0x8d, 0xde, 0x37, 0x58, 0xf4, 0x2e, 0xac, 0x98, 0x0d,
|
|
- 0x91, 0x73, 0xd6, 0x15, 0x67, 0xdf, 0xe0, 0x4b, 0xac, 0x69, 0x92, 0x50, 0x26, 0xb8, 0xc7, 0x71,
|
|
- 0x10, 0xd0, 0x28, 0x31, 0xdd, 0x71, 0xdf, 0xe2, 0x47, 0x1a, 0xed, 0x8c, 0x61, 0xed, 0xb1, 0xf4,
|
|
- 0xd3, 0x78, 0x92, 0x4f, 0x70, 0x2f, 0xc2, 0x91, 0x77, 0x3c, 0xa1, 0xc1, 0x99, 0x27, 0xd3, 0x94,
|
|
- 0x89, 0xb0, 0xac, 0xbf, 0x77, 0x25, 0x72, 0x44, 0xbe, 0x53, 0x17, 0x41, 0x92, 0xeb, 0x94, 0x8a,
|
|
- 0x64, 0x92, 0x8e, 0xbd, 0x84, 0xd1, 0x63, 0x6c, 0x5c, 0xec, 0x47, 0x38, 0xda, 0xd7, 0xf8, 0x43,
|
|
- 0x89, 0x76, 0x7e, 0x5b, 0x81, 0xf5, 0xb2, 0x26, 0x93, 0x74, 0xb7, 0x61, 0xbd, 0xac, 0xca, 0xd4,
|
|
- 0x82, 0xba, 0x9e, 0x58, 0x2d, 0x2a, 0xd4, 0x55, 0xe1, 0x27, 0xd0, 0x55, 0x6f, 0x0a, 0x5e, 0xa8,
|
|
- 0x25, 0x95, 0x8f, 0xb9, 0xe2, 0xbc, 0xb8, 0x1d, 0xbf, 0x38, 0x4b, 0x9f, 0xc1, 0x0d, 0xe3, 0xbe,
|
|
- 0x37, 0x6f, 0xb6, 0x5e, 0x10, 0x1b, 0x86, 0xe1, 0xe9, 0x8c, 0xf5, 0x4f, 0x60, 0x90, 0xa3, 0x76,
|
|
- 0xa7, 0x0a, 0x69, 0x63, 0xf5, 0x01, 0xac, 0xcd, 0x38, 0xfb, 0x20, 0x0c, 0x99, 0xda, 0xa0, 0x75,
|
|
- 0x77, 0x11, 0xc9, 0xb9, 0x0f, 0xd7, 0x47, 0x58, 0xe8, 0x68, 0xf8, 0xc2, 0x34, 0xa6, 0x5a, 0xd8,
|
|
- 0x0a, 0xd4, 0x46, 0x38, 0x50, 0xce, 0xd7, 0x5c, 0xf9, 0x2b, 0x17, 0xe0, 0x11, 0xc7, 0x81, 0xf2,
|
|
- 0xb2, 0xe6, 0xaa, 0x7f, 0xe7, 0xd7, 0x15, 0x68, 0x98, 0x34, 0x29, 0x53, 0x7d, 0xc8, 0xc8, 0x39,
|
|
- 0x66, 0x66, 0xe9, 0x19, 0x08, 0xbd, 0x0d, 0x3d, 0xfd, 0xe7, 0xd1, 0x44, 0x10, 0x9a, 0x25, 0xdf,
|
|
- 0xae, 0xc6, 0x3e, 0xd3, 0x48, 0x75, 0x5d, 0xac, 0x6e, 0x43, 0xcd, 0xc5, 0x83, 0x81, 0xd4, 0x9d,
|
|
- 0x2f, 0x97, 0x99, 0x41, 0x25, 0xdb, 0x96, 0x6b, 0x20, 0xb9, 0xd4, 0xad, 0xbc, 0x25, 0x25, 0xcf,
|
|
- 0x82, 0x72, 0xa9, 0x47, 0x34, 0x8d, 0x85, 0x97, 0x50, 0x12, 0x0b, 0x93, 0x5d, 0x41, 0xa1, 0x0e,
|
|
- 0x25, 0xc6, 0xf9, 0x49, 0x05, 0x96, 0xf5, 0x93, 0x09, 0xea, 0x41, 0x35, 0x3b, 0xe3, 0xaa, 0x44,
|
|
- 0xd5, 0x0b, 0x4a, 0x97, 0x3e, 0xd7, 0xd4, 0xbf, 0xdc, 0xc7, 0xe7, 0x91, 0xce, 0xd4, 0xc6, 0xb4,
|
|
- 0xf3, 0x48, 0xa5, 0xe8, 0xb7, 0xa1, 0x97, 0x1f, 0x95, 0x8a, 0xae, 0x4d, 0xec, 0x66, 0x58, 0xc5,
|
|
- 0x76, 0xa9, 0xa5, 0xce, 0x7f, 0x01, 0xe4, 0x4f, 0x07, 0x32, 0xe4, 0x69, 0x66, 0x8c, 0xfc, 0x95,
|
|
- 0x98, 0x71, 0x76, 0xc8, 0xca, 0x5f, 0x74, 0x17, 0x7a, 0x7e, 0x18, 0x12, 0x39, 0xdc, 0x9f, 0x3c,
|
|
- 0x26, 0x61, 0xb6, 0x49, 0xcb, 0x58, 0xe7, 0xf7, 0x15, 0xe8, 0xef, 0xd1, 0x64, 0xfa, 0xaf, 0x64,
|
|
- 0x82, 0x0b, 0x19, 0x44, 0x19, 0x69, 0xce, 0x58, 0xf9, 0xaf, 0xab, 0xff, 0x09, 0xd6, 0x5b, 0x4b,
|
|
- 0xcf, 0x6c, 0x53, 0x22, 0xd4, 0xb6, 0xb2, 0xc4, 0xec, 0x16, 0xb6, 0xab, 0x89, 0x4f, 0x69, 0xa8,
|
|
- 0x9a, 0xb4, 0x90, 0x30, 0x2f, 0xbb, 0x73, 0xed, 0xba, 0x8d, 0x90, 0x30, 0x45, 0x32, 0x8e, 0x2c,
|
|
- 0xa9, 0x6b, 0xff, 0xa2, 0x23, 0xcb, 0x1a, 0x23, 0x1d, 0xd9, 0x80, 0x65, 0x7a, 0x72, 0xc2, 0xb1,
|
|
- 0x50, 0xdd, 0x43, 0xcd, 0x35, 0x50, 0x96, 0xe6, 0x9a, 0x85, 0x34, 0x77, 0x0d, 0xd6, 0xd4, 0x03,
|
|
- 0xd3, 0x73, 0xe6, 0x07, 0x24, 0x1e, 0xdb, 0x54, 0xbc, 0x0e, 0x68, 0x24, 0x68, 0x32, 0x83, 0xdd,
|
|
- 0x82, 0x55, 0x73, 0xe6, 0x1c, 0xfe, 0xe7, 0xc8, 0xba, 0x7e, 0x03, 0x9a, 0x12, 0xf4, 0x18, 0xfe,
|
|
- 0xd6, 0x26, 0x46, 0x43, 0x76, 0xde, 0x85, 0x8e, 0xfe, 0x35, 0x69, 0x20, 0x67, 0xe5, 0x65, 0x56,
|
|
- 0xbe, 0xf3, 0xa7, 0x15, 0x93, 0x6e, 0xcd, 0x45, 0x0e, 0x7a, 0x0c, 0xfd, 0x99, 0x87, 0x41, 0x64,
|
|
- 0x6e, 0xf6, 0x16, 0xbf, 0x17, 0x0e, 0x37, 0xb6, 0xf4, 0x43, 0xe3, 0x96, 0x7d, 0x68, 0xdc, 0x7a,
|
|
- 0x14, 0x25, 0x62, 0x8a, 0x1e, 0x41, 0xaf, 0xfc, 0x84, 0x86, 0x6e, 0xda, 0x1a, 0x64, 0xc1, 0xc3,
|
|
- 0xda, 0xa5, 0x62, 0x1e, 0x43, 0x7f, 0xe6, 0x35, 0xcd, 0xda, 0xb3, 0xf8, 0x91, 0xed, 0x52, 0x41,
|
|
- 0xf7, 0xa1, 0x5d, 0x78, 0x3e, 0x43, 0x03, 0x2d, 0x64, 0xfe, 0x45, 0xed, 0x52, 0x01, 0x7b, 0xd0,
|
|
- 0x2d, 0xbd, 0x68, 0xa1, 0xa1, 0xf1, 0x67, 0xc1, 0x33, 0xd7, 0xa5, 0x42, 0x76, 0xa1, 0x5d, 0x78,
|
|
- 0x58, 0xb2, 0x56, 0xcc, 0xbf, 0x5e, 0x0d, 0x6f, 0x2c, 0xa0, 0x98, 0xe9, 0xdc, 0x87, 0x6e, 0xe9,
|
|
- 0x19, 0xc8, 0x1a, 0xb2, 0xe8, 0x09, 0x6a, 0x78, 0x73, 0x21, 0xcd, 0x48, 0x7a, 0x0c, 0xfd, 0x99,
|
|
- 0x47, 0x21, 0x1b, 0xdc, 0xc5, 0x6f, 0x45, 0x97, 0xba, 0xf5, 0x95, 0x9a, 0xec, 0x42, 0xbb, 0x55,
|
|
- 0x98, 0xec, 0xf9, 0x27, 0xa0, 0xe1, 0xad, 0xc5, 0x44, 0x63, 0xd5, 0x23, 0xe8, 0x95, 0x5f, 0x7f,
|
|
- 0xac, 0xb0, 0x85, 0x6f, 0x42, 0x57, 0xaf, 0x9c, 0xd2, 0x43, 0x50, 0xbe, 0x72, 0x16, 0xbd, 0x0f,
|
|
- 0x5d, 0x2a, 0xe8, 0x01, 0x80, 0x69, 0xae, 0x42, 0x12, 0x67, 0x53, 0x36, 0xd7, 0xd4, 0x65, 0x53,
|
|
- 0xb6, 0xa0, 0x11, 0xbb, 0x0f, 0xa0, 0x7b, 0xa2, 0x90, 0xa6, 0x02, 0x5d, 0xb7, 0x66, 0xcc, 0x34,
|
|
- 0x62, 0xc3, 0xc1, 0x3c, 0x61, 0x4e, 0x00, 0x66, 0xec, 0x65, 0x04, 0x7c, 0x09, 0x90, 0xf7, 0x5a,
|
|
- 0x56, 0xc0, 0x5c, 0xf7, 0x75, 0x45, 0x0c, 0x3a, 0xc5, 0xce, 0x0a, 0x19, 0x5f, 0x17, 0x74, 0x5b,
|
|
- 0x57, 0x88, 0xe8, 0xcf, 0x54, 0xce, 0xe5, 0xc5, 0x36, 0x5b, 0x50, 0x0f, 0xe7, 0xaa, 0x67, 0xf4,
|
|
- 0x09, 0x74, 0x8a, 0x25, 0xb3, 0xb5, 0x62, 0x41, 0x19, 0x3d, 0x2c, 0x95, 0xcd, 0xe8, 0x3e, 0xf4,
|
|
- 0xca, 0x05, 0x31, 0x2a, 0xec, 0x8b, 0xb9, 0x32, 0x79, 0xb8, 0x32, 0x73, 0xd1, 0xc1, 0xd1, 0x87,
|
|
- 0x00, 0x79, 0xe1, 0x6c, 0xc3, 0x37, 0x57, 0x4a, 0xcf, 0x68, 0xfd, 0x12, 0x7a, 0x85, 0xbc, 0x2d,
|
|
- 0x7b, 0xc2, 0xeb, 0x25, 0x87, 0xf3, 0x6c, 0x3e, 0x34, 0x15, 0x56, 0x29, 0x6d, 0x3f, 0x80, 0x4e,
|
|
- 0xf1, 0x8c, 0xb0, 0xde, 0x2e, 0x38, 0x37, 0xae, 0x4a, 0x7a, 0x85, 0xf3, 0xc4, 0xae, 0xdd, 0xf9,
|
|
- 0x23, 0xe6, 0xaa, 0xa4, 0x57, 0xea, 0x47, 0x6d, 0xae, 0x59, 0xd4, 0xa4, 0x5e, 0x75, 0x14, 0x94,
|
|
- 0x9b, 0x37, 0x1b, 0xfd, 0x85, 0x2d, 0xdd, 0x55, 0x6b, 0xb0, 0xd8, 0xa7, 0xd8, 0x78, 0x2c, 0xe8,
|
|
- 0x5d, 0x7e, 0x24, 0x27, 0x14, 0x7b, 0x91, 0x42, 0x4e, 0x58, 0xd0, 0xa2, 0x5c, 0x2a, 0x68, 0x1f,
|
|
- 0xfa, 0x8f, 0x6d, 0x99, 0x69, 0x4a, 0x60, 0x63, 0xce, 0x82, 0x92, 0x7f, 0x38, 0x5c, 0x44, 0x32,
|
|
- 0xb3, 0xfc, 0x15, 0xac, 0xce, 0x95, 0xbf, 0xe8, 0x76, 0x76, 0xef, 0xbe, 0xb0, 0x2e, 0xbe, 0xd4,
|
|
- 0xac, 0x03, 0x58, 0x99, 0xad, 0x7e, 0xd1, 0x6b, 0x66, 0xd2, 0x17, 0x57, 0xc5, 0x97, 0x8a, 0xfa,
|
|
- 0x0c, 0x9a, 0xb6, 0xda, 0x42, 0xe6, 0x7d, 0x63, 0xa6, 0xfa, 0xba, 0x6c, 0xe8, 0x6e, 0xe7, 0xfb,
|
|
- 0x1f, 0x6e, 0x57, 0xfe, 0xf8, 0xc3, 0xed, 0xca, 0x5f, 0x7e, 0xb8, 0x5d, 0x39, 0x5e, 0x56, 0xd4,
|
|
- 0x0f, 0xff, 0x16, 0x00, 0x00, 0xff, 0xff, 0x9a, 0x16, 0x45, 0x76, 0xe7, 0x24, 0x00, 0x00,
|
|
+ // 3214 bytes of a gzipped FileDescriptorProto
|
|
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x39, 0xcb, 0x6e, 0x1c, 0xc7,
|
|
+ 0x76, 0x98, 0x07, 0x39, 0x33, 0x67, 0x5e, 0x9c, 0x22, 0x45, 0x8d, 0x46, 0xb2, 0x2c, 0xb7, 0x6d,
|
|
+ 0x99, 0x8e, 0x63, 0xd2, 0xa2, 0x0d, 0x3f, 0xe1, 0x08, 0x22, 0xa5, 0x88, 0x8c, 0x25, 0x8b, 0x69,
|
|
+ 0x8a, 0x71, 0x8c, 0x20, 0x68, 0x34, 0xbb, 0x8b, 0xc3, 0x32, 0xa7, 0xbb, 0xda, 0x55, 0xd5, 0x14,
|
|
+ 0xc7, 0x01, 0xb2, 0x4c, 0xb6, 0x59, 0x65, 0x97, 0x1f, 0x08, 0x92, 0x55, 0x76, 0xc9, 0x36, 0x0b,
|
|
+ 0x23, 0xc8, 0xe2, 0x7e, 0xc1, 0xc5, 0x85, 0x3f, 0xe1, 0x7e, 0xc1, 0x45, 0xbd, 0xfa, 0x31, 0x33,
|
|
+ 0xa4, 0x71, 0x09, 0x01, 0x77, 0xd3, 0xe8, 0xf3, 0xa8, 0xf3, 0xaa, 0xaa, 0x53, 0xe7, 0x54, 0x41,
|
|
+ 0xdb, 0x1f, 0xe3, 0x58, 0x6c, 0x26, 0x8c, 0x0a, 0x8a, 0xea, 0x63, 0x96, 0x04, 0xa3, 0x16, 0x0d,
|
|
+ 0x88, 0x46, 0x8c, 0x3e, 0x1d, 0x13, 0x71, 0x9a, 0x1e, 0x6f, 0x06, 0x34, 0xda, 0x3a, 0xf3, 0x85,
|
|
+ 0xff, 0x61, 0x40, 0x63, 0xe1, 0x93, 0x18, 0x33, 0xbe, 0xa5, 0x06, 0x6e, 0x25, 0x67, 0xe3, 0x2d,
|
|
+ 0x31, 0x4d, 0x30, 0xd7, 0x5f, 0x33, 0xee, 0xf6, 0x98, 0xd2, 0xf1, 0x04, 0x6f, 0x29, 0xe8, 0x38,
|
|
+ 0x3d, 0xd9, 0xc2, 0x51, 0x22, 0xa6, 0x9a, 0xe8, 0xfc, 0x5b, 0x15, 0xd6, 0x77, 0x19, 0xf6, 0x05,
|
|
+ 0xde, 0xb5, 0xd2, 0x5c, 0xfc, 0x63, 0x8a, 0xb9, 0x40, 0x6f, 0x41, 0x27, 0xd3, 0xe0, 0x91, 0x70,
|
|
+ 0x58, 0xb9, 0x57, 0xd9, 0x68, 0xb9, 0xed, 0x0c, 0xb7, 0x1f, 0xa2, 0x9b, 0xd0, 0xc0, 0x17, 0x38,
|
|
+ 0x90, 0xd4, 0xaa, 0xa2, 0x2e, 0x4b, 0x70, 0x3f, 0x44, 0x0f, 0xa0, 0xcd, 0x05, 0x23, 0xf1, 0xd8,
|
|
+ 0x4b, 0x39, 0x66, 0xc3, 0xda, 0xbd, 0xca, 0x46, 0x7b, 0x7b, 0x65, 0x53, 0xba, 0xb4, 0x79, 0xa8,
|
|
+ 0x08, 0x47, 0x1c, 0x33, 0x17, 0x78, 0xf6, 0x8f, 0xee, 0x43, 0x23, 0xc4, 0xe7, 0x24, 0xc0, 0x7c,
|
|
+ 0x58, 0xbf, 0x57, 0xdb, 0x68, 0x6f, 0x77, 0x34, 0xfb, 0x63, 0x85, 0x74, 0x2d, 0x11, 0xbd, 0x0f,
|
|
+ 0x4d, 0x2e, 0x28, 0xf3, 0xc7, 0x98, 0x0f, 0x97, 0x14, 0x63, 0xd7, 0xca, 0x55, 0x58, 0x37, 0x23,
|
|
+ 0xa3, 0x3b, 0x50, 0x7b, 0xb1, 0xbb, 0x3f, 0x5c, 0x56, 0xda, 0xc1, 0x70, 0x25, 0x38, 0x70, 0x25,
|
|
+ 0x1a, 0xbd, 0x0d, 0x5d, 0xee, 0xc7, 0xe1, 0x31, 0xbd, 0xf0, 0x12, 0x12, 0xc6, 0x7c, 0xd8, 0xb8,
|
|
+ 0x57, 0xd9, 0x68, 0xba, 0x1d, 0x83, 0x3c, 0x90, 0x38, 0xe7, 0x4b, 0xb8, 0x71, 0x28, 0x7c, 0x26,
|
|
+ 0xae, 0x11, 0x1d, 0xe7, 0x08, 0xd6, 0x5d, 0x1c, 0xd1, 0xf3, 0x6b, 0x85, 0x76, 0x08, 0x0d, 0x41,
|
|
+ 0x22, 0x4c, 0x53, 0xa1, 0x42, 0xdb, 0x75, 0x2d, 0xe8, 0xfc, 0x47, 0x05, 0xd0, 0x93, 0x0b, 0x1c,
|
|
+ 0x1c, 0x30, 0x1a, 0x60, 0xce, 0xff, 0x44, 0xd3, 0xf5, 0x1e, 0x34, 0x12, 0x6d, 0xc0, 0xb0, 0xae,
|
|
+ 0xd8, 0xcd, 0x2c, 0x58, 0xab, 0x2c, 0xd5, 0xf9, 0x01, 0xd6, 0x0e, 0xc9, 0x38, 0xf6, 0x27, 0xaf,
|
|
+ 0xd1, 0xde, 0x75, 0x58, 0xe6, 0x4a, 0xa6, 0x32, 0xb5, 0xeb, 0x1a, 0xc8, 0x39, 0x00, 0xf4, 0x9d,
|
|
+ 0x4f, 0xc4, 0xeb, 0xd3, 0xe4, 0x7c, 0x08, 0xab, 0x25, 0x89, 0x3c, 0xa1, 0x31, 0xc7, 0xca, 0x00,
|
|
+ 0xe1, 0x8b, 0x94, 0x2b, 0x61, 0x4b, 0xae, 0x81, 0x1c, 0x0c, 0x6b, 0xcf, 0x08, 0xb7, 0xec, 0xf8,
|
|
+ 0x8f, 0x31, 0x61, 0x1d, 0x96, 0x4f, 0x28, 0x8b, 0x7c, 0x61, 0x2d, 0xd0, 0x10, 0x42, 0x50, 0xf7,
|
|
+ 0xd9, 0x98, 0x0f, 0x6b, 0xf7, 0x6a, 0x1b, 0x2d, 0x57, 0xfd, 0xcb, 0x55, 0x39, 0xa3, 0xc6, 0xd8,
|
|
+ 0xf5, 0x16, 0x74, 0x4c, 0xdc, 0xbd, 0x09, 0xe1, 0x42, 0xe9, 0xe9, 0xb8, 0x6d, 0x83, 0x93, 0x63,
|
|
+ 0x1c, 0x0a, 0xeb, 0x47, 0x49, 0x78, 0xcd, 0x0d, 0xbf, 0x0d, 0x2d, 0x86, 0x39, 0x4d, 0x99, 0xdc,
|
|
+ 0xa6, 0x55, 0x35, 0xef, 0x6b, 0x7a, 0xde, 0x9f, 0x91, 0x38, 0xbd, 0x70, 0x2d, 0xcd, 0xcd, 0xd9,
|
|
+ 0xcc, 0x16, 0x12, 0xfc, 0x3a, 0x5b, 0xe8, 0x4b, 0xb8, 0x71, 0xe0, 0xa7, 0xfc, 0x3a, 0xb6, 0x3a,
|
|
+ 0x5f, 0xc9, 0xed, 0xc7, 0xd3, 0xe8, 0x5a, 0x83, 0xff, 0xbd, 0x02, 0xcd, 0xdd, 0x24, 0x3d, 0xe2,
|
|
+ 0xfe, 0x18, 0xa3, 0x37, 0xa1, 0x2d, 0xa8, 0xf0, 0x27, 0x5e, 0x2a, 0x41, 0xc5, 0x5e, 0x77, 0x41,
|
|
+ 0xa1, 0x34, 0x83, 0x0c, 0x3b, 0x66, 0x41, 0x92, 0x1a, 0x8e, 0xea, 0xbd, 0xda, 0x46, 0xdd, 0x6d,
|
|
+ 0x6b, 0x9c, 0x66, 0xd9, 0x84, 0x55, 0x45, 0xf3, 0x48, 0xec, 0x9d, 0x61, 0x16, 0xe3, 0x49, 0x44,
|
|
+ 0x43, 0xac, 0xd6, 0x6f, 0xdd, 0x1d, 0x28, 0xd2, 0x7e, 0xfc, 0x4d, 0x46, 0x40, 0x7f, 0x06, 0x83,
|
|
+ 0x8c, 0x5f, 0x6e, 0x4a, 0xc5, 0x5d, 0x57, 0xdc, 0x7d, 0xc3, 0x7d, 0x64, 0xd0, 0xce, 0x3f, 0x42,
|
|
+ 0xef, 0xe5, 0x29, 0xa3, 0x42, 0x4c, 0x48, 0x3c, 0x7e, 0xec, 0x0b, 0x5f, 0x66, 0x8f, 0x04, 0x33,
|
|
+ 0x42, 0x43, 0x6e, 0xac, 0xb5, 0x20, 0xfa, 0x00, 0x06, 0x42, 0xf3, 0xe2, 0xd0, 0xb3, 0x3c, 0x55,
|
|
+ 0xc5, 0xb3, 0x92, 0x11, 0x0e, 0x0c, 0xf3, 0xbb, 0xd0, 0xcb, 0x99, 0x65, 0xfe, 0x31, 0xf6, 0x76,
|
|
+ 0x33, 0xec, 0x4b, 0x12, 0x61, 0xe7, 0x5c, 0xc5, 0x4a, 0x4d, 0x32, 0xfa, 0x00, 0x5a, 0x79, 0x1c,
|
|
+ 0x2a, 0x6a, 0x85, 0xf4, 0xf4, 0x0a, 0xb1, 0xe1, 0x74, 0x9b, 0x59, 0x50, 0xbe, 0x86, 0xbe, 0xc8,
|
|
+ 0x0c, 0xf7, 0x42, 0x5f, 0xf8, 0xe5, 0x45, 0x55, 0xf6, 0xca, 0xed, 0x89, 0x12, 0xec, 0x7c, 0x05,
|
|
+ 0xad, 0x03, 0x12, 0x72, 0xad, 0x78, 0x08, 0x8d, 0x20, 0x65, 0x0c, 0xc7, 0xc2, 0xba, 0x6c, 0x40,
|
|
+ 0xb4, 0x06, 0x4b, 0x13, 0x12, 0x11, 0x61, 0xdc, 0xd4, 0x80, 0x43, 0x01, 0x9e, 0xe3, 0x88, 0xb2,
|
|
+ 0xa9, 0x0a, 0xd8, 0x1a, 0x2c, 0x15, 0x27, 0x57, 0x03, 0xe8, 0x36, 0xb4, 0x22, 0xff, 0x22, 0x9b,
|
|
+ 0x54, 0x49, 0x69, 0x46, 0xfe, 0x85, 0x36, 0x7e, 0x08, 0x8d, 0x13, 0x9f, 0x4c, 0x82, 0x58, 0x98,
|
|
+ 0xa8, 0x58, 0x30, 0x57, 0x58, 0x2f, 0x2a, 0xfc, 0xdf, 0x2a, 0xb4, 0xb5, 0x46, 0x6d, 0xf0, 0x1a,
|
|
+ 0x2c, 0x05, 0x7e, 0x70, 0x9a, 0xa9, 0x54, 0x00, 0xba, 0x6f, 0x0d, 0xa9, 0x16, 0x93, 0x70, 0x6e,
|
|
+ 0xa9, 0x35, 0x6d, 0x0b, 0x80, 0xbf, 0xf2, 0x13, 0x63, 0x5b, 0xed, 0x12, 0xe6, 0x96, 0xe4, 0xd1,
|
|
+ 0xe6, 0x7e, 0x0c, 0x1d, 0xbd, 0xee, 0xcc, 0x90, 0xfa, 0x25, 0x43, 0xda, 0x9a, 0x4b, 0x0f, 0x7a,
|
|
+ 0x1b, 0xba, 0x29, 0xc7, 0xde, 0x29, 0xc1, 0xcc, 0x67, 0xc1, 0xe9, 0x74, 0xb8, 0xa4, 0xcf, 0xc8,
|
|
+ 0x94, 0xe3, 0x3d, 0x8b, 0x43, 0xdb, 0xb0, 0x24, 0xd3, 0x1f, 0x1f, 0x2e, 0xab, 0xe3, 0xf8, 0x4e,
|
|
+ 0x51, 0xa4, 0x72, 0x75, 0x53, 0x7d, 0x9f, 0xc4, 0x82, 0x4d, 0x5d, 0xcd, 0x3a, 0xfa, 0x1c, 0x20,
|
|
+ 0x47, 0xa2, 0x15, 0xa8, 0x9d, 0xe1, 0xa9, 0xd9, 0x87, 0xf2, 0x57, 0x06, 0xe7, 0xdc, 0x9f, 0xa4,
|
|
+ 0x36, 0xea, 0x1a, 0xf8, 0xb2, 0xfa, 0x79, 0xc5, 0x09, 0xa0, 0xbf, 0x33, 0x39, 0x23, 0xb4, 0x30,
|
|
+ 0x7c, 0x0d, 0x96, 0x22, 0xff, 0x07, 0xca, 0x6c, 0x24, 0x15, 0xa0, 0xb0, 0x24, 0xa6, 0xcc, 0x8a,
|
|
+ 0x50, 0x00, 0xea, 0x41, 0x95, 0x26, 0x2a, 0x5e, 0x2d, 0xb7, 0x4a, 0x93, 0x5c, 0x51, 0xbd, 0xa0,
|
|
+ 0xc8, 0xf9, 0x6d, 0x1d, 0x20, 0xd7, 0x82, 0x5c, 0x18, 0x11, 0xea, 0x71, 0xcc, 0x64, 0x09, 0xe2,
|
|
+ 0x1d, 0x4f, 0x05, 0xe6, 0x1e, 0xc3, 0x41, 0xca, 0x38, 0x39, 0x97, 0xf3, 0x27, 0xdd, 0xbe, 0xa1,
|
|
+ 0xdd, 0x9e, 0xb1, 0xcd, 0xbd, 0x49, 0xe8, 0xa1, 0x1e, 0xb7, 0x23, 0x87, 0xb9, 0x76, 0x14, 0xda,
|
|
+ 0x87, 0x1b, 0xb9, 0xcc, 0xb0, 0x20, 0xae, 0x7a, 0x95, 0xb8, 0xd5, 0x4c, 0x5c, 0x98, 0x8b, 0x7a,
|
|
+ 0x02, 0xab, 0x84, 0x7a, 0x3f, 0xa6, 0x38, 0x2d, 0x09, 0xaa, 0x5d, 0x25, 0x68, 0x40, 0xe8, 0x5f,
|
|
+ 0xab, 0x01, 0xb9, 0x98, 0x03, 0xb8, 0x55, 0xf0, 0x52, 0x6e, 0xf7, 0x82, 0xb0, 0xfa, 0x55, 0xc2,
|
|
+ 0xd6, 0x33, 0xab, 0x64, 0x3e, 0xc8, 0x25, 0xfe, 0x15, 0xac, 0x13, 0xea, 0xbd, 0xf2, 0x89, 0x98,
|
|
+ 0x15, 0xb7, 0xf4, 0x2b, 0x4e, 0xca, 0x43, 0xb7, 0x2c, 0x4b, 0x3b, 0x19, 0x61, 0x36, 0x2e, 0x39,
|
|
+ 0xb9, 0xfc, 0x2b, 0x4e, 0x3e, 0x57, 0x03, 0x72, 0x31, 0x8f, 0x60, 0x40, 0xe8, 0xac, 0x35, 0x8d,
|
|
+ 0xab, 0x84, 0xf4, 0x09, 0x2d, 0x5b, 0xb2, 0x03, 0x03, 0x8e, 0x03, 0x41, 0x59, 0x71, 0x11, 0x34,
|
|
+ 0xaf, 0x12, 0xb1, 0x62, 0xf8, 0x33, 0x19, 0xce, 0xdf, 0x41, 0x67, 0x2f, 0x1d, 0x63, 0x31, 0x39,
|
|
+ 0xce, 0x92, 0xc1, 0x6b, 0xcb, 0x3f, 0xce, 0xef, 0xab, 0xd0, 0xde, 0x1d, 0x33, 0x9a, 0x26, 0xa5,
|
|
+ 0x9c, 0xac, 0x37, 0xe9, 0x6c, 0x4e, 0x56, 0x2c, 0x2a, 0x27, 0x6b, 0xe6, 0x4f, 0xa0, 0x13, 0xa9,
|
|
+ 0xad, 0x6b, 0xf8, 0x75, 0x1e, 0x1a, 0xcc, 0x6d, 0x6a, 0xb7, 0x1d, 0x15, 0x92, 0xd9, 0x26, 0x40,
|
|
+ 0x42, 0x42, 0x6e, 0xc6, 0xe8, 0x74, 0xd4, 0x37, 0x15, 0xa1, 0x4d, 0xd1, 0x6e, 0x2b, 0xc9, 0xb2,
|
|
+ 0xf5, 0x03, 0x68, 0x1f, 0xcb, 0x20, 0x99, 0x01, 0xa5, 0x64, 0x94, 0x47, 0xcf, 0x85, 0xe3, 0x7c,
|
|
+ 0x13, 0xee, 0x41, 0xf7, 0x54, 0x87, 0xcc, 0x0c, 0xd2, 0x6b, 0xe8, 0x6d, 0xe3, 0x49, 0xee, 0xef,
|
|
+ 0x66, 0x31, 0xb2, 0x7a, 0x02, 0x3a, 0xa7, 0x05, 0xd4, 0xe8, 0x10, 0x06, 0x73, 0x2c, 0x0b, 0x72,
|
|
+ 0xd0, 0x46, 0x31, 0x07, 0xb5, 0xb7, 0x91, 0x56, 0x54, 0x1c, 0x59, 0xcc, 0x4b, 0xff, 0x52, 0x85,
|
|
+ 0xde, 0x7e, 0x2c, 0x30, 0x3b, 0xf1, 0x03, 0xac, 0x2d, 0x46, 0x50, 0x8f, 0xfd, 0x08, 0x1b, 0x99,
|
|
+ 0xea, 0x1f, 0xdd, 0x82, 0x26, 0xbb, 0xd0, 0x29, 0xc4, 0xcc, 0x68, 0x83, 0x5d, 0xa8, 0xd4, 0x80,
|
|
+ 0xde, 0x00, 0x60, 0x17, 0x5e, 0xe2, 0x07, 0x67, 0xd8, 0xc4, 0xb0, 0xee, 0xb6, 0xd8, 0xc5, 0x81,
|
|
+ 0x46, 0xc8, 0xc5, 0xc0, 0x2e, 0x3c, 0xcc, 0x18, 0x65, 0xdc, 0x64, 0xab, 0x26, 0xbb, 0x78, 0xa2,
|
|
+ 0x60, 0x33, 0x36, 0x64, 0x34, 0x49, 0x70, 0xa8, 0xb2, 0xb4, 0x1a, 0xfb, 0x58, 0x23, 0xa4, 0x56,
|
|
+ 0x61, 0xb5, 0x2e, 0x6b, 0xad, 0x22, 0xd7, 0x2a, 0x72, 0xad, 0x0d, 0x3d, 0x52, 0x14, 0xb5, 0x8a,
|
|
+ 0x4c, 0x6b, 0x53, 0x6b, 0x15, 0x05, 0xad, 0x22, 0xd7, 0xda, 0xb2, 0x63, 0x8d, 0x56, 0xe7, 0xbf,
|
|
+ 0xab, 0xd0, 0x78, 0x19, 0xa8, 0x49, 0x41, 0xf7, 0xa0, 0x8d, 0xb9, 0xf0, 0x8f, 0x27, 0x84, 0x9f,
|
|
+ 0xe2, 0xd0, 0x2c, 0xf3, 0x22, 0x4a, 0xda, 0xc8, 0xa7, 0xb1, 0xc7, 0xe5, 0x09, 0x6e, 0x22, 0xc3,
|
|
+ 0xa7, 0xf1, 0xa1, 0x3c, 0xc1, 0x0d, 0x89, 0xe1, 0xe0, 0xdc, 0xae, 0x75, 0x3e, 0x8d, 0x5d, 0x1c,
|
|
+ 0x9c, 0x4b, 0xfb, 0x4e, 0x48, 0xac, 0x72, 0xcc, 0x03, 0x1b, 0x95, 0x13, 0x12, 0xcb, 0xfc, 0xf1,
|
|
+ 0xa0, 0x48, 0xdc, 0x36, 0x41, 0xb1, 0xc4, 0x6d, 0xe5, 0x99, 0x4c, 0x03, 0x92, 0x6a, 0x82, 0xd2,
|
|
+ 0x94, 0x08, 0x49, 0x55, 0x87, 0xf3, 0x84, 0x72, 0x6c, 0x02, 0xa2, 0x01, 0xe9, 0xaf, 0xfa, 0xd1,
|
|
+ 0x63, 0x74, 0x34, 0x5a, 0x0a, 0xa3, 0x06, 0xdd, 0x82, 0xe6, 0xc4, 0xe7, 0xc2, 0xf3, 0x83, 0x33,
|
|
+ 0x13, 0x8c, 0x86, 0x84, 0x1f, 0x05, 0x67, 0xb2, 0xba, 0x97, 0x05, 0x39, 0x8e, 0x87, 0xa0, 0x08,
|
|
+ 0x06, 0x52, 0x55, 0xcb, 0x84, 0x72, 0x12, 0x8f, 0x87, 0x6d, 0x53, 0xb5, 0x68, 0xd0, 0x49, 0xa1,
|
|
+ 0x71, 0x14, 0xea, 0xd8, 0xe5, 0x83, 0x2b, 0xb3, 0x83, 0x6d, 0xec, 0x4d, 0xc0, 0x0c, 0x68, 0xd6,
|
|
+ 0x8a, 0x3e, 0x11, 0x4c, 0xc4, 0x9a, 0xec, 0x42, 0x27, 0x7c, 0x33, 0xa5, 0x86, 0x58, 0xb7, 0x53,
|
|
+ 0xaa, 0x89, 0xce, 0xff, 0x57, 0xa0, 0xf3, 0x2d, 0x16, 0xaf, 0x28, 0x3b, 0xb3, 0xf9, 0x00, 0x88,
|
|
+ 0x5d, 0xd6, 0xdc, 0x9c, 0x75, 0xa6, 0x3c, 0x2b, 0x2f, 0x77, 0xb7, 0xc0, 0x87, 0xde, 0x84, 0x9a,
|
|
+ 0x08, 0x12, 0xb3, 0x73, 0x4c, 0x6b, 0x68, 0x96, 0x82, 0x2b, 0x29, 0xe8, 0x2d, 0xa8, 0x8b, 0x20,
|
|
+ 0xf9, 0xd4, 0xa4, 0x8a, 0x19, 0x0e, 0x45, 0x92, 0x32, 0xd2, 0x30, 0x29, 0xb7, 0x97, 0x26, 0x24,
|
|
+ 0xae, 0xa4, 0x48, 0x19, 0x69, 0x98, 0x7c, 0xaa, 0x66, 0x76, 0x8e, 0x43, 0x91, 0x9c, 0x7f, 0xae,
|
|
+ 0xc0, 0xfa, 0x6c, 0xf7, 0x61, 0x7a, 0xa5, 0x4f, 0xa0, 0x13, 0xa8, 0xa4, 0x51, 0x4a, 0x8c, 0x83,
|
|
+ 0xb9, 0x74, 0xe2, 0xb6, 0x83, 0x42, 0x2e, 0xfd, 0x0c, 0xba, 0xb1, 0x0e, 0x4f, 0x29, 0x3f, 0x9a,
|
|
+ 0xe4, 0x50, 0x8c, 0x9c, 0xdb, 0x89, 0x0b, 0x90, 0x13, 0x02, 0xfa, 0x8e, 0x11, 0x81, 0x0f, 0x05,
|
|
+ 0xc3, 0x7e, 0xf4, 0x3a, 0xba, 0x60, 0x04, 0x75, 0x55, 0x32, 0xd7, 0x54, 0x93, 0xa7, 0xfe, 0x9d,
|
|
+ 0xf7, 0x60, 0xb5, 0xa4, 0xc5, 0xf8, 0xba, 0x02, 0xb5, 0x89, 0x59, 0x3e, 0x5d, 0x57, 0xfe, 0x3a,
|
|
+ 0x3e, 0x0c, 0x5c, 0xec, 0x87, 0xaf, 0xcf, 0x1a, 0xa3, 0xa2, 0x96, 0xab, 0xd8, 0x00, 0x54, 0x54,
|
|
+ 0x61, 0x4c, 0xb1, 0x56, 0x57, 0x0a, 0x56, 0xbf, 0x80, 0xc1, 0xae, 0xdc, 0x45, 0x87, 0x22, 0x24,
|
|
+ 0xf1, 0xeb, 0x68, 0xdb, 0xff, 0x01, 0x56, 0x5f, 0x8a, 0xe9, 0x77, 0x52, 0x18, 0x27, 0x3f, 0xe1,
|
|
+ 0xd7, 0xe4, 0x1f, 0xa3, 0xaf, 0xac, 0x7f, 0x8c, 0xbe, 0x92, 0xdb, 0x32, 0xa0, 0x93, 0x34, 0x8a,
|
|
+ 0xd5, 0x12, 0xed, 0xba, 0x06, 0x72, 0x76, 0xa0, 0xa3, 0x1b, 0xb9, 0xe7, 0x34, 0x4c, 0x27, 0x78,
|
|
+ 0xe1, 0x31, 0x70, 0x17, 0x20, 0xf1, 0x99, 0x1f, 0x61, 0x81, 0x19, 0x57, 0x25, 0x5f, 0xcb, 0x2d,
|
|
+ 0x60, 0x9c, 0x7f, 0xad, 0xc2, 0x9a, 0xbe, 0x97, 0x3b, 0xd4, 0xd7, 0x51, 0xd6, 0x85, 0x11, 0x34,
|
|
+ 0x4f, 0x29, 0x17, 0x05, 0x81, 0x19, 0x2c, 0x4d, 0x0c, 0x63, 0x2b, 0x4d, 0xfe, 0x96, 0x2e, 0xcb,
|
|
+ 0x6a, 0x57, 0x5f, 0x96, 0xcd, 0x5d, 0x87, 0xd5, 0xe7, 0xaf, 0xc3, 0x64, 0x02, 0xb4, 0x4c, 0x44,
|
|
+ 0x1f, 0x33, 0x2d, 0xb7, 0x65, 0x30, 0xfb, 0x21, 0xba, 0x0f, 0xfd, 0xb1, 0xb4, 0xd2, 0x3b, 0xa5,
|
|
+ 0xf4, 0xcc, 0x4b, 0x7c, 0x71, 0xaa, 0x12, 0x6b, 0xcb, 0xed, 0x2a, 0xf4, 0x1e, 0xa5, 0x67, 0x07,
|
|
+ 0xbe, 0x38, 0x45, 0x5f, 0x40, 0xcf, 0xf4, 0x22, 0x91, 0x0a, 0x11, 0x37, 0x15, 0x98, 0xd9, 0x45,
|
|
+ 0xc5, 0xe8, 0xb9, 0xdd, 0xb3, 0x02, 0xc4, 0x9d, 0x9b, 0x70, 0xe3, 0x31, 0xe6, 0x82, 0xd1, 0x69,
|
|
+ 0x39, 0x30, 0xce, 0x5f, 0x00, 0xec, 0xe7, 0xf9, 0xe7, 0xa3, 0x22, 0x64, 0xb2, 0xd6, 0xca, 0xa6,
|
|
+ 0xbe, 0x16, 0xcd, 0x08, 0x6e, 0x81, 0xc7, 0xd9, 0x84, 0x65, 0x97, 0xa6, 0xf2, 0x44, 0x7c, 0xc7,
|
|
+ 0xfe, 0x99, 0x71, 0x1d, 0x33, 0x4e, 0x21, 0x5d, 0x43, 0x73, 0xf6, 0xec, 0x3d, 0x4a, 0x2e, 0xce,
|
|
+ 0x4c, 0xd1, 0x26, 0xb4, 0xb2, 0x4c, 0x68, 0xb2, 0xca, 0xbc, 0xea, 0x9c, 0xc5, 0x79, 0x09, 0xce,
|
|
+ 0x8c, 0xa4, 0xbd, 0x57, 0x8f, 0xc2, 0x90, 0xed, 0x4c, 0xbf, 0xf5, 0xa3, 0x6b, 0x4b, 0xfd, 0x1e,
|
|
+ 0x56, 0xb5, 0x54, 0x6d, 0xaf, 0x15, 0xf3, 0x0e, 0x2c, 0x33, 0xeb, 0x5c, 0x25, 0xbf, 0x65, 0x35,
|
|
+ 0x4c, 0x86, 0x86, 0xee, 0x48, 0x65, 0x01, 0xc3, 0x91, 0x3d, 0x8c, 0x9b, 0x6e, 0x8e, 0x90, 0x73,
|
|
+ 0xf0, 0x8c, 0x70, 0x91, 0x07, 0xcf, 0xce, 0xc1, 0x2a, 0x0c, 0x24, 0xa1, 0xa4, 0xd1, 0xf9, 0x7b,
|
|
+ 0x58, 0x7d, 0x11, 0x4f, 0x48, 0x8c, 0x77, 0x0f, 0x8e, 0x9e, 0xe3, 0x2c, 0xd7, 0x20, 0xa8, 0xab,
|
|
+ 0x53, 0xb4, 0xa2, 0xa4, 0xab, 0x7f, 0xb9, 0xf9, 0xe2, 0x63, 0x2f, 0x48, 0x52, 0x6e, 0x2e, 0x3d,
|
|
+ 0x97, 0xe3, 0xe3, 0xdd, 0x24, 0xe5, 0xf2, 0x64, 0x95, 0x15, 0x2c, 0x8d, 0x27, 0x53, 0xb5, 0x03,
|
|
+ 0x9b, 0x6e, 0x23, 0x48, 0xd2, 0x17, 0xf1, 0x64, 0xea, 0xfc, 0xb9, 0xba, 0xe6, 0xc1, 0x38, 0x74,
|
|
+ 0xfd, 0x38, 0xa4, 0xd1, 0x63, 0x7c, 0x5e, 0xd0, 0x90, 0x5d, 0x29, 0xd8, 0x4c, 0xf3, 0x73, 0x05,
|
|
+ 0x3a, 0x8f, 0xc6, 0x38, 0x16, 0x8f, 0xb1, 0xf0, 0xc9, 0x44, 0x5d, 0x1b, 0x9c, 0x63, 0xc6, 0x09,
|
|
+ 0x8d, 0xcd, 0x76, 0xb2, 0x20, 0x7a, 0x13, 0xda, 0x24, 0x26, 0xc2, 0x0b, 0x7d, 0x1c, 0xd1, 0xd8,
|
|
+ 0x44, 0x01, 0x24, 0xea, 0xb1, 0xc2, 0xa0, 0xf7, 0xa0, 0xaf, 0x2f, 0xa5, 0xbd, 0x53, 0x3f, 0x0e,
|
|
+ 0x27, 0x72, 0x23, 0xeb, 0x4b, 0xba, 0x9e, 0x46, 0xef, 0x19, 0x2c, 0x7a, 0x1f, 0x56, 0xcc, 0x36,
|
|
+ 0xcb, 0x39, 0xeb, 0x8a, 0xb3, 0x6f, 0xf0, 0x25, 0xd6, 0x34, 0x49, 0x28, 0x13, 0xdc, 0xe3, 0x38,
|
|
+ 0x08, 0x68, 0x94, 0x98, 0x9e, 0xbb, 0x6f, 0xf1, 0x87, 0x1a, 0xed, 0x8c, 0x61, 0xf5, 0xa9, 0xf4,
|
|
+ 0xd3, 0x78, 0x92, 0x4f, 0x70, 0x2f, 0xc2, 0x91, 0x77, 0x3c, 0xa1, 0xc1, 0x99, 0x27, 0x93, 0x9f,
|
|
+ 0x89, 0xb0, 0xac, 0xea, 0x77, 0x24, 0xf2, 0x90, 0xfc, 0xa4, 0xae, 0x97, 0x24, 0xd7, 0x29, 0x15,
|
|
+ 0xc9, 0x24, 0x1d, 0x7b, 0x09, 0xa3, 0xc7, 0xd8, 0xb8, 0xd8, 0x8f, 0x70, 0xb4, 0xa7, 0xf1, 0x07,
|
|
+ 0x12, 0xed, 0xfc, 0x4f, 0x05, 0xd6, 0xca, 0x9a, 0x4c, 0x2a, 0xdf, 0x82, 0xb5, 0xb2, 0x2a, 0x53,
|
|
+ 0x61, 0xea, 0x2a, 0x65, 0x50, 0x54, 0xa8, 0x6b, 0xcd, 0xcf, 0xa0, 0xab, 0x5e, 0x2a, 0xbc, 0x50,
|
|
+ 0x4b, 0x2a, 0x1f, 0x9e, 0xc5, 0x79, 0x71, 0x3b, 0x7e, 0x71, 0x96, 0xbe, 0x80, 0x5b, 0xc6, 0x7d,
|
|
+ 0x6f, 0xde, 0x6c, 0xbd, 0x20, 0xd6, 0x0d, 0xc3, 0xf3, 0x19, 0xeb, 0x9f, 0xc1, 0x30, 0x47, 0xed,
|
|
+ 0x4c, 0x15, 0xd2, 0xc6, 0xea, 0x23, 0x58, 0x9d, 0x71, 0x56, 0xee, 0x3b, 0xb5, 0xed, 0xeb, 0xee,
|
|
+ 0x22, 0x92, 0xf3, 0x10, 0x6e, 0x1e, 0x62, 0xa1, 0xa3, 0xe1, 0x0b, 0xd3, 0xee, 0x6a, 0x61, 0x2b,
|
|
+ 0x50, 0x3b, 0xc4, 0x81, 0x72, 0xbe, 0xe6, 0xca, 0x5f, 0xb9, 0x00, 0x8f, 0x38, 0x0e, 0x94, 0x97,
|
|
+ 0x35, 0x57, 0xfd, 0x3b, 0xff, 0x55, 0x81, 0x86, 0x49, 0xbe, 0xf2, 0x00, 0x09, 0x19, 0x39, 0xc7,
|
|
+ 0xcc, 0x2c, 0x3d, 0x03, 0xa1, 0x77, 0xa1, 0xa7, 0xff, 0x3c, 0x9a, 0x08, 0x42, 0xb3, 0x94, 0xde,
|
|
+ 0xd5, 0xd8, 0x17, 0x1a, 0xa9, 0x2e, 0xa1, 0xd5, 0x1d, 0xab, 0xb9, 0xce, 0x30, 0x90, 0xba, 0x49,
|
|
+ 0xe6, 0x32, 0x33, 0xa8, 0x14, 0xde, 0x72, 0x0d, 0x24, 0x97, 0xba, 0x95, 0xb7, 0xa4, 0xe4, 0x59,
|
|
+ 0x50, 0x2e, 0xf5, 0x88, 0xa6, 0xb1, 0xf0, 0x12, 0x4a, 0x62, 0x61, 0x72, 0x36, 0x28, 0xd4, 0x81,
|
|
+ 0xc4, 0x38, 0xff, 0x54, 0x81, 0x65, 0xfd, 0x10, 0x83, 0x7a, 0x50, 0xcd, 0x4e, 0xce, 0x2a, 0x51,
|
|
+ 0x55, 0x88, 0xd2, 0xa5, 0x4f, 0x4b, 0xf5, 0x2f, 0xf7, 0xf1, 0x79, 0xa4, 0xf3, 0xbf, 0x31, 0xed,
|
|
+ 0x3c, 0x52, 0x89, 0xff, 0x5d, 0xe8, 0xe5, 0x07, 0xb0, 0xa2, 0x6b, 0x13, 0xbb, 0x19, 0x56, 0xb1,
|
|
+ 0x5d, 0x6a, 0xa9, 0xf3, 0xb7, 0x00, 0xf9, 0x83, 0x84, 0x0c, 0x79, 0x9a, 0x19, 0x23, 0x7f, 0x25,
|
|
+ 0x66, 0x9c, 0x1d, 0xdd, 0xf2, 0x17, 0xdd, 0x87, 0x9e, 0x1f, 0x86, 0x44, 0x0e, 0xf7, 0x27, 0x4f,
|
|
+ 0x49, 0x98, 0x6d, 0xd2, 0x32, 0xd6, 0xf9, 0xbf, 0x0a, 0xf4, 0x77, 0x69, 0x32, 0xfd, 0x4b, 0x32,
|
|
+ 0xc1, 0x85, 0x0c, 0xa2, 0x8c, 0x34, 0x27, 0xb7, 0xfc, 0xd7, 0x3d, 0xc5, 0x04, 0xeb, 0xad, 0xa5,
|
|
+ 0x67, 0xb6, 0x29, 0x11, 0x6a, 0x5b, 0x59, 0x62, 0x76, 0xb7, 0xdb, 0xd5, 0xc4, 0xe7, 0x34, 0x54,
|
|
+ 0xad, 0x5f, 0x48, 0x98, 0x97, 0xdd, 0xe4, 0x76, 0xdd, 0x46, 0x48, 0x98, 0x22, 0x19, 0x47, 0x96,
|
|
+ 0xd4, 0x63, 0x42, 0xd1, 0x91, 0x65, 0x8d, 0x91, 0x8e, 0xac, 0xc3, 0x32, 0x3d, 0x39, 0xe1, 0x58,
|
|
+ 0xa8, 0x9e, 0xa4, 0xe6, 0x1a, 0x28, 0x4b, 0x73, 0xcd, 0x42, 0x9a, 0xbb, 0x01, 0xab, 0xea, 0xd9,
|
|
+ 0xea, 0x25, 0xf3, 0x03, 0x12, 0x8f, 0x6d, 0x2a, 0x5e, 0x03, 0x74, 0x28, 0x68, 0x32, 0x83, 0xdd,
|
|
+ 0x84, 0x81, 0x39, 0x7f, 0x0e, 0xfe, 0xe6, 0xd0, 0xba, 0x7e, 0x0b, 0x9a, 0x12, 0xf4, 0x18, 0xfe,
|
|
+ 0xd1, 0x26, 0x46, 0x43, 0x76, 0xde, 0x87, 0x8e, 0xfe, 0x35, 0x69, 0x20, 0x67, 0xe5, 0x65, 0x56,
|
|
+ 0xbe, 0xfd, 0x9f, 0x03, 0x93, 0x6e, 0xcd, 0xf5, 0x10, 0x7a, 0x0a, 0xfd, 0x99, 0xe7, 0x46, 0x64,
|
|
+ 0xee, 0x0b, 0x17, 0xbf, 0x42, 0x8e, 0xd6, 0x37, 0xf5, 0xf3, 0xe5, 0xa6, 0x7d, 0xbe, 0xdc, 0x7c,
|
|
+ 0x12, 0x25, 0x62, 0x8a, 0x9e, 0x40, 0xaf, 0xfc, 0x30, 0x87, 0x6e, 0xdb, 0xca, 0x66, 0xc1, 0x73,
|
|
+ 0xdd, 0xa5, 0x62, 0x9e, 0x42, 0x7f, 0xe6, 0x8d, 0xce, 0xda, 0xb3, 0xf8, 0xe9, 0xee, 0x52, 0x41,
|
|
+ 0x0f, 0xa1, 0x5d, 0x78, 0x94, 0x43, 0x43, 0x2d, 0x64, 0xfe, 0x9d, 0xee, 0x52, 0x01, 0xbb, 0xd0,
|
|
+ 0x2d, 0xbd, 0x93, 0xa1, 0x91, 0xf1, 0x67, 0xc1, 0xe3, 0xd9, 0xa5, 0x42, 0x76, 0xa0, 0x5d, 0x78,
|
|
+ 0xae, 0xb2, 0x56, 0xcc, 0xbf, 0x89, 0x8d, 0x6e, 0x2d, 0xa0, 0x98, 0xe9, 0xdc, 0x83, 0x6e, 0xe9,
|
|
+ 0x71, 0xc9, 0x1a, 0xb2, 0xe8, 0x61, 0x6b, 0x74, 0x7b, 0x21, 0xcd, 0x48, 0x7a, 0x0a, 0xfd, 0x99,
|
|
+ 0xa7, 0x26, 0x1b, 0xdc, 0xc5, 0x2f, 0x50, 0x97, 0xba, 0xf5, 0x8d, 0x9a, 0xec, 0x42, 0x13, 0x57,
|
|
+ 0x98, 0xec, 0xf9, 0x87, 0xa5, 0xd1, 0x9d, 0xc5, 0x44, 0x63, 0xd5, 0x13, 0xe8, 0x95, 0xdf, 0x94,
|
|
+ 0xac, 0xb0, 0x85, 0x2f, 0x4d, 0x57, 0xaf, 0x9c, 0xd2, 0xf3, 0x52, 0xbe, 0x72, 0x16, 0xbd, 0x3a,
|
|
+ 0x5d, 0x2a, 0xe8, 0x11, 0x80, 0x69, 0xd9, 0x42, 0x12, 0x67, 0x53, 0x36, 0xd7, 0x2a, 0x66, 0x53,
|
|
+ 0xb6, 0xa0, 0xbd, 0x7b, 0x08, 0xa0, 0x3b, 0xad, 0x90, 0xa6, 0x02, 0xdd, 0xb4, 0x66, 0xcc, 0xb4,
|
|
+ 0x77, 0xa3, 0xe1, 0x3c, 0x61, 0x4e, 0x00, 0x66, 0xec, 0x3a, 0x02, 0xbe, 0x06, 0xc8, 0x3b, 0x38,
|
|
+ 0x2b, 0x60, 0xae, 0xa7, 0xbb, 0x22, 0x06, 0x9d, 0x62, 0xbf, 0x86, 0x8c, 0xaf, 0x0b, 0x7a, 0xb8,
|
|
+ 0x2b, 0x44, 0xf4, 0x67, 0xaa, 0xe8, 0xf2, 0x62, 0x9b, 0x2d, 0xd3, 0x47, 0x73, 0xd5, 0x33, 0xfa,
|
|
+ 0x1e, 0x6e, 0x5f, 0x51, 0x88, 0xa3, 0x8d, 0x85, 0xe2, 0x16, 0xd4, 0xea, 0x0b, 0x44, 0x7f, 0x06,
|
|
+ 0x9d, 0x62, 0x35, 0x6e, 0x1d, 0x5c, 0x50, 0xa1, 0x8f, 0x4a, 0x15, 0x39, 0x7a, 0x08, 0xbd, 0x72,
|
|
+ 0xad, 0x8d, 0x0a, 0x5b, 0x6e, 0xae, 0x02, 0x1f, 0xad, 0xcc, 0xdc, 0xcc, 0x70, 0xf4, 0x31, 0x40,
|
|
+ 0x5e, 0x93, 0xdb, 0x99, 0x99, 0xab, 0xd2, 0x67, 0xb4, 0x7e, 0x0d, 0xbd, 0xc2, 0x91, 0x20, 0x9b,
|
|
+ 0xd8, 0x9b, 0x25, 0xe7, 0xf3, 0x83, 0x62, 0x64, 0x8a, 0xb7, 0xd2, 0x89, 0xf0, 0x08, 0x3a, 0xc5,
|
|
+ 0xe3, 0xc7, 0x7a, 0xbb, 0xe0, 0x48, 0xba, 0x2a, 0x9f, 0x16, 0x8e, 0x2a, 0xbb, 0x2d, 0xe6, 0x4f,
|
|
+ 0xaf, 0xab, 0xf2, 0x69, 0xa9, 0x81, 0xb6, 0x69, 0x6c, 0x51, 0x57, 0x7d, 0xd5, 0x29, 0x53, 0xee,
|
|
+ 0x36, 0x6d, 0xf4, 0x17, 0xf6, 0xa0, 0x57, 0x2d, 0xef, 0x62, 0x0b, 0x64, 0xe3, 0xb1, 0xa0, 0x2d,
|
|
+ 0xfa, 0x95, 0x74, 0x53, 0x6c, 0x73, 0x0a, 0xe9, 0x66, 0x41, 0xf7, 0x73, 0xa9, 0xa0, 0x3d, 0xe8,
|
|
+ 0x3f, 0xb5, 0x15, 0xac, 0xa9, 0xae, 0x8d, 0x39, 0x0b, 0xba, 0x89, 0xd1, 0x68, 0x11, 0xc9, 0xcc,
|
|
+ 0xf2, 0x37, 0x30, 0x98, 0xab, 0xac, 0xd1, 0xdd, 0xec, 0xa1, 0x60, 0x61, 0xc9, 0x7d, 0xa9, 0x59,
|
|
+ 0xfb, 0xb0, 0x32, 0x5b, 0x58, 0xa3, 0x37, 0xcc, 0xa4, 0x2f, 0x2e, 0xb8, 0x2f, 0x15, 0xf5, 0x05,
|
|
+ 0x34, 0x6d, 0x21, 0x87, 0xcc, 0x83, 0xcc, 0x4c, 0x61, 0x77, 0xd9, 0xd0, 0x9d, 0xce, 0xcf, 0xbf,
|
|
+ 0xdc, 0xad, 0xfc, 0xe6, 0x97, 0xbb, 0x95, 0xdf, 0xfd, 0x72, 0xb7, 0x72, 0xbc, 0xac, 0xa8, 0x1f,
|
|
+ 0xff, 0x21, 0x00, 0x00, 0xff, 0xff, 0x1b, 0x62, 0x55, 0x85, 0x98, 0x25, 0x00, 0x00,
|
|
}
|
|
diff --git a/virtcontainers/agent.go b/virtcontainers/agent.go
|
|
index 3f22d9f..5e3ace9 100644
|
|
--- a/virtcontainers/agent.go
|
|
+++ b/virtcontainers/agent.go
|
|
@@ -231,6 +231,9 @@ type agent interface {
|
|
// updateInterface will tell the agent to update a nic for an existed Sandbox.
|
|
updateInterface(inf *vcTypes.Interface) (*vcTypes.Interface, error)
|
|
|
|
+ // updateInterfaceHwAddrByName will tell the agent to update a nic for an existed Sandbox by nic name.
|
|
+ updateInterfaceHwAddrByName(inf *vcTypes.Interface) (*vcTypes.Interface, error)
|
|
+
|
|
// listInterfaces will tell the agent to list interfaces of an existed Sandbox
|
|
listInterfaces() ([]*vcTypes.Interface, error)
|
|
|
|
diff --git a/virtcontainers/hypervisor.go b/virtcontainers/hypervisor.go
|
|
index 60f1d19..3ca874e 100644
|
|
--- a/virtcontainers/hypervisor.go
|
|
+++ b/virtcontainers/hypervisor.go
|
|
@@ -47,6 +47,9 @@ const (
|
|
|
|
// MockHypervisor is a mock hypervisor for testing purposes
|
|
MockHypervisor HypervisorType = "mock"
|
|
+
|
|
+ // StratovirtHypervisor is stratovirt hypervisor
|
|
+ StratovirtHypervisor HypervisorType = "stratovirt"
|
|
)
|
|
|
|
const (
|
|
@@ -171,6 +174,9 @@ func (hType *HypervisorType) Set(value string) error {
|
|
case "mock":
|
|
*hType = MockHypervisor
|
|
return nil
|
|
+ case "stratovirt":
|
|
+ *hType = StratovirtHypervisor
|
|
+ return nil
|
|
default:
|
|
return fmt.Errorf("Unknown hypervisor type %s", value)
|
|
}
|
|
@@ -189,6 +195,8 @@ func (hType *HypervisorType) String() string {
|
|
return string(ClhHypervisor)
|
|
case MockHypervisor:
|
|
return string(MockHypervisor)
|
|
+ case StratovirtHypervisor:
|
|
+ return string(StratovirtHypervisor)
|
|
default:
|
|
return ""
|
|
}
|
|
@@ -218,6 +226,10 @@ func newHypervisor(hType HypervisorType) (hypervisor, error) {
|
|
}, nil
|
|
case MockHypervisor:
|
|
return &mockHypervisor{}, nil
|
|
+ case StratovirtHypervisor:
|
|
+ return &stratovirt{
|
|
+ store: store,
|
|
+ }, nil
|
|
default:
|
|
return nil, fmt.Errorf("Unknown hypervisor type %s", hType)
|
|
}
|
|
diff --git a/virtcontainers/kata_agent.go b/virtcontainers/kata_agent.go
|
|
index 0f03c9d..f8cad39 100644
|
|
--- a/virtcontainers/kata_agent.go
|
|
+++ b/virtcontainers/kata_agent.go
|
|
@@ -102,36 +102,37 @@ const (
|
|
)
|
|
|
|
const (
|
|
- grpcCheckRequest = "grpc.CheckRequest"
|
|
- grpcExecProcessRequest = "grpc.ExecProcessRequest"
|
|
- grpcCreateSandboxRequest = "grpc.CreateSandboxRequest"
|
|
- grpcDestroySandboxRequest = "grpc.DestroySandboxRequest"
|
|
- grpcCreateContainerRequest = "grpc.CreateContainerRequest"
|
|
- grpcStartContainerRequest = "grpc.StartContainerRequest"
|
|
- grpcRemoveContainerRequest = "grpc.RemoveContainerRequest"
|
|
- grpcSignalProcessRequest = "grpc.SignalProcessRequest"
|
|
- grpcUpdateRoutesRequest = "grpc.UpdateRoutesRequest"
|
|
- grpcUpdateInterfaceRequest = "grpc.UpdateInterfaceRequest"
|
|
- grpcListInterfacesRequest = "grpc.ListInterfacesRequest"
|
|
- grpcListRoutesRequest = "grpc.ListRoutesRequest"
|
|
- grpcOnlineCPUMemRequest = "grpc.OnlineCPUMemRequest"
|
|
- grpcListProcessesRequest = "grpc.ListProcessesRequest"
|
|
- grpcUpdateContainerRequest = "grpc.UpdateContainerRequest"
|
|
- grpcWaitProcessRequest = "grpc.WaitProcessRequest"
|
|
- grpcTtyWinResizeRequest = "grpc.TtyWinResizeRequest"
|
|
- grpcWriteStreamRequest = "grpc.WriteStreamRequest"
|
|
- grpcCloseStdinRequest = "grpc.CloseStdinRequest"
|
|
- grpcStatsContainerRequest = "grpc.StatsContainerRequest"
|
|
- grpcPauseContainerRequest = "grpc.PauseContainerRequest"
|
|
- grpcResumeContainerRequest = "grpc.ResumeContainerRequest"
|
|
- grpcReseedRandomDevRequest = "grpc.ReseedRandomDevRequest"
|
|
- grpcGuestDetailsRequest = "grpc.GuestDetailsRequest"
|
|
- grpcMemHotplugByProbeRequest = "grpc.MemHotplugByProbeRequest"
|
|
- grpcCopyFileRequest = "grpc.CopyFileRequest"
|
|
- grpcSetGuestDateTimeRequest = "grpc.SetGuestDateTimeRequest"
|
|
- grpcStartTracingRequest = "grpc.StartTracingRequest"
|
|
- grpcStopTracingRequest = "grpc.StopTracingRequest"
|
|
- grpcUpdateIPVSRequest = "grpc.UpdateIPVSRequest"
|
|
+ grpcCheckRequest = "grpc.CheckRequest"
|
|
+ grpcExecProcessRequest = "grpc.ExecProcessRequest"
|
|
+ grpcCreateSandboxRequest = "grpc.CreateSandboxRequest"
|
|
+ grpcDestroySandboxRequest = "grpc.DestroySandboxRequest"
|
|
+ grpcCreateContainerRequest = "grpc.CreateContainerRequest"
|
|
+ grpcStartContainerRequest = "grpc.StartContainerRequest"
|
|
+ grpcRemoveContainerRequest = "grpc.RemoveContainerRequest"
|
|
+ grpcSignalProcessRequest = "grpc.SignalProcessRequest"
|
|
+ grpcUpdateRoutesRequest = "grpc.UpdateRoutesRequest"
|
|
+ grpcUpdateInterfaceRequest = "grpc.UpdateInterfaceRequest"
|
|
+ grpcUpdateInterfaceHwAddrByNameRequest = "grpc.UpdateInterfaceHwAddrByNameRequest"
|
|
+ grpcListInterfacesRequest = "grpc.ListInterfacesRequest"
|
|
+ grpcListRoutesRequest = "grpc.ListRoutesRequest"
|
|
+ grpcOnlineCPUMemRequest = "grpc.OnlineCPUMemRequest"
|
|
+ grpcListProcessesRequest = "grpc.ListProcessesRequest"
|
|
+ grpcUpdateContainerRequest = "grpc.UpdateContainerRequest"
|
|
+ grpcWaitProcessRequest = "grpc.WaitProcessRequest"
|
|
+ grpcTtyWinResizeRequest = "grpc.TtyWinResizeRequest"
|
|
+ grpcWriteStreamRequest = "grpc.WriteStreamRequest"
|
|
+ grpcCloseStdinRequest = "grpc.CloseStdinRequest"
|
|
+ grpcStatsContainerRequest = "grpc.StatsContainerRequest"
|
|
+ grpcPauseContainerRequest = "grpc.PauseContainerRequest"
|
|
+ grpcResumeContainerRequest = "grpc.ResumeContainerRequest"
|
|
+ grpcReseedRandomDevRequest = "grpc.ReseedRandomDevRequest"
|
|
+ grpcGuestDetailsRequest = "grpc.GuestDetailsRequest"
|
|
+ grpcMemHotplugByProbeRequest = "grpc.MemHotplugByProbeRequest"
|
|
+ grpcCopyFileRequest = "grpc.CopyFileRequest"
|
|
+ grpcSetGuestDateTimeRequest = "grpc.SetGuestDateTimeRequest"
|
|
+ grpcStartTracingRequest = "grpc.StartTracingRequest"
|
|
+ grpcStopTracingRequest = "grpc.StopTracingRequest"
|
|
+ grpcUpdateIPVSRequest = "grpc.UpdateIPVSRequest"
|
|
)
|
|
|
|
// The function is declared this way for mocking in unit tests
|
|
@@ -628,6 +629,15 @@ func (k *kataAgent) updateInterface(ifc *vcTypes.Interface) (*vcTypes.Interface,
|
|
return nil, err
|
|
}
|
|
|
|
+func (k *kataAgent) updateInterfaceHwAddrByName(ifc *vcTypes.Interface) (*vcTypes.Interface, error) {
|
|
+ ifcReq := &grpc.UpdateInterfaceHwAddrByNameRequest{
|
|
+ Interface: k.convertToKataAgentInterface(ifc),
|
|
+ }
|
|
+ _, err := k.sendReq(ifcReq)
|
|
+
|
|
+ return nil, err
|
|
+}
|
|
+
|
|
func (k *kataAgent) updateInterfaces(interfaces []*vcTypes.Interface) error {
|
|
for _, ifc := range interfaces {
|
|
if _, err := k.updateInterface(ifc); err != nil {
|
|
@@ -2074,6 +2084,9 @@ func (k *kataAgent) installReqFunc(c *kataclient.AgentClient) {
|
|
k.reqHandlers[grpcUpdateInterfaceRequest] = func(ctx context.Context, req interface{}, opts ...golangGrpc.CallOption) (interface{}, error) {
|
|
return k.client.UpdateInterface(ctx, req.(*grpc.UpdateInterfaceRequest), opts...)
|
|
}
|
|
+ k.reqHandlers[grpcUpdateInterfaceHwAddrByNameRequest] = func(ctx context.Context, req interface{}, opts ...golangGrpc.CallOption) (interface{}, error) {
|
|
+ return k.client.UpdateInterfaceHwAddrByName(ctx, req.(*grpc.UpdateInterfaceHwAddrByNameRequest), opts...)
|
|
+ }
|
|
k.reqHandlers[grpcListInterfacesRequest] = func(ctx context.Context, req interface{}, opts ...golangGrpc.CallOption) (interface{}, error) {
|
|
return k.client.ListInterfaces(ctx, req.(*grpc.ListInterfacesRequest), opts...)
|
|
}
|
|
diff --git a/virtcontainers/noop_agent.go b/virtcontainers/noop_agent.go
|
|
index d174623..bac34be 100644
|
|
--- a/virtcontainers/noop_agent.go
|
|
+++ b/virtcontainers/noop_agent.go
|
|
@@ -111,6 +111,11 @@ func (n *noopAgent) updateInterface(inf *vcTypes.Interface) (*vcTypes.Interface,
|
|
return nil, nil
|
|
}
|
|
|
|
+// updateInterfaceHwAddrByName is the Noop agent Interface update implementation. It does nothing.
|
|
+func (n *noopAgent) updateInterfaceHwAddrByName(inf *vcTypes.Interface) (*vcTypes.Interface, error) {
|
|
+ return nil, nil
|
|
+}
|
|
+
|
|
// listInterfaces is the Noop agent Interfaces list implementation. It does nothing.
|
|
func (n *noopAgent) listInterfaces() ([]*vcTypes.Interface, error) {
|
|
return nil, nil
|
|
diff --git a/virtcontainers/stratovirt.go b/virtcontainers/stratovirt.go
|
|
new file mode 100644
|
|
index 0000000..7c156d5
|
|
--- /dev/null
|
|
+++ b/virtcontainers/stratovirt.go
|
|
@@ -0,0 +1,617 @@
|
|
+package virtcontainers
|
|
+
|
|
+import (
|
|
+ "context"
|
|
+ "fmt"
|
|
+ "os"
|
|
+ "os/exec"
|
|
+ "path/filepath"
|
|
+ "strconv"
|
|
+ "strings"
|
|
+ "syscall"
|
|
+ "time"
|
|
+
|
|
+ govmmQemu "github.com/intel/govmm/qemu"
|
|
+ "github.com/opentracing/opentracing-go"
|
|
+ "github.com/pkg/errors"
|
|
+ "github.com/sirupsen/logrus"
|
|
+
|
|
+ "github.com/kata-containers/runtime/virtcontainers/device/config"
|
|
+ persistapi "github.com/kata-containers/runtime/virtcontainers/persist/api"
|
|
+ vcTypes "github.com/kata-containers/runtime/virtcontainers/pkg/types"
|
|
+ "github.com/kata-containers/runtime/virtcontainers/store"
|
|
+ "github.com/kata-containers/runtime/virtcontainers/types"
|
|
+)
|
|
+
|
|
+const defaultDummyMac = "22:33:44:aa:bb:"
|
|
+const mmioBlkCount = 6
|
|
+const mmioNetCount = 2
|
|
+
|
|
+type stratovirtDev struct {
|
|
+ dev interface{}
|
|
+ devType deviceType
|
|
+}
|
|
+
|
|
+type stratovirt struct {
|
|
+ id string
|
|
+ ctx context.Context
|
|
+ sandbox *Sandbox
|
|
+ store persistapi.PersistDriver
|
|
+ config HypervisorConfig
|
|
+ pid int
|
|
+ socketPath string
|
|
+ consolePath string
|
|
+ qmpMonitorCh qmpChannel
|
|
+ devices []stratovirtDev
|
|
+ HotpluggedVCPUs []CPUDevice
|
|
+ mmioBlkSlots [mmioBlkCount]bool
|
|
+ mmioNetSlots [mmioNetCount]bool
|
|
+}
|
|
+
|
|
+func (s *stratovirt) Logger() *logrus.Entry {
|
|
+ return virtLog.WithField("subsystem", "stratovirt")
|
|
+}
|
|
+
|
|
+func (s *stratovirt) trace(name string) (opentracing.Span, context.Context) {
|
|
+ span, ctx := opentracing.StartSpanFromContext(s.ctx, name)
|
|
+
|
|
+ span.SetTag("subsystem", "hypervisor")
|
|
+ span.SetTag("type", "stratovirt")
|
|
+
|
|
+ return span, ctx
|
|
+}
|
|
+
|
|
+func (s *stratovirt) getKernelCmdLine() string {
|
|
+ var params []string
|
|
+
|
|
+ params = append(params, "pci=off")
|
|
+ params = append(params, "reboot=k")
|
|
+ params = append(params, "panic=1")
|
|
+ params = append(params, "iommu=off")
|
|
+ params = append(params, "acpi=off")
|
|
+ params = append(params, "quiet")
|
|
+ params = append(params, "agent.use_vsock="+strconv.FormatBool(s.config.UseVSock))
|
|
+ params = append(params, SerializeParams(s.config.KernelParams, "=")...)
|
|
+
|
|
+ return strings.Join(params, " ")
|
|
+}
|
|
+
|
|
+func (s *stratovirt) hypervisorConfig() HypervisorConfig {
|
|
+ return s.config
|
|
+}
|
|
+
|
|
+func (s *stratovirt) createSandbox(ctx context.Context, id string, networkNS NetworkNamespace, hypervisorConfig *HypervisorConfig, stateful bool) error {
|
|
+ s.ctx = ctx
|
|
+
|
|
+ span, _ := s.trace("createSandbox")
|
|
+ defer span.Finish()
|
|
+
|
|
+ sandbox, err := globalSandboxList.lookupSandbox(id)
|
|
+ if err != nil {
|
|
+ s.Logger().Error("Get sandbox failed")
|
|
+ return err
|
|
+ }
|
|
+
|
|
+ s.id = id
|
|
+ s.sandbox = sandbox
|
|
+ s.config = *hypervisorConfig
|
|
+ s.socketPath = filepath.Join(s.store.RunVMStoragePath(), id, "qmp.sock")
|
|
+ s.consolePath = filepath.Join(s.store.RunVMStoragePath(), id, "console.sock")
|
|
+ s.qmpMonitorCh = qmpChannel{
|
|
+ ctx: s.ctx,
|
|
+ path: s.socketPath,
|
|
+ }
|
|
+
|
|
+ return err
|
|
+}
|
|
+
|
|
+func (s *stratovirt) waitSandBoxStarted(timeout int) error {
|
|
+ timeStart := time.Now()
|
|
+ for {
|
|
+ err := s.qmpSetup()
|
|
+ if err == nil {
|
|
+ break
|
|
+ }
|
|
+
|
|
+ if int(time.Since(timeStart).Seconds()) > timeout {
|
|
+ return fmt.Errorf("Failed to connect to StratoVirt instance (timeout %ds): %v", timeout, err)
|
|
+ }
|
|
+
|
|
+ time.Sleep(time.Duration(50) * time.Millisecond)
|
|
+ }
|
|
+
|
|
+ if err := s.qmpMonitorCh.qmp.ExecuteQMPCapabilities(s.qmpMonitorCh.ctx); err != nil {
|
|
+ s.Logger().WithError(err).Error(qmpCapErrMsg)
|
|
+ return err
|
|
+ }
|
|
+
|
|
+ return nil
|
|
+}
|
|
+
|
|
+func (s *stratovirt) startSandbox(timeout int) error {
|
|
+ span, _ := s.trace("startSandbox")
|
|
+ defer span.Finish()
|
|
+
|
|
+ var params []string
|
|
+ params = append(params, "-name "+fmt.Sprintf("sandbox-%s", s.id))
|
|
+ params = append(params, "-api-channel unix:"+s.socketPath)
|
|
+
|
|
+ if kernelPath, err := s.config.KernelAssetPath(); err == nil {
|
|
+ params = append(params, "-kernel "+kernelPath)
|
|
+ }
|
|
+
|
|
+ if initrdPath, err := s.config.InitrdAssetPath(); err == nil {
|
|
+ params = append(params, "-initrd "+initrdPath)
|
|
+ }
|
|
+
|
|
+ params = append(params, "-append "+s.getKernelCmdLine())
|
|
+ params = append(params, fmt.Sprintf("-smp %d", s.config.NumVCPUs))
|
|
+ params = append(params, fmt.Sprintf("-m %d", s.config.MemorySize*1024*1024))
|
|
+ params = append(params, fmt.Sprintf("-chardev id=charconsole0,path=%s", s.consolePath))
|
|
+
|
|
+ // add devices to cmdline
|
|
+ for _, d := range s.devices {
|
|
+ switch v := d.dev.(type) {
|
|
+ case Endpoint:
|
|
+ name := v.Name()
|
|
+ mac := v.HardwareAddr()
|
|
+ tapName := v.NetworkPair().TapInterface.TAPIface.Name
|
|
+ params = append(params, fmt.Sprintf("-net id=%s,mac=%s,host_dev_name=%s", name, mac, tapName))
|
|
+ case config.BlockDrive:
|
|
+ id := v.ID
|
|
+ path := v.File
|
|
+ params = append(params, fmt.Sprintf("-drive id=%s,file=%s", id, path))
|
|
+ case types.VSock:
|
|
+ v.VhostFd.Close()
|
|
+ params = append(params, fmt.Sprintf("-device vsock,id=vsock-id,guest-cid=%d", v.ContextID))
|
|
+ default:
|
|
+ s.Logger().Error("Adding device type is unsupported")
|
|
+ }
|
|
+ }
|
|
+
|
|
+ // daemonize
|
|
+ params = append(params, "-daemonize")
|
|
+
|
|
+ // append logfile only on debug
|
|
+ if s.config.Debug {
|
|
+ dir := filepath.Join(store.RunVMStoragePath(), s.id)
|
|
+ params = append(params, fmt.Sprintf("-D %s/stratovirt.log", dir))
|
|
+ }
|
|
+
|
|
+ s.Logger().Info("StratoVirt start with params: ", strings.Join(params, " "))
|
|
+
|
|
+ dir := filepath.Join(store.RunVMStoragePath(), s.id)
|
|
+ err := os.MkdirAll(dir, store.DirMode)
|
|
+ if err != nil {
|
|
+ return err
|
|
+ }
|
|
+ defer func() {
|
|
+ if err != nil {
|
|
+ if err := os.RemoveAll(dir); err != nil {
|
|
+ s.Logger().WithError(err).Error("Fail to clean up vm dir %s", dir)
|
|
+ }
|
|
+ }
|
|
+ }()
|
|
+
|
|
+ binPath, err := s.config.HypervisorAssetPath()
|
|
+ if err != nil {
|
|
+ s.Logger().WithField("Fail to get hypervisor bin path", err).Error()
|
|
+ return err
|
|
+ }
|
|
+
|
|
+ cmd := exec.CommandContext(s.ctx, binPath, params...)
|
|
+ if err := cmd.Run(); err != nil {
|
|
+ s.Logger().WithField("Error starting hypervisor, please check the params", err).Error()
|
|
+ return err
|
|
+ }
|
|
+
|
|
+ if err = s.waitSandBoxStarted(timeout); err != nil {
|
|
+ return err
|
|
+ }
|
|
+
|
|
+ return nil
|
|
+}
|
|
+
|
|
+func (s *stratovirt) stopSandbox(force bool) error {
|
|
+ span, _ := s.trace("stopSandbox")
|
|
+ defer span.Finish()
|
|
+
|
|
+ defer func() {
|
|
+ dir := filepath.Join(store.RunVMStoragePath(), s.id)
|
|
+ link, _ := filepath.EvalSymlinks(dir)
|
|
+
|
|
+ if err := os.RemoveAll(dir); err != nil {
|
|
+ s.Logger().WithError(err).Warnf("Failed to clean up vm dir %s", dir)
|
|
+ }
|
|
+
|
|
+ if link != dir && link != "" {
|
|
+ if err := os.RemoveAll(link); err != nil {
|
|
+ s.Logger().WithError(err).WithField("link", link).Warn("Failed to remove vm path link %s", link)
|
|
+ }
|
|
+ }
|
|
+ }()
|
|
+
|
|
+ if !force {
|
|
+ err := s.qmpSetup()
|
|
+ if err != nil {
|
|
+ return err
|
|
+ }
|
|
+
|
|
+ err = s.qmpMonitorCh.qmp.ExecuteQuit(s.qmpMonitorCh.ctx)
|
|
+ if err != nil {
|
|
+ s.Logger().WithError(err).Error("Fail to execute qmp: QUIT")
|
|
+ return err
|
|
+ }
|
|
+ } else {
|
|
+ if s.pid > 0 {
|
|
+ syscall.Kill(s.pid, syscall.SIGKILL)
|
|
+ }
|
|
+ }
|
|
+ return nil
|
|
+}
|
|
+
|
|
+func (s *stratovirt) pauseSandbox() error {
|
|
+ return nil
|
|
+}
|
|
+
|
|
+func (s *stratovirt) saveSandbox() error {
|
|
+ return nil
|
|
+}
|
|
+
|
|
+func (s *stratovirt) resumeSandbox() error {
|
|
+ return nil
|
|
+}
|
|
+
|
|
+func (s *stratovirt) addDevice(devInfo interface{}, devType deviceType) error {
|
|
+ dev := stratovirtDev{
|
|
+ dev: devInfo,
|
|
+ devType: devType,
|
|
+ }
|
|
+ s.devices = append(s.devices, dev)
|
|
+
|
|
+ return nil
|
|
+}
|
|
+
|
|
+func (s *stratovirt) updateVMInterfaceHwAddr(Name string, HwAddr string) error {
|
|
+ inf := &vcTypes.Interface{
|
|
+ Name: Name,
|
|
+ HwAddr: HwAddr,
|
|
+ IPAddresses: []*vcTypes.IPAddress{},
|
|
+ PciAddr: "",
|
|
+ }
|
|
+
|
|
+ if _, err := s.sandbox.agent.updateInterfaceHwAddrByName(inf); err != nil {
|
|
+ s.Logger().WithError(err).Error("Agent updateInterfaceHwAddrByName failed")
|
|
+ return err
|
|
+ }
|
|
+
|
|
+ return nil
|
|
+}
|
|
+
|
|
+func (s *stratovirt) getDevSlot(Name string, isPut bool) (slot int, err error) {
|
|
+ Name = filepath.Base(strings.ToLower(Name))
|
|
+
|
|
+ if strings.HasPrefix(Name, "eth") {
|
|
+ idxStr := strings.TrimPrefix(Name, "eth")
|
|
+ if idxStr == Name {
|
|
+ return 0, fmt.Errorf("Could not parse idx from Name %q", Name)
|
|
+ }
|
|
+
|
|
+ idx, err := strconv.Atoi(idxStr)
|
|
+ if err != nil {
|
|
+ return 0, fmt.Errorf("Could not convert to int from Str %q", idxStr)
|
|
+ }
|
|
+
|
|
+ if !isPut && s.mmioNetSlots[idx] {
|
|
+ return 0, fmt.Errorf("GetDevSlot failed, slot is being used %q", idxStr)
|
|
+ }
|
|
+ s.mmioNetSlots[idx] = !isPut
|
|
+
|
|
+ return idx, nil
|
|
+ } else if strings.HasPrefix(Name, "vd") {
|
|
+ charStr := strings.TrimPrefix(Name, "vd")
|
|
+ if charStr == Name {
|
|
+ return 0, fmt.Errorf("Could not parse idx from Name %q", Name)
|
|
+ }
|
|
+
|
|
+ char := []rune(charStr)
|
|
+ idx := int(char[0] - 'a')
|
|
+
|
|
+ if !isPut && s.mmioBlkSlots[idx] {
|
|
+ return 0, fmt.Errorf("GetDevSlot failed, slot is being used %q", charStr)
|
|
+ }
|
|
+ s.mmioBlkSlots[idx] = !isPut
|
|
+
|
|
+ return idx, nil
|
|
+ }
|
|
+
|
|
+ return 0, fmt.Errorf("GetDevSlot failed, Name is invalid %q", Name)
|
|
+}
|
|
+
|
|
+func (s *stratovirt) hotplugNet(endpoint Endpoint, op operation) (err error) {
|
|
+ err = s.qmpSetup()
|
|
+ if err != nil {
|
|
+ return err
|
|
+ }
|
|
+ var tap TapInterface
|
|
+
|
|
+ switch endpoint.Type() {
|
|
+ case VethEndpointType:
|
|
+ drive := endpoint.(*VethEndpoint)
|
|
+ tap = drive.NetPair.TapInterface
|
|
+ case TapEndpointType:
|
|
+ drive := endpoint.(*TapEndpoint)
|
|
+ tap = drive.TapInterface
|
|
+ default:
|
|
+ return fmt.Errorf("Endpoint is not supported")
|
|
+ }
|
|
+
|
|
+ switch op {
|
|
+ case addDevice:
|
|
+ var (
|
|
+ VMFdNames []string
|
|
+ VhostFdNames []string
|
|
+ )
|
|
+ for i, VMFd := range tap.VMFds {
|
|
+ fdName := fmt.Sprintf("fd%d", i)
|
|
+ if err := s.qmpMonitorCh.qmp.ExecuteGetFD(s.qmpMonitorCh.ctx, fdName, VMFd); err != nil {
|
|
+ return err
|
|
+ }
|
|
+ VMFdNames = append(VMFdNames, fdName)
|
|
+ }
|
|
+ for i, VhostFd := range tap.VhostFds {
|
|
+ fdName := fmt.Sprintf("vhostfd%d", i)
|
|
+ if err := s.qmpMonitorCh.qmp.ExecuteGetFD(s.qmpMonitorCh.ctx, fdName, VhostFd); err != nil {
|
|
+ return err
|
|
+ }
|
|
+ VhostFd.Close()
|
|
+ VhostFdNames = append(VhostFdNames, fdName)
|
|
+ }
|
|
+
|
|
+ slot, err := s.getDevSlot(endpoint.Name(), false)
|
|
+ if err != nil {
|
|
+ return fmt.Errorf("Could not get unused slot for %q", endpoint.Name())
|
|
+ }
|
|
+
|
|
+ if len(VMFdNames) != 0 || len(VhostFdNames) != 0 {
|
|
+ if err := s.qmpMonitorCh.qmp.ExecuteNetdevAddByFds(s.qmpMonitorCh.ctx, "tap", tap.ID, VMFdNames, VhostFdNames); err != nil {
|
|
+ s.getDevSlot(endpoint.Name(), true)
|
|
+ return err
|
|
+ }
|
|
+ } else {
|
|
+ if err := s.qmpMonitorCh.qmp.ExecuteNetdevAdd(s.qmpMonitorCh.ctx, "tap", tap.ID, tap.TAPIface.Name, "no", "no", 0); err != nil {
|
|
+ s.getDevSlot(endpoint.Name(), true)
|
|
+ return err
|
|
+ }
|
|
+ }
|
|
+ if err := s.qmpMonitorCh.qmp.ExecuteNetPCIDeviceAdd(s.qmpMonitorCh.ctx, tap.Name, tap.ID, endpoint.HardwareAddr(), fmt.Sprintf("%d", slot), "", "", 0, false); err != nil {
|
|
+ s.getDevSlot(endpoint.Name(), true)
|
|
+ return err
|
|
+ }
|
|
+
|
|
+ // update vm interface
|
|
+ if err := s.updateVMInterfaceHwAddr(endpoint.Name(), endpoint.HardwareAddr()); err != nil {
|
|
+ s.getDevSlot(endpoint.Name(), true)
|
|
+ return err
|
|
+ }
|
|
+ case removeDevice:
|
|
+ if err := s.qmpMonitorCh.qmp.ExecuteDeviceDel(s.qmpMonitorCh.ctx, tap.ID); err != nil {
|
|
+ return err
|
|
+ }
|
|
+ if err := s.qmpMonitorCh.qmp.ExecuteNetdevDel(s.qmpMonitorCh.ctx, tap.ID); err != nil {
|
|
+ return err
|
|
+ }
|
|
+
|
|
+ slot, err := s.getDevSlot(endpoint.Name(), true)
|
|
+ if err != nil {
|
|
+ slot = 0
|
|
+ }
|
|
+
|
|
+ // clear vm interface
|
|
+ if err := s.updateVMInterfaceHwAddr(endpoint.Name(), defaultDummyMac+fmt.Sprintf("%02x", slot)); err != nil {
|
|
+ s.getDevSlot(endpoint.Name(), false)
|
|
+ return err
|
|
+ }
|
|
+ default:
|
|
+ return fmt.Errorf("Operation is not supported")
|
|
+ }
|
|
+
|
|
+ return nil
|
|
+}
|
|
+
|
|
+func (s *stratovirt) hotplugBlk(drive *config.BlockDrive, op operation) (err error) {
|
|
+ err = s.qmpSetup()
|
|
+ if err != nil {
|
|
+ return err
|
|
+ }
|
|
+
|
|
+ switch op {
|
|
+ case addDevice:
|
|
+ driver := "virtio-blk-pci"
|
|
+ slot, err := s.getDevSlot(drive.VirtPath, false)
|
|
+ if err != nil {
|
|
+ return fmt.Errorf("Could not get unused slot for %q", drive.VirtPath)
|
|
+ }
|
|
+
|
|
+ if err := s.qmpMonitorCh.qmp.ExecuteBlockdevAdd(s.qmpMonitorCh.ctx, drive.File, drive.ID); err != nil {
|
|
+ s.getDevSlot(drive.VirtPath, true)
|
|
+ return err
|
|
+ }
|
|
+
|
|
+ if err := s.qmpMonitorCh.qmp.ExecutePCIDeviceAdd(s.qmpMonitorCh.ctx, drive.ID, drive.ID, driver, fmt.Sprintf("%d", slot), "", "", 0, true, false); err != nil {
|
|
+ s.getDevSlot(drive.VirtPath, true)
|
|
+ return err
|
|
+ }
|
|
+ case removeDevice:
|
|
+ if err := s.qmpMonitorCh.qmp.ExecuteDeviceDel(s.qmpMonitorCh.ctx, drive.ID); err != nil {
|
|
+ return err
|
|
+ }
|
|
+ if err := s.qmpMonitorCh.qmp.ExecuteBlockdevDel(s.qmpMonitorCh.ctx, drive.ID); err != nil {
|
|
+ return err
|
|
+ }
|
|
+
|
|
+ s.getDevSlot(drive.VirtPath, true)
|
|
+ default:
|
|
+ return fmt.Errorf("Operation is not supported")
|
|
+ }
|
|
+
|
|
+ return nil
|
|
+}
|
|
+
|
|
+func (s *stratovirt) hotplugAddDevice(devInfo interface{}, devType deviceType) (interface{}, error) {
|
|
+ span, _ := s.trace("hotplugAddDevice")
|
|
+ defer span.Finish()
|
|
+
|
|
+ switch devType {
|
|
+ case netDev:
|
|
+ return nil, s.hotplugNet(devInfo.(Endpoint), addDevice)
|
|
+ case blockDev:
|
|
+ return nil, s.hotplugBlk(devInfo.(*config.BlockDrive), addDevice)
|
|
+ default:
|
|
+ return nil, fmt.Errorf("Hotplug add device failed: unsupported device type '%v'", devType)
|
|
+ }
|
|
+}
|
|
+
|
|
+func (s *stratovirt) hotplugRemoveDevice(devInfo interface{}, devType deviceType) (interface{}, error) {
|
|
+ span, _ := s.trace("hotplugRemoveDevice")
|
|
+ defer span.Finish()
|
|
+
|
|
+ switch devType {
|
|
+ case netDev:
|
|
+ return nil, s.hotplugNet(devInfo.(Endpoint), removeDevice)
|
|
+ case blockDev:
|
|
+ return nil, s.hotplugBlk(devInfo.(*config.BlockDrive), removeDevice)
|
|
+ default:
|
|
+ return nil, fmt.Errorf("Hotplug remove device: unsupported device type '%v'", devType)
|
|
+ }
|
|
+}
|
|
+
|
|
+func (s *stratovirt) resizeMemory(reqMemMB uint32, memoryBlockSizeMB uint32, probe bool) (uint32, memoryDevice, error) {
|
|
+ return 0, memoryDevice{}, nil
|
|
+}
|
|
+
|
|
+func (s *stratovirt) resizeVCPUs(reqVCPUs uint32) (currentVCPUs uint32, newVCPUs uint32, err error) {
|
|
+ return 0, 0, nil
|
|
+}
|
|
+
|
|
+func (s *stratovirt) getSandboxConsole(id string) (string, error) {
|
|
+ return s.consolePath, nil
|
|
+}
|
|
+
|
|
+func (s *stratovirt) getMemorySize() uint32 {
|
|
+ return 0
|
|
+}
|
|
+
|
|
+func (s *stratovirt) disconnect() {
|
|
+ span, _ := s.trace("disconnect")
|
|
+ defer span.Finish()
|
|
+
|
|
+ s.qmpTeardown()
|
|
+}
|
|
+
|
|
+func (s *stratovirt) capabilities() types.Capabilities {
|
|
+ span, _ := s.trace("capabilities")
|
|
+ defer span.Finish()
|
|
+
|
|
+ var caps types.Capabilities
|
|
+ caps.SetBlockDeviceHotplugSupport()
|
|
+
|
|
+ return caps
|
|
+}
|
|
+
|
|
+func (s *stratovirt) qmpTeardown() {
|
|
+ if s.qmpMonitorCh.qmp != nil {
|
|
+ s.qmpMonitorCh.qmp.Shutdown()
|
|
+ <-s.qmpMonitorCh.disconn
|
|
+ s.qmpMonitorCh.qmp = nil
|
|
+ s.qmpMonitorCh.disconn = nil
|
|
+ }
|
|
+}
|
|
+
|
|
+func (s *stratovirt) qmpSetup() error {
|
|
+ s.qmpTeardown()
|
|
+
|
|
+ cfg := govmmQemu.QMPConfig{Logger: newQMPLogger()}
|
|
+
|
|
+ // Auto-closed by QMPStart().
|
|
+ disconnectCh := make(chan struct{})
|
|
+
|
|
+ qmp, _, err := govmmQemu.QMPStart(s.qmpMonitorCh.ctx, s.qmpMonitorCh.path, cfg, disconnectCh)
|
|
+ if err != nil {
|
|
+ s.Logger().WithError(err).Error("Failed to connect to StratoVirt instance")
|
|
+ return err
|
|
+ }
|
|
+
|
|
+ s.qmpMonitorCh.qmp = qmp
|
|
+ s.qmpMonitorCh.disconn = disconnectCh
|
|
+
|
|
+ return nil
|
|
+}
|
|
+
|
|
+func (s *stratovirt) getThreadIDs() (vcpuThreadIDs, error) {
|
|
+ span, _ := s.trace("getThreadIDs")
|
|
+ defer span.Finish()
|
|
+
|
|
+ tid := vcpuThreadIDs{}
|
|
+ if err := s.qmpSetup(); err != nil {
|
|
+ return tid, err
|
|
+ }
|
|
+
|
|
+ cpuInfos, err := s.qmpMonitorCh.qmp.ExecQueryCpus(s.qmpMonitorCh.ctx)
|
|
+ if err != nil {
|
|
+ s.Logger().WithError(err).Error("Failed to query cpu infos")
|
|
+ return tid, err
|
|
+ }
|
|
+
|
|
+ tid.vcpus = make(map[int]int, len(cpuInfos))
|
|
+ for _, i := range cpuInfos {
|
|
+ if i.ThreadID > 0 {
|
|
+ tid.vcpus[i.CPU] = i.ThreadID
|
|
+ }
|
|
+ }
|
|
+ return tid, nil
|
|
+}
|
|
+
|
|
+func (s *stratovirt) cleanup() error {
|
|
+ span, _ := s.trace("cleanup")
|
|
+ defer span.Finish()
|
|
+
|
|
+ s.qmpTeardown()
|
|
+
|
|
+ return nil
|
|
+}
|
|
+
|
|
+func (s *stratovirt) getPids() []int {
|
|
+ return []int{s.pid}
|
|
+}
|
|
+
|
|
+func (s *stratovirt) fromGrpc(ctx context.Context, hypervisorConfig *HypervisorConfig, j []byte) error {
|
|
+ return nil
|
|
+}
|
|
+
|
|
+func (s *stratovirt) toGrpc() ([]byte, error) {
|
|
+ return nil, nil
|
|
+}
|
|
+
|
|
+func (s *stratovirt) check() error {
|
|
+ if err := syscall.Kill(s.pid, syscall.Signal(0)); err != nil {
|
|
+ return errors.Wrapf(err, "Failed to ping StratoVirt process")
|
|
+ }
|
|
+
|
|
+ return nil
|
|
+}
|
|
+
|
|
+func (s *stratovirt) generateSocket(id string, useVsock bool) (interface{}, error) {
|
|
+ return generateVMSocket(id, useVsock, s.store.RunVMStoragePath())
|
|
+}
|
|
+
|
|
+func (s *stratovirt) save() (p persistapi.HypervisorState) {
|
|
+ p.Pid = s.pid
|
|
+ p.Type = string(StratovirtHypervisor)
|
|
+ return
|
|
+}
|
|
+
|
|
+func (s *stratovirt) load(p persistapi.HypervisorState) {
|
|
+ s.pid = p.Pid
|
|
+ return
|
|
+}
|
|
--
|
|
1.8.3.1
|
|
|