From be0c0512052783ba5ca73926a19d627165623062 Mon Sep 17 00:00:00 2001 From: themighty1 Date: Sat, 13 Feb 2021 14:03:12 +0300 Subject: [PATCH] makefile: rename, remove unused targets trigger targets only when relevant files actually are changed git: do not track files which are generated during make github actions fix to not rely on a pre-built ui.pb.go --- .github/workflows/go.yml | 7 +- Makefile | 11 +- daemon/Makefile | 5 +- daemon/ui/protocol/ui.pb.go | 1034 ------------------------- ui/Makefile | 6 +- ui/i18n/Makefile | 36 +- ui/opensnitch/resources_rc.py | 1354 --------------------------------- ui/opensnitch/ui_pb2.py | 1290 ------------------------------- ui/opensnitch/ui_pb2_grpc.py | 97 --- 9 files changed, 48 insertions(+), 3792 deletions(-) delete mode 100644 daemon/ui/protocol/ui.pb.go delete mode 100644 ui/opensnitch/resources_rc.py delete mode 100644 ui/opensnitch/ui_pb2.py delete mode 100644 ui/opensnitch/ui_pb2_grpc.py diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index ddfdf675..790d9146 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -27,5 +27,10 @@ jobs: - name: Build run: | - cd daemon + export GOPATH=~/go + export PATH=$PATH:$GOPATH/bin + go get github.com/golang/protobuf/protoc-gen-go + cd proto + make ../daemon/ui/protocol/ui.pb.go + cd ../daemon go build -v . diff --git a/Makefile b/Makefile index 86e1a276..96d668cf 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -all: protocol daemon/opensnitchd ui/resources_rc.py +all: protocol opensnitch_daemon gui install: @cd daemon && make install @@ -7,19 +7,16 @@ install: protocol: @cd proto && make -daemon/opensnitchd: +opensnitch_daemon: @cd daemon && make -ui/resources_rc.py: +gui: @cd ui && make -deps: - @cd daemon && make deps - @cd ui && make deps - clean: @cd daemon && make clean @cd proto && make clean + @cd ui && make clean run: cd ui && pip3 install --upgrade . && cd .. diff --git a/daemon/Makefile b/daemon/Makefile index ce61316d..1acfbb0d 100644 --- a/daemon/Makefile +++ b/daemon/Makefile @@ -1,3 +1,6 @@ +#SRC contains all *.go *.c *.h files in daemon/ and its subfolders +SRC := $(shell find . -type f -name '*.go' -o -name '*.h' -o -name '*.c') + all: opensnitchd install: @@ -8,7 +11,7 @@ install: @cp system-fw.json /etc/opensnitchd/ @systemctl daemon-reload -opensnitchd: +opensnitchd: $(SRC) @go build -o opensnitchd . clean: diff --git a/daemon/ui/protocol/ui.pb.go b/daemon/ui/protocol/ui.pb.go deleted file mode 100644 index ce3f525b..00000000 --- a/daemon/ui/protocol/ui.pb.go +++ /dev/null @@ -1,1034 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: ui.proto - -package protocol - -import ( - context "context" - fmt "fmt" - proto "github.com/golang/protobuf/proto" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - math "math" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// 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.ProtoPackageIsVersion2 // please upgrade the proto package - -type Action int32 - -const ( - Action_NONE Action = 0 - Action_LOAD_FIREWALL Action = 1 - Action_UNLOAD_FIREWALL Action = 2 - Action_CHANGE_CONFIG Action = 3 - Action_ENABLE_RULE Action = 4 - Action_DISABLE_RULE Action = 5 - Action_DELETE_RULE Action = 6 - Action_CHANGE_RULE Action = 7 - Action_LOG_LEVEL Action = 8 - Action_STOP Action = 9 - Action_MONITOR_PROCESS Action = 10 - Action_STOP_MONITOR_PROCESS Action = 11 -) - -var Action_name = map[int32]string{ - 0: "NONE", - 1: "LOAD_FIREWALL", - 2: "UNLOAD_FIREWALL", - 3: "CHANGE_CONFIG", - 4: "ENABLE_RULE", - 5: "DISABLE_RULE", - 6: "DELETE_RULE", - 7: "CHANGE_RULE", - 8: "LOG_LEVEL", - 9: "STOP", - 10: "MONITOR_PROCESS", - 11: "STOP_MONITOR_PROCESS", -} - -var Action_value = map[string]int32{ - "NONE": 0, - "LOAD_FIREWALL": 1, - "UNLOAD_FIREWALL": 2, - "CHANGE_CONFIG": 3, - "ENABLE_RULE": 4, - "DISABLE_RULE": 5, - "DELETE_RULE": 6, - "CHANGE_RULE": 7, - "LOG_LEVEL": 8, - "STOP": 9, - "MONITOR_PROCESS": 10, - "STOP_MONITOR_PROCESS": 11, -} - -func (x Action) String() string { - return proto.EnumName(Action_name, int32(x)) -} - -func (Action) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_63867a62624c1283, []int{0} -} - -type NotificationReplyCode int32 - -const ( - NotificationReplyCode_OK NotificationReplyCode = 0 - NotificationReplyCode_ERROR NotificationReplyCode = 1 -) - -var NotificationReplyCode_name = map[int32]string{ - 0: "OK", - 1: "ERROR", -} - -var NotificationReplyCode_value = map[string]int32{ - "OK": 0, - "ERROR": 1, -} - -func (x NotificationReplyCode) String() string { - return proto.EnumName(NotificationReplyCode_name, int32(x)) -} - -func (NotificationReplyCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_63867a62624c1283, []int{1} -} - -type Event struct { - Time string `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"` - Connection *Connection `protobuf:"bytes,2,opt,name=connection,proto3" json:"connection,omitempty"` - Rule *Rule `protobuf:"bytes,3,opt,name=rule,proto3" json:"rule,omitempty"` - Unixnano int64 `protobuf:"varint,4,opt,name=unixnano,proto3" json:"unixnano,omitempty"` -} - -func (m *Event) Reset() { *m = Event{} } -func (m *Event) String() string { return proto.CompactTextString(m) } -func (*Event) ProtoMessage() {} -func (*Event) Descriptor() ([]byte, []int) { - return fileDescriptor_63867a62624c1283, []int{0} -} - -func (m *Event) GetTime() string { - if m != nil { - return m.Time - } - return "" -} - -func (m *Event) GetConnection() *Connection { - if m != nil { - return m.Connection - } - return nil -} - -func (m *Event) GetRule() *Rule { - if m != nil { - return m.Rule - } - return nil -} - -func (m *Event) GetUnixnano() int64 { - if m != nil { - return m.Unixnano - } - return 0 -} - -type Statistics struct { - DaemonVersion string `protobuf:"bytes,1,opt,name=daemon_version,json=daemonVersion,proto3" json:"daemon_version,omitempty"` - Rules uint64 `protobuf:"varint,2,opt,name=rules,proto3" json:"rules,omitempty"` - Uptime uint64 `protobuf:"varint,3,opt,name=uptime,proto3" json:"uptime,omitempty"` - DnsResponses uint64 `protobuf:"varint,4,opt,name=dns_responses,json=dnsResponses,proto3" json:"dns_responses,omitempty"` - Connections uint64 `protobuf:"varint,5,opt,name=connections,proto3" json:"connections,omitempty"` - Ignored uint64 `protobuf:"varint,6,opt,name=ignored,proto3" json:"ignored,omitempty"` - Accepted uint64 `protobuf:"varint,7,opt,name=accepted,proto3" json:"accepted,omitempty"` - Dropped uint64 `protobuf:"varint,8,opt,name=dropped,proto3" json:"dropped,omitempty"` - RuleHits uint64 `protobuf:"varint,9,opt,name=rule_hits,json=ruleHits,proto3" json:"rule_hits,omitempty"` - RuleMisses uint64 `protobuf:"varint,10,opt,name=rule_misses,json=ruleMisses,proto3" json:"rule_misses,omitempty"` - ByProto map[string]uint64 `protobuf:"bytes,11,rep,name=by_proto,json=byProto,proto3" json:"by_proto,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - ByAddress map[string]uint64 `protobuf:"bytes,12,rep,name=by_address,json=byAddress,proto3" json:"by_address,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - ByHost map[string]uint64 `protobuf:"bytes,13,rep,name=by_host,json=byHost,proto3" json:"by_host,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - ByPort map[string]uint64 `protobuf:"bytes,14,rep,name=by_port,json=byPort,proto3" json:"by_port,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - ByUid map[string]uint64 `protobuf:"bytes,15,rep,name=by_uid,json=byUid,proto3" json:"by_uid,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - ByExecutable map[string]uint64 `protobuf:"bytes,16,rep,name=by_executable,json=byExecutable,proto3" json:"by_executable,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - Events []*Event `protobuf:"bytes,17,rep,name=events,proto3" json:"events,omitempty"` -} - -func (m *Statistics) Reset() { *m = Statistics{} } -func (m *Statistics) String() string { return proto.CompactTextString(m) } -func (*Statistics) ProtoMessage() {} -func (*Statistics) Descriptor() ([]byte, []int) { - return fileDescriptor_63867a62624c1283, []int{1} -} - -func (m *Statistics) GetDaemonVersion() string { - if m != nil { - return m.DaemonVersion - } - return "" -} - -func (m *Statistics) GetRules() uint64 { - if m != nil { - return m.Rules - } - return 0 -} - -func (m *Statistics) GetUptime() uint64 { - if m != nil { - return m.Uptime - } - return 0 -} - -func (m *Statistics) GetDnsResponses() uint64 { - if m != nil { - return m.DnsResponses - } - return 0 -} - -func (m *Statistics) GetConnections() uint64 { - if m != nil { - return m.Connections - } - return 0 -} - -func (m *Statistics) GetIgnored() uint64 { - if m != nil { - return m.Ignored - } - return 0 -} - -func (m *Statistics) GetAccepted() uint64 { - if m != nil { - return m.Accepted - } - return 0 -} - -func (m *Statistics) GetDropped() uint64 { - if m != nil { - return m.Dropped - } - return 0 -} - -func (m *Statistics) GetRuleHits() uint64 { - if m != nil { - return m.RuleHits - } - return 0 -} - -func (m *Statistics) GetRuleMisses() uint64 { - if m != nil { - return m.RuleMisses - } - return 0 -} - -func (m *Statistics) GetByProto() map[string]uint64 { - if m != nil { - return m.ByProto - } - return nil -} - -func (m *Statistics) GetByAddress() map[string]uint64 { - if m != nil { - return m.ByAddress - } - return nil -} - -func (m *Statistics) GetByHost() map[string]uint64 { - if m != nil { - return m.ByHost - } - return nil -} - -func (m *Statistics) GetByPort() map[string]uint64 { - if m != nil { - return m.ByPort - } - return nil -} - -func (m *Statistics) GetByUid() map[string]uint64 { - if m != nil { - return m.ByUid - } - return nil -} - -func (m *Statistics) GetByExecutable() map[string]uint64 { - if m != nil { - return m.ByExecutable - } - return nil -} - -func (m *Statistics) GetEvents() []*Event { - if m != nil { - return m.Events - } - return nil -} - -type PingRequest struct { - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Stats *Statistics `protobuf:"bytes,2,opt,name=stats,proto3" json:"stats,omitempty"` -} - -func (m *PingRequest) Reset() { *m = PingRequest{} } -func (m *PingRequest) String() string { return proto.CompactTextString(m) } -func (*PingRequest) ProtoMessage() {} -func (*PingRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_63867a62624c1283, []int{2} -} - -func (m *PingRequest) GetId() uint64 { - if m != nil { - return m.Id - } - return 0 -} - -func (m *PingRequest) GetStats() *Statistics { - if m != nil { - return m.Stats - } - return nil -} - -type PingReply struct { - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (m *PingReply) Reset() { *m = PingReply{} } -func (m *PingReply) String() string { return proto.CompactTextString(m) } -func (*PingReply) ProtoMessage() {} -func (*PingReply) Descriptor() ([]byte, []int) { - return fileDescriptor_63867a62624c1283, []int{3} -} - -func (m *PingReply) GetId() uint64 { - if m != nil { - return m.Id - } - return 0 -} - -type Connection struct { - Protocol string `protobuf:"bytes,1,opt,name=protocol,proto3" json:"protocol,omitempty"` - SrcIp string `protobuf:"bytes,2,opt,name=src_ip,json=srcIp,proto3" json:"src_ip,omitempty"` - SrcPort uint32 `protobuf:"varint,3,opt,name=src_port,json=srcPort,proto3" json:"src_port,omitempty"` - DstIp string `protobuf:"bytes,4,opt,name=dst_ip,json=dstIp,proto3" json:"dst_ip,omitempty"` - DstHost string `protobuf:"bytes,5,opt,name=dst_host,json=dstHost,proto3" json:"dst_host,omitempty"` - DstPort uint32 `protobuf:"varint,6,opt,name=dst_port,json=dstPort,proto3" json:"dst_port,omitempty"` - UserId uint32 `protobuf:"varint,7,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - ProcessId uint32 `protobuf:"varint,8,opt,name=process_id,json=processId,proto3" json:"process_id,omitempty"` - ProcessPath string `protobuf:"bytes,9,opt,name=process_path,json=processPath,proto3" json:"process_path,omitempty"` - ProcessCwd string `protobuf:"bytes,10,opt,name=process_cwd,json=processCwd,proto3" json:"process_cwd,omitempty"` - ProcessArgs []string `protobuf:"bytes,11,rep,name=process_args,json=processArgs,proto3" json:"process_args,omitempty"` - ProcessEnv map[string]string `protobuf:"bytes,12,rep,name=process_env,json=processEnv,proto3" json:"process_env,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (m *Connection) Reset() { *m = Connection{} } -func (m *Connection) String() string { return proto.CompactTextString(m) } -func (*Connection) ProtoMessage() {} -func (*Connection) Descriptor() ([]byte, []int) { - return fileDescriptor_63867a62624c1283, []int{4} -} - -func (m *Connection) GetProtocol() string { - if m != nil { - return m.Protocol - } - return "" -} - -func (m *Connection) GetSrcIp() string { - if m != nil { - return m.SrcIp - } - return "" -} - -func (m *Connection) GetSrcPort() uint32 { - if m != nil { - return m.SrcPort - } - return 0 -} - -func (m *Connection) GetDstIp() string { - if m != nil { - return m.DstIp - } - return "" -} - -func (m *Connection) GetDstHost() string { - if m != nil { - return m.DstHost - } - return "" -} - -func (m *Connection) GetDstPort() uint32 { - if m != nil { - return m.DstPort - } - return 0 -} - -func (m *Connection) GetUserId() uint32 { - if m != nil { - return m.UserId - } - return 0 -} - -func (m *Connection) GetProcessId() uint32 { - if m != nil { - return m.ProcessId - } - return 0 -} - -func (m *Connection) GetProcessPath() string { - if m != nil { - return m.ProcessPath - } - return "" -} - -func (m *Connection) GetProcessCwd() string { - if m != nil { - return m.ProcessCwd - } - return "" -} - -func (m *Connection) GetProcessArgs() []string { - if m != nil { - return m.ProcessArgs - } - return nil -} - -func (m *Connection) GetProcessEnv() map[string]string { - if m != nil { - return m.ProcessEnv - } - return nil -} - -type Operator struct { - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Operand string `protobuf:"bytes,2,opt,name=operand,proto3" json:"operand,omitempty"` - Data string `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` - Sensitive bool `protobuf:"varint,4,opt,name=sensitive,proto3" json:"sensitive,omitempty"` -} - -func (m *Operator) Reset() { *m = Operator{} } -func (m *Operator) String() string { return proto.CompactTextString(m) } -func (*Operator) ProtoMessage() {} -func (*Operator) Descriptor() ([]byte, []int) { - return fileDescriptor_63867a62624c1283, []int{5} -} - -func (m *Operator) GetType() string { - if m != nil { - return m.Type - } - return "" -} - -func (m *Operator) GetOperand() string { - if m != nil { - return m.Operand - } - return "" -} - -func (m *Operator) GetData() string { - if m != nil { - return m.Data - } - return "" -} - -func (m *Operator) GetSensitive() bool { - if m != nil { - return m.Sensitive - } - return false -} - -type Rule struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` - Precedence bool `protobuf:"varint,3,opt,name=precedence,proto3" json:"precedence,omitempty"` - Action string `protobuf:"bytes,4,opt,name=action,proto3" json:"action,omitempty"` - Duration string `protobuf:"bytes,5,opt,name=duration,proto3" json:"duration,omitempty"` - Operator *Operator `protobuf:"bytes,6,opt,name=operator,proto3" json:"operator,omitempty"` -} - -func (m *Rule) Reset() { *m = Rule{} } -func (m *Rule) String() string { return proto.CompactTextString(m) } -func (*Rule) ProtoMessage() {} -func (*Rule) Descriptor() ([]byte, []int) { - return fileDescriptor_63867a62624c1283, []int{6} -} - -func (m *Rule) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *Rule) GetEnabled() bool { - if m != nil { - return m.Enabled - } - return false -} - -func (m *Rule) GetPrecedence() bool { - if m != nil { - return m.Precedence - } - return false -} - -func (m *Rule) GetAction() string { - if m != nil { - return m.Action - } - return "" -} - -func (m *Rule) GetDuration() string { - if m != nil { - return m.Duration - } - return "" -} - -func (m *Rule) GetOperator() *Operator { - if m != nil { - return m.Operator - } - return nil -} - -// client configuration sent on Subscribe() -type ClientConfig struct { - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` - IsFirewallRunning bool `protobuf:"varint,4,opt,name=isFirewallRunning,proto3" json:"isFirewallRunning,omitempty"` - // daemon configuration as json string - Config string `protobuf:"bytes,5,opt,name=config,proto3" json:"config,omitempty"` - LogLevel uint32 `protobuf:"varint,6,opt,name=logLevel,proto3" json:"logLevel,omitempty"` - Rules []*Rule `protobuf:"bytes,7,rep,name=rules,proto3" json:"rules,omitempty"` -} - -func (m *ClientConfig) Reset() { *m = ClientConfig{} } -func (m *ClientConfig) String() string { return proto.CompactTextString(m) } -func (*ClientConfig) ProtoMessage() {} -func (*ClientConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_63867a62624c1283, []int{7} -} - -func (m *ClientConfig) GetId() uint64 { - if m != nil { - return m.Id - } - return 0 -} - -func (m *ClientConfig) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *ClientConfig) GetVersion() string { - if m != nil { - return m.Version - } - return "" -} - -func (m *ClientConfig) GetIsFirewallRunning() bool { - if m != nil { - return m.IsFirewallRunning - } - return false -} - -func (m *ClientConfig) GetConfig() string { - if m != nil { - return m.Config - } - return "" -} - -func (m *ClientConfig) GetLogLevel() uint32 { - if m != nil { - return m.LogLevel - } - return 0 -} - -func (m *ClientConfig) GetRules() []*Rule { - if m != nil { - return m.Rules - } - return nil -} - -// notification sent to the clients (daemons) -type Notification struct { - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - ClientName string `protobuf:"bytes,2,opt,name=clientName,proto3" json:"clientName,omitempty"` - ServerName string `protobuf:"bytes,3,opt,name=serverName,proto3" json:"serverName,omitempty"` - // CHANGE_CONFIG: 2, data: {"default_timeout": 1, ...} - Type Action `protobuf:"varint,4,opt,name=type,proto3,enum=protocol.Action" json:"type,omitempty"` - Data string `protobuf:"bytes,5,opt,name=data,proto3" json:"data,omitempty"` - Rules []*Rule `protobuf:"bytes,6,rep,name=rules,proto3" json:"rules,omitempty"` -} - -func (m *Notification) Reset() { *m = Notification{} } -func (m *Notification) String() string { return proto.CompactTextString(m) } -func (*Notification) ProtoMessage() {} -func (*Notification) Descriptor() ([]byte, []int) { - return fileDescriptor_63867a62624c1283, []int{8} -} - -func (m *Notification) GetId() uint64 { - if m != nil { - return m.Id - } - return 0 -} - -func (m *Notification) GetClientName() string { - if m != nil { - return m.ClientName - } - return "" -} - -func (m *Notification) GetServerName() string { - if m != nil { - return m.ServerName - } - return "" -} - -func (m *Notification) GetType() Action { - if m != nil { - return m.Type - } - return Action_NONE -} - -func (m *Notification) GetData() string { - if m != nil { - return m.Data - } - return "" -} - -func (m *Notification) GetRules() []*Rule { - if m != nil { - return m.Rules - } - return nil -} - -// notification reply sent to the server (GUI) -type NotificationReply struct { - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Code NotificationReplyCode `protobuf:"varint,2,opt,name=code,proto3,enum=protocol.NotificationReplyCode" json:"code,omitempty"` - Data string `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` -} - -func (m *NotificationReply) Reset() { *m = NotificationReply{} } -func (m *NotificationReply) String() string { return proto.CompactTextString(m) } -func (*NotificationReply) ProtoMessage() {} -func (*NotificationReply) Descriptor() ([]byte, []int) { - return fileDescriptor_63867a62624c1283, []int{9} -} - -func (m *NotificationReply) GetId() uint64 { - if m != nil { - return m.Id - } - return 0 -} - -func (m *NotificationReply) GetCode() NotificationReplyCode { - if m != nil { - return m.Code - } - return NotificationReplyCode_OK -} - -func (m *NotificationReply) GetData() string { - if m != nil { - return m.Data - } - return "" -} - -func init() { - proto.RegisterEnum("protocol.Action", Action_name, Action_value) - proto.RegisterEnum("protocol.NotificationReplyCode", NotificationReplyCode_name, NotificationReplyCode_value) - proto.RegisterType((*Event)(nil), "protocol.Event") - proto.RegisterType((*Statistics)(nil), "protocol.Statistics") - proto.RegisterType((*PingRequest)(nil), "protocol.PingRequest") - proto.RegisterType((*PingReply)(nil), "protocol.PingReply") - proto.RegisterType((*Connection)(nil), "protocol.Connection") - proto.RegisterType((*Operator)(nil), "protocol.Operator") - proto.RegisterType((*Rule)(nil), "protocol.Rule") - proto.RegisterType((*ClientConfig)(nil), "protocol.ClientConfig") - proto.RegisterType((*Notification)(nil), "protocol.Notification") - proto.RegisterType((*NotificationReply)(nil), "protocol.NotificationReply") -} - -func init() { - proto.RegisterFile("ui.proto", fileDescriptor_63867a62624c1283) -} - -var fileDescriptor_63867a62624c1283 = []byte{ - // 1335 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0x5f, 0x73, 0xd3, 0x46, - 0x10, 0x8f, 0x1c, 0x5b, 0x96, 0xd6, 0x76, 0xe2, 0x1c, 0x84, 0xaa, 0xa1, 0x85, 0x60, 0x68, 0x9b, - 0xc9, 0x74, 0x32, 0x6d, 0x60, 0x3a, 0xc0, 0xc0, 0x74, 0x8c, 0x11, 0xe0, 0x62, 0x6c, 0xcf, 0x85, - 0xd0, 0x47, 0x8d, 0xfe, 0x1c, 0xce, 0x15, 0x73, 0x52, 0x75, 0x67, 0x83, 0x3f, 0x46, 0xbf, 0x4d, - 0x9f, 0xfa, 0xda, 0x97, 0x3e, 0xf6, 0xa9, 0x9f, 0xa4, 0x8f, 0x9d, 0xbb, 0x93, 0x2c, 0xc5, 0x49, - 0xe8, 0xe4, 0xc9, 0xda, 0xdf, 0x6f, 0x7f, 0xab, 0xdd, 0xd5, 0xde, 0xad, 0xc1, 0x9a, 0xd1, 0x83, - 0x24, 0x8d, 0x45, 0x8c, 0x2c, 0xf5, 0x13, 0xc6, 0xd3, 0xce, 0x6f, 0x06, 0xd4, 0xdc, 0x39, 0x61, - 0x02, 0x21, 0xa8, 0x0a, 0xfa, 0x9e, 0x38, 0xc6, 0xae, 0xb1, 0x67, 0x63, 0xf5, 0x8c, 0xee, 0x01, - 0x84, 0x31, 0x63, 0x24, 0x14, 0x34, 0x66, 0x4e, 0x65, 0xd7, 0xd8, 0x6b, 0x1c, 0x5e, 0x3d, 0xc8, - 0xc5, 0x07, 0xbd, 0x25, 0x87, 0x4b, 0x7e, 0xa8, 0x03, 0xd5, 0x74, 0x36, 0x25, 0xce, 0xba, 0xf2, - 0xdf, 0x28, 0xfc, 0xf1, 0x6c, 0x4a, 0xb0, 0xe2, 0xd0, 0x0e, 0x58, 0x33, 0x46, 0x3f, 0x32, 0x9f, - 0xc5, 0x4e, 0x75, 0xd7, 0xd8, 0x5b, 0xc7, 0x4b, 0xbb, 0xf3, 0xa7, 0x05, 0x70, 0x24, 0x7c, 0x41, - 0xb9, 0xa0, 0x21, 0x47, 0x5f, 0xc1, 0x46, 0xe4, 0x93, 0xf7, 0x31, 0xf3, 0xe6, 0x24, 0xe5, 0x32, - 0x11, 0x9d, 0x62, 0x4b, 0xa3, 0x6f, 0x34, 0x88, 0xae, 0x42, 0x4d, 0x46, 0xe6, 0x2a, 0xcd, 0x2a, - 0xd6, 0x06, 0xba, 0x06, 0xe6, 0x2c, 0x51, 0x75, 0xad, 0x2b, 0x38, 0xb3, 0xd0, 0x6d, 0x68, 0x45, - 0x8c, 0x7b, 0x29, 0xe1, 0x49, 0xcc, 0x38, 0xe1, 0x2a, 0x89, 0x2a, 0x6e, 0x46, 0x8c, 0xe3, 0x1c, - 0x43, 0xbb, 0xd0, 0x28, 0xca, 0xe2, 0x4e, 0x4d, 0xb9, 0x94, 0x21, 0xe4, 0x40, 0x9d, 0x4e, 0x58, - 0x9c, 0x92, 0xc8, 0x31, 0x15, 0x9b, 0x9b, 0xb2, 0x40, 0x3f, 0x0c, 0x49, 0x22, 0x48, 0xe4, 0xd4, - 0x15, 0xb5, 0xb4, 0xa5, 0x2a, 0x4a, 0xe3, 0x24, 0x21, 0x91, 0x63, 0x69, 0x55, 0x66, 0xa2, 0xeb, - 0x60, 0xcb, 0xbc, 0xbd, 0x13, 0x2a, 0xb8, 0x63, 0x6b, 0x99, 0x04, 0x5e, 0x50, 0xc1, 0xd1, 0x4d, - 0x68, 0x28, 0xf2, 0x3d, 0xe5, 0x32, 0x63, 0x50, 0x34, 0x48, 0xe8, 0x95, 0x42, 0xd0, 0x23, 0xb0, - 0x82, 0x85, 0xa7, 0xda, 0xed, 0x34, 0x76, 0xd7, 0xf7, 0x1a, 0x87, 0xb7, 0x8a, 0xe6, 0x17, 0x1d, - 0x3d, 0x78, 0xb2, 0x18, 0x4b, 0xd4, 0x65, 0x22, 0x5d, 0xe0, 0x7a, 0xa0, 0x2d, 0xf4, 0x04, 0x20, - 0x58, 0x78, 0x7e, 0x14, 0xa5, 0x84, 0x73, 0xa7, 0xa9, 0xf4, 0xb7, 0x2f, 0xd0, 0x77, 0xb5, 0x97, - 0x8e, 0x60, 0x07, 0xb9, 0x8d, 0x1e, 0x40, 0x3d, 0x58, 0x78, 0x27, 0x31, 0x17, 0x4e, 0x4b, 0x05, - 0xd8, 0xbd, 0x20, 0xc0, 0x8b, 0x98, 0x0b, 0xad, 0x36, 0x03, 0x65, 0x64, 0xd2, 0x24, 0x4e, 0x85, - 0xb3, 0xf1, 0x49, 0xe9, 0x38, 0x4e, 0x0b, 0xa9, 0x34, 0xd0, 0x0f, 0x60, 0x06, 0x0b, 0x6f, 0x46, - 0x23, 0x67, 0x53, 0x29, 0x6f, 0x5e, 0xa0, 0x3c, 0xa6, 0x91, 0x16, 0xd6, 0x02, 0xf9, 0x8c, 0x5e, - 0x42, 0x2b, 0x58, 0x78, 0xe4, 0x23, 0x09, 0x67, 0xc2, 0x0f, 0xa6, 0xc4, 0x69, 0x2b, 0xf9, 0xd7, - 0x17, 0xc8, 0xdd, 0xa5, 0xa3, 0x8e, 0xd2, 0x0c, 0x4a, 0x10, 0xfa, 0x06, 0x4c, 0x22, 0x0f, 0x12, - 0x77, 0xb6, 0x54, 0x94, 0xcd, 0x22, 0x8a, 0x3a, 0x60, 0x38, 0xa3, 0x77, 0x1e, 0x42, 0xb3, 0xfc, - 0x01, 0x50, 0x1b, 0xd6, 0xdf, 0x91, 0x45, 0x36, 0xd4, 0xf2, 0x51, 0x8e, 0xf2, 0xdc, 0x9f, 0xce, - 0x48, 0x3e, 0xca, 0xca, 0x78, 0x58, 0xb9, 0x6f, 0xec, 0x3c, 0x82, 0x8d, 0xd3, 0xcd, 0xbf, 0x94, - 0xfa, 0x01, 0x34, 0x4a, 0x9d, 0xbf, 0xbc, 0x74, 0xd9, 0xf9, 0x4b, 0x49, 0xef, 0x03, 0x14, 0xad, - 0xbf, 0x94, 0xf2, 0x47, 0xd8, 0x3a, 0xd3, 0xf5, 0xcb, 0x04, 0xe8, 0xf4, 0xa1, 0x31, 0xa6, 0x6c, - 0x82, 0xc9, 0xaf, 0x33, 0xc2, 0x05, 0xda, 0x80, 0x0a, 0x8d, 0x94, 0xb2, 0x8a, 0x2b, 0x34, 0x42, - 0xfb, 0x50, 0xe3, 0xc2, 0x17, 0xfc, 0xec, 0xcd, 0x56, 0x7c, 0x77, 0xac, 0x5d, 0x3a, 0xd7, 0xc1, - 0xd6, 0xa1, 0x92, 0xe9, 0x62, 0x35, 0x50, 0xe7, 0xaf, 0x75, 0x80, 0xe2, 0x32, 0x94, 0x67, 0x3f, - 0x8f, 0x94, 0xe5, 0xb9, 0xb4, 0xd1, 0x36, 0x98, 0x3c, 0x0d, 0x3d, 0x9a, 0xa8, 0x97, 0xda, 0xb8, - 0xc6, 0xd3, 0xb0, 0x9f, 0xa0, 0xcf, 0xc1, 0x92, 0xb0, 0x1a, 0x7f, 0x79, 0x53, 0xb5, 0x70, 0x9d, - 0xa7, 0xa1, 0x9a, 0xee, 0x6d, 0x30, 0x23, 0x2e, 0xa4, 0xa2, 0xaa, 0x15, 0x11, 0x17, 0x5a, 0x21, - 0x61, 0x75, 0xd6, 0x6a, 0x8a, 0xa8, 0x47, 0x5c, 0xa8, 0xa3, 0x94, 0x51, 0x2a, 0x98, 0xa9, 0x83, - 0x45, 0x5c, 0xa8, 0x60, 0x9f, 0x41, 0x7d, 0xc6, 0x49, 0xea, 0x51, 0x7d, 0x2b, 0xb5, 0xb0, 0x29, - 0xcd, 0x7e, 0x84, 0xbe, 0x04, 0x48, 0xd2, 0x38, 0x24, 0x9c, 0x4b, 0xce, 0x52, 0x9c, 0x9d, 0x21, - 0xfd, 0x08, 0xdd, 0x82, 0x66, 0x4e, 0x27, 0xbe, 0x38, 0x51, 0x77, 0x93, 0x8d, 0x1b, 0x19, 0x36, - 0xf6, 0xc5, 0x89, 0xbc, 0x9e, 0x72, 0x97, 0xf0, 0x43, 0xa4, 0xae, 0x27, 0x1b, 0xe7, 0x41, 0x7b, - 0x1f, 0x4e, 0xc5, 0xf0, 0xd3, 0x09, 0x57, 0x57, 0x54, 0x11, 0xa3, 0x9b, 0x4e, 0x38, 0x72, 0x8b, - 0x18, 0x84, 0xcd, 0xb3, 0x4b, 0xe8, 0xce, 0x79, 0x1b, 0xe7, 0x60, 0xac, 0xfd, 0x5c, 0x36, 0xd7, - 0xa7, 0x31, 0x7f, 0x93, 0xcb, 0xe6, 0x3b, 0x8f, 0x61, 0x73, 0x85, 0xfe, 0xbf, 0xb1, 0xb1, 0xcb, - 0x63, 0xf3, 0x0b, 0x58, 0xa3, 0x84, 0xa4, 0xbe, 0x88, 0x53, 0xb5, 0x16, 0x17, 0x49, 0xb1, 0x16, - 0x17, 0x09, 0x91, 0xf7, 0x77, 0x2c, 0x79, 0x16, 0x65, 0xda, 0xdc, 0x94, 0xde, 0x91, 0x2f, 0x7c, - 0xf5, 0x09, 0x6d, 0xac, 0x9e, 0xd1, 0x17, 0x60, 0x73, 0xc2, 0x38, 0x15, 0x74, 0x4e, 0xd4, 0x27, - 0xb4, 0x70, 0x01, 0x74, 0x7e, 0x37, 0xa0, 0x2a, 0xf7, 0xa2, 0x94, 0x32, 0xbf, 0xd8, 0xbf, 0xf2, - 0x59, 0xbe, 0x88, 0x30, 0x39, 0xfa, 0xfa, 0x45, 0x16, 0xce, 0x4d, 0x74, 0x43, 0x7e, 0x2e, 0x12, - 0x92, 0x88, 0xb0, 0x50, 0xef, 0x36, 0x0b, 0x97, 0x10, 0xb9, 0xf7, 0x7c, 0xbd, 0xb5, 0xf5, 0xd0, - 0x64, 0x96, 0x1c, 0xcd, 0x68, 0x96, 0xfa, 0x8a, 0xd1, 0x53, 0xb3, 0xb4, 0xd1, 0x01, 0x58, 0x71, - 0x56, 0xb6, 0x1a, 0x9b, 0xc6, 0x21, 0x2a, 0x3a, 0x9f, 0x37, 0x04, 0x2f, 0x7d, 0x3a, 0x7f, 0x1b, - 0xd0, 0xec, 0x4d, 0x29, 0x61, 0xa2, 0x17, 0xb3, 0xb7, 0x74, 0x72, 0xe6, 0x7c, 0xe5, 0x25, 0x55, - 0x4e, 0x97, 0x94, 0xaf, 0x71, 0xdd, 0xa4, 0xdc, 0x44, 0xdf, 0xc2, 0x16, 0xe5, 0xcf, 0x68, 0x4a, - 0x3e, 0xf8, 0xd3, 0x29, 0x9e, 0x31, 0x46, 0xd9, 0x24, 0xeb, 0xd7, 0x59, 0x42, 0x16, 0x18, 0xaa, - 0xb7, 0x66, 0x65, 0x64, 0x96, 0x2c, 0x70, 0x1a, 0x4f, 0x06, 0x64, 0x4e, 0xa6, 0xd9, 0xec, 0x2f, - 0x6d, 0x74, 0x27, 0xff, 0x8b, 0x50, 0x57, 0x73, 0xb5, 0xfa, 0xcf, 0x44, 0x93, 0x9d, 0x3f, 0x0c, - 0x68, 0x0e, 0x63, 0x41, 0xdf, 0xd2, 0x50, 0xf7, 0x65, 0xb5, 0xac, 0x1b, 0x00, 0xa1, 0x2a, 0x7b, - 0x58, 0x14, 0x57, 0x42, 0x24, 0xcf, 0x49, 0x3a, 0x27, 0xa9, 0xe2, 0x75, 0x95, 0x25, 0x04, 0xdd, - 0xc9, 0x46, 0x4a, 0xd6, 0xb6, 0x71, 0xd8, 0x2e, 0xb2, 0xe8, 0xea, 0xff, 0x52, 0x7a, 0xc8, 0xf2, - 0x51, 0xaa, 0x95, 0x46, 0x69, 0x59, 0x80, 0xf9, 0xa9, 0x02, 0xa6, 0xb0, 0x55, 0xce, 0xff, 0xdc, - 0x2b, 0x0b, 0xdd, 0x85, 0x6a, 0x18, 0x47, 0x3a, 0xfd, 0x8d, 0xf2, 0xc6, 0x3c, 0x23, 0xed, 0xc5, - 0x11, 0xc1, 0xca, 0xf9, 0xbc, 0xf1, 0xde, 0xff, 0xc7, 0x00, 0x53, 0x27, 0x8e, 0x2c, 0xa8, 0x0e, - 0x47, 0x43, 0xb7, 0xbd, 0x86, 0xb6, 0xa0, 0x35, 0x18, 0x75, 0x9f, 0x7a, 0xcf, 0xfa, 0xd8, 0xfd, - 0xb9, 0x3b, 0x18, 0xb4, 0x0d, 0x74, 0x05, 0x36, 0x8f, 0x87, 0xa7, 0xc1, 0x8a, 0xf4, 0xeb, 0xbd, - 0xe8, 0x0e, 0x9f, 0xbb, 0x5e, 0x6f, 0x34, 0x7c, 0xd6, 0x7f, 0xde, 0x5e, 0x47, 0x9b, 0xd0, 0x70, - 0x87, 0xdd, 0x27, 0x03, 0xd7, 0xc3, 0xc7, 0x03, 0xb7, 0x5d, 0x45, 0x6d, 0x68, 0x3e, 0xed, 0x1f, - 0x15, 0x48, 0x4d, 0xba, 0x3c, 0x75, 0x07, 0xee, 0xeb, 0x0c, 0x30, 0x25, 0x90, 0x85, 0x51, 0x40, - 0x1d, 0xb5, 0xc0, 0x1e, 0x8c, 0x9e, 0x7b, 0x03, 0xf7, 0x8d, 0x3b, 0x68, 0x5b, 0x32, 0xb1, 0xa3, - 0xd7, 0xa3, 0x71, 0xdb, 0x96, 0x59, 0xbc, 0x1a, 0x0d, 0xfb, 0xaf, 0x47, 0xd8, 0x1b, 0xe3, 0x51, - 0xcf, 0x3d, 0x3a, 0x6a, 0x03, 0x72, 0xe0, 0xaa, 0xa4, 0xbd, 0x55, 0xa6, 0xb1, 0xbf, 0x0f, 0xdb, - 0xe7, 0xf6, 0x03, 0x99, 0x50, 0x19, 0xbd, 0x6c, 0xaf, 0x21, 0x1b, 0x6a, 0x2e, 0xc6, 0x23, 0xdc, - 0x36, 0x0e, 0xff, 0x35, 0xa0, 0x72, 0xdc, 0x47, 0xf7, 0xa0, 0x2a, 0x17, 0x05, 0xda, 0x2e, 0x5a, - 0x5a, 0xda, 0x41, 0x3b, 0x57, 0x56, 0xe1, 0x64, 0xba, 0xe8, 0xac, 0xa1, 0xef, 0xa1, 0xde, 0xe5, - 0xef, 0xd4, 0x45, 0x70, 0xee, 0x1f, 0xec, 0x9d, 0x95, 0x6f, 0xdd, 0x59, 0x43, 0x8f, 0xc1, 0x3e, - 0x9a, 0x05, 0x3c, 0x4c, 0x69, 0x40, 0xd0, 0xb5, 0x92, 0xa8, 0x74, 0x24, 0x77, 0x2e, 0xc0, 0x3b, - 0x6b, 0xe8, 0x27, 0x68, 0x95, 0x4b, 0xe3, 0xe8, 0xfa, 0x27, 0x66, 0xa0, 0x1c, 0xa7, 0x4c, 0x76, - 0xd6, 0xf6, 0x8c, 0xef, 0x8c, 0xc0, 0x54, 0xe4, 0xdd, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0xb1, - 0x02, 0xad, 0xc9, 0x62, 0x0c, 0x00, 0x00, -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// UIClient is the client API for UI service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type UIClient interface { - Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingReply, error) - AskRule(ctx context.Context, in *Connection, opts ...grpc.CallOption) (*Rule, error) - Subscribe(ctx context.Context, in *ClientConfig, opts ...grpc.CallOption) (*ClientConfig, error) - Notifications(ctx context.Context, opts ...grpc.CallOption) (UI_NotificationsClient, error) -} - -type uIClient struct { - cc *grpc.ClientConn -} - -func NewUIClient(cc *grpc.ClientConn) UIClient { - return &uIClient{cc} -} - -func (c *uIClient) Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingReply, error) { - out := new(PingReply) - err := c.cc.Invoke(ctx, "/protocol.UI/Ping", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *uIClient) AskRule(ctx context.Context, in *Connection, opts ...grpc.CallOption) (*Rule, error) { - out := new(Rule) - err := c.cc.Invoke(ctx, "/protocol.UI/AskRule", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *uIClient) Subscribe(ctx context.Context, in *ClientConfig, opts ...grpc.CallOption) (*ClientConfig, error) { - out := new(ClientConfig) - err := c.cc.Invoke(ctx, "/protocol.UI/Subscribe", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *uIClient) Notifications(ctx context.Context, opts ...grpc.CallOption) (UI_NotificationsClient, error) { - stream, err := c.cc.NewStream(ctx, &_UI_serviceDesc.Streams[0], "/protocol.UI/Notifications", opts...) - if err != nil { - return nil, err - } - x := &uINotificationsClient{stream} - return x, nil -} - -type UI_NotificationsClient interface { - Send(*NotificationReply) error - Recv() (*Notification, error) - grpc.ClientStream -} - -type uINotificationsClient struct { - grpc.ClientStream -} - -func (x *uINotificationsClient) Send(m *NotificationReply) error { - return x.ClientStream.SendMsg(m) -} - -func (x *uINotificationsClient) Recv() (*Notification, error) { - m := new(Notification) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -// UIServer is the server API for UI service. -type UIServer interface { - Ping(context.Context, *PingRequest) (*PingReply, error) - AskRule(context.Context, *Connection) (*Rule, error) - Subscribe(context.Context, *ClientConfig) (*ClientConfig, error) - Notifications(UI_NotificationsServer) error -} - -// UnimplementedUIServer can be embedded to have forward compatible implementations. -type UnimplementedUIServer struct { -} - -func (*UnimplementedUIServer) Ping(ctx context.Context, req *PingRequest) (*PingReply, error) { - return nil, status.Errorf(codes.Unimplemented, "method Ping not implemented") -} -func (*UnimplementedUIServer) AskRule(ctx context.Context, req *Connection) (*Rule, error) { - return nil, status.Errorf(codes.Unimplemented, "method AskRule not implemented") -} -func (*UnimplementedUIServer) Subscribe(ctx context.Context, req *ClientConfig) (*ClientConfig, error) { - return nil, status.Errorf(codes.Unimplemented, "method Subscribe not implemented") -} -func (*UnimplementedUIServer) Notifications(srv UI_NotificationsServer) error { - return status.Errorf(codes.Unimplemented, "method Notifications not implemented") -} - -func RegisterUIServer(s *grpc.Server, srv UIServer) { - s.RegisterService(&_UI_serviceDesc, srv) -} - -func _UI_Ping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PingRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(UIServer).Ping(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/protocol.UI/Ping", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(UIServer).Ping(ctx, req.(*PingRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _UI_AskRule_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Connection) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(UIServer).AskRule(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/protocol.UI/AskRule", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(UIServer).AskRule(ctx, req.(*Connection)) - } - return interceptor(ctx, in, info, handler) -} - -func _UI_Subscribe_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ClientConfig) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(UIServer).Subscribe(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/protocol.UI/Subscribe", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(UIServer).Subscribe(ctx, req.(*ClientConfig)) - } - return interceptor(ctx, in, info, handler) -} - -func _UI_Notifications_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(UIServer).Notifications(&uINotificationsServer{stream}) -} - -type UI_NotificationsServer interface { - Send(*Notification) error - Recv() (*NotificationReply, error) - grpc.ServerStream -} - -type uINotificationsServer struct { - grpc.ServerStream -} - -func (x *uINotificationsServer) Send(m *Notification) error { - return x.ServerStream.SendMsg(m) -} - -func (x *uINotificationsServer) Recv() (*NotificationReply, error) { - m := new(NotificationReply) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -var _UI_serviceDesc = grpc.ServiceDesc{ - ServiceName: "protocol.UI", - HandlerType: (*UIServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Ping", - Handler: _UI_Ping_Handler, - }, - { - MethodName: "AskRule", - Handler: _UI_AskRule_Handler, - }, - { - MethodName: "Subscribe", - Handler: _UI_Subscribe_Handler, - }, - }, - Streams: []grpc.StreamDesc{ - { - StreamName: "Notifications", - Handler: _UI_Notifications_Handler, - ServerStreams: true, - ClientStreams: true, - }, - }, - Metadata: "ui.proto", -} diff --git a/ui/Makefile b/ui/Makefile index 454eb0b9..039c3703 100644 --- a/ui/Makefile +++ b/ui/Makefile @@ -8,11 +8,7 @@ opensnitch/resources_rc.py: translations deps translations: @cd i18n ; make - for lang in $$(ls i18n/locales/); do \ - if [ ! -d opensnitch/i18n/$$lang ]; then mkdir -p opensnitch/i18n/$$lang ; fi ; \ - cp i18n/locales/$$lang/opensnitch-$$lang.qm opensnitch/i18n/$$lang/ ; \ - done - + deps: @pip3 install -r requirements.txt diff --git a/ui/i18n/Makefile b/ui/i18n/Makefile index c67c740e..27060053 100644 --- a/ui/i18n/Makefile +++ b/ui/i18n/Makefile @@ -1,7 +1,37 @@ -all: update_langs gen_qm +SOURCES += ../opensnitch/service.py \ + ../opensnitch/dialogs/prompt.py \ + ../opensnitch/dialogs/preferences.py \ + ../opensnitch/dialogs/ruleseditor.py \ + ../opensnitch/dialogs/processdetails.py \ + ../opensnitch/dialogs/stats.py -update_langs: +FORMS += ../opensnitch/res/prompt.ui \ + ../opensnitch/res/ruleseditor.ui \ + ../opensnitch/res/preferences.ui \ + ../opensnitch/res/process_details.ui \ + ../opensnitch/res/stats.ui + +#TSFILES contains all *.ts files in locales/ and its subfolders +TSFILES := $(shell find locales/ -type f -name '*.ts') +#QMFILES contains all *.qm files in locales/ and its subfolders +QMFILES := $(shell find locales/ -type f -name '*.qm') +#if QMFILES is empty, we set it to phony target to run unconditionally +ifeq ($(QMFILES),) +QMFILES := "qmfiles" +endif + +all: $(TSFILES) $(QMFILES) + +#if any file from SOURCES or FORMS is older than any file from $(TSFILES) +#or if opensnitch_i18n.pro was manually modified +$(TSFILES): $(SOURCES) $(FORMS) opensnitch_i18n.pro @pylupdate5 opensnitch_i18n.pro -gen_qm: +#if any of the *.ts files are older that any of the *.qm files +#QMFILES may also be a phony target (when no *.qm exist yet) which will always run +$(QMFILES):$(TSFILES) @./generate_i18n.sh + for lang in $$(ls locales/); do \ + if [ ! -d ../opensnitch/i18n/$$lang ]; then mkdir -p ../opensnitch/i18n/$$lang ; fi ; \ + cp locales/$$lang/opensnitch-$$lang.qm ../opensnitch/i18n/$$lang/ ; \ + done diff --git a/ui/opensnitch/resources_rc.py b/ui/opensnitch/resources_rc.py deleted file mode 100644 index 1e2f6452..00000000 --- a/ui/opensnitch/resources_rc.py +++ /dev/null @@ -1,1354 +0,0 @@ -# -*- coding: utf-8 -*- - -# Resource object code -# -# Created by: The Resource Compiler for PyQt5 (Qt v5.15.2) -# -# WARNING! All changes made in this file will be lost! - -from PyQt5 import QtCore - -qt_resource_data = b"\ -\x00\x00\x0f\x15\ -\x89\ -\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ -\x00\x02\x00\x00\x00\x02\x00\x08\x06\x00\x00\x00\xf4\x78\xd4\xfa\ -\x00\x00\x00\x06\x62\x4b\x47\x44\x00\x00\x00\x00\x00\x00\xf9\x43\ -\xbb\x7f\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\ -\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\ -\xe2\x04\x05\x16\x04\x0c\x20\x77\x10\x36\x00\x00\x0e\xa2\x49\x44\ -\x41\x54\x78\xda\xed\xdd\x59\x72\xdb\x30\x10\x04\xd0\x10\xc5\xfb\ -\x5f\xd9\xf9\x89\x53\xa9\xb2\x63\xcb\x12\x97\x99\xe9\xf7\x0e\x90\ -\x85\x04\xa6\x1b\x90\x12\xff\xfa\x05\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x70\x8c\xcd\x23\x00\x3a\x7a\x7b\x7b\ -\x7b\x2b\x31\x44\xb7\xcd\x1c\x45\x01\x00\x98\x1a\xf4\x8a\x01\x0a\ -\x00\x80\xb0\x57\x0a\x50\x00\x00\x04\xbe\x42\x80\x02\x00\x20\xf0\ -\x15\x02\x14\x00\x40\xe8\x0b\x7d\x65\x00\x05\x00\x10\xfa\x28\x03\ -\x28\x00\x80\xd0\x47\x19\x40\x01\x00\x84\x3e\xca\x00\x0a\x00\x20\ -\xf8\x51\x04\x50\x00\x00\xa1\x8f\x22\x80\x02\x00\x08\x7e\x94\x01\ -\x14\x00\x40\xf0\xa3\x08\xa0\x00\x00\x82\x1f\x45\x00\x05\x00\x10\ -\xfc\x28\x02\x28\x00\x80\xe0\x57\x02\x50\x00\x00\xe1\x8f\x22\x80\ -\x02\x00\x08\x7e\x14\x01\x14\x00\x40\xf0\xa3\x08\xa0\x00\x00\xc2\ -\x1f\x25\x00\x05\x00\x10\xfc\x28\x02\x28\x00\x80\xf0\x47\x09\x40\ -\x01\x00\x04\x3f\x8a\x00\x0a\x00\x20\xfc\x51\x02\x50\x00\x00\xc1\ -\x8f\x12\x80\x02\x00\x08\x7f\x14\x01\x14\x00\x40\xf8\xa3\x04\xa0\ -\x00\x00\xc2\x1f\x25\x00\x05\x00\x04\xbf\xe0\x47\x11\x40\x01\x00\ -\xe1\x0f\x4a\x00\x0a\x00\x08\x7f\x50\x02\x50\x00\x40\xf8\x83\x12\ -\x80\x02\x00\xc2\x1f\x94\x00\x14\x00\x10\xfe\x42\xc7\xfb\x50\x02\ -\x14\x00\x40\xf0\x0b\x16\xef\x4b\x09\x50\x00\x00\x61\x22\x44\xbc\ -\x43\x25\x40\x01\x00\x04\x87\xc0\xf0\x5e\xbd\x53\x05\x00\x10\x12\ -\x02\xc2\x7b\xf6\x8e\x15\x00\x40\x28\x08\x04\xef\xdd\x3b\x57\x00\ -\x00\x21\x20\x00\xac\x03\x6b\x40\x01\x00\x82\x07\xbf\xa1\x6f\x3d\ -\x58\x0f\x0a\x00\x10\x34\xec\x0d\x7a\x6b\xc3\xda\x50\x00\x80\xa0\ -\x01\x6f\xb8\x5b\x27\xd6\x89\x02\x00\x04\x0d\x75\x03\xdd\x9a\xb1\ -\x66\x14\x00\x20\x68\x90\x1b\xe2\xd6\x8f\xf5\xa3\x00\x00\x41\xc3\ -\xdb\xe0\xb6\x96\xac\x25\x05\x00\x30\xb0\xb1\xa6\xac\xa9\x46\x76\ -\x8f\x00\x30\xa4\xfb\xbf\x0f\x3f\x7b\x00\x37\x00\x38\xfd\x14\x0d\ -\xc2\xee\x03\x5a\xf0\xdb\x13\xd6\x99\x02\x00\x86\xda\x0f\x07\x98\ -\xa1\x8c\xfd\x62\xbd\x29\x00\x10\x30\xc0\x46\x0d\x09\xc3\xd8\x1e\ -\xb2\xee\x14\x00\x30\xac\x04\x3f\xf6\x96\xf5\xa7\x00\x80\xc0\x17\ -\xfe\xd8\x6f\xd6\xa1\x02\x00\x42\x5f\xf8\x63\xff\x59\x8f\x0a\x00\ -\x08\x7e\x83\x16\xfb\xd1\xda\x54\x00\x30\x64\x30\x60\xb1\x3f\xad\ -\x4f\x05\x00\x83\x05\xc3\x15\x7b\xd5\x3a\x55\x00\x30\x48\x30\x54\ -\xb1\x77\xad\x57\x05\x00\xc3\x03\xc3\x14\xfb\xd8\x9a\x55\x00\x30\ -\x30\x30\x48\xb1\xa7\xad\x5d\x05\x00\x43\x02\x03\x14\x25\x00\x05\ -\x00\x83\x01\x83\x93\xa4\xbd\x6e\x1d\x2b\x00\x18\x08\x18\x9a\x28\ -\x01\x28\x00\x08\x7e\x0c\x4b\x52\xf6\xbf\x35\xad\x00\x20\xf8\x31\ -\x28\x51\x02\x78\xc2\xf2\x08\x10\xfe\xc2\x1f\xac\x1d\x37\x00\x08\ -\x7e\x0c\x70\x68\x33\x1f\xac\x73\x05\x00\xe1\x8f\xa1\x88\x12\xc0\ -\x0f\xec\x1e\x81\x0d\x0d\x80\x1b\x00\x84\x3f\x4e\xff\xe0\x16\x20\ -\x80\x2f\x01\xda\xc4\x08\x7f\xb0\xb6\xdc\x00\x20\xf8\x31\xa0\xa1\ -\xe7\x2c\xb1\x07\xdc\x00\x20\xfc\x01\x70\x03\x20\xfc\x3d\x05\xa7\ -\x7f\x70\x0b\x80\x1b\x00\x9b\x14\xe1\x0f\xd6\x1c\x6e\x00\x04\x3f\ -\x06\x31\xcc\x99\x35\xf6\x84\x1b\x00\x1b\x12\xc0\x0c\x44\x01\xb0\ -\xf0\x71\xfa\x07\x6b\x10\x05\x40\xf8\x03\x98\x87\x0a\x00\x16\x3b\ -\x4e\x5e\x60\x2d\xc6\xbd\x3b\x8f\x40\xf8\x63\xe0\xc2\xc4\x59\x64\ -\xaf\x7c\xcd\x0f\x03\xb2\xe1\x84\xa3\x67\x0e\xb8\x01\x40\xf8\x0b\ -\xfb\xca\xef\xc2\x89\x06\x73\xc9\x7e\x51\x00\x6c\x32\x81\x1f\xf8\ -\x7e\x0c\x34\xcc\x26\x7b\x46\x01\xb0\xc1\x04\x7e\xd8\xfb\x32\xc8\ -\x30\xa3\xec\x9b\x23\xf9\x0e\x00\x82\xff\xa2\xbf\x8b\x8f\x6d\x00\ -\x37\x00\x38\xfd\x07\xb7\xf4\x67\xde\xa3\x53\x0c\x66\x95\xf9\xe2\ -\x06\xc0\x86\x12\xfc\x6e\x05\x00\xdc\x00\x08\x7f\xc1\x3f\xfd\x1d\ -\x7b\x56\x98\x5b\xe6\x8d\x02\x60\x13\x09\xfe\xc0\xf7\xed\x99\x61\ -\x76\x99\x3d\x0a\x80\x0d\x24\xf8\xc3\xde\xbd\xe7\x86\x19\x66\x06\ -\x9d\xc5\x77\x00\xb0\xe9\x3c\x37\xc0\x0d\x00\x9a\xb3\x00\x03\xdc\ -\x02\x24\xf0\xd3\x00\x6d\x18\x9b\x0c\x20\x90\x8f\x00\x84\xbf\xe0\ -\x07\x70\x03\x00\xc2\x1f\x30\x1b\x22\xde\x8d\x47\xe0\xf4\x6f\x73\ -\x03\x29\xb3\xcd\xcc\x72\x03\x60\x83\xd8\x48\x00\x0a\x00\x08\x7f\ -\xc0\xbc\x50\x00\x70\xfa\xb7\x99\x01\x14\x00\x84\xbf\xf0\x07\xcc\ -\x5c\x05\x80\x48\xdb\x1f\x9e\x04\xe0\xf0\xa0\x00\x10\xd2\x44\x6d\ -\x5c\x00\x05\x00\xad\x1d\x00\x05\x80\xc9\xa7\x7f\xe1\x0f\x30\xf8\ -\x80\xe7\x11\x08\x7f\xe1\x0f\xa4\xcd\x3f\x33\xce\x0d\x00\x36\x06\ -\x80\x02\x80\xd3\x3f\x00\x0a\x00\x4e\xff\x00\x28\x00\x4c\x3f\xfd\ -\x0b\x7f\xc0\x9c\x51\x00\xb0\x29\x01\x50\x00\x98\x7c\xfa\x17\xfe\ -\x80\x99\xac\x00\xe0\xe4\x0f\x80\x02\x80\xa6\x09\x80\x02\x80\xd3\ -\x3f\x00\x0a\x00\xc2\x1f\xc0\xfc\x51\x00\xf8\x84\xeb\x7f\x00\x14\ -\x00\xb4\x6f\x00\x14\x00\xa7\x7f\xe1\x0f\x80\x02\x00\x00\x28\x00\ -\x38\xfd\x03\xa0\x00\x34\xe3\xcb\x7f\x00\x28\x00\x38\xfd\x03\xa0\ -\x00\x38\xfd\x03\x80\x02\x80\xd3\x3f\x00\x0a\x00\x00\xa0\x00\x34\ -\x53\xed\xfa\xdf\xe9\x1f\x00\x05\x00\x00\x50\x00\xa6\x73\xfa\xe7\ -\x6e\x6f\x7f\x78\x12\xa0\x00\x00\x8a\x00\xa0\x00\xcc\x1b\x72\x4e\ -\xff\xd0\x63\x8f\x80\x02\x00\xe0\x36\x00\x14\x00\x00\x45\x00\x14\ -\x00\x1a\x72\xfd\x4f\xb7\x22\xe0\x29\x80\x02\x60\x88\x81\xdb\x00\ -\x40\x01\xc0\xe9\x1f\x45\x00\x50\x00\x80\x98\x22\xe0\x29\x80\x02\ -\x00\xb8\x0d\x00\x14\x00\xa7\x15\x50\x04\x00\x05\x80\xbf\x7c\xfe\ -\x8f\xa2\x0d\x28\x00\x80\xdb\x00\x40\x01\x00\x14\x01\xea\xbc\x3f\ -\x4f\x41\x01\x00\x10\x24\xa0\x00\xf0\x2c\x9f\xff\xe3\x36\x00\x50\ -\x00\x00\x45\x00\x50\x00\xce\x1e\x3a\x9e\x02\xd8\x93\x58\x2b\x0a\ -\x00\x80\xdb\x00\xac\x15\x05\x00\xc0\x70\xa7\xfa\xa9\x3b\x71\xad\ -\x28\x00\x03\xf8\x02\x20\xf4\x0c\x1d\xac\x15\x05\x00\xc0\x09\x0f\ -\x6b\x45\x01\x00\x30\xdc\x71\x1b\xa0\x00\x00\x18\xee\x9e\xb9\xc2\ -\xa8\x00\x00\x18\xee\x28\x2f\x0a\x00\x80\x22\x80\x12\xa0\x00\x00\ -\x18\xf0\x28\x8b\x0a\x00\x80\xdb\x00\xe5\xca\xdf\x47\x01\x00\x50\ -\x04\x50\x02\x14\x00\x80\xb0\x93\x2b\xd6\x87\x02\x00\xe0\x36\x40\ -\x48\x06\xaf\x0f\x05\xc0\xa2\x06\x14\x01\x02\x33\xc1\xff\x21\x3f\ -\xe0\x85\x57\xfe\x59\x00\x86\x25\x53\xf9\x19\x1c\xe6\x40\xf7\xb5\ -\xe1\x06\x00\xc0\x6d\x80\xf0\x0f\xfc\x3b\x2b\x00\x00\x8a\x00\x81\ -\x25\x40\x01\x00\x70\xd2\xf5\x4c\x02\xff\xfe\x3e\xc3\x1a\xf0\x62\ -\x7d\x07\x00\x8a\x0d\x56\xdf\x0f\x30\x07\x1a\xac\x07\x8b\x74\xc0\ -\x22\x56\x00\xc0\xe0\x37\x47\xad\x05\x05\x20\x70\xb1\x2a\x00\x60\ -\x7f\x9a\xaf\xd6\x82\x02\x10\xb8\x30\x15\x00\xb0\x4f\xcd\x5b\xeb\ -\x40\x01\x08\x5c\x84\x0a\x00\xd8\xaf\xe6\xb0\x35\xa0\x00\x04\x2e\ -\x38\x05\x00\xec\x59\x73\xd9\x1a\x50\x00\x02\x17\x98\x02\x00\xf6\ -\xae\x39\xed\xfd\x2b\x00\x81\x0b\x4a\x01\x00\x7b\xd8\xdc\xf6\xee\ -\x15\x00\x4d\xd2\x33\x07\x7b\xd8\x1c\xf7\xee\xbf\xb5\x5b\x30\x00\ -\x75\xe6\x94\x22\xf0\x58\x58\x9a\xeb\x6e\x00\x84\xbf\x1b\x00\xb0\ -\xa7\x15\x27\xef\xfb\x09\x6b\xf2\xa2\x10\x3e\x80\x60\x53\x94\xbc\ -\xef\x90\x02\x20\xf8\x01\xf2\x4a\xc0\x84\x22\x70\x75\x76\x8d\x2a\ -\x00\xc9\xc1\xaf\xf4\x80\x93\xad\x67\xa6\x04\xfc\xc4\x88\x2f\x01\ -\x0a\x3f\x40\x88\xf1\xef\xf3\x93\x0b\x01\x37\x00\x5e\x32\x20\xfc\ -\x99\xf4\x2c\xaf\xca\x35\x0f\xc8\x82\xf7\x9e\xc0\xde\x1d\xcd\xcf\ -\x79\x19\x54\x00\x84\x4a\x9f\x41\xe2\x5d\x81\xe0\x37\x8b\x6a\xae\ -\x91\xe5\x25\x02\x08\x7f\xcf\x3b\xf0\x99\x08\x7e\x8b\xdc\x7b\x03\ -\x41\xe4\x26\x20\x6f\xcd\x6c\x5e\x98\x01\xe3\xdd\x81\xe0\x57\x04\ -\xf2\xd6\xcf\xf2\x92\x00\x84\xbf\x77\x92\xa7\x74\x01\x10\xfe\x40\ -\xf7\x90\x11\x34\x4a\x40\xd5\x3c\xf4\x03\x64\x2c\x6c\xef\x12\x9c\ -\x2e\xa3\x75\x9a\x53\x47\xae\xad\xe5\x45\x00\x08\x7f\xef\x2c\x4f\ -\xa9\x02\x20\xfc\x81\xce\x21\x22\xfc\x95\x80\x4e\x39\xe9\xdb\xe2\ -\x16\xb4\xf7\x0a\x4e\x8f\x34\x9b\x59\x47\xac\xbb\xe5\x81\x03\x08\ -\x7f\xf2\xde\xa9\x13\xa2\xc5\x0c\xf6\xb7\x7d\x45\xc3\xb5\xfb\xea\ -\x3a\xdc\x3d\x60\x83\x05\xb0\x3f\xf9\xf8\xae\xa7\x67\xd4\x6d\x8b\ -\x59\xf8\x1b\x26\x38\x45\xd9\xaf\x58\xc3\xf7\xad\xcb\xdd\x03\x35\ -\x40\x00\xfb\x96\xc0\xb5\x2d\xfc\x0d\x0e\xb0\xdf\xed\x5f\xf2\x6e\ -\x01\x96\x87\x78\xce\xcb\x30\x3c\x40\x79\xc7\x7a\x70\x03\x10\x50\ -\x00\x0c\x0c\xe8\xbf\xe7\xed\x63\xba\xae\xe7\x67\xd6\xee\xee\xc1\ -\x19\x18\xe0\x84\x67\x1f\xf3\xd8\x3a\x99\x94\x65\x97\x7c\x04\x30\ -\x31\xfc\x5d\xf3\x83\xf0\x87\x2a\x9e\xc9\xd9\xbd\xe2\x1f\xca\xb0\ -\x00\xec\x65\xdc\x02\x9c\xfc\x77\x11\xfe\x86\x05\x24\xcd\x00\x7b\ -\x99\xc9\xf9\xf6\x93\xf5\xbd\x7b\x8d\x86\x05\xd8\xcf\x10\xb8\x1f\ -\x9c\xfe\x0d\x0a\x98\x3e\x07\xec\x67\xdc\x02\x7c\xb4\x92\x1e\x8a\ -\x61\x01\x79\x27\x7e\xfb\x19\x59\x71\x51\x01\xe8\xfe\x3f\x7f\x19\ -\x16\x60\x38\x43\x67\x8f\xe6\xf0\xf2\xa8\x0c\x0b\x70\xea\x87\xbc\ -\xec\x38\xf4\x4b\x80\x1d\x4f\xff\x06\x05\x18\xc4\xf0\xea\xda\xeb\ -\x98\x7f\x87\xdd\x00\x08\x7f\xc0\x5e\x86\x1a\x1e\xc9\xe4\xd8\x8f\ -\x00\x0c\x0c\x98\xb1\x8f\xed\x65\x64\xca\x8d\x37\x00\x7e\xe0\x07\ -\x20\xf8\xa1\xd7\x2d\xc0\x3a\xfb\x37\x10\xfe\x80\x3d\x8c\xb5\x59\ -\xcf\xee\xc5\x00\xf6\x30\x04\xee\xa9\x84\xd3\xbf\xc1\x01\xf7\x38\ -\x62\x46\xd8\xbf\x24\xae\xfb\x2b\x32\x70\xfc\x97\x00\x0d\x0f\xb0\ -\x7f\x81\x03\x0b\x40\x87\xd3\xbf\xe1\x01\x7d\x83\xdf\xfe\x45\x71\ -\x2d\x58\x00\x84\x3f\x20\xf8\xa1\x87\xff\x65\xf6\xc8\x8f\x00\x0c\ -\x10\xb0\x6f\xc1\x7a\xfe\xda\x8f\xff\x15\x40\xf7\x9f\xf4\x07\x18\ -\x94\xc0\xc0\x1b\x00\xc3\x04\xfa\xec\x55\xfb\x15\xae\xf1\xd9\xe1\ -\x7d\xbd\xfa\x0b\x08\x7f\xc0\x5e\x85\x7e\xeb\x7c\xf7\xa0\x01\xfb\ -\x14\xf2\x3c\x7c\x03\x50\xf9\xf4\x6f\xa8\x40\xfd\xe0\xb7\x4f\x51\ -\x7a\x8b\xfd\xd9\xba\x17\x00\x43\x85\x89\xde\xf7\x9b\xf5\x0d\x73\ -\xf6\x73\xb5\xcc\xdc\xbb\xfd\xe1\xc1\xa0\x00\x78\x5d\xeb\x7f\x05\ -\xe0\x74\x84\xf0\x07\x64\xd5\x73\xbe\xbd\x01\x70\xf5\x0f\x82\x1f\ -\x70\x03\x00\x1c\x18\xfc\xc2\x1f\xb8\xeb\xc0\xd1\xb2\x00\x38\xfd\ -\xe3\xd4\x0f\xc8\xad\xd7\xec\xdd\x86\x94\xf0\x47\xf0\x03\x9c\x5c\ -\x00\x00\xc1\x0f\xcc\xb4\x9c\xfe\x41\xf8\x03\x0a\x00\x70\x60\xf0\ -\x0b\x7f\xa0\xda\x21\xf6\x7d\x2e\xed\x1e\x1c\x38\xf1\x03\x6e\x00\ -\x0c\x30\x10\xfe\x40\x80\x16\x37\x00\x4e\xff\x08\x7e\x80\x0b\x6e\ -\x00\x80\xc7\x83\x5f\xf8\x03\x1d\x0f\xb4\xab\xfa\x49\xc6\xe9\x1f\ -\xa7\x7e\x80\xe3\xf9\x7f\x00\x40\xf0\x03\x0a\x40\x2d\x4e\xff\x08\ -\x7e\x80\x73\xe6\x99\xef\x00\x80\xf0\x07\xd2\x6f\x00\x2a\x0d\x39\ -\xa7\x7f\x04\x3f\xc0\x79\xdc\x00\xc0\x7f\x82\x5f\xf8\x03\x93\x0f\ -\xb8\x0a\x00\x38\xf5\x03\x81\x4a\x7e\x09\xd0\xf5\x3f\x82\x1f\xe0\ -\xa2\x02\x60\xf8\x21\xf8\x01\x72\x94\xfb\x08\xc0\xe9\x1f\xe1\x0f\ -\x70\xe1\x0d\x00\x08\x7e\x00\x05\x00\x04\x3f\xc0\x60\xcb\x50\x44\ -\xf8\x03\xb8\x01\xb8\x95\xcf\xff\x11\xfc\x00\x81\x05\x00\x04\x3f\ -\xc0\x35\xfc\x47\x40\x08\x7f\x00\x37\x00\x20\xf8\x01\x14\x80\x0b\ -\xf9\xfc\x1f\xc1\x0f\x70\x61\x01\x30\x38\x11\xfe\xfe\x6e\xd4\xe4\ -\x60\x44\xc4\x0d\x00\x08\x47\x00\x05\x00\x04\x3f\xc0\x89\xfc\x2b\ -\x00\x84\x3f\x80\x1b\x80\x7b\xf8\x9c\x0b\xc1\x0f\x10\x58\x00\x40\ -\xf0\x03\x5c\xcb\x47\x00\x08\x7f\x00\x37\x00\x20\xf8\x01\x14\x00\ -\x10\xfc\x00\x23\xf9\x08\x00\xe1\x0f\xe0\x06\x00\x04\x3f\x80\x02\ -\x00\x82\x1f\x60\x24\x1f\x01\x20\xfc\x01\xdc\x00\x80\xe0\x07\x48\ -\x98\x85\x0a\x00\x82\x1f\x20\x90\x8f\x00\x10\xfe\x00\x0a\x00\x00\ -\xa0\x00\xc0\x8b\xfc\xa0\x27\x80\x9a\xb3\x59\x01\xe0\x92\x85\xa6\ -\x08\x00\xb8\x01\xc0\x6d\x00\x40\xa4\x4a\xdf\x8b\x52\x00\x70\x1b\ -\x00\xe0\x06\x00\x14\x01\x00\x05\x00\x2e\x28\x02\x9e\x02\x80\x02\ -\x80\xdb\x00\x80\x91\xaa\x7c\xfe\xff\x3e\x6f\x15\x00\x14\x01\x00\ -\x37\x00\x50\xa7\x9d\x02\xa0\x00\xe0\x36\x00\x00\x05\x00\x45\x00\ -\xa0\x8f\x8a\x3f\x17\x65\x79\x30\x74\x29\x02\x9e\x02\xc0\x71\xb3\ -\xd4\x0d\x00\x6e\x03\x00\x02\x29\x00\x28\x02\x00\x27\xaa\x7a\xcb\ -\xad\x00\xd0\xba\x08\x78\x0a\x00\x4f\xce\xd0\x2a\xed\xc4\x30\x67\ -\x62\xc3\xb6\x2f\x80\x6a\xff\x01\x50\xb9\x1b\x00\x5f\x04\xe4\xd5\ -\x85\x2d\x2c\x01\xe1\xff\x38\x1f\x01\xe0\xc4\x0c\x10\x48\x01\xc0\ -\x6d\x00\x80\x02\x00\x8a\x00\xc0\x11\x2a\x5d\xff\x7f\x36\x0b\x97\ -\x87\x45\x42\x11\xf0\x14\x00\x3e\x29\x00\x06\x24\x6e\x03\x00\xb2\ -\x0e\xb4\x3e\x02\x40\x11\x00\x18\x3e\xf7\x14\x00\xf8\x66\x43\x00\ -\x24\x9c\xfe\x4b\x16\x00\xdf\x03\xc0\x6d\x00\xc0\x85\x05\xc0\x20\ -\x44\x11\x00\x98\x75\x88\xfd\x6a\xb6\x2d\x0f\x10\x94\x60\x20\xf8\ -\x06\x00\x70\x1b\x00\xe4\x1c\x5e\x15\x00\x50\x04\x80\xa1\x73\xec\ -\xe1\x02\x50\x69\xe0\xf9\x18\x80\x0e\x1b\x08\xa0\x6b\x66\xb9\x01\ -\x00\xb7\x01\x40\xa0\xd2\x05\xc0\x2d\x00\x8a\x00\xe0\xf4\xff\xdc\ -\xbc\x72\x03\x00\x37\x6c\x2c\x40\xf8\xb7\xbb\x01\xa8\x36\xdc\xdc\ -\x02\xe0\x36\x00\xe0\xf8\x43\x8a\x1b\x00\x50\x04\x80\xc0\x03\xea\ -\xf2\x90\xe1\xba\xc6\x0d\x50\x65\x16\x2d\xc3\x0c\xdc\x06\x00\x79\ -\x07\xd3\xe5\x61\x83\x22\x00\xe4\xe5\xd1\xfa\x6a\x88\x79\xcd\xf0\ -\x5a\x11\xf0\x14\x40\xf8\x57\x9d\x39\xcb\x83\x07\xb7\x01\x40\x1e\ -\xff\x0a\x00\x14\x01\x20\xec\xf4\xff\x6d\x01\xa8\x38\xb0\xdc\x02\ -\xd0\xbd\x08\x78\x0a\x20\xfc\xdd\x00\x78\x11\xb8\x0d\x00\x64\xce\ -\x2d\x07\x8b\x75\xd6\x2f\x0c\x28\x02\x80\x1b\x00\xb7\x00\xa0\x64\ -\x83\xac\x29\x34\x3f\x96\x17\x03\x6e\x03\x80\xac\xf0\x7f\xb8\x00\ -\x18\x4c\xa0\x08\x80\xf0\x1f\x36\x6f\x26\x3c\x0c\x03\x13\x80\xa4\ -\xf0\x3f\x22\xf7\xd6\x95\xbf\x99\xa6\x06\x80\xf0\xaf\x61\x79\x69\ -\x00\xd0\x27\x47\x8e\x3a\x90\xaf\x3b\x7e\x53\x25\x00\x00\xf9\xe1\ -\x06\xc0\x4b\x04\x40\x6e\x5c\x7c\x10\x5f\x77\xfe\xe6\x00\x20\xfc\ -\xef\xc9\xdf\xe5\x85\x02\x20\xfc\xf3\x6c\x93\x1f\x9c\xdb\x0a\x00\ -\x26\x84\xff\x19\x79\xb6\x4d\x7f\x80\x4a\x00\x00\xc2\xff\xa3\xe5\ -\x45\x03\x20\xfc\xf3\x6c\x29\x0f\xd3\x4d\x00\x80\xe0\x6f\x17\xd2\ -\x27\x66\xd7\x96\xf6\x50\x15\x01\x00\xe1\x2f\xaf\x0e\x28\x00\x4a\ -\x00\x00\xc2\xbf\x5f\x4e\x6d\xa9\x0f\x59\x09\x00\x10\xfc\xc9\x19\ -\xb5\x2c\x0e\x00\xcc\xf7\xbc\x03\xea\x96\xfe\xd0\xdd\x04\x00\x08\ -\xff\xc4\x4c\xda\x3c\x7c\x45\x00\x40\xf0\xe7\xe5\xd0\xb2\x6c\xe6\ -\x2c\x1e\x80\xc4\xd9\x6d\x7e\x17\xb9\x01\x98\x10\xa6\x6e\x03\x00\ -\x1c\xdc\xa6\xe7\xce\xe6\xc5\x28\x01\x00\x82\x3f\x2f\x6f\x36\x2f\ -\x49\x11\x00\x10\xfc\x79\x19\xa3\x00\x28\x02\x00\x82\x3f\x30\x57\ -\x36\x2f\x4e\x11\x00\x10\xfc\x79\x59\xb2\x79\x89\x8a\x00\x80\xe0\ -\xcf\xcb\x8f\xcd\x0b\x55\x04\x00\x04\x7f\x5e\x66\x6c\x5e\xae\x22\ -\x00\x20\xf4\xf3\x72\x62\xf3\xb2\x95\x01\x00\x39\x90\x97\x0b\x0a\ -\x80\x22\x00\x60\xf6\x07\x66\xc1\x66\x21\x58\x04\x00\xe6\x7c\xde\ -\xdc\xdf\x2c\x0e\x0b\x03\xc0\x4c\xcf\x9b\xf1\x9b\x05\x63\xc1\x00\ -\x98\xdb\x79\xb3\x7c\xb3\x98\x2c\x32\x40\x90\x93\x37\x97\x37\x0b\ -\x11\x00\xf2\x0e\x65\x65\xfe\xa0\x4a\x00\x00\xc2\x3f\xb0\x00\x28\ -\x01\x00\x08\xff\xd0\x02\xa0\x04\x00\x20\xfc\x43\x0b\x80\x22\x00\ -\x80\xe0\x0f\x2e\x00\x4a\x00\x00\xc2\x3f\xb4\x00\x28\x01\x00\x08\ -\xff\xd0\x02\xa0\x04\x00\x20\xf8\x43\x0b\x80\x12\x00\x80\xf0\x0f\ -\x2d\x00\x8a\x00\x00\xc2\x3f\xb8\x00\x28\x01\x00\x08\xfe\xd0\x02\ -\xa0\x04\x00\x20\xfc\x43\x0b\x80\x22\x00\x80\xe0\x0f\x2e\x00\x4a\ -\x00\x00\xc2\x3f\xb4\x00\x28\x02\x00\x08\xfe\xe0\x02\xa0\x04\x00\ -\x20\xf8\x43\x0b\x80\x22\x00\x80\xe0\x0f\x2e\x00\x8a\x00\x00\xc2\ -\x3f\xb8\x00\x28\x01\x00\x08\xfe\xd0\x02\xa0\x08\x00\x08\x7e\x82\ -\x0b\x80\x22\x00\x20\xf8\x09\x2e\x00\x8a\x00\x80\xd0\x57\x00\x50\ -\x04\x00\x04\xbf\x02\xa0\x0c\x28\x03\x00\x82\x5f\x01\x50\x04\x00\ -\x10\xfa\x0a\x80\x32\x00\x80\xd0\x57\x00\x14\x01\x00\x84\xbe\x02\ -\xa0\x0c\x00\x20\xf4\x15\x00\x85\x00\x00\x81\xaf\x00\x28\x04\x00\ -\x02\x1f\x05\x40\x21\x00\x10\xf6\x28\x00\xca\x01\x80\xa0\x07\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x9f\xdf\ -\xf2\x7e\x5a\xee\x97\xb1\xaf\x0b\x00\x00\x00\x00\x49\x45\x4e\x44\ -\xae\x42\x60\x82\ -\x00\x00\x1e\x64\ -\x89\ -\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ -\x00\x02\x00\x00\x00\x02\x00\x08\x06\x00\x00\x00\xf4\x78\xd4\xfa\ -\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ -\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ -\x79\x71\xc9\x65\x3c\x00\x00\x1e\x06\x49\x44\x41\x54\x78\xda\xec\ -\xdd\xbd\x76\xe4\x46\x76\x00\xe0\x9a\xd1\x06\x9b\x2d\xfd\x04\x83\ -\x7d\x02\x51\x99\xb3\x81\x32\x3b\x12\x95\xd9\xd1\xb6\x9e\x60\xa9\ -\x27\x10\x94\xd9\x11\xa5\x27\xe0\x6c\xe6\x8c\xa3\xd0\x11\x39\x91\ -\x43\x52\x99\xb3\xe9\xc9\xec\x68\xa8\x6c\x1d\xc9\x5d\x4b\x70\x45\ -\x51\xfc\xed\x1f\xe0\x56\xd5\xf7\x9d\x53\xa7\xb9\x9e\x73\x2c\x34\ -\x80\xc6\xbd\x75\xeb\x07\x29\x01\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x6c\xc7\x0b\xa7\x00\x28\xd4\xde\xaa\xed\ -\x8f\x7f\xf7\xe3\xe7\xab\x55\xeb\xee\xf8\xf7\x75\x5d\xac\xda\xe5\ -\xf8\xf7\x72\xd5\x3e\x8c\x7f\x9f\xdd\xf1\xef\x20\x01\x00\xd8\xa2\ -\xfd\x31\xa8\xe7\xcf\x4f\xc7\xc0\xde\x07\x3b\xc6\xb3\x31\x11\xf8\ -\x71\x4c\x0a\x96\xe3\x27\x48\x00\x00\x9e\x18\xec\x73\x7b\x3d\x06\ -\xfd\xbe\xf0\xef\x73\x36\x26\x02\xd7\x89\x81\xa4\x00\x09\x00\xc0\ -\x18\xe0\xfb\x31\xe0\xf7\x0d\x7c\xdf\xcb\x31\x09\x78\x37\x26\x07\ -\x67\x6e\x01\x24\x00\x40\x2b\x3d\xfc\x1c\xe8\xbf\x68\x24\xe0\x3f\ -\xc5\xdb\x31\x21\xc8\x9f\x4b\xa7\x03\x80\x5a\x1c\xac\xda\xd1\xaa\ -\xbd\x5f\xb5\x9f\xb5\x07\xdb\xfb\xf1\x5c\x49\x8e\x00\x28\x36\xe8\ -\x1f\xaf\xda\x47\x41\x7d\xed\xf6\x71\x3c\x87\x07\x6e\x27\x00\x22\ -\xdb\x17\xf4\x77\x5e\x19\xd8\x77\x9b\x01\x10\x41\xb7\x6a\x87\x49\ -\x79\x7f\xca\x76\x3e\x9e\xf3\x3d\xb7\x1f\x00\x53\xeb\x57\xed\x44\ -\x30\x9e\xbd\x1d\x27\xf3\x05\x00\xd8\xb1\xdc\xe3\x5c\xe8\xed\x87\ -\xad\x0a\x2c\xdc\xa2\x00\x6c\x3b\xf0\x0f\xc9\xd8\x7e\x29\x73\x05\ -\x86\x64\x78\x00\x80\x0d\x74\xe9\xaa\xc4\x2c\xb0\x96\xb9\x82\x40\ -\x22\x00\x80\xc0\x2f\x11\x00\x80\xbb\xed\x09\xfc\x12\x01\x00\xda\ -\x0a\xfc\x43\x32\xc6\xdf\x4a\x22\x70\xe8\x96\x07\x60\x21\xf0\x37\ -\x3b\x59\xd0\x0e\x83\x00\x0d\xea\xd3\xd5\xd2\x31\xc1\xb0\xed\x76\ -\x9a\xae\xe6\x7c\x00\x50\x39\xe3\xfc\xda\x5d\x6d\x48\xe6\x07\x00\ -\x54\x2b\x8f\xfd\x2a\xf7\x6b\x0f\x0d\x0b\xf4\x7e\x26\x00\xf5\xe8\ -\xd2\x55\xa9\x57\x90\xd3\x9e\xd2\x4e\x54\x03\x00\xf4\xfa\xb5\x76\ -\x57\x0b\x98\x24\x08\xa0\xd7\xaf\xa9\x06\x00\x10\xdd\x42\xaf\x5f\ -\x4b\xe6\x06\x00\x34\xc3\x0c\x7f\x6d\xd7\x2b\x05\xa8\xc8\x0b\xa7\ -\x00\xaa\xb0\x9f\xae\xca\xb5\x9d\x53\xc1\x0e\x5d\xac\xda\xe7\xab\ -\x76\xe9\x54\x94\xef\xa5\x53\x00\xc5\x5b\x24\x1b\xba\x30\x5d\xa2\ -\x69\x48\x00\x20\x00\x25\x7f\xcd\x90\x00\x6b\xf9\xc4\x29\x80\x22\ -\xe5\xf1\xfe\xff\x5a\xb5\x7f\x72\x2a\x98\x49\xae\x02\x74\xab\xf6\ -\x6e\xd5\xfe\xea\x74\x94\xc7\x1c\x00\x28\x4f\x2e\xc3\x9e\x26\xcb\ -\xb3\x88\x21\xcf\x0b\xf8\x72\xd5\x96\x4e\x45\x59\xcc\x01\x80\xb2\ -\x2c\x04\x7f\x02\x26\xa4\xe7\xe3\x27\x05\x31\x04\x00\x65\x05\xff\ -\x3c\xe6\xff\x7b\xa7\x82\x60\xf2\x3d\xf9\x2f\xab\xf6\xbf\x63\x45\ -\x80\x02\x18\x02\x80\x32\x1c\x8f\x09\x00\x0f\x3b\x1b\x3f\x73\x10\ -\xfa\xe9\xc6\xdf\xcf\x5d\xb6\xb6\x77\xa3\x47\xfb\x87\x1b\x7f\xf7\ -\x4e\xf1\xa3\xbe\x5a\xb5\x37\x4e\x83\x04\x00\x10\xfc\xb7\xed\x72\ -\x0c\xea\x79\xf2\xd9\x72\x6c\xeb\x04\xf9\x75\x5d\x27\x07\xdd\xd8\ -\x5e\x8f\xff\xdb\xb0\xcc\x2f\xbe\x4d\x56\x09\x00\x6c\x14\x68\xf2\ -\xe6\x3e\xad\x2f\x37\xcb\xe3\xcb\x47\xe9\xea\xe5\x34\x5d\xe0\xeb\ -\xd5\x8d\xc7\x78\x34\x1e\x73\xeb\xd7\xed\xd8\x4f\x18\x60\xbd\xe0\ -\xdf\x6a\x10\x79\x7f\x23\xe0\xef\x15\x7e\x0d\xaf\x13\x82\xf7\x92\ -\x00\x00\x04\xff\xbb\x7b\xf9\x87\xa9\xee\xdd\x0c\xbb\xf1\x3b\xb6\ -\x76\x6d\x25\x01\x00\x82\x7f\x73\x41\x5f\x32\x20\x09\x00\x10\xfc\ -\xd3\xd5\x6b\x8a\x73\x49\xdc\x9a\xf1\x5f\xec\x8f\xe7\xa4\xf6\x57\ -\x38\x4b\x02\x00\x1a\x0c\xfe\x79\xf3\xa2\x85\xcb\xfc\xa8\xc5\x78\ -\xae\x24\x01\x00\x8d\xa8\x75\xb6\xff\xb1\xde\xfe\xda\x55\x81\xe3\ -\x24\x09\x00\xa8\x5a\x8d\x0f\xfa\xfc\x9d\x3a\x97\x76\x63\x5d\xa5\ -\xf7\xc7\xe0\xd2\x02\x82\xbf\xc0\x4f\x9b\x89\xc0\xc2\x65\x05\x5a\ -\xb5\x10\xf8\x69\x3c\x11\x90\x04\x00\x82\x7f\x2a\x77\x72\x9f\x31\ -\xfe\xe9\x5d\xbf\x12\xba\x86\x55\x21\xee\x1f\xa0\xa9\x87\x77\xe9\ -\x4b\xbe\xf2\xce\x76\x07\x2e\xe5\xec\x0e\x52\xf9\xbb\x0c\x7e\x54\ -\x3d\x02\x5a\xb0\x57\x41\xf0\x1f\x92\x17\xdf\x44\xbb\xa7\x86\x54\ -\xfe\xa6\x50\xee\x29\xa0\x6a\x25\xaf\xf5\x3f\x4f\xca\xb5\xd1\x2b\ -\x4b\x25\xdf\x5f\x96\x07\x4e\xcc\xeb\x80\xa9\xa1\xf7\xb3\x9f\x7e\ -\xfd\xfe\xf6\x4f\x6f\xf4\x26\x36\x79\x4d\xeb\x72\x6c\xd7\x7f\x7f\ -\x18\xff\x3e\x4b\xbf\xbc\x92\xf6\x39\x4a\x7e\xad\xaf\xd7\xbb\x96\ -\x23\x5f\xa7\x6f\xdc\x67\x40\x4d\x81\xbe\x1f\x1f\x0e\x39\x90\x46\ -\x99\x00\xf5\x7e\x3c\x96\xa3\x31\xb8\xf7\xf7\x1c\xff\x42\xaf\x1f\ -\xd5\x80\x27\xb5\xde\xe5\x83\xb6\xe5\x87\x40\x7e\x59\xca\x49\x2a\ -\x73\x92\xd3\xf9\x8d\xa4\x20\x4f\xd4\x2a\x71\xdc\xff\x28\x19\x97\ -\x2d\x3d\x69\x3e\x4a\x65\x4e\x0a\x74\xdf\x41\x63\x3d\x96\x21\xd5\ -\xbd\x0f\x7a\x49\x0f\x60\x33\xfc\xeb\x51\x62\x02\x7a\xee\xb2\x41\ -\xdd\xbd\x93\xdc\x3b\x3e\x4e\xf5\xbf\x05\x4d\xc9\x9f\x08\x09\x76\ -\x69\x43\x02\x83\xcb\x06\xf5\x05\xfd\x5a\x5f\x7c\x53\xc3\x6e\x7e\ -\x4a\xaf\x75\xff\xfe\x4a\xdb\x45\xb0\x77\xd9\xa0\x6c\x82\xbe\xde\ -\x16\x71\x0c\x05\xdd\x97\xef\x25\xa5\x50\x9e\xeb\xd7\x99\x2a\xef\ -\xdb\x8f\x9d\x98\x49\x79\x29\xf7\xe7\x89\xcb\x05\xe5\x3c\x58\x4a\ -\xde\x8c\xa4\xb5\xc9\x7e\xc6\xfb\xdb\x4e\xd2\x4b\x49\xd0\x4d\x4a\ -\x85\xa0\xae\xb7\x22\xd5\xdb\x17\xfc\x91\x04\x58\x1a\x08\x0d\xe8\ -\x52\x7d\xef\x28\x17\xfc\x91\x04\x18\x0a\x00\x04\xfe\x2a\x97\xf9\ -\x75\x6e\x61\xee\xa8\xe2\x95\x30\x74\xd7\xbb\x54\x20\xf0\x6b\xde\ -\xb8\x46\x7b\x49\x80\x55\x01\x30\xc3\x83\xa1\xc4\x2d\x45\x35\x65\ -\x7f\x9e\xff\x5b\x8f\x3e\x1c\x30\xb8\x4c\x30\x8d\x21\x99\xdc\x27\ -\xf8\xd3\x92\x12\xe6\x04\x74\x2e\x13\xec\x4e\x9f\xca\x7c\x09\x8f\ -\x26\xf8\x53\x7f\x12\x70\xea\x12\xc1\xf6\xe5\xcc\xda\xae\x7d\xf5\ -\xb4\xde\x2d\xcd\x06\x49\x80\xbd\x01\xa0\x11\x87\x49\xb9\xdf\x0e\ -\x7f\xf0\x8b\x45\x8a\x3d\x21\x10\xd8\x42\xaf\xdf\x6b\x78\xeb\x6a\ -\x47\x6e\x6b\xb6\x64\x08\x7c\x9f\x1f\xba\x3c\xa0\xd7\xaf\xd9\x30\ -\x85\xdd\x89\xba\xfc\xd7\x0e\x81\xb0\x86\x3d\xbd\x7e\x6b\xfd\xe1\ -\x19\xcf\x8b\xa8\x7b\x04\x0c\x2e\x0f\x3c\xdd\x81\x5e\xbf\x19\xff\ -\xf0\x4c\x51\x57\x06\xa8\x02\xc0\x13\xd9\xd0\xc7\xa4\x3f\xd8\xa4\ -\xf3\xa0\x0a\x00\x05\x96\xf0\x94\xfc\xeb\x6d\xc7\x6e\x71\x1a\xee\ -\x44\xa8\x02\x40\x61\xa5\x3b\xcd\xb8\x3f\x65\x76\x26\x22\xce\x07\ -\x50\x05\x80\x5b\x16\x02\x64\xf5\xcd\xb8\x3f\x73\x74\x2a\x54\x01\ -\x0a\xf7\x89\x53\x50\x7d\xa9\xee\xdf\x9c\x86\xaa\x7d\xbb\x6a\xff\ -\xe1\x34\x30\xb1\xff\x59\xb5\x17\x29\xd6\x4e\x93\xbf\x5f\xb5\xff\ -\x5b\xb5\x33\x97\x87\x96\xe5\x2c\xd8\x6b\x7b\xdb\x28\xfd\xc3\x9c\ -\xa2\x0d\x05\xd8\x1d\x90\xe6\x83\x7f\xf4\x77\x7a\x6b\x4a\xff\xd4\ -\x21\xe2\x50\xc0\xc2\x65\x41\xf0\xd7\x6c\xf5\x0b\xbb\x37\xa8\x8c\ -\xc1\xfc\x99\xb8\xe0\xdf\x46\x7b\x9f\x4c\x76\x22\x56\xc7\x23\xda\ -\xab\xc3\x55\xc7\x68\x2a\xf8\x5b\xe6\x67\xc3\x1f\x98\x4b\xb4\x0d\ -\x82\xec\x8b\xf1\x04\x2f\x9c\x82\x2a\x82\xff\xa9\x1e\xe1\xaf\x9c\ -\x8d\x9f\xef\xc6\xcf\xcb\x55\xbb\x78\xe6\xff\x8f\x7e\xfc\x7c\x95\ -\xae\xde\x96\x78\xdd\x22\x7c\xb7\xcf\x5d\x62\x02\x3a\x4d\xb1\x56\ -\x05\xfc\xc3\xf8\xdb\x47\x02\x20\xf8\x57\x68\x39\x06\xc4\x0f\xe3\ -\xe7\x72\x6c\xbb\x3e\xe7\xfb\x63\x32\xf0\x7a\x86\x07\xde\xe7\xc9\ -\x32\x27\xe2\x3e\x8f\x22\x8d\xbf\x7f\xbd\x6a\xdf\xb9\x2c\xd4\xfa\ -\x63\x6b\xad\xec\x9f\x1f\x2e\x79\xf2\xdb\x41\xb0\xa4\x27\x5f\x8b\ -\xfc\x5a\xe5\x93\xa4\xac\x49\xdb\x8e\x93\xc9\x80\xb0\x53\xad\xcc\ -\xf6\xff\x38\x06\xd5\x45\x61\x55\x8e\x83\x31\x51\xd9\xf6\xc4\xa8\ -\xce\xad\x4f\x70\x5d\x32\x19\x10\x04\xff\x0d\x7b\xba\x07\x15\x55\ -\x6a\xb6\x91\x0c\xe8\xfd\xa3\x0a\x60\xb9\x2c\x8d\xab\x35\xf8\x9f\ -\x17\xd8\xd3\x5f\xa7\x32\xb0\xee\x30\x81\xde\x3f\xaa\x00\x76\x06\ -\x44\x66\x5d\x5d\x6f\xbf\xb5\x32\x5d\x7e\x40\x0e\xe9\xe9\x73\x38\ -\xf4\xfe\xf1\xac\x5a\xbf\x1d\xb8\x1c\x94\x2e\xe2\x3b\xb8\x37\x19\ -\xdb\x1f\x92\xa5\x8b\x69\xac\x7a\x3c\x36\x3c\xa0\xf7\x8f\x2a\x80\ -\xe1\x33\x1a\x0e\x12\x02\x7f\x9b\x89\xc0\x89\x53\x83\x2a\xc0\xc6\ -\xcf\x1d\x28\x52\xc4\x97\x6d\x08\xfc\xd3\x25\x02\xbd\x53\x82\x67\ -\xd7\xc6\xcd\xef\x88\xe2\xec\xa5\xf2\xd7\xfa\x1f\x0b\xfc\x6b\xc9\ -\xfb\x0a\x9c\x3a\x0d\x14\xee\x34\x59\x0d\x00\x45\xff\x78\xd6\x69\ -\xa7\xc9\x1a\x5c\x68\xdd\x22\x59\x0d\x00\xcf\x56\xea\xa4\xbf\x8f\ -\x63\xef\x15\x20\xa5\x38\x55\xcc\xce\xa5\xa0\x04\xd1\xde\xac\xf5\ -\x9c\x5e\xbf\x1f\x19\x10\xb1\x33\xa3\x63\x42\x78\x25\x8e\xfb\xeb\ -\xf5\x03\xf7\x89\x32\x19\xd0\x8a\x1a\xc2\x2b\x6d\xdc\xff\x3c\x19\ -\xeb\x07\x1e\x16\x65\x07\x53\x08\xeb\x30\x95\x37\xc3\x1f\xa0\x94\ -\x67\x5b\xef\x52\x10\x51\x97\xca\x29\xfd\xe7\xe3\x5c\xb8\x64\xc0\ -\x33\x9e\x6f\x11\x9e\x5d\x83\x4b\x41\x44\xa5\x94\xfe\x73\xf0\x57\ -\xf2\x07\x9e\x2b\xc2\x30\x80\xbd\x35\x08\xa7\x94\xd2\x7f\xfe\x01\ -\xdb\xd4\x07\x28\xf5\x39\x67\x5b\x60\x42\xe9\x52\x19\xa5\xff\x53\ -\xc1\x1f\xd8\xf0\x59\x17\xe1\x59\xa6\x82\x49\x18\x27\xc9\x64\x3f\ -\xa0\x0d\x8f\xbd\xf9\x72\x8a\xb6\x70\x19\x88\xa0\x17\xfc\x81\x86\ -\x44\xd8\x14\xc8\x7b\x01\x90\x0d\x0b\xfe\xc0\xc4\x22\xec\x72\x6a\ -\x22\x20\xb3\x1b\x04\x7f\xa0\x31\x7b\xc9\x86\x40\xf8\x11\x84\x9e\ -\xf8\x27\xf8\x03\xbb\x12\x61\x39\xa0\x89\x80\x2b\x2f\x9d\x82\x59\ -\x7c\x93\xe2\xce\xa8\x3f\x5b\xb5\xaf\x5c\x22\x60\x87\xcf\x98\xb9\ -\x75\x2e\x03\x73\xdd\x78\xd6\xf9\x03\xad\x8a\x30\x0f\x60\x70\x19\ -\x98\xc3\x71\x8a\xbb\xc3\x9f\xe0\x0f\xb4\xd0\x09\xf2\x66\x40\xf4\ -\xfe\x93\xed\x7d\x81\xe9\xcd\x3d\x07\xca\x4a\x00\xf4\xfe\x93\x8d\ -\x31\x80\xe9\x45\x78\xf7\x09\x34\xdf\xfb\x37\xe3\x1f\x98\x5a\x84\ -\x0d\x81\x9a\x1f\xf2\xb4\x0a\x60\x3a\xdf\x04\x3c\xa6\x8b\x64\xc6\ -\x3f\x30\xbd\x1f\x03\x1c\x43\xf3\xc3\x9e\x12\x80\x69\xe4\x4c\x73\ -\x11\xec\x98\x2e\x05\x7f\x60\x26\x4b\xa7\x40\x02\xd0\x8a\xc3\x80\ -\xc7\xf4\xed\x58\x01\x00\x98\x5a\x84\x67\x4f\xef\x32\x30\x85\x68\ -\xbb\xfe\x99\x01\x0b\xcc\xcd\x5e\x00\x2a\x00\xd5\x5b\xa4\x58\x93\ -\x4d\x94\xfe\x81\x08\xce\x66\xfe\xef\xbf\x92\x00\xb0\x6b\x7f\x0e\ -\x76\x3c\xb9\xf4\xbf\x74\x59\x80\xc6\x75\x12\x00\x76\x69\x3f\xc5\ -\x9a\x69\x9a\x33\xee\xef\x5c\x16\x20\x00\x73\x90\x24\x00\x7a\xff\ -\x13\xfa\xda\x25\x01\x82\xf8\x69\xe6\xff\xbe\x7d\x00\xdc\x83\x3b\ -\x75\x10\xe8\x58\xde\xc8\xb8\x01\xfe\xce\xf6\xe7\xec\xcc\x22\x79\ -\xd1\x0f\xc0\x43\x1d\x24\xdb\x01\xab\x00\x54\xe9\x8b\x40\xc7\xf2\ -\x7d\xba\x9a\xfd\x0f\x10\x85\x67\x12\x55\xda\xd3\xfb\x07\x78\x50\ -\xaf\x02\xa0\x02\x50\xa3\x48\x63\xff\x7a\xff\x00\x48\x00\x26\x12\ -\xa5\xfc\x9f\x03\xbf\x65\x7f\x00\x48\x00\x26\xb0\x17\xa8\x02\xa0\ -\xf7\x0f\x80\x04\x60\x22\x91\xca\xff\x7a\xff\x00\x48\x00\x26\xf2\ -\x3a\xc8\x71\xbc\xd1\xfb\x27\x80\xf7\xc9\x5b\xd7\x80\x46\x44\x79\ -\xf3\x9f\x4d\x2e\x88\xe0\xfa\x7e\x3c\x49\xf6\x5e\xe7\xd7\xfa\x64\ -\x15\x00\x15\xd9\x0f\x12\xfc\xcf\x5d\x0a\x82\x25\x00\xd7\x4b\x52\ -\x07\xa7\x04\x09\x40\x0c\x86\x00\xb6\x2b\xd2\xe4\x3f\x88\x26\x4f\ -\x90\xfd\x26\x19\x16\x00\x2a\x74\x1a\xa4\x02\x60\xe3\x1f\x22\x56\ -\x00\x6e\x37\xc3\x02\x2a\x00\x2a\x00\x34\xf1\xb0\x9b\xaa\x1d\xbb\ -\x0c\x14\xf4\x9b\x30\x2c\x20\x01\x90\x00\xe0\x66\xde\x52\x3b\x70\ -\x29\x28\x30\x29\x36\x2c\xd0\x1e\x2f\x03\x9a\x99\x39\x00\xdb\x13\ -\x61\xd6\x7d\x5e\xf6\xf7\xd6\xa5\xa0\x40\x5d\xba\x1a\x42\x33\x2c\ -\xe0\x99\x89\x04\xa0\x38\x11\xd6\xff\x9f\xb9\x0c\x54\xd0\x2b\xcc\ -\xab\x58\x06\xa7\x02\xcf\x4b\x09\x80\x6c\xf6\xe9\x7e\x70\x19\xa8\ -\x80\xd5\x02\x6d\x78\xe5\x14\x50\xcb\x03\xcb\xec\x7f\xf8\xad\x6d\ -\xdc\xd7\x86\x05\xea\x34\xf7\xaa\xa9\x53\x15\x00\x6a\xe9\xfd\x5f\ -\x24\x5b\xff\x52\x27\xc3\x02\x75\x9a\x3b\xa9\xbb\x90\x00\xb0\x0d\ -\x7d\x80\x63\x38\x73\x19\xa8\x98\x61\x01\x09\xc0\xb6\xfd\x24\x01\ -\x60\x1b\x22\x8c\x65\xbd\x73\x19\x68\x24\x68\x58\x2d\x20\xf8\x6f\ -\x43\xf3\x15\x53\x09\x40\x3d\x37\xb3\x0a\x00\x2d\x31\x2c\xe0\x99\ -\xb9\xa9\x0b\x97\x81\x6d\x98\xfb\x0d\x80\xef\x5d\x02\x82\x9a\xea\ -\xfe\xef\x9d\xea\xa2\x0c\xc9\x1b\x53\x55\x00\x2a\x31\xf7\xec\x7b\ -\xbd\x7f\x5a\xef\x4d\x1a\x16\x28\x4b\x84\x61\xd3\xa5\x04\x80\x4d\ -\x45\xe8\x79\x7c\x70\x19\xc0\xb0\x40\x41\x22\xf4\xbe\x73\xe5\x68\ -\xe1\x52\xb0\xe9\x43\x67\xee\x52\x56\xef\x32\x10\xd4\x9c\xc3\x62\ -\x7e\x17\xee\x8b\xa7\xee\x07\x60\x5b\x62\xd6\x32\x04\xb8\x81\x3b\ -\x97\x01\x0f\x7a\x9b\x08\x15\xa2\x0f\x96\x00\x5c\xb7\xa3\xd4\xd8\ -\x66\x6a\x86\x00\xea\xb0\x74\x0a\xe0\x4e\x86\x05\xe2\x89\xda\xdb\ -\x3e\x1c\xef\x15\x6f\x54\xe5\xc9\x4e\x92\xed\x2c\x21\x6a\x05\xc0\ -\xb0\x80\x67\xe6\xba\x95\x23\x5b\xab\xf3\x28\xfb\x59\x43\x19\x09\ -\x80\x61\x81\x18\x3e\xa6\xf8\x09\xc0\xcf\xe3\x71\x56\x5d\x0d\x30\ -\x04\x50\x3e\x9b\x59\xc0\xf3\x18\x16\x98\xcf\x7e\x41\x3d\xeb\xbd\ -\x31\x59\x6c\x6e\x6e\x00\xe5\x64\xb3\x1e\x62\xa8\x00\x18\x16\x28\ -\xc5\x61\x21\xbd\xff\xbb\xee\x93\xea\x56\x0a\xa8\x00\x6c\x27\x4b\ -\x9c\x93\x37\x00\xc2\xfa\xba\x64\x13\xa1\x29\xbd\x2e\xf8\x3e\x39\ -\x1f\x13\x18\x08\xd3\xc3\xd1\x7b\xc1\xef\x63\x7b\x63\xbe\x83\x4b\ -\xe6\x7e\x48\x26\x08\x22\x01\x80\x26\x1f\xf8\x86\x05\x76\xe3\x20\ -\xd5\x91\x00\x54\x33\x24\x60\x08\x00\xe0\xd7\xba\x64\x58\x60\x17\ -\xbe\xa8\xf0\x1e\x59\xb8\xac\x7a\x38\x2a\x00\x50\x4f\x05\xc0\xb0\ -\xc0\x6e\x7c\x4c\xf5\x54\x00\x4c\xc4\x46\x02\x00\x95\x27\x00\x86\ -\x05\xb6\xa3\xa6\xf2\xff\x5d\xed\x38\x15\x38\x2f\xc0\x10\xc0\xe6\ -\x65\x20\xa0\x8d\xdf\xba\x61\x81\xf5\x7d\x51\xf9\xf7\x5b\x8c\xf7\ -\x47\x51\x49\xc0\x0b\xf7\xe5\x56\x7a\x38\x73\xfa\x2c\xc5\xde\x0c\ -\xe8\x67\xb7\x08\x95\xc9\x4b\x6f\xbf\x4f\x4a\xbf\xcf\xf1\x31\xb5\ -\x31\x73\x7e\xb9\x6a\x5f\xa6\x42\x36\x68\x53\x01\x28\x9f\xe5\x28\ -\x30\xfd\x6f\xee\x9b\x64\x58\xe0\x39\xbd\xe3\x56\x9e\x53\x5d\x2a\ -\xe8\xf5\xc2\x12\x00\x80\xcd\x1e\xf6\x86\x05\x1e\xf6\xa7\x06\x13\ -\xc4\xd3\x12\x92\x43\x09\x00\xc0\x66\xbc\x5b\xe0\xe1\x60\xd8\x37\ -\xfa\xbd\xc3\x2f\x13\x94\x00\x6c\x76\x81\x17\x4e\x03\x90\x0c\x0b\ -\xdc\x27\xcf\x97\xc8\x73\xcd\xf2\xb8\xf8\x77\xe9\x6a\x8c\xbc\x25\ -\xc7\xe2\x44\x7d\x41\x3f\xd2\xfb\xac\xa3\x3f\x6c\x7e\xd6\xb4\x06\ -\x9b\x61\x81\xfb\xe5\xf1\xf1\xa3\x31\x59\x6a\xe5\x7e\x90\x04\x08\ -\xfa\x4d\x6e\x42\x21\x18\x68\xad\x36\x9b\x08\x3d\x2d\x19\x38\x4e\ -\xf5\x6e\x12\x24\x09\x70\x63\x4a\x00\x34\xad\xe1\x66\x58\xe0\xe9\ -\x1d\xad\x73\x49\x00\x6e\xc2\xa7\xb7\x23\x09\x80\xa6\x19\x16\xa8\ -\xb0\xf3\x25\x09\x60\x12\xdd\xd8\x93\x2e\xb1\x0c\x75\x2a\x01\xd0\ -\x34\xc3\x02\x9e\xcb\x45\xdd\x03\xfb\x2e\x6f\x8c\x1b\xac\xf4\x4c\ -\xf3\x5c\x02\xa0\x69\x86\x05\x2a\xaf\xcc\xd6\x96\x08\x48\x02\x04\ -\xfe\xad\x35\x09\x80\xa6\x19\x16\x90\x08\x94\x97\x04\xb8\xf6\x02\ -\xff\xc6\x2d\x72\x26\xe9\x21\xaf\x69\x86\x05\x3c\xc7\xef\xaf\xe0\ -\xda\xce\x7d\x82\xcc\xb1\xe6\x49\x25\x07\x12\x00\x4d\x33\x2c\xd0\ -\x98\xdc\xf1\x39\xad\xe0\xba\xcf\x36\x8f\xab\x85\x9d\x00\x87\xf1\ -\x87\xb5\xa8\xfc\x87\x00\x94\xdf\xb3\xf5\x6e\x81\xa7\xcb\x6f\xdc\ -\xfb\x3c\x5d\xed\x32\x78\x59\xf0\xf7\xe8\xc7\x0e\x2a\x5b\x74\x90\ -\xda\xd9\x69\x2a\xf2\x4a\x00\x3d\x3b\x4d\x33\x2c\x30\x45\x95\xf7\ -\xa8\xf0\x6b\x3e\x79\x27\xb5\xc6\x0a\x40\x37\x66\xd0\x2d\x65\xd1\ -\x2a\x00\x50\x5f\x40\xe3\xe9\x72\x05\xe0\xeb\xb1\x22\xb0\x2c\xf4\ -\x3b\x1c\x7b\x96\x6f\xe6\x30\xb5\xb1\xa5\xe4\x5d\x2d\x6a\xb2\xa3\ -\x37\xa7\x69\xcf\xaf\xe8\x75\x1e\xe7\x4d\x56\x03\x3e\x4a\xfe\xd6\ -\xeb\x01\x9f\x36\xfe\xd0\x58\x04\xbd\x36\x1e\xe8\x9a\xf6\xf4\x49\ -\x80\x07\x1e\xe7\x5b\xd3\x17\xda\x21\x3c\x77\xe9\xf4\xfa\x9f\xdb\ -\xa2\x4e\x22\xf1\x60\xd7\xb4\xa7\xbd\xd3\x43\xcf\x6f\x37\xd5\x80\ -\x12\x3b\x87\x47\x2e\xdd\xc3\x3a\xbd\xfe\xdf\xf4\x1e\x24\x00\x9a\ -\xa6\xdc\xcf\x6f\x0d\x05\xde\x1b\xaa\x41\xf7\x38\xd0\xeb\x2f\x66\ -\x43\x20\xd7\x45\xd3\x94\xfb\x0d\x09\x04\x9c\x0f\x50\xe2\x2a\x80\ -\x5c\x1a\x39\x51\x2e\xbb\xf7\x06\x07\x62\xfb\x76\xd5\x3e\x5b\xb5\ -\xb7\x4e\xc5\xa4\xce\xc6\xf3\x7e\x51\xc8\xf1\xee\x8d\xb1\x8e\xf1\ -\x64\xd4\xfe\xae\xe8\x1a\x27\x8f\xb8\x2e\x9a\xa6\xdc\x1f\x2d\x96\ -\x94\x34\x7c\x7c\xd8\xfa\x05\xdb\x4f\x4a\xfe\xa5\x2e\x07\x74\x4d\ -\x34\xe5\x7e\xe5\xfe\x88\x4a\xd9\x1e\x7e\x67\x2f\x0d\x2a\x61\x08\ -\x60\x91\xbc\x30\xe1\x39\x3c\x68\x20\x0e\xe5\xfe\xb8\xbe\x1a\xaf\ -\x4f\x09\x15\x8b\x26\xb7\x0a\x2e\x7d\x6b\x47\xc3\x00\xae\x87\xa6\ -\xdc\x4f\xfc\x4e\xa6\xa1\x80\x80\x19\x8f\x07\x49\xf9\xc3\x00\xae\ -\x87\xa6\xdc\x8f\x24\x20\xf0\x50\x40\xb4\xe0\x6f\xb2\x5f\x3d\x9b\ -\x48\xb8\x1e\x9a\xcd\x7c\x90\x04\xd4\xff\xe2\x37\xc1\x3f\x50\xa6\ -\x28\x01\xd0\x34\xe5\x7e\xea\x4b\x02\xaa\xac\x30\x99\xe9\x5f\xe7\ -\xbb\x01\x5c\x0b\x4d\xb9\x1f\x49\x40\xc0\x0d\x82\xa2\xac\x02\xb8\ -\x7e\x99\x8f\xf2\xd9\xf6\xfc\xc9\x29\x80\x9d\x31\xbb\xbf\x5e\x6f\ -\xd2\xd5\x0a\x81\xc8\x95\xf2\xad\x4c\x08\x7c\x21\xf8\x87\x74\x36\ -\x7e\xbe\x1b\x3f\xf3\xbb\xae\x2f\x9e\x78\x2e\xf3\x79\x7c\x3d\xfe\ -\xef\x7c\x13\x2f\x9d\x4e\x66\xae\x00\xd5\xf6\xdb\xf4\xbb\x6a\xc3\ -\x51\x8a\x3d\xf3\xfe\x8f\xa5\xdf\x87\xad\x97\xfd\x73\x09\x31\xaf\ -\x76\x18\xd2\xd5\x36\xbe\x9d\xdf\x1c\x15\x26\x00\xca\xfd\x94\x2a\ -\xf2\x6a\xb4\xa2\x27\x04\xb6\x18\xfc\xcf\xc7\xac\xf2\x40\xc5\x03\ -\x09\x80\xd9\xfd\x14\x21\xf2\xc4\xf4\xbe\xc4\x13\xba\xd7\x48\xf0\ -\xcf\xdf\x31\xbf\xcc\x61\xe1\x01\x82\x04\xc0\xec\x7e\x8a\xb4\x37\ -\x56\x80\x54\x01\xb6\x74\x32\x6b\x5f\xea\x77\xac\x5c\x08\xc5\x26\ -\x00\xca\xfd\xdc\x16\xb9\x62\xbd\x10\xfc\x63\x94\xf7\xf5\xf4\xa1\ -\xec\x04\x60\xf0\x1b\xe6\x1e\x07\x81\x13\xd6\x22\xd4\xb8\xbd\xef\ -\xf1\x98\x1d\x02\xe5\x26\x00\xca\xfd\x3c\x45\xd4\xf7\xd3\x2c\x9c\ -\xb8\x69\xc7\xf6\xf5\x14\xa0\xfc\x04\x40\xb9\x9f\xe7\x3a\x4f\xaa\ -\x00\xcf\xb2\x10\xf8\x41\x02\x90\x94\xfb\x29\x5f\x97\x62\xce\x07\ -\x08\x59\x05\xd8\x17\xf8\x41\x02\x90\x94\xfb\xa9\x47\xc4\xf9\x00\ -\xe1\xaa\x00\x35\x2c\xf7\x3b\x16\xf8\xa1\x8a\x04\x40\xb9\x9f\x6d\ -\x3a\x51\x05\x78\x58\xc9\x33\xfe\x4f\x93\xc9\x7d\x50\x4b\x02\x30\ -\x48\xe4\x69\xa0\x83\x1b\x66\x5f\x80\x52\x27\xfd\xe5\x0b\x7a\xe8\ -\xde\x86\x2a\x12\x00\xe5\x7e\x76\x29\xe2\x50\x40\xef\xa4\x78\x58\ -\x40\xcb\x09\x80\x72\x3f\x53\x89\x36\x14\x70\xac\x2c\xa2\xd7\x0f\ -\xad\x26\x00\x43\x52\xee\x67\x3a\x5d\xc0\x98\x37\x5b\x47\xf6\xb4\ -\xb0\xe0\x9f\xe7\x29\x18\xeb\x87\xf2\x13\x00\x15\x3c\xe6\x32\xa4\ -\x78\x4b\x5c\x27\x77\x98\xca\x9b\xe1\x0f\x94\x9d\x00\x28\xf7\x13\ -\x41\xa4\x17\x06\x4d\xbe\x24\x30\x62\x19\xe4\xa1\x92\xff\xc2\xfd\ -\x0a\xc5\x27\x00\xb9\xa7\xa3\xdc\x4f\x04\xd1\xe6\xbe\x4d\x9a\x14\ -\x97\x52\xfa\xcf\xc1\x5f\xc9\x1f\xca\x4e\x00\x94\xfb\x89\x28\x52\ -\x1c\x3c\x99\xea\x4b\x97\x52\xfa\x3f\xd7\x5b\x80\xa2\x13\x00\xe5\ -\x7e\x22\xeb\x53\x63\x93\x01\xbb\x54\x46\xe9\xff\x54\xf0\x87\xa2\ -\x13\x80\xc1\x6f\x18\x55\x80\x67\xb5\x9d\xaf\x6e\x8b\xb8\x1d\xa2\ -\xc9\x7e\x50\x4f\x02\xa0\xdc\x4f\x49\xba\x14\xab\xea\xdd\x4c\xb9\ -\x43\xf0\x87\x7a\x12\x00\xe5\x7e\x4a\x75\x1c\x28\x06\xee\x6c\xce\ -\x5b\xa4\x65\x0f\x82\x3f\xd4\x93\x00\x0c\x49\xb9\x9f\x72\x45\xea\ -\x1c\x1f\xed\xe2\x0b\x0e\x82\x3f\xb0\xe5\x04\x40\xb9\x9f\x5a\x44\ -\x99\x0b\xb0\xf5\x3d\x01\xa2\x6f\xf7\x2b\xf8\x43\x59\x09\x80\x72\ -\x3f\xaa\x00\x85\x0c\x03\x44\x1a\xdf\x08\xfb\x3a\x44\x40\xb9\x9f\ -\xa6\x45\x19\x26\xdf\xda\x6a\x80\x2e\x59\xe7\x0f\x6c\x9e\x00\x28\ -\xf7\x53\xbb\x45\xaa\x6c\x35\x40\xd4\xde\xff\x47\xc1\x1f\x8a\x48\ -\x00\x94\xfb\x69\x45\xa4\xe1\xf2\x8d\xe3\x63\xd4\xde\xbf\xed\x7d\ -\xa1\x8c\x04\x60\x90\xa8\xd3\x98\x28\x9d\xe6\x45\xad\xbd\xff\x85\ -\x7b\x0c\x42\x27\x00\xca\xfd\xb4\xaa\x4f\x15\x4c\x8e\x8f\xda\xfb\ -\x37\xe3\x1f\xe2\x52\xee\x87\x18\x93\x01\x3f\xd6\xd6\xfb\x3f\x77\ -\x5f\x51\x71\xaf\xe1\xbd\xd3\x00\x55\x18\x52\xc1\xcb\x01\x23\xf6\ -\xfe\x8d\xfb\x53\xa3\xfc\x5b\xbb\xf9\x7e\x0d\xa0\x8e\xdf\x75\xb1\ -\xcb\x01\xa3\x64\x2f\x93\xbe\xe5\x08\x66\xe8\x25\xdc\x9e\x31\x0c\ -\xd4\xe1\x3c\x40\xdc\x3c\x79\xee\x41\x47\xdc\xf5\xcf\x66\x3f\xd4\ -\xa4\x4f\xf7\x8f\x11\x02\xf5\x24\xf8\xc5\xcd\x03\x58\xa4\x78\xa5\ -\xff\xce\xbd\x44\x05\xba\xf4\xf8\xeb\xb4\x81\x3a\xec\x07\x89\xa1\ -\xcf\x8a\x9f\xe7\x49\xe9\x1f\x76\xd1\x1b\x78\x4a\x65\x0d\xa8\x47\ -\x84\xd5\x00\x4f\x5e\x95\x13\x25\x63\x51\xfa\xa7\x16\xfd\x33\x1f\ -\x02\x40\x3d\x22\xac\xa6\x3b\x2a\xe9\x60\x77\xf6\x46\x23\x98\x50\ -\x97\x1e\x2f\xf7\x4b\x00\xa0\x6e\x07\xa5\x74\xa4\xa3\x4d\xfe\xb3\ -\xe1\x0f\xa5\x1a\x36\xf8\x2d\x01\xf5\xd8\x0b\x12\x4f\x1f\xb5\x48\ -\x5e\xf4\x03\x9b\xe8\xd3\xe6\x63\x7e\x40\x5d\x22\xcc\xab\xeb\xf2\ -\x81\xbc\x7c\xe0\x20\xbf\x08\x74\xc2\xbe\x5f\xb5\x4b\xf7\x0d\x85\ -\xc8\x3f\xae\x5c\xee\xb7\xff\x3d\x70\xdb\x59\x90\x67\x54\xf8\x32\ -\x85\xde\x3f\xa5\x19\xd2\x76\x87\xce\x80\xba\x2c\x02\xc4\xd5\xfc\ -\x9c\x4a\xbf\xbb\xe7\x00\x23\xbd\xbc\x43\xef\x9f\x12\xf4\xe9\x6a\ -\x9e\x8a\x1e\x3f\x10\xbd\x02\xf0\xea\xa1\x7f\x5c\x67\xb6\xb2\xde\ -\x3f\x2d\xea\x76\xfc\x7b\x01\xea\x33\xf7\x04\xfb\x7b\x57\x02\x44\ -\x2a\xff\x0f\xee\x13\x02\x1b\x26\xf8\x21\x03\xf5\x39\x4d\x41\x57\ -\x02\x2c\x02\x25\x00\x7a\xff\x44\xd4\xa7\xe9\x76\xf4\x02\xea\x73\ -\x14\x21\x01\xb8\x6b\x15\xc0\xeb\x20\x27\xe8\x4d\x32\xf6\x4f\x2c\ -\x5d\x32\xbb\x1f\xd8\xdc\x87\x20\x1d\x99\xdf\x88\xb2\xf9\x8f\x5d\ -\xff\x88\x64\x98\xe9\xb7\x01\xd4\xa7\x0f\x10\x63\x7f\x93\x00\x44\ -\xd9\xfb\xff\xdc\xfd\x41\xa0\x1f\xea\x9c\x2f\xf0\x00\xea\x13\x61\ -\xae\xdd\x70\x7b\x08\x20\xca\xf2\xbf\xef\xdd\x1f\xcc\xac\x4b\xca\ -\xfd\xc0\x6e\x84\x1c\xde\x8e\x30\x33\xd1\xe4\x3f\xe6\x36\xa4\x38\ -\x43\x61\x40\x9d\xe6\x8e\xb7\xc7\xb7\x37\x02\xea\x03\x9c\x94\x37\ -\xc9\xe4\x3f\xe6\x91\xef\x7f\x9b\xf9\x00\x2d\xe8\x5e\x06\x0b\xfe\ -\xd9\x0f\xae\x0b\x53\xff\x10\x92\x72\x3f\x30\xad\x8b\xb9\x0f\xe0\ -\x66\x05\x20\xc2\xac\xfb\xdc\xf3\x7f\xeb\xbe\x60\x42\xc3\xaa\xfd\ -\x39\x19\x76\x02\xa6\xf5\x53\xa4\x04\x20\xc2\xfa\xff\x33\xf7\x04\ -\x13\xe9\x93\x72\x3f\xd0\xf0\x33\xf0\x65\xb0\x0a\x80\xf2\x3f\xbb\ -\x96\x03\xbe\x72\x3f\x30\xb7\x8b\x28\x07\x12\x65\xff\x7f\x65\x58\ -\x76\x69\x48\x71\x66\xf7\x5b\x05\x00\x8d\xf7\xc0\xe7\x7e\xbe\xfc\ -\x2e\x50\xef\x3f\x67\x43\x66\xff\xb3\xab\x1f\x9a\x72\x3f\xc0\x0d\ -\x2f\x6f\x3c\x20\xe7\x76\xe6\x72\xb0\x65\x39\xe0\x2b\xf7\x03\xdc\ -\xe1\xba\x02\xf0\x2a\xc0\xb1\xbc\x73\x39\xd8\xa2\x21\x99\xdd\x0f\ -\xf0\x68\x02\x10\xa1\x77\xa4\x02\xc0\x36\xf4\x49\xb9\x1f\xe0\x51\ -\x51\x86\x00\x96\xc9\xf8\x3f\x9b\xc9\x01\x5f\xb9\x1f\xe0\x19\x15\ -\x80\x08\x25\x52\xbd\x7f\x36\x31\xa4\x7a\xcb\xfd\x56\x02\xb4\xed\ -\x85\x53\xc0\x2e\x13\x80\x08\x2b\x00\x3e\xb8\x14\xac\xa1\x4f\xca\ -\xfd\x00\x6b\x79\xa9\x02\x40\x81\x72\xc0\x57\xee\x07\xa8\xa0\x02\ -\xb0\x74\x29\x78\xa2\x21\x99\xdd\x0f\xb0\x95\x04\x20\x02\x09\x00\ -\x8f\xe9\x93\x72\x3f\xc0\xd6\xe4\x21\x80\x4f\x67\x3e\x86\x33\x97\ -\x81\x07\xe4\x80\xaf\xdc\x0f\xb0\x83\x0a\x80\x52\x2a\x51\x0d\x49\ -\xb9\x1f\xa8\xd3\xec\xcf\xb5\x08\x43\x00\x17\xee\x03\x6e\xe9\x93\ -\x72\x3f\x50\xb7\xd9\xe7\xdf\xbd\x0c\x70\x10\x3f\xb9\x0f\x18\xe5\ -\x80\xaf\xdc\x0f\x30\x41\xe7\x3b\xc2\x10\x80\x1d\x00\xc9\x86\xa4\ -\xdc\x0f\xb4\xe3\x0f\x73\xc7\x5e\x43\x00\xcc\xad\x4f\xca\xfd\x40\ -\x7b\x42\x0c\x01\xc0\x1c\x72\xc0\x57\xee\x07\x98\xc7\xf2\x77\xce\ -\x01\x33\x18\x92\x72\x3f\xd0\xb6\x7e\xe6\xff\xfe\x07\x09\x00\x53\ -\xdf\xf0\xca\xfd\x40\xeb\x42\x74\x7e\x0c\x01\x30\x85\x1c\xf0\x95\ -\xfb\x01\xae\x44\xd8\x82\xff\x4c\x05\x80\x5d\x1b\x92\x72\x3f\xc0\ -\xed\x4e\x91\x0a\x40\xb2\x0c\xb0\x05\x82\x3f\xc0\x2f\x3e\x0d\x70\ -\x0c\x17\x11\x12\x00\xc1\xa1\xfe\x0a\xc0\x1f\x93\x77\x3e\x00\x5c\ -\x8b\x30\x04\x70\x69\x0e\x00\x53\x58\xae\xda\xe7\xab\xf6\x65\xf2\ -\xe6\x47\x80\xb9\x13\x80\xbf\x75\xc8\x24\x00\x4c\xe9\xed\xaa\x7d\ -\xb6\x6a\xdf\x3a\x15\x40\xa3\xba\x14\x64\x07\x5e\x09\x00\x73\xdc\ -\x78\x43\x32\x2c\x00\xe8\xfd\xcf\xe5\x47\x09\x00\x73\x5a\x26\xc3\ -\x02\x40\x7b\x5e\x07\x38\x86\x8b\x28\x09\xc0\xbe\xfb\xa1\x69\x86\ -\x05\x80\x96\xf4\x41\x3a\x60\x7f\x4b\x00\xe6\x5e\x86\x67\x15\x00\ -\x86\x05\x80\x16\xec\x05\xe9\xf4\xfe\xbd\x02\xe0\x6d\x7c\x44\x91\ -\xb3\x52\xc3\x02\x80\xde\xff\xee\xfc\xbd\x93\x15\x61\x08\xe0\xb5\ -\x7b\x82\x5b\x0c\x0b\x00\x35\x8a\x10\xef\x96\x37\x13\x00\x3b\xf1\ -\x11\x91\x61\x01\xa0\x36\x07\x01\x8e\xe1\xdd\xcd\x04\xe0\xc7\x99\ -\x0f\xa6\x77\x4f\xf0\x48\xb6\x6a\x58\x00\x28\x5d\x97\x62\xbc\x03\ -\xe0\xe2\x66\x02\x10\xe5\xc4\xc0\x43\x0c\x0b\x00\x7a\xff\x9b\xb9\ -\xbc\x9d\x00\x44\x98\x04\x28\x01\xe0\xa9\x37\xef\x90\x0c\x0b\x00\ -\xe5\xf9\x53\xa4\xde\xff\x75\x02\x10\x61\x0e\x40\xef\xde\xe0\x19\ -\x96\xc9\xb0\x00\x50\x8e\xdc\xc9\x8d\xb0\xfc\xef\xdd\xed\x04\x20\ -\x42\x05\xe0\x95\xfb\x83\x35\x18\x16\x00\x4a\x70\x10\xe4\x38\xce\ -\xee\xfa\x3f\xfe\x3c\x73\x7b\xef\xfe\x60\x0b\x19\xf6\x69\x80\x7b\ -\x79\xdb\x0d\x28\xdf\x79\xe4\xe7\x49\x84\x07\xa7\x1d\x01\xd9\x56\ -\xa6\xfd\x5e\x02\x00\x04\xb1\x1f\xe4\x59\x72\x72\xfb\xc0\xae\x57\ -\x01\x2c\x03\x9c\xa4\xde\x7d\xc2\x16\x18\x16\x00\x22\xf9\x53\x90\ -\xe3\x78\x77\xdf\x3f\x0c\x01\xb2\x93\x23\xf7\x09\x5b\xd6\xa5\xf2\ -\x87\x05\x80\xb2\x7d\x0c\xf2\x2c\xe9\x1e\xea\x7d\xcf\x7d\x70\xe7\ -\xee\x13\x76\xa4\xe4\x61\x01\xa0\x5c\x8b\x20\xcf\x91\x07\xe7\xd9\ -\xed\x05\x39\x48\xf3\x00\xd8\x95\xbd\x20\x95\x2e\x09\x00\xb4\x23\ -\x4a\x05\xf2\xd1\x0a\x7b\x84\x1e\xd2\xc2\xfd\xc2\x8e\x75\xa9\xac\ -\x61\x01\xa0\x4c\xfb\x81\x9e\x23\xfd\x63\x07\x7b\x92\x02\xce\x52\ -\x84\x1d\x29\x65\x58\x00\x28\xd3\x71\x90\x67\xc8\xc7\xa7\x1c\xec\ -\x61\x29\x07\x0a\x5b\x52\xc2\xb0\x00\x50\x9e\x2e\xd0\x33\xe4\xf8\ -\x29\x07\xdc\x07\x39\xd8\x03\xf7\x0e\x33\xfc\x58\xa3\x0e\x0b\x00\ -\x7a\xff\x93\xc4\xd4\x62\xb2\x15\xd8\x81\x88\xc3\x02\x80\xde\xff\ -\x24\x55\xf5\x28\xbd\x20\xab\x01\x98\x4b\xb4\x61\x01\x40\xef\x7f\ -\x92\xfd\x75\xa2\x3c\xf8\x16\xee\x21\x02\x64\xf1\x11\x12\x62\x40\ -\xef\x7f\xdd\xf6\xac\x37\x10\x46\x59\xb6\x60\x53\x20\xa2\x98\x7b\ -\x58\x00\xd0\xfb\x9f\x2c\x8e\x46\xd9\xb6\x70\xdf\xbd\x44\x10\x73\ -\x0e\x0b\x00\x65\x88\xb4\xee\x3f\xb7\xc3\x92\x33\x18\x93\x01\x89\ -\xa6\x4b\xd3\x0f\x0b\x00\x65\x88\xb6\x92\x68\xad\xb9\x74\x8b\xd2\ -\xbf\x00\xec\xd8\x94\xc3\x02\x40\x19\xcf\x84\x48\xc1\x7f\xed\x0e\ -\xf4\x5e\xa0\x2f\x31\xb8\xaf\x08\x6a\xaa\x61\x01\x20\xfe\xb3\x20\ -\xda\xf2\xe1\x7e\x93\x2f\x74\x92\xe2\xac\x61\x54\x05\x20\xb2\x2e\ -\xed\xb6\xf4\x07\xc4\x36\x45\x47\x60\xd2\x49\xf4\x0b\x55\x00\x78\ -\x96\x5d\x0d\x0b\x00\x71\x45\x9b\xf8\xb7\x95\x65\xf4\x91\x86\x01\ -\x54\x01\x28\xc5\x2e\x86\x05\x80\xb8\xce\x83\x05\xff\xf7\xdb\xfa\ -\x62\x27\x49\x15\x00\xd6\xd1\xa5\xed\x0d\x0b\x00\x31\x6d\x3b\xd9\ -\x0f\x15\x2b\x17\xaa\x00\xb0\x91\x6d\x0c\x0b\x00\xf1\x44\x2c\xfd\ -\x6f\x3d\x4e\x7e\x4c\x15\x2c\x6b\x80\x19\x6d\x3a\x2c\x00\xc4\xfb\ -\x4d\x47\x2b\xfd\xef\xa4\x52\x7e\x1c\xec\x0b\xda\x1d\x90\x52\x75\ -\x69\xbd\x61\x01\x20\x96\xa3\x16\x7a\xff\x11\xcb\x1c\xa7\xee\x3d\ -\x0a\xf7\xdc\x61\x01\x20\xd6\xef\xf7\xe7\xd4\x40\xef\xff\x5a\xb4\ -\x52\xc7\xa1\x7b\x90\xc2\x3d\x67\x58\x00\x88\x61\x3f\xc5\x1a\x16\ -\x9f\x64\x8e\xdc\x22\xe0\x97\xed\xdc\x8b\x54\x20\xdf\xc7\x8f\x0d\ -\x0b\x00\x31\x92\xf6\x88\xe3\xfe\x93\xac\x92\x8b\x96\xf5\x18\x0a\ -\xa0\x26\x0f\x0d\x0b\x00\xf3\x8b\xb4\x2c\x7e\xf2\x15\x72\x43\xc0\ -\x2f\x6e\x28\x80\xda\x7a\x18\x83\x04\x00\xc2\x89\x18\xff\x26\x8d\ -\x83\x7b\x29\x66\xe6\x63\x55\x00\xb5\xe9\xd2\xaf\x87\x05\x80\xf9\ -\x2c\x02\x07\xff\xf7\x53\x9e\x88\xe3\x80\x27\xe0\xdc\xfd\x49\xa5\ -\x0e\xa6\xfe\x81\x03\xbf\x12\x71\xb3\x9f\x9b\xed\x60\xea\x9e\x49\ -\xc4\x93\x60\x83\x20\x00\xb6\x1d\xfc\x23\xce\xf8\x9f\x75\x1e\xdc\ -\x71\xd0\x93\xb1\x70\xbf\x02\xd0\x40\xf0\xff\x39\xcd\xb4\x12\x2e\ -\x6a\x15\xc0\x7c\x00\x00\x36\xb5\x57\x40\xf0\x1f\xe6\x3c\x41\x51\ -\xab\x00\x5e\x18\x04\xc0\x26\xc1\x3f\xea\x5a\xff\x9b\x13\xff\x66\ -\x8d\x73\x5d\xe0\x93\x73\x2e\x09\x00\xa0\xc2\xe0\x3f\xf9\xc4\xbf\ -\xfb\x1c\x25\x93\x23\x00\x28\x5f\x09\x63\xfe\xb9\x9d\x44\xca\x96\ -\x22\x9f\x30\x2b\x03\x00\xa8\x25\xf8\x87\x1b\xe2\x1e\x82\x9f\x30\ -\x49\x00\x00\xa5\x07\xff\x30\xa5\xff\xdb\xde\x27\x49\x00\x00\x65\ -\x59\x14\x12\xf8\x43\x95\xfe\x6f\xeb\x0b\x38\x79\x92\x00\x00\xae\ -\x0d\x05\x05\xff\xd9\x67\xfd\x3f\xe6\x24\x49\x02\x00\x88\x6d\x2f\ -\xc5\x5d\xc6\x7e\x5f\xeb\xa3\x9f\xd4\x2e\x95\x31\x8e\x72\x9a\x2c\ -\x11\x04\x68\x51\x1e\xef\x2f\x61\x99\x5f\x98\x0d\x7f\x9e\xe3\xb0\ -\x90\x13\x6a\x9f\x00\x80\xb6\x1c\xa4\x72\x26\xfb\x15\xfb\xa2\xbb\ -\xd3\x42\x4e\xac\x6d\x83\x01\xea\x97\x3b\x7b\x91\xf7\xac\x79\x28\ -\x46\x75\xa5\x9d\xec\xae\xa0\x2c\x2b\x1f\xe7\xc2\xef\x03\xa0\x4a\ -\x25\x96\xfc\x8b\x19\xf7\xbf\xcf\x61\x61\x27\xda\xe4\x40\x80\xba\ -\x0c\x85\x06\xfe\xa2\xc6\xfd\xef\x73\x9a\xca\x1b\x6b\x31\x24\x00\ -\xa0\xd7\x6f\xbd\xff\x86\x4a\x78\x9d\xe2\x5d\x43\x02\x87\x7e\x3f\ -\x00\x45\xc6\x9c\x92\x7b\xfd\xd5\x4d\x50\x3f\x28\xf4\x22\xe4\xea\ -\x45\xe7\xf7\x04\x50\x4c\xac\x89\xbe\x23\x6d\x95\x93\xfe\x1e\x73\ -\x54\xf0\xc5\x50\x0d\x00\x88\x6b\x3f\x95\x37\xdc\xdc\xdc\xaa\xb4\ -\x92\x2f\xd0\x69\x32\x37\x00\x20\x92\xdc\x53\x2e\x6d\x37\xbf\x87\ -\xda\xa2\xe6\x8b\x55\xe2\x7c\x80\xbb\x56\x0a\xd8\x3c\x08\x40\xe0\ -\x17\xfc\xd7\x28\xd5\xd4\x50\xa6\x19\x24\x02\x00\x02\xff\x16\xda\ -\x51\x4b\x17\x71\x51\xc9\x45\x93\x08\x00\x4c\xd3\x71\xac\x31\xf0\ -\x37\xbb\xff\xcc\x51\x45\x17\x50\x22\x00\xb0\x9b\xce\x62\x0d\x93\ -\xfb\x04\xff\x3b\x1c\x57\x7a\x41\x4d\x16\x04\x58\xbf\xb7\x7f\x94\ -\xca\x9f\x2f\x26\xf8\x3f\xc1\x79\xa5\x17\xf7\x7c\xcc\x5e\x55\x05\ -\x00\x1e\xd6\xa5\xab\xe5\xd6\xb5\xc6\x03\xc1\xff\x1e\x7b\x0d\x5c\ -\xf4\x7c\xb1\x0f\x5c\x6a\x80\x66\x83\xbe\xe0\xdf\x70\x12\x70\x3d\ -\x57\xe0\x44\x65\x00\x68\xf4\x39\x9f\x3b\x42\xb9\xbc\x5f\xfa\x6e\ -\x7d\x82\xff\x96\xed\xa7\xfa\xc7\x7c\xee\x1a\x26\x38\x1a\x7f\x14\ -\x12\x02\xa0\xb6\x1e\xfe\x75\xc0\x6f\xad\x97\x5f\x64\xf0\x7f\x11\ -\x20\x09\x38\x6d\x38\x18\x2e\x57\xed\x62\xd5\x7e\x5c\xb5\xb3\xf1\ -\x7f\x2f\x3d\x47\x80\xe0\x3d\xfb\xfd\x31\xe0\x7f\x3a\xfe\xbd\xaf\ -\x53\xf3\x2b\xdf\xad\xda\xd7\x12\x00\x49\xc0\x3a\x72\x52\x70\x39\ -\x7e\xfe\x74\xe3\xef\xbb\x9c\x39\x5d\xc0\x06\x81\xfc\xb1\x7f\xfb\ -\xc3\x8d\xbf\x7b\xa7\xed\x51\x5f\xad\xda\x9b\x12\x0e\xf4\x45\x90\ -\xe3\x90\x04\x00\x50\xb2\xcb\xb1\xd7\xff\xa6\x94\x03\x7e\x11\xe8\ -\x58\xae\x77\x7e\xb2\xa6\x1e\x80\xd2\x82\xff\xe7\xe9\xfe\x4a\xad\ -\x04\xe0\x09\xf6\x92\xb7\xf0\x01\x50\x8e\x1c\xf4\xbf\x4c\x05\xce\ -\xdf\x7a\x29\x8b\x02\x80\xb5\xbc\x1d\x63\xd6\xb2\xc4\x83\x7f\x19\ -\xf0\x98\x72\x12\xf0\x59\x2a\x68\x1c\x05\x80\xe6\x7c\x3b\xf6\xfc\ -\x2f\x4b\xfd\x02\x9f\x04\x3e\xb6\x1f\xd2\xd5\x90\xc0\x3f\xba\xcf\ -\x00\x08\xd4\x49\xfd\xe7\x1a\x3a\xa9\x9f\x04\x3f\xbe\xff\x5c\xb5\ -\x0f\xc9\xb6\xba\x00\xcc\x2f\x0f\x4f\x57\x33\x4c\xfd\xb2\x80\x63\ -\xcc\x59\xd6\x67\xa9\xe0\x32\x0b\x00\xc5\xfb\x76\x8c\x45\xcb\x5a\ -\xbe\xd0\x8b\x82\x8e\x35\x0f\x07\xe4\x7d\xf5\x7b\xf7\x21\x00\x13\ -\xc9\x01\x3f\x6f\xee\x73\x56\xdb\x17\xfb\xa4\xa0\x63\xfd\xeb\xaa\ -\xfd\x25\x99\x17\x00\xc0\x34\xf2\x2c\xff\x3c\xde\xff\xdf\x35\x7e\ -\xb9\x17\x85\x1e\x77\x3f\x56\x03\xec\x1c\x08\xc0\xb6\x5d\x8e\xbd\ -\xfe\xb7\x35\x7f\xc9\x17\x05\x1f\xbb\x21\x01\x00\x76\xd1\xeb\xff\ -\x2a\x35\x30\xef\xec\x65\xc1\xc7\x7e\xbd\x69\xd0\xd7\xc9\x04\x41\ -\x00\x36\xb3\x4c\x57\xeb\xfa\x8b\x5e\xdb\xdf\x4a\x05\xe0\xa6\x2e\ -\x5d\xbd\x47\x40\x35\x00\x80\xe7\xca\x33\xfc\xbf\x6b\xad\x33\xf9\ -\x49\x25\xdf\x23\x5f\xb4\x3c\x41\x30\xbf\x3a\x37\x4f\x10\xfc\xbd\ -\xfb\x19\x80\x47\x9c\xa5\xab\x4a\x72\x2e\xfb\xff\xb5\xb5\x2f\xff\ -\xa2\xc2\xef\x94\xab\x01\x47\xc9\xe6\x41\x00\xdc\x6d\x99\xae\x86\ -\x8f\xdf\xb6\x7c\x12\x5e\x54\xfc\xdd\xfa\x74\x35\x2c\xd0\xb9\xd7\ -\x01\x48\x57\xd5\xe2\xeb\x72\x7f\xf3\x3e\xa9\xf8\xbb\xe5\x0c\xef\ -\xfb\x31\xc9\xc9\xaf\x17\x36\x2c\x00\xd0\x6e\xe0\xff\xf7\x55\xfb\ -\xd7\x54\xe1\x86\x3e\x2a\x00\x0f\xcb\x4b\x06\xbf\x59\xb5\x43\x97\ -\x1c\xa0\xa9\xc0\xff\x7d\x6a\x70\x82\x9f\x04\xe0\xb7\xba\x31\x11\ -\x58\xb8\xf4\x00\x02\xbf\x04\xa0\x3d\x12\x01\x80\xfa\x2c\xd3\xd5\ -\x8a\x30\x81\x5f\x02\x20\x11\x00\x68\xc0\xc5\xd8\xe3\x7f\xe3\x54\ -\x48\x00\x9e\x2b\xcf\x11\xc8\xf3\x03\xfe\x9c\xbc\x5f\x00\xa0\x14\ -\x6f\xc6\x1e\xff\x99\x53\x21\x01\xd8\x86\xc5\x98\x08\xec\x3b\x15\ -\x00\x21\x7b\xfb\x7f\x19\x83\xbf\x32\xbf\x04\x60\x27\xf6\xc7\x44\ -\xe0\x40\x55\x00\x60\x56\x97\x37\x7a\xfb\x17\x4e\x87\x04\x60\xea\ -\xaa\xc0\x17\xc9\xee\x82\x00\x53\x06\xfd\xbc\x53\xdf\x0f\xa9\xf1\ -\x1d\xfb\x24\x00\x31\xec\x8d\x49\x80\x64\x00\x60\xfb\x96\x37\x82\ -\xfe\x99\xd3\x21\x01\x88\x9e\x0c\xbc\x4e\x86\x09\x00\xd6\x95\x03\ -\xfe\xbb\xf1\x73\xe9\x74\x48\x00\x4a\xb4\x7f\x23\x21\xe8\x9d\x0e\ -\x80\xdf\xc8\x65\xfd\x8b\x31\xe0\x9f\xe9\xe5\x4b\x00\x6a\xd5\x8f\ -\x49\xc1\xeb\xf1\xb3\x73\x4a\x80\xc6\x9c\x8d\x01\xff\xc7\xf1\xd3\ -\x04\x3e\x09\x40\x93\xf6\xc6\x44\x20\x27\x06\xaf\xc6\x84\x60\x3f\ -\x19\x3a\x00\xea\x08\xf4\x97\x37\x02\xfd\x52\xb0\x97\x00\xf0\xf4\ -\x6a\xc1\xcd\xcf\x4f\x6f\x24\x06\x92\x04\x60\x2e\x17\xe9\x97\xb5\ -\xf6\x39\xa8\x7f\xb8\x11\xf0\x6f\xff\x3b\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\xfa\x7f\x01\x06\x00\xa1\ -\x92\x36\x41\x93\x5f\x5f\x50\x00\x00\x00\x00\x49\x45\x4e\x44\xae\ -\x42\x60\x82\ -\x00\x00\x12\xb8\ -\x3c\ -\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ -\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ -\x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\ -\x6e\x6f\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x43\x72\x65\x61\x74\ -\x65\x64\x20\x77\x69\x74\x68\x20\x49\x6e\x6b\x73\x63\x61\x70\x65\ -\x20\x28\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x69\x6e\x6b\ -\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x29\x20\x2d\x2d\x3e\x0a\ -\x0a\x3c\x73\x76\x67\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x64\ -\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\ -\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\x73\x2f\x31\ -\x2e\x31\x2f\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x63\x63\ -\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x63\x72\x65\x61\x74\x69\x76\ -\x65\x63\x6f\x6d\x6d\x6f\x6e\x73\x2e\x6f\x72\x67\x2f\x6e\x73\x23\ -\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\ -\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\ -\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\ -\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\x22\x0a\x20\x20\x20\ -\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\x68\x74\x74\x70\x3a\ -\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\ -\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3d\ -\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\ -\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\ -\x78\x6d\x6c\x6e\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\ -\x68\x74\x74\x70\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\ -\x73\x6f\x75\x72\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\ -\x44\x54\x44\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\ -\x74\x64\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\x6b\ -\x73\x63\x61\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\ -\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x6e\ -\x61\x6d\x65\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\x61\ -\x70\x65\x22\x0a\x20\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x34\x38\ -\x22\x0a\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x34\x38\x22\ -\x0a\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\ -\x20\x31\x32\x2e\x37\x20\x31\x32\x2e\x37\x22\x0a\x20\x20\x20\x76\ -\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x0a\x20\x20\x20\ -\x69\x64\x3d\x22\x73\x76\x67\x38\x22\x0a\x20\x20\x20\x69\x6e\x6b\ -\x73\x63\x61\x70\x65\x3a\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\ -\x2e\x39\x32\x2e\x34\x20\x28\x35\x64\x61\x36\x38\x39\x63\x33\x31\ -\x33\x2c\x20\x32\x30\x31\x39\x2d\x30\x31\x2d\x31\x34\x29\x22\x0a\ -\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\ -\x61\x6d\x65\x3d\x22\x6f\x70\x65\x6e\x73\x6e\x69\x74\x63\x68\x2e\ -\x73\x76\x67\x22\x3e\x0a\x20\x20\x3c\x64\x65\x66\x73\x0a\x20\x20\ -\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x73\x32\x22\x20\x2f\x3e\ -\x0a\x20\x20\x3c\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x61\x6d\ -\x65\x64\x76\x69\x65\x77\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ -\x62\x61\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x70\x61\x67\x65\x63\ -\x6f\x6c\x6f\x72\x3d\x22\x23\x66\x66\x66\x66\x66\x66\x22\x0a\x20\ -\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x63\x6f\x6c\x6f\x72\x3d\ -\x22\x23\x36\x36\x36\x36\x36\x36\x22\x0a\x20\x20\x20\x20\x20\x62\ -\x6f\x72\x64\x65\x72\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x31\x2e\ -\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ -\x3a\x70\x61\x67\x65\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x30\x2e\ -\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ -\x3a\x70\x61\x67\x65\x73\x68\x61\x64\x6f\x77\x3d\x22\x32\x22\x0a\ -\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x7a\x6f\ -\x6f\x6d\x3d\x22\x31\x31\x2e\x32\x22\x0a\x20\x20\x20\x20\x20\x69\ -\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x78\x3d\x22\x31\x39\x2e\x33\ -\x30\x33\x35\x37\x31\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ -\x63\x61\x70\x65\x3a\x63\x79\x3d\x22\x32\x30\x2e\x33\x32\x32\x37\ -\x32\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ -\x3a\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2d\x75\x6e\x69\x74\x73\x3d\ -\x22\x70\x78\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ -\x70\x65\x3a\x63\x75\x72\x72\x65\x6e\x74\x2d\x6c\x61\x79\x65\x72\ -\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\x20\x20\x20\x20\x73\ -\x68\x6f\x77\x67\x72\x69\x64\x3d\x22\x66\x61\x6c\x73\x65\x22\x0a\ -\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\ -\x6e\x64\x6f\x77\x2d\x77\x69\x64\x74\x68\x3d\x22\x31\x36\x30\x30\ -\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ -\x77\x69\x6e\x64\x6f\x77\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\x38\ -\x34\x33\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ -\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x78\x3d\x22\x30\x22\x0a\x20\ -\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\ -\x64\x6f\x77\x2d\x79\x3d\x22\x32\x32\x22\x0a\x20\x20\x20\x20\x20\ -\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\ -\x6d\x61\x78\x69\x6d\x69\x7a\x65\x64\x3d\x22\x31\x22\x0a\x20\x20\ -\x20\x20\x20\x75\x6e\x69\x74\x73\x3d\x22\x70\x78\x22\x20\x2f\x3e\ -\x0a\x20\x20\x3c\x6d\x65\x74\x61\x64\x61\x74\x61\x0a\x20\x20\x20\ -\x20\x20\x69\x64\x3d\x22\x6d\x65\x74\x61\x64\x61\x74\x61\x35\x22\ -\x3e\x0a\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\ -\x20\x20\x20\x20\x20\x20\x3c\x63\x63\x3a\x57\x6f\x72\x6b\x0a\x20\ -\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x61\x62\x6f\x75\ -\x74\x3d\x22\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\ -\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x69\x6d\x61\x67\x65\x2f\x73\ -\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\x64\x63\x3a\x66\x6f\x72\x6d\x61\ -\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\ -\x79\x70\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\ -\x64\x66\x3a\x72\x65\x73\x6f\x75\x72\x63\x65\x3d\x22\x68\x74\x74\ -\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\ -\x64\x63\x6d\x69\x74\x79\x70\x65\x2f\x53\x74\x69\x6c\x6c\x49\x6d\ -\x61\x67\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ -\x3c\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x3c\x2f\x64\x63\x3a\x74\ -\x69\x74\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x2f\x63\x63\ -\x3a\x57\x6f\x72\x6b\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x72\x64\x66\ -\x3a\x52\x44\x46\x3e\x0a\x20\x20\x3c\x2f\x6d\x65\x74\x61\x64\x61\ -\x74\x61\x3e\x0a\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\x20\x69\x6e\ -\x6b\x73\x63\x61\x70\x65\x3a\x6c\x61\x62\x65\x6c\x3d\x22\x43\x61\ -\x70\x61\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ -\x61\x70\x65\x3a\x67\x72\x6f\x75\x70\x6d\x6f\x64\x65\x3d\x22\x6c\ -\x61\x79\x65\x72\x22\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\ -\x61\x79\x65\x72\x31\x22\x0a\x20\x20\x20\x20\x20\x74\x72\x61\x6e\ -\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\ -\x28\x30\x2c\x2d\x32\x38\x34\x2e\x33\x30\x30\x30\x31\x29\x22\x3e\ -\x0a\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\ -\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x66\ -\x66\x66\x66\x66\x66\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\ -\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x6e\x6f\x6e\x65\ -\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\ -\x30\x32\x34\x35\x37\x39\x37\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\ -\x70\x61\x63\x69\x74\x79\x3a\x31\x22\x0a\x20\x20\x20\x20\x20\x20\ -\x20\x64\x3d\x22\x6d\x20\x32\x2e\x34\x31\x31\x30\x34\x37\x32\x2c\ -\x32\x39\x35\x2e\x33\x34\x39\x36\x38\x20\x63\x20\x2d\x31\x2e\x30\ -\x38\x39\x30\x34\x32\x32\x2c\x2d\x30\x2e\x31\x35\x38\x38\x32\x20\ -\x2d\x31\x2e\x39\x37\x36\x34\x31\x32\x38\x36\x2c\x2d\x30\x2e\x39\ -\x36\x33\x35\x20\x2d\x32\x2e\x32\x36\x39\x34\x33\x35\x38\x35\x2c\ -\x2d\x32\x2e\x30\x35\x37\x38\x39\x20\x2d\x30\x2e\x30\x35\x36\x39\ -\x38\x30\x31\x2c\x2d\x30\x2e\x32\x31\x32\x38\x35\x20\x2d\x30\x2e\ -\x30\x36\x33\x36\x34\x2c\x2d\x30\x2e\x32\x38\x32\x36\x35\x20\x2d\ -\x30\x2e\x30\x36\x33\x36\x34\x2c\x2d\x30\x2e\x36\x36\x37\x38\x34\ -\x20\x30\x2c\x2d\x30\x2e\x33\x38\x35\x31\x38\x20\x30\x2e\x30\x30\ -\x36\x36\x33\x2c\x2d\x30\x2e\x34\x35\x34\x39\x38\x20\x30\x2e\x30\ -\x36\x33\x36\x34\x2c\x2d\x30\x2e\x36\x36\x37\x38\x20\x30\x2e\x31\ -\x33\x34\x36\x39\x39\x38\x36\x2c\x2d\x30\x2e\x35\x30\x33\x30\x39\ -\x20\x30\x2e\x33\x37\x34\x30\x33\x38\x30\x35\x2c\x2d\x30\x2e\x39\ -\x32\x32\x38\x31\x20\x30\x2e\x37\x32\x38\x31\x37\x30\x36\x33\x2c\ -\x2d\x31\x2e\x32\x37\x36\x39\x33\x20\x30\x2e\x32\x39\x36\x39\x32\ -\x31\x31\x32\x2c\x2d\x30\x2e\x32\x39\x36\x39\x33\x20\x30\x2e\x37\ -\x31\x38\x35\x33\x33\x31\x32\x2c\x2d\x30\x2e\x35\x36\x31\x33\x33\ -\x20\x31\x2e\x30\x35\x36\x35\x34\x34\x35\x32\x2c\x2d\x30\x2e\x36\ -\x36\x32\x36\x32\x20\x6c\x20\x30\x2e\x30\x39\x34\x34\x33\x35\x2c\ -\x2d\x30\x2e\x30\x32\x38\x31\x20\x30\x2e\x30\x31\x34\x39\x30\x35\ -\x2c\x2d\x30\x2e\x32\x37\x33\x37\x20\x63\x20\x30\x2e\x30\x36\x35\ -\x33\x35\x2c\x2d\x31\x2e\x32\x30\x30\x37\x39\x20\x30\x2e\x38\x38\ -\x39\x36\x33\x31\x39\x2c\x2d\x32\x2e\x31\x39\x39\x32\x31\x20\x32\ -\x2e\x30\x37\x37\x34\x32\x36\x35\x2c\x2d\x32\x2e\x35\x31\x36\x32\ -\x39\x20\x30\x2e\x32\x31\x30\x32\x38\x30\x32\x2c\x2d\x30\x2e\x30\ -\x35\x36\x32\x20\x30\x2e\x32\x38\x35\x38\x33\x34\x36\x2c\x2d\x30\ -\x2e\x30\x36\x33\x37\x20\x30\x2e\x36\x35\x35\x35\x32\x37\x36\x2c\ -\x2d\x30\x2e\x30\x36\x34\x35\x20\x30\x2e\x32\x33\x35\x38\x36\x34\ -\x36\x2c\x2d\x35\x2e\x39\x65\x2d\x34\x20\x30\x2e\x34\x36\x35\x38\ -\x34\x30\x34\x2c\x30\x2e\x30\x31\x31\x34\x20\x30\x2e\x35\x32\x38\ -\x30\x32\x39\x39\x2c\x30\x2e\x30\x32\x37\x20\x30\x2e\x31\x31\x30\ -\x31\x36\x32\x38\x2c\x30\x2e\x30\x32\x38\x31\x20\x30\x2e\x31\x31\ -\x30\x31\x38\x35\x36\x2c\x30\x2e\x30\x32\x38\x31\x20\x30\x2e\x31\ -\x38\x31\x38\x36\x36\x2c\x2d\x30\x2e\x30\x36\x32\x39\x20\x30\x2e\ -\x31\x34\x32\x36\x36\x38\x2c\x2d\x30\x2e\x31\x38\x30\x37\x39\x20\ -\x30\x2e\x34\x36\x35\x38\x32\x39\x36\x2c\x2d\x30\x2e\x34\x37\x34\ -\x32\x20\x30\x2e\x36\x38\x30\x34\x30\x32\x38\x2c\x2d\x30\x2e\x36\ -\x31\x37\x37\x20\x30\x2e\x35\x30\x34\x35\x30\x37\x32\x2c\x2d\x30\ -\x2e\x33\x33\x37\x34\x36\x20\x31\x2e\x30\x31\x36\x38\x33\x30\x34\ -\x2c\x2d\x30\x2e\x35\x30\x36\x35\x20\x31\x2e\x36\x32\x33\x34\x37\ -\x33\x36\x2c\x2d\x30\x2e\x35\x33\x35\x36\x32\x20\x30\x2e\x35\x33\ -\x38\x39\x30\x38\x31\x2c\x2d\x30\x2e\x30\x32\x35\x36\x20\x31\x2e\ -\x30\x32\x35\x39\x33\x37\x36\x2c\x30\x2e\x30\x37\x34\x36\x20\x31\ -\x2e\x35\x30\x39\x38\x38\x32\x36\x2c\x30\x2e\x33\x31\x31\x30\x39\ -\x20\x30\x2e\x36\x36\x35\x37\x39\x33\x31\x2c\x30\x2e\x33\x32\x35\ -\x34\x38\x20\x31\x2e\x31\x33\x37\x36\x38\x38\x35\x2c\x30\x2e\x37\ -\x39\x37\x33\x39\x20\x31\x2e\x34\x36\x33\x31\x38\x35\x35\x2c\x31\ -\x2e\x34\x36\x33\x31\x39\x20\x30\x2e\x32\x33\x34\x30\x34\x38\x2c\ -\x30\x2e\x34\x37\x38\x37\x34\x20\x30\x2e\x33\x33\x35\x37\x36\x34\ -\x2c\x30\x2e\x39\x36\x37\x30\x31\x20\x30\x2e\x33\x31\x32\x32\x38\ -\x34\x2c\x31\x2e\x34\x39\x39\x30\x36\x20\x6c\x20\x2d\x30\x2e\x30\ -\x31\x32\x31\x39\x2c\x30\x2e\x32\x37\x36\x37\x38\x20\x30\x2e\x31\ -\x39\x39\x33\x38\x2c\x30\x2e\x31\x33\x31\x32\x38\x20\x63\x20\x30\ -\x2e\x31\x30\x39\x36\x35\x37\x2c\x30\x2e\x30\x37\x32\x32\x20\x30\ -\x2e\x33\x31\x37\x30\x35\x36\x2c\x30\x2e\x32\x34\x38\x30\x36\x20\ -\x30\x2e\x34\x36\x30\x38\x38\x36\x2c\x30\x2e\x33\x39\x30\x37\x34\ -\x20\x30\x2e\x38\x31\x33\x39\x39\x2c\x30\x2e\x38\x30\x37\x35\x20\ -\x31\x2e\x31\x31\x35\x30\x38\x38\x2c\x31\x2e\x39\x33\x32\x36\x31\ -\x20\x30\x2e\x38\x31\x37\x36\x36\x34\x2c\x33\x2e\x30\x35\x35\x34\ -\x31\x20\x2d\x30\x2e\x31\x32\x31\x33\x32\x34\x2c\x30\x2e\x34\x35\ -\x37\x39\x37\x20\x2d\x30\x2e\x34\x35\x37\x39\x32\x37\x2c\x31\x2e\ -\x30\x33\x35\x36\x20\x2d\x30\x2e\x38\x30\x36\x38\x34\x39\x2c\x31\ -\x2e\x33\x38\x34\x35\x20\x2d\x30\x2e\x33\x33\x33\x33\x37\x36\x2c\ -\x30\x2e\x33\x33\x33\x33\x38\x20\x2d\x30\x2e\x39\x31\x35\x38\x31\ -\x39\x2c\x30\x2e\x36\x37\x39\x33\x34\x20\x2d\x31\x2e\x33\x34\x31\ -\x35\x33\x39\x2c\x30\x2e\x37\x39\x36\x38\x34\x20\x2d\x30\x2e\x34\ -\x35\x30\x37\x35\x35\x35\x2c\x30\x2e\x31\x32\x34\x34\x35\x20\x2d\ -\x30\x2e\x33\x39\x34\x36\x36\x35\x35\x2c\x30\x2e\x31\x32\x32\x38\ -\x39\x20\x2d\x34\x2e\x32\x33\x39\x39\x39\x34\x33\x2c\x30\x2e\x31\ -\x31\x39\x38\x31\x20\x2d\x31\x2e\x39\x37\x33\x37\x34\x36\x39\x2c\ -\x2d\x30\x2e\x30\x30\x32\x20\x2d\x33\x2e\x36\x35\x34\x30\x35\x39\ -\x33\x2c\x2d\x30\x2e\x30\x31\x32\x35\x20\x2d\x33\x2e\x37\x33\x34\ -\x30\x32\x36\x35\x2c\x2d\x30\x2e\x30\x32\x34\x32\x20\x7a\x20\x6d\ -\x20\x37\x2e\x36\x35\x33\x34\x31\x34\x38\x2c\x2d\x30\x2e\x38\x32\ -\x38\x33\x34\x20\x63\x20\x30\x2e\x35\x34\x36\x33\x39\x35\x2c\x2d\ -\x30\x2e\x31\x34\x36\x31\x20\x31\x2e\x30\x33\x32\x35\x31\x35\x2c\ -\x2d\x30\x2e\x34\x37\x38\x36\x34\x20\x31\x2e\x33\x36\x30\x33\x33\ -\x32\x2c\x2d\x30\x2e\x39\x33\x30\x35\x35\x20\x30\x2e\x31\x33\x35\ -\x32\x31\x36\x2c\x2d\x30\x2e\x31\x38\x36\x34\x33\x20\x30\x2e\x33\ -\x30\x33\x30\x35\x34\x2c\x2d\x30\x2e\x35\x35\x37\x35\x31\x20\x30\ -\x2e\x33\x36\x35\x36\x39\x34\x2c\x2d\x30\x2e\x38\x30\x38\x35\x33\ -\x20\x30\x2e\x30\x37\x37\x32\x39\x2c\x2d\x30\x2e\x33\x30\x39\x36\ -\x37\x20\x30\x2e\x30\x37\x37\x34\x35\x2c\x2d\x30\x2e\x37\x39\x32\ -\x38\x35\x20\x33\x2e\x37\x33\x65\x2d\x34\x2c\x2d\x31\x2e\x31\x30\ -\x31\x35\x38\x20\x2d\x30\x2e\x31\x38\x35\x39\x37\x2c\x2d\x30\x2e\ -\x37\x34\x34\x39\x39\x20\x2d\x30\x2e\x37\x36\x30\x38\x32\x2c\x2d\ -\x31\x2e\x33\x39\x30\x36\x31\x20\x2d\x31\x2e\x34\x36\x31\x32\x36\ -\x37\x2c\x2d\x31\x2e\x36\x34\x31\x31\x39\x20\x2d\x30\x2e\x31\x34\ -\x30\x30\x34\x38\x2c\x2d\x30\x2e\x30\x35\x30\x31\x20\x2d\x30\x2e\ -\x32\x31\x33\x31\x33\x34\x2c\x2d\x30\x2e\x30\x38\x38\x34\x20\x2d\ -\x30\x2e\x32\x30\x35\x36\x36\x33\x2c\x2d\x30\x2e\x31\x30\x37\x39\ -\x20\x30\x2e\x32\x33\x31\x31\x38\x36\x2c\x2d\x30\x2e\x36\x30\x32\ -\x34\x35\x20\x30\x2e\x32\x30\x35\x37\x35\x31\x2c\x2d\x31\x2e\x32\ -\x36\x35\x36\x20\x2d\x30\x2e\x30\x37\x30\x39\x34\x2c\x2d\x31\x2e\ -\x38\x34\x39\x36\x39\x20\x2d\x30\x2e\x32\x34\x32\x33\x30\x35\x38\ -\x2c\x2d\x30\x2e\x35\x31\x31\x35\x35\x20\x2d\x30\x2e\x36\x31\x32\ -\x33\x30\x32\x39\x2c\x2d\x30\x2e\x38\x38\x31\x37\x34\x20\x2d\x31\ -\x2e\x31\x32\x31\x33\x39\x34\x39\x2c\x2d\x31\x2e\x31\x32\x32\x30\ -\x31\x20\x2d\x30\x2e\x33\x36\x35\x30\x36\x38\x36\x2c\x2d\x30\x2e\ -\x31\x37\x32\x33\x20\x2d\x30\x2e\x35\x38\x32\x31\x32\x34\x35\x2c\ -\x2d\x30\x2e\x32\x31\x39\x38\x20\x2d\x31\x2e\x30\x30\x34\x34\x39\ -\x30\x37\x2c\x2d\x30\x2e\x32\x31\x39\x38\x20\x2d\x30\x2e\x32\x39\ -\x32\x31\x30\x39\x35\x2c\x30\x20\x2d\x30\x2e\x33\x39\x34\x30\x39\ -\x34\x38\x2c\x30\x2e\x30\x31\x30\x31\x20\x2d\x30\x2e\x35\x36\x35\ -\x33\x33\x32\x2c\x30\x2e\x30\x35\x35\x37\x20\x2d\x30\x2e\x36\x37\ -\x36\x32\x39\x35\x38\x2c\x30\x2e\x31\x37\x39\x38\x37\x20\x2d\x31\ -\x2e\x32\x34\x33\x31\x34\x39\x39\x2c\x30\x2e\x36\x33\x35\x36\x34\ -\x20\x2d\x31\x2e\x35\x33\x37\x37\x39\x39\x38\x2c\x31\x2e\x32\x33\ -\x36\x34\x32\x20\x6c\x20\x2d\x30\x2e\x30\x36\x38\x34\x31\x2c\x30\ -\x2e\x31\x33\x39\x34\x39\x20\x2d\x30\x2e\x31\x31\x32\x34\x39\x31\ -\x37\x2c\x2d\x30\x2e\x30\x35\x36\x39\x20\x63\x20\x2d\x30\x2e\x32\ -\x30\x39\x32\x39\x34\x34\x2c\x2d\x30\x2e\x31\x30\x35\x37\x36\x20\ -\x2d\x30\x2e\x35\x31\x37\x36\x36\x35\x38\x2c\x2d\x30\x2e\x31\x38\ -\x37\x35\x31\x20\x2d\x30\x2e\x37\x36\x33\x38\x31\x39\x31\x2c\x2d\ -\x30\x2e\x32\x30\x32\x35\x32\x20\x2d\x30\x2e\x38\x35\x32\x37\x35\ -\x2c\x2d\x30\x2e\x30\x35\x32\x20\x2d\x31\x2e\x36\x38\x32\x33\x30\ -\x34\x35\x2c\x30\x2e\x35\x31\x32\x37\x34\x20\x2d\x31\x2e\x39\x35\ -\x34\x39\x33\x38\x31\x2c\x31\x2e\x33\x33\x30\x37\x36\x20\x2d\x30\ -\x2e\x31\x35\x34\x33\x38\x37\x36\x2c\x30\x2e\x34\x36\x33\x32\x33\ -\x20\x2d\x30\x2e\x31\x33\x38\x38\x30\x35\x36\x2c\x30\x2e\x39\x30\ -\x35\x35\x34\x20\x30\x2e\x30\x34\x39\x30\x31\x35\x2c\x31\x2e\x33\ -\x39\x31\x32\x36\x20\x30\x2e\x30\x31\x32\x35\x39\x36\x2c\x30\x2e\ -\x30\x33\x32\x34\x20\x2d\x30\x2e\x30\x30\x38\x31\x2c\x30\x2e\x30\ -\x33\x36\x35\x20\x2d\x30\x2e\x31\x34\x33\x33\x38\x32\x34\x2c\x30\ -\x2e\x30\x32\x37\x38\x20\x2d\x30\x2e\x31\x39\x30\x36\x31\x36\x2c\ -\x2d\x30\x2e\x30\x31\x32\x32\x20\x2d\x30\x2e\x35\x30\x30\x35\x35\ -\x34\x39\x2c\x30\x2e\x30\x34\x36\x36\x20\x2d\x30\x2e\x37\x34\x33\ -\x39\x38\x35\x32\x2c\x30\x2e\x31\x34\x31\x31\x33\x20\x2d\x30\x2e\ -\x35\x30\x30\x34\x36\x2c\x30\x2e\x31\x39\x34\x32\x32\x20\x2d\x30\ -\x2e\x39\x35\x34\x33\x39\x37\x37\x2c\x30\x2e\x36\x37\x31\x32\x35\ -\x20\x2d\x31\x2e\x31\x32\x34\x32\x39\x31\x32\x34\x2c\x31\x2e\x31\ -\x38\x31\x35\x35\x20\x2d\x30\x2e\x31\x35\x37\x35\x31\x30\x36\x39\ -\x2c\x30\x2e\x34\x37\x33\x30\x37\x20\x2d\x30\x2e\x31\x34\x37\x33\ -\x31\x37\x30\x31\x2c\x30\x2e\x39\x30\x33\x35\x37\x20\x30\x2e\x30\ -\x33\x32\x33\x37\x39\x2c\x31\x2e\x33\x36\x37\x36\x34\x20\x30\x2e\ -\x31\x39\x34\x33\x30\x30\x34\x34\x2c\x30\x2e\x35\x30\x31\x37\x32\ -\x20\x30\x2e\x36\x37\x30\x37\x37\x38\x39\x34\x2c\x30\x2e\x39\x35\ -\x34\x31\x39\x20\x31\x2e\x31\x38\x35\x34\x32\x38\x36\x34\x2c\x31\ -\x2e\x31\x32\x35\x36\x38\x20\x30\x2e\x31\x30\x33\x36\x30\x36\x32\ -\x2c\x30\x2e\x30\x33\x34\x34\x20\x30\x2e\x32\x34\x37\x33\x39\x37\ -\x34\x2c\x30\x2e\x30\x37\x32\x35\x20\x30\x2e\x33\x31\x39\x35\x33\ -\x35\x39\x2c\x30\x2e\x30\x38\x34\x38\x20\x30\x2e\x30\x37\x34\x32\ -\x33\x2c\x30\x2e\x30\x31\x32\x36\x20\x31\x2e\x36\x39\x39\x34\x33\ -\x36\x39\x2c\x30\x2e\x30\x32\x30\x35\x20\x33\x2e\x37\x34\x34\x33\ -\x37\x32\x35\x2c\x30\x2e\x30\x31\x38\x31\x20\x6c\x20\x33\x2e\x36\ -\x31\x33\x32\x31\x32\x34\x2c\x2d\x30\x2e\x30\x30\x34\x20\x7a\x20\ -\x6d\x20\x2d\x35\x2e\x32\x37\x31\x32\x37\x30\x35\x2c\x2d\x31\x2e\ -\x32\x39\x37\x35\x20\x63\x20\x2d\x30\x2e\x35\x32\x37\x32\x33\x33\ -\x2c\x2d\x30\x2e\x33\x31\x36\x34\x31\x20\x2d\x30\x2e\x39\x35\x38\ -\x36\x30\x36\x36\x2c\x2d\x30\x2e\x35\x38\x36\x33\x34\x20\x2d\x30\ -\x2e\x39\x35\x38\x36\x30\x36\x36\x2c\x2d\x30\x2e\x35\x39\x39\x38\ -\x39\x20\x30\x2c\x2d\x30\x2e\x30\x31\x33\x37\x20\x30\x2e\x34\x33\ -\x31\x33\x37\x33\x36\x2c\x2d\x30\x2e\x32\x38\x33\x34\x37\x20\x30\ -\x2e\x39\x35\x38\x36\x30\x36\x36\x2c\x2d\x30\x2e\x35\x39\x39\x38\ -\x39\x20\x6c\x20\x30\x2e\x39\x35\x38\x36\x30\x37\x37\x2c\x2d\x30\ -\x2e\x35\x37\x35\x32\x20\x30\x2e\x30\x30\x36\x37\x35\x2c\x30\x2e\ -\x33\x39\x30\x38\x39\x20\x30\x2e\x30\x30\x36\x37\x35\x2c\x30\x2e\ -\x33\x39\x30\x39\x34\x20\x68\x20\x31\x2e\x35\x37\x32\x34\x38\x34\ -\x37\x20\x31\x2e\x35\x37\x32\x34\x39\x30\x33\x20\x76\x20\x30\x2e\ -\x33\x39\x33\x32\x36\x20\x30\x2e\x33\x39\x33\x32\x37\x20\x48\x20\ -\x37\x2e\x33\x33\x37\x37\x35\x36\x38\x20\x35\x2e\x37\x36\x35\x32\ -\x36\x35\x33\x20\x6c\x20\x2d\x30\x2e\x30\x30\x36\x37\x35\x2c\x30\ -\x2e\x33\x39\x30\x39\x34\x20\x2d\x30\x2e\x30\x30\x36\x37\x35\x2c\ -\x30\x2e\x33\x39\x30\x39\x33\x20\x7a\x20\x6d\x20\x32\x2e\x31\x35\ -\x30\x37\x32\x32\x37\x2c\x2d\x32\x2e\x31\x37\x30\x31\x34\x20\x76\ -\x20\x2d\x30\x2e\x33\x39\x36\x31\x32\x20\x48\x20\x35\x2e\x33\x37\ -\x30\x38\x31\x36\x31\x20\x33\x2e\x37\x39\x37\x37\x31\x35\x31\x20\ -\x76\x20\x2d\x30\x2e\x33\x39\x33\x32\x36\x20\x2d\x30\x2e\x33\x39\ -\x33\x32\x38\x20\x68\x20\x31\x2e\x35\x37\x32\x34\x39\x30\x35\x20\ -\x31\x2e\x35\x37\x32\x34\x39\x31\x36\x20\x6c\x20\x30\x2e\x30\x30\ -\x36\x37\x35\x2c\x2d\x30\x2e\x33\x39\x30\x39\x33\x20\x30\x2e\x30\ -\x30\x36\x37\x35\x2c\x2d\x30\x2e\x33\x39\x30\x39\x33\x20\x30\x2e\ -\x39\x35\x38\x35\x39\x32\x39\x2c\x30\x2e\x35\x37\x35\x32\x34\x20\ -\x63\x20\x30\x2e\x35\x32\x37\x32\x32\x39\x31\x2c\x30\x2e\x33\x31\ -\x36\x34\x20\x30\x2e\x39\x36\x31\x36\x39\x36\x2c\x30\x2e\x35\x38\ -\x34\x35\x33\x20\x30\x2e\x39\x36\x35\x34\x38\x33\x31\x2c\x30\x2e\ -\x35\x39\x35\x39\x31\x20\x30\x2e\x30\x30\x33\x37\x35\x2c\x30\x2e\ -\x30\x31\x31\x35\x20\x2d\x30\x2e\x34\x30\x35\x34\x35\x38\x34\x2c\ -\x30\x2e\x32\x36\x37\x36\x34\x20\x2d\x30\x2e\x39\x30\x39\x34\x33\ -\x36\x33\x2c\x30\x2e\x35\x36\x39\x35\x36\x20\x2d\x30\x2e\x35\x30\ -\x33\x39\x37\x35\x39\x2c\x30\x2e\x33\x30\x31\x38\x37\x20\x2d\x30\ -\x2e\x39\x34\x31\x32\x30\x39\x37\x2c\x30\x2e\x35\x36\x34\x38\x37\ -\x20\x2d\x30\x2e\x39\x37\x31\x36\x32\x36\x35\x2c\x30\x2e\x35\x38\ -\x34\x34\x31\x20\x6c\x20\x2d\x30\x2e\x30\x35\x35\x33\x30\x38\x2c\ -\x30\x2e\x30\x33\x35\x34\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\ -\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x38\x32\x36\x22\x0a\x20\x20\ -\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\ -\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\ -\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x67\x3e\x0a\ -\x3c\x2f\x73\x76\x67\x3e\x0a\ -\x00\x00\x0f\x12\ -\x89\ -\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ -\x00\x02\x00\x00\x00\x02\x00\x08\x06\x00\x00\x00\xf4\x78\xd4\xfa\ -\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\ -\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\ -\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\ -\xe2\x04\x05\x16\x0d\x0f\x68\xbc\xfa\xc5\x00\x00\x0e\x9f\x49\x44\ -\x41\x54\x78\xda\xed\xdd\x5b\x72\xdb\x3a\x10\x04\x50\x11\xc5\xfd\ -\x6f\xd9\xf7\x2b\xa9\x5b\x65\xc7\x96\x25\x3e\x66\xa6\xcf\x59\x40\ -\x1e\x24\x30\xdd\x80\x94\xf8\xf1\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x38\xc6\xe6\x11\x00\x1d\x7d\x3c\x1e\ -\x1f\x45\x86\xa8\x39\x8a\x02\x00\x30\x35\xe8\x15\x03\x14\x00\x00\ -\x61\xaf\x14\xa0\x00\x00\x08\x7c\x85\x00\x05\x00\x40\xe0\x2b\x04\ -\x28\x00\x80\xd0\x17\xfa\xca\x00\x0a\x00\x20\xf4\x51\x06\x50\x00\ -\x00\xa1\x8f\x32\x80\x02\x00\x08\x7d\x94\x01\x14\x00\x40\xf0\xa3\ -\x08\xa0\x00\x00\x42\x1f\x45\x00\x05\x00\x10\xfc\x28\x03\x28\x00\ -\x80\xe0\x47\x11\x40\x01\x00\x04\x3f\x8a\x00\x0a\x00\x20\xf8\x51\ -\x04\x50\x00\x00\xc1\xaf\x04\x60\x1d\x00\xc2\x1f\x45\x00\x05\x00\ -\x10\xfc\x28\x02\x28\x00\x80\xe0\x47\x11\x40\x01\x00\x84\x3f\x4a\ -\x00\x0a\x00\x20\xf8\x51\x04\x50\x00\x00\xe1\x8f\x12\x80\x02\x00\ -\x08\x7e\x14\x01\x14\x00\x40\xf8\xa3\x04\xa0\x00\x00\x82\x1f\x25\ -\x00\x05\x00\x10\xfe\x28\x02\x28\x00\x80\xf0\x47\x09\x40\x01\x00\ -\x84\x3f\x4a\x00\x0a\x00\x08\x7e\xc1\x8f\x22\x80\x02\x00\xc2\x1f\ -\x94\x00\x14\x00\x10\xfe\xa0\x04\xa0\x00\x80\xf0\x07\x25\x00\x05\ -\x00\x84\x3f\x28\x01\x78\x49\x20\xfc\x85\x8e\xf7\xa1\x04\x28\x00\ -\x80\xe0\x17\x2c\xde\x97\x12\xa0\x00\x00\xc2\x44\x88\x78\x87\x4a\ -\x80\x02\x00\x08\x0e\x81\xe1\xbd\x7a\xa7\x0a\x00\x20\x24\x04\x84\ -\xf7\xec\x1d\x2b\x00\x80\x50\x10\x08\xde\xbb\x77\xae\x00\x00\x42\ -\x40\x00\x58\x07\xd6\x80\x02\x00\x04\x0f\x7e\x43\xdf\x7a\xb0\x1e\ -\x14\x00\x20\x68\xd8\x1b\xf4\xd6\x86\xb5\xa1\x00\x00\x41\x03\xde\ -\x70\xb7\x4e\xac\x13\x05\x00\x08\x1a\xea\x06\xba\x35\x63\xcd\x28\ -\x00\x40\xd0\x20\x37\xc4\xad\x1f\xeb\x47\x01\x00\x82\x86\xb7\xc1\ -\x6d\x2d\x59\x4b\x0a\x00\x60\x60\x63\x4d\x59\x53\x8d\xec\x1e\x01\ -\x60\x48\xf7\x7f\x1f\x7e\xf6\x00\x6e\x00\x70\xfa\x29\x1a\x84\xdd\ -\x07\xb4\xe0\xb7\x27\xac\x33\x05\x00\x0c\xb5\x5f\x0e\x30\x43\x19\ -\xfb\xc5\x7a\x53\x00\x20\x60\x80\x0d\x1b\x12\xe6\x84\x3d\x64\xdd\ -\x29\x00\x60\x58\x09\x7e\xec\x2d\xeb\x4f\x01\x00\x81\x2f\xfc\xb1\ -\xdf\xac\x43\x05\x00\x84\xbe\xf0\xc7\xfe\xb3\x1e\x15\x00\x10\xfc\ -\x06\x2d\xf6\xa3\xb5\xa9\x00\x60\xc8\x60\xc0\x62\x7f\x5a\x9f\x0a\ -\x00\x06\x0b\x86\x2b\xf6\xaa\x75\xaa\x00\x60\x90\x60\xa8\x62\xef\ -\x5a\xaf\x0a\x00\x86\x07\x86\x29\xf6\xb1\x35\xab\x00\x60\x60\x60\ -\x90\x62\x4f\x5b\xbb\x0a\x00\x86\x04\x06\x28\x4a\x00\x0a\x00\x06\ -\x03\x06\x27\x39\x7b\xdd\x3a\x56\x00\x30\x10\x30\x34\x51\x02\x50\ -\x00\x10\xfc\x18\x96\xa4\xec\x7f\x6b\x5a\x01\x40\xf0\x63\x50\xa2\ -\x04\xf0\x82\xe5\x11\x20\xfc\x85\x3f\x58\x3b\x6e\x00\x10\xfc\x18\ -\xe0\xd0\x66\x3e\x58\xe7\x0a\x00\xc2\x1f\x43\x11\x25\x80\x5f\xd8\ -\x3d\x02\x1b\x1a\x00\x37\x00\x08\x7f\x9c\xfe\xc1\x2d\x40\x00\x5f\ -\x02\xb4\x89\x11\xfe\x60\x6d\xb9\x01\x40\xf0\x63\x40\x43\xcf\x59\ -\x62\x0f\xb8\x01\x40\xf8\x03\xe0\x06\x40\xf8\x7b\x0a\x4e\xff\xe0\ -\x16\x00\x37\x00\x36\x29\xc2\x1f\xac\x39\xbc\x44\xc1\x8f\x41\x0c\ -\x73\x66\x8d\x3d\xe1\x06\xc0\x86\x04\x30\x03\x51\x00\x2c\x7c\x9c\ -\xfe\xc1\x1a\x44\x01\x10\xfe\x00\xe6\xa1\x02\x80\xc5\x8e\x93\x17\ -\x58\x8b\x81\xef\x0e\xe1\x8f\x81\x0b\xf3\x66\x91\xbd\xf2\x3d\x3f\ -\x0c\xc8\x86\x13\x8e\x9e\x39\xe0\x06\x00\xe1\x2f\xec\x2b\xbf\x0b\ -\x27\x1a\xcc\x25\xfb\x45\x01\xb0\xc9\x04\x7e\xe0\xfb\x31\xd0\x30\ -\x9b\xec\x19\x05\xc0\x06\x13\xf8\x61\xef\xcb\x20\xc3\x8c\xb2\x6f\ -\x8e\xe4\x3b\x00\x08\xfe\x8b\xfe\x2e\x3e\xb6\x01\xdc\x00\xe0\xf4\ -\x1f\xdc\xd2\x5f\x79\x8f\x4e\x31\x98\x55\xe6\x8b\x1b\x00\x1b\x4a\ -\xf0\xbb\x15\x00\x70\x03\x20\xfc\x05\xff\xf4\x77\xec\x59\x61\x6e\ -\x99\x37\x0a\x80\x4d\x24\xf8\x03\xdf\xb7\x67\x86\xd9\x65\xf6\x28\ -\x00\x36\x90\xe0\x0f\x7b\xf7\x9e\x1b\x66\x98\x19\x74\x16\xdf\x01\ -\xc0\xa6\xf3\xdc\x00\x37\x00\x68\xce\x02\x0c\x70\x0b\x90\xc0\x4f\ -\x03\xb4\x61\x6c\x32\x80\x40\x3e\x02\x10\xfe\x82\x1f\xc0\x0d\x00\ -\x08\x7f\xc0\x6c\x08\x79\x37\x38\xfd\xdb\xdc\x40\xc6\x6c\x33\xb3\ -\xdc\x00\xd8\x20\x36\x12\x80\x02\x00\xc2\x1f\x30\x2f\x14\x00\x9c\ -\xfe\x6d\x66\x00\x05\x00\xe1\x2f\xfc\x01\x33\x57\x01\x20\xd2\xf6\ -\x78\x6c\xc2\x1f\x70\x78\x50\x00\x08\x6a\xa2\x36\x2e\x80\x02\x80\ -\xd6\x0e\x80\x02\xc0\xe4\xd3\xbf\xf0\x07\x18\x7d\xc0\x43\xf8\x0b\ -\x7f\x20\x6b\xfe\x99\x71\x6e\x00\xb0\x31\x00\x14\x00\x9c\xfe\x01\ -\x50\x00\x70\xfa\x07\x40\x01\x60\xfa\xe9\x5f\xf8\x03\xe6\x8c\x02\ -\x80\x4d\x09\x80\x02\xc0\xe4\xd3\xbf\xf0\x07\xcc\x64\x05\x00\x27\ -\x7f\x00\x14\x00\x34\x4d\x00\x14\x00\x9c\xfe\x01\x50\x00\x10\xfe\ -\x00\xe6\x8f\x02\xc0\x17\x5c\xff\x03\xa0\x00\xa0\x7d\x03\xa0\x00\ -\x38\xfd\x0b\x7f\x00\x14\x00\x00\x40\x01\xc0\xe9\x1f\x00\x05\xa0\ -\x19\x5f\xfe\x03\x40\x01\xc0\xe9\x1f\x00\x05\xc0\xe9\x1f\x00\x14\ -\x00\x9c\xfe\x01\x50\x00\x00\x00\x05\xa0\x99\x6a\xd7\xff\x4e\xff\ -\x00\x28\x00\x00\x80\x02\x30\x9d\xd3\x3f\x77\xfb\x78\x3c\x3e\x7c\ -\x29\x16\x14\x00\x40\x11\x00\x14\x80\x99\x43\xce\xe9\x1f\x7a\xec\ -\x11\x50\x00\x00\xdc\x06\x80\x02\x00\xa0\x08\x80\x02\x40\x43\xae\ -\xff\xe9\x56\x04\x3c\x05\x50\x00\x0c\x31\x70\x1b\x00\x28\x00\x38\ -\xfd\xa3\x08\x00\x0a\x00\x10\x53\x04\x3c\x05\x50\x00\x00\xb7\x01\ -\x80\x02\xe0\xb4\x02\x8a\x00\xa0\x00\xf0\x97\xcf\xff\x51\xb4\x01\ -\x05\x00\x70\x1b\x00\x28\x00\x80\x22\x40\x9d\xf7\xe7\x29\x28\x00\ -\x00\x82\x04\x14\x00\x5e\xe5\xf3\x7f\xdc\x06\x00\x0a\x00\xa0\x08\ -\x00\x0a\xc0\xd9\x43\xc7\x53\x00\x7b\x12\x6b\x45\x01\x00\x70\x1b\ -\x80\xb5\xa2\x00\x00\x18\xee\x54\x3f\x75\x27\xae\x15\x05\x60\x00\ -\x5f\x00\x84\x9e\xa1\x83\xb5\xa2\x00\x00\x38\xe1\x61\xad\x28\x00\ -\x00\x86\x3b\x6e\x03\x14\x00\x00\xc3\xdd\x33\x57\x18\x15\x00\x00\ -\xc3\x1d\xe5\x45\x01\x00\x50\x04\x50\x02\x14\x00\x00\x03\x1e\x65\ -\x51\x01\x00\x70\x1b\xa0\x5c\xf9\xfb\x28\x00\x00\x8a\x00\x4a\x80\ -\x02\x00\x10\x76\x72\xc5\xfa\x50\x00\x00\xdc\x06\x08\xc9\xe0\xf5\ -\xa1\x00\x58\xd4\x80\x22\x40\x60\x26\xf8\x3f\xe4\x07\xbc\xf0\xca\ -\x3f\x0b\xc0\xb0\x64\x2a\x3f\x83\xc3\x1c\xe8\xbe\x36\xdc\x00\x00\ -\xb8\x0d\x10\xfe\x81\x7f\x67\x05\x00\x40\x11\x20\xb0\x04\x28\x00\ -\x00\x4e\xba\x9e\x49\xe0\xdf\xdf\x67\x58\x03\x5e\xac\xef\x00\x40\ -\xb9\xc1\x6a\xb6\x9a\x03\xe5\xd7\x83\x45\x3a\x60\x11\x2b\x00\x60\ -\xf0\x9b\xa3\xd6\x82\x02\x10\xb8\x58\x15\x00\xb0\x3f\xcd\x57\x6b\ -\x41\x01\x08\x5c\x98\x0a\x00\xd8\xa7\xe6\xad\x75\xa0\x00\x04\x2e\ -\x42\x05\x00\xec\x57\x73\xd8\x1a\x50\x00\x02\x17\x9c\x02\x00\xf6\ -\xac\xb9\x6c\x0d\x28\x00\x81\x0b\x4c\x01\x00\x7b\xd7\x9c\xf6\xfe\ -\x15\x80\xc0\x05\xa5\x00\x80\x3d\x6c\x6e\x7b\xf7\x0a\x80\x26\xe9\ -\x99\x83\x3d\x6c\x8e\x7b\xf7\x3f\xda\x2d\x18\x80\x3a\x73\x4a\x11\ -\x78\x2e\x2c\xcd\x75\x37\x00\xc2\xdf\x0d\x00\xd8\xd3\x8a\x93\xf7\ -\xfd\x82\x35\x79\x51\x08\x1f\x40\xb0\x29\x4a\xde\x77\x48\x01\x10\ -\xfc\x00\x79\x25\x60\x42\x11\xb8\x3a\xbb\x46\x15\x80\xe4\xe0\x57\ -\x7a\xc0\xc9\xd6\x33\x53\x02\x7e\x63\xc4\x97\x00\x85\x1f\x20\xc4\ -\xf8\xff\xf3\x93\x0b\x01\x37\x00\x5e\x32\x20\xfc\x99\xf4\x2c\xaf\ -\xca\x35\x0f\xc8\x82\xf7\x9e\xc0\xde\x1d\xcd\xcf\x79\x19\x54\x00\ -\x84\x4a\x9f\x41\xe2\x5d\x81\xe0\x37\x8b\x6a\xae\x91\xe5\x25\x02\ -\x08\x7f\xcf\x3b\xf2\x99\x08\x7e\x8b\xdc\x7b\x03\x41\xe4\x26\x20\ -\x6d\xcd\x6c\x5e\x98\x01\xe3\xdd\x81\xe0\x57\x04\xf2\xd6\xcf\xf2\ -\x92\x00\x84\xbf\x77\x92\xa7\x74\x01\x10\xfe\x40\xf7\x90\x11\x34\ -\x4a\x40\xd5\x3c\xf4\x03\x64\x2c\x6c\xef\x12\x9c\x2e\xa3\x75\x9a\ -\x53\x47\xae\xad\xe5\x45\x00\x08\x7f\xef\x2c\x4f\xa9\x02\x20\xfc\ -\x81\xce\x21\x22\xfc\x95\x80\x4e\x39\xe9\xdb\xe2\x16\xb4\xf7\x0a\ -\x4e\x8f\x34\x9b\x59\x47\xac\xbb\xe5\x81\x03\x08\x7f\xf2\xde\xa9\ -\x13\xa2\xc5\x0c\xf6\xb7\x7d\x45\xc3\xb5\xfb\xee\x3a\xdc\x3d\x60\ -\x83\x05\xb0\x3f\xf9\xfc\xae\xa7\x67\xd4\x6d\x8b\x59\xf8\x1b\x26\ -\x38\x45\xd9\xaf\x58\xc3\xf7\xad\xcb\xdd\x03\x35\x40\x00\xfb\x96\ -\xc8\xb5\x2d\xfc\x0d\x0e\xb0\xdf\xed\x5f\xd2\x6e\x01\x96\x87\x78\ -\xce\xcb\x30\x3c\x40\x79\xc7\x7a\x70\x03\x10\x50\x00\x0c\x0c\xe8\ -\xbf\xe7\xed\x63\xba\xae\xe7\x57\xd6\xee\xee\xc1\x19\x18\xe0\x84\ -\x67\x1f\xf3\xdc\x3a\x99\x94\x65\x97\x7c\x04\x30\x31\xfc\x5d\xf3\ -\x83\xf0\x87\x2a\x5e\xc9\xd9\xbd\xe2\x1f\xca\xb0\x00\xec\x65\xdc\ -\x02\x9c\xfe\x77\x11\xfe\x86\x05\xe4\xcc\x00\x7b\x99\xc9\xf9\xf6\ -\x9b\xf5\xbd\x7b\x8d\x86\x05\xd8\xcf\x10\xb9\x1f\x9c\xfe\x0d\x0a\ -\x98\x3d\x07\xec\x67\xdc\x02\x7c\xb6\x92\x1e\x8a\x61\x01\x79\x27\ -\x7e\xfb\x19\x59\x71\x51\x01\xe8\xfe\x3f\x7f\x19\x16\x60\x38\x43\ -\x67\xcf\xe6\xf0\xf2\xa8\x0c\x0b\x70\xea\x87\xbc\xec\x38\xf4\x4b\ -\x80\x1d\x4f\xff\x06\x05\x18\xc4\xf0\xee\xda\xeb\x98\x7f\x87\xdd\ -\x00\x08\x7f\xc0\x5e\x86\x1a\x9e\xc9\xe4\xd8\x8f\x00\x0c\x0c\x98\ -\xb1\x8f\xed\x65\x64\xca\x8d\x37\x00\x7e\xe0\x07\x20\xf8\xa1\xd7\ -\x2d\xc0\x3a\xfb\x37\x10\xfe\x80\x3d\x8c\xb5\x59\xcf\xee\xc5\x00\ -\xf6\x30\x44\xee\xa9\xf9\xa7\x7f\x83\x03\xee\x71\xc4\x8c\xb0\x7f\ -\x49\x5c\xf7\x57\x64\xe0\xf8\x2f\x01\x1a\x1e\x60\xff\x02\x07\x16\ -\x80\x0e\xa7\x7f\xc3\x03\xfa\x06\xbf\xfd\x8b\xe2\x5a\xb0\x00\x08\ -\x7f\x40\xf0\x43\x0f\xff\xca\xec\x91\x1f\x01\x18\x20\x60\xdf\x82\ -\xf5\xfc\xbd\x5f\xff\x2b\x80\xee\x3f\xe9\x0f\x30\x28\x81\x81\x37\ -\x00\x86\x09\xf4\xd9\xab\xf6\x2b\x5c\xe3\xab\xc3\xfb\x7a\xf7\x17\ -\x10\xfe\x80\xbd\x0a\xfd\xd6\xf9\xee\x41\x03\xf6\x29\xe4\x79\xfa\ -\x06\xa0\xf2\xe9\xdf\x50\x81\xfa\xc1\x6f\x9f\xa2\xf4\x96\xfb\xb3\ -\xf5\x2e\x00\x86\x0a\x13\xfd\xd9\x6f\xd6\x37\xcc\xd9\xcf\xd5\x32\ -\x73\xef\xf6\x87\x07\x83\x02\xe0\x7d\xad\xff\x15\x80\xd3\x11\xc2\ -\x1f\x90\x55\xaf\xf9\xf1\x06\xc0\xd5\x3f\x08\x7e\xc0\x0d\x00\x70\ -\x60\xf0\x0b\x7f\xe0\xae\x03\x47\xcb\x02\xe0\xf4\x8f\x53\x3f\x20\ -\xb7\xde\xb3\x77\x1b\x52\xc2\x1f\xc1\x0f\x70\x72\x01\x00\x04\x3f\ -\x30\xd3\x72\xfa\x07\xe1\x0f\x28\x00\xc0\x81\xc1\x2f\xfc\x81\x6a\ -\x87\xd8\x3f\x73\x69\xf7\xe0\xc0\x89\x1f\x70\x03\x60\x80\x81\xf0\ -\x07\x02\xb4\xb8\x01\x70\xfa\x47\xf0\x03\x5c\x70\x03\x00\x3c\x1f\ -\xfc\xc2\x1f\xe8\x78\xa0\x5d\xd5\x4f\x32\x4e\xff\x38\xf5\x03\x1c\ -\xcf\xff\x03\x00\x82\x1f\x50\x00\x6a\x71\xfa\x47\xf0\x03\x9c\x33\ -\xcf\x7c\x07\x00\x84\x3f\x90\x7e\x03\x50\x69\xc8\x39\xfd\x23\xf8\ -\x01\xce\xe3\x06\x00\xfe\x11\xfc\xc2\x1f\x98\x7c\xc0\x55\x00\xc0\ -\xa9\x1f\x08\x54\xf2\x4b\x80\xae\xff\x11\xfc\x00\x17\x15\x00\xc3\ -\x0f\xc1\x0f\x90\xa3\xdc\x47\x00\x4e\xff\x08\x7f\x80\x0b\x6f\x00\ -\x40\xf0\x03\x28\x00\x20\xf8\x01\x06\x5b\x86\x22\xc2\x1f\xc0\x0d\ -\xc0\xad\x7c\xfe\x8f\xe0\x07\x08\x2c\x00\x20\xf8\x01\xae\xe1\x3f\ -\x02\x42\xf8\x03\xb8\x01\x00\xc1\x0f\xa0\x00\x5c\xc8\xe7\xff\x08\ -\x7e\x80\x0b\x0b\x80\xc1\x89\xf0\xf7\x77\xa3\x26\x07\x23\x22\x6e\ -\x00\x40\x38\x02\x28\x00\x20\xf8\x01\x4e\xe4\x5f\x01\x20\xfc\x01\ -\xdc\x00\xdc\xc3\xe7\x5c\x08\x7e\x80\xc0\x02\x00\x82\x1f\xe0\x5a\ -\x3e\x02\x40\xf8\x03\xb8\x01\x00\xc1\x0f\xa0\x00\x80\xe0\x07\x18\ -\xc9\x47\x00\x08\x7f\x00\x37\x00\x20\xf8\x01\x14\x00\x10\xfc\x00\ -\x23\xf9\x08\x00\xe1\x0f\xe0\x06\x00\x04\x3f\x40\xc2\x2c\x54\x00\ -\x10\xfc\x00\x81\x7c\x04\x80\xf0\x07\x50\x00\x00\x00\x05\x00\xde\ -\xe4\x07\x3d\x01\xd4\x9c\xcd\x0a\x00\x97\x2c\x34\x45\x00\xc0\x0d\ -\x00\x6e\x03\x00\x22\x55\xfa\x5e\x94\x02\x80\xdb\x00\x00\x37\x00\ -\xa0\x08\x00\x28\x00\x70\x41\x11\xf0\x14\x00\x14\x00\xdc\x06\x00\ -\x8c\x54\xe5\xf3\xff\x3f\xf3\x56\x01\x40\x11\x00\x70\x03\x00\x75\ -\xda\x29\x00\x0a\x00\x6e\x03\x00\x50\x00\x50\x04\x00\xfa\xa8\xf8\ -\x73\x51\x96\x07\x43\x97\x22\xe0\x29\x00\x1c\x37\x4b\xdd\x00\xe0\ -\x36\x00\x20\x90\x02\x80\x22\x00\x70\xa2\xaa\xb7\xdc\x0a\x00\xad\ -\x8b\x80\xa7\x00\xf0\xf2\x0c\xad\xd1\x4e\x0c\x73\x26\x36\x6c\xfb\ -\x02\xa8\xf6\x1f\x00\x95\xbb\x01\xf0\x45\x40\xde\x5d\xd8\xc2\x12\ -\x10\xfe\xcf\xf3\x11\x00\x4e\xcc\x00\x81\x14\x00\xdc\x06\x00\x28\ -\x00\xa0\x08\x00\x1c\xa1\xd2\xf5\xff\x57\xb3\x70\x79\x58\x24\x14\ -\x01\x4f\x01\xe0\x8b\x02\x60\x40\xe2\x36\x00\x20\xeb\x40\xeb\x23\ -\x00\x14\x01\x80\xe1\x73\x4f\x01\x80\x1f\x36\x04\x40\xc2\xe9\xbf\ -\x64\x01\xf0\x3d\x00\xdc\x06\x00\x5c\x58\x00\x0c\x42\x14\x01\x80\ -\x59\x87\xd8\xef\x66\xdb\xf2\x00\x41\x09\x06\x82\x6f\x00\x00\xb7\ -\x01\x40\xce\xe1\x55\x01\x00\x45\x00\x18\x3a\xc7\x9e\x2e\x00\x95\ -\x06\x9e\x8f\x01\xe8\xb0\x81\x00\xba\x66\x96\x1b\x00\x70\x1b\x00\ -\x04\x2a\x5d\x00\xdc\x02\xa0\x08\x00\x4e\xff\xaf\xcd\x2b\x37\x00\ -\x70\xc3\xc6\x02\x84\x7f\xbb\x1b\x80\x6a\xc3\xcd\x2d\x00\x6e\x03\ -\x00\x8e\x3f\xa4\xb8\x01\x00\x45\x00\x08\x3c\xa0\x2e\x0f\x19\xae\ -\x6b\xdc\x00\x55\x66\xd1\x32\xcc\xc0\x6d\x00\x90\x77\x30\x5d\x1e\ -\x36\x28\x02\x40\x5e\x1e\xad\xef\x86\x98\xd7\x0c\xef\x15\x01\x4f\ -\x01\x84\x7f\xd5\x99\xb3\x3c\x78\x70\x1b\x00\xe4\xf1\xaf\x00\x40\ -\x11\x00\xc2\x4e\xff\x3f\x16\x80\x8a\x03\xcb\x2d\x00\xdd\x8b\x80\ -\xa7\x00\xc2\xdf\x0d\x80\x17\x81\xdb\x00\x40\xe6\xdc\x72\xb0\x58\ -\x67\xfd\xc2\x80\x22\x00\xb8\x01\x70\x0b\x00\x4a\x36\xc8\x9a\x42\ -\xf3\x63\x79\x31\xe0\x36\x00\xc8\x0a\xff\xa7\x0b\x80\xc1\x04\x8a\ -\x00\x08\xff\x71\xf3\xa6\xff\xc3\x30\x30\x01\x48\x0a\xff\x23\x72\ -\x6f\x5d\xf9\x9b\x69\x6a\x00\x08\xff\x1a\x96\x97\x06\x00\x7d\x72\ -\xe4\xa8\x03\xf9\xba\xe3\x37\x55\x02\x00\x90\x1f\x6e\x00\xbc\x44\ -\x00\xe4\xc6\xc5\x07\xf1\x75\xe7\x6f\x0e\x00\xc2\xff\x9e\xfc\x5d\ -\x5e\x28\x00\xc2\x3f\xcf\x36\xf9\xc1\xb9\xad\x00\x60\x42\xf8\x9f\ -\x91\x67\xdb\xf4\x07\xa8\x04\x00\x20\xfc\x3f\x5b\x5e\x34\x00\xc2\ -\x3f\xcf\x96\xf2\x30\xdd\x04\x00\x08\xfe\x86\x21\xbd\x9d\xf8\x6b\ -\x67\x3d\x54\x45\x00\x40\xf8\xcb\xab\x83\x7e\x71\x25\x00\x00\xe1\ -\xdf\x2b\xa7\xb6\xd4\x87\xac\x04\x00\x08\xfe\xe4\x8c\x5a\x16\x07\ -\x00\xe6\x7b\xde\x01\x75\x4b\x7f\xe8\x6e\x02\x00\x84\x7f\x62\x26\ -\x6d\x1e\xbe\x22\x00\x20\xf8\xf3\x72\x68\x59\x36\x73\x16\x0f\x40\ -\xe2\xec\x36\xbf\x8b\xdc\x00\x4c\x08\x53\xb7\x01\x00\x0e\x6e\xd3\ -\x73\x67\xf3\x62\x94\x00\x00\xc1\x9f\x97\x37\x9b\x97\xa4\x08\x00\ -\x08\xfe\xbc\x8c\x51\x00\x14\x01\x00\xc1\x1f\x98\x2b\x9b\x17\xa7\ -\x08\x00\x08\xfe\xbc\x2c\xd9\xbc\x44\x45\x00\x40\xf0\xe7\xe5\xc7\ -\xe6\x85\x2a\x02\x00\x82\x3f\x2f\x33\x36\x2f\x57\x11\x00\x10\xfa\ -\x79\x39\xb1\x79\xd9\xca\x00\x80\x1c\xc8\xcb\x05\x05\x40\x11\x00\ -\x30\xfb\x03\xb3\x60\xb3\x10\x2c\x02\x00\x73\x3e\x6f\xee\x6f\x16\ -\x87\x85\x01\x60\xa6\xe7\xcd\xf8\xcd\x82\xb1\x60\x00\xcc\xed\xbc\ -\x59\xbe\x59\x4c\x16\x19\x20\xc8\xc9\x9b\xcb\x9b\x85\x08\x00\x79\ -\x87\xb2\x32\x7f\x50\x25\x00\x00\xe1\x1f\x58\x00\x94\x00\x00\x84\ -\x7f\x68\x01\x50\x02\x00\x10\xfe\xa1\x05\x40\x11\x00\x40\xf0\x07\ -\x17\x00\x25\x00\x00\xe1\x1f\x5a\x00\x94\x00\x00\x84\x7f\x68\x01\ -\x50\x02\x00\x10\xfc\xa1\x05\x40\x09\x00\x40\xf8\x87\x16\x00\x45\ -\x00\x00\xe1\x1f\x5c\x00\x94\x00\x00\x04\x7f\x68\x01\x50\x02\x00\ -\x10\xfe\xa1\x05\x40\x11\x00\x40\xf0\x07\x17\x00\x25\x00\x00\xe1\ -\x1f\x5a\x00\x14\x01\x00\x04\x7f\x70\x01\x50\x02\x00\x10\xfc\xa1\ -\x05\x40\x11\x00\x40\xf0\x07\x17\x00\x45\x00\x00\xe1\x1f\x5c\x00\ -\x94\x00\x00\x04\x7f\x68\x01\x50\x04\x00\x04\x3f\xc1\x05\x40\x11\ -\x00\x10\xfc\x04\x17\x00\x45\x00\x40\xe8\x7b\x5e\x28\x02\x00\x82\ -\x5f\x01\x50\x06\x94\x01\x00\xc1\xaf\x00\x28\x02\x00\x08\x7d\x05\ -\x40\x19\x00\x40\xe8\x2b\x00\x8a\x00\x00\x42\x5f\x01\x50\x06\x00\ -\x10\xfa\x0a\x80\x42\x00\x80\xc0\x57\x00\x14\x02\x00\x81\x8f\x02\ -\xa0\x10\x00\x08\x7b\x14\x00\xe5\x00\x40\xd0\x03\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\xcf\x7f\x49\xea\xae\ -\xcd\x37\xac\x12\xfb\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\ -\x82\ -" - -qt_resource_name = b"\ -\x00\x04\ -\x00\x07\x6f\xa3\ -\x00\x70\ -\x00\x69\x00\x63\x00\x73\ -\x00\x0e\ -\x04\x66\xd7\x47\ -\x00\x69\ -\x00\x63\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x68\x00\x69\x00\x74\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ -\x00\x08\ -\x0a\x61\x5a\xa7\ -\x00\x69\ -\x00\x63\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\ -\x00\x0e\ -\x04\x66\xda\xc7\ -\x00\x69\ -\x00\x63\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x68\x00\x69\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\ -\x00\x0c\ -\x05\x43\x95\xc7\ -\x00\x69\ -\x00\x63\x00\x6f\x00\x6e\x00\x2d\x00\x72\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\ -" - -qt_resource_struct_v1 = b"\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x02\ -\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x00\x46\x00\x00\x00\x00\x00\x01\x00\x00\x2d\x81\ -\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x40\x3d\ -\x00\x00\x00\x30\x00\x00\x00\x00\x00\x01\x00\x00\x0f\x19\ -" - -qt_resource_struct_v2 = b"\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ -\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x02\ -\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x01\x6b\x50\x23\x17\x05\ -\x00\x00\x00\x46\x00\x00\x00\x00\x00\x01\x00\x00\x2d\x81\ -\x00\x00\x01\x76\x47\xf3\x0a\x16\ -\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x40\x3d\ -\x00\x00\x01\x6b\x50\x23\x17\x05\ -\x00\x00\x00\x30\x00\x00\x00\x00\x00\x01\x00\x00\x0f\x19\ -\x00\x00\x01\x6b\x50\x23\x17\x05\ -" - -qt_version = [int(v) for v in QtCore.qVersion().split('.')] -if qt_version < [5, 8, 0]: - rcc_version = 1 - qt_resource_struct = qt_resource_struct_v1 -else: - rcc_version = 2 - qt_resource_struct = qt_resource_struct_v2 - -def qInitResources(): - QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data) - -def qCleanupResources(): - QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data) - -qInitResources() diff --git a/ui/opensnitch/ui_pb2.py b/ui/opensnitch/ui_pb2.py deleted file mode 100644 index 715b38bf..00000000 --- a/ui/opensnitch/ui_pb2.py +++ /dev/null @@ -1,1290 +0,0 @@ -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: ui.proto - -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf.internal import enum_type_wrapper -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='ui.proto', - package='protocol', - syntax='proto3', - serialized_pb=_b('\n\x08ui.proto\x12\x08protocol\"o\n\x05\x45vent\x12\x0c\n\x04time\x18\x01 \x01(\t\x12(\n\nconnection\x18\x02 \x01(\x0b\x32\x14.protocol.Connection\x12\x1c\n\x04rule\x18\x03 \x01(\x0b\x32\x0e.protocol.Rule\x12\x10\n\x08unixnano\x18\x04 \x01(\x03\"\xd3\x06\n\nStatistics\x12\x16\n\x0e\x64\x61\x65mon_version\x18\x01 \x01(\t\x12\r\n\x05rules\x18\x02 \x01(\x04\x12\x0e\n\x06uptime\x18\x03 \x01(\x04\x12\x15\n\rdns_responses\x18\x04 \x01(\x04\x12\x13\n\x0b\x63onnections\x18\x05 \x01(\x04\x12\x0f\n\x07ignored\x18\x06 \x01(\x04\x12\x10\n\x08\x61\x63\x63\x65pted\x18\x07 \x01(\x04\x12\x0f\n\x07\x64ropped\x18\x08 \x01(\x04\x12\x11\n\trule_hits\x18\t \x01(\x04\x12\x13\n\x0brule_misses\x18\n \x01(\x04\x12\x33\n\x08\x62y_proto\x18\x0b \x03(\x0b\x32!.protocol.Statistics.ByProtoEntry\x12\x37\n\nby_address\x18\x0c \x03(\x0b\x32#.protocol.Statistics.ByAddressEntry\x12\x31\n\x07\x62y_host\x18\r \x03(\x0b\x32 .protocol.Statistics.ByHostEntry\x12\x31\n\x07\x62y_port\x18\x0e \x03(\x0b\x32 .protocol.Statistics.ByPortEntry\x12/\n\x06\x62y_uid\x18\x0f \x03(\x0b\x32\x1f.protocol.Statistics.ByUidEntry\x12=\n\rby_executable\x18\x10 \x03(\x0b\x32&.protocol.Statistics.ByExecutableEntry\x12\x1f\n\x06\x65vents\x18\x11 \x03(\x0b\x32\x0f.protocol.Event\x1a.\n\x0c\x42yProtoEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x04:\x02\x38\x01\x1a\x30\n\x0e\x42yAddressEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x04:\x02\x38\x01\x1a-\n\x0b\x42yHostEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x04:\x02\x38\x01\x1a-\n\x0b\x42yPortEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x04:\x02\x38\x01\x1a,\n\nByUidEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x04:\x02\x38\x01\x1a\x33\n\x11\x42yExecutableEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x04:\x02\x38\x01\">\n\x0bPingRequest\x12\n\n\x02id\x18\x01 \x01(\x04\x12#\n\x05stats\x18\x02 \x01(\x0b\x32\x14.protocol.Statistics\"\x17\n\tPingReply\x12\n\n\x02id\x18\x01 \x01(\x04\"\xc8\x02\n\nConnection\x12\x10\n\x08protocol\x18\x01 \x01(\t\x12\x0e\n\x06src_ip\x18\x02 \x01(\t\x12\x10\n\x08src_port\x18\x03 \x01(\r\x12\x0e\n\x06\x64st_ip\x18\x04 \x01(\t\x12\x10\n\x08\x64st_host\x18\x05 \x01(\t\x12\x10\n\x08\x64st_port\x18\x06 \x01(\r\x12\x0f\n\x07user_id\x18\x07 \x01(\r\x12\x12\n\nprocess_id\x18\x08 \x01(\r\x12\x14\n\x0cprocess_path\x18\t \x01(\t\x12\x13\n\x0bprocess_cwd\x18\n \x01(\t\x12\x14\n\x0cprocess_args\x18\x0b \x03(\t\x12\x39\n\x0bprocess_env\x18\x0c \x03(\x0b\x32$.protocol.Connection.ProcessEnvEntry\x1a\x31\n\x0fProcessEnvEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"J\n\x08Operator\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x0f\n\x07operand\x18\x02 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\t\x12\x11\n\tsensitive\x18\x04 \x01(\x08\"\x81\x01\n\x04Rule\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07\x65nabled\x18\x02 \x01(\x08\x12\x12\n\nprecedence\x18\x03 \x01(\x08\x12\x0e\n\x06\x61\x63tion\x18\x04 \x01(\t\x12\x10\n\x08\x64uration\x18\x05 \x01(\t\x12$\n\x08operator\x18\x06 \x01(\x0b\x32\x12.protocol.Operator\"\x95\x01\n\x0c\x43lientConfig\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x19\n\x11isFirewallRunning\x18\x04 \x01(\x08\x12\x0e\n\x06\x63onfig\x18\x05 \x01(\t\x12\x10\n\x08logLevel\x18\x06 \x01(\r\x12\x1d\n\x05rules\x18\x07 \x03(\x0b\x32\x0e.protocol.Rule\"\x8f\x01\n\x0cNotification\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x12\n\nclientName\x18\x02 \x01(\t\x12\x12\n\nserverName\x18\x03 \x01(\t\x12\x1e\n\x04type\x18\x04 \x01(\x0e\x32\x10.protocol.Action\x12\x0c\n\x04\x64\x61ta\x18\x05 \x01(\t\x12\x1d\n\x05rules\x18\x06 \x03(\x0b\x32\x0e.protocol.Rule\"\\\n\x11NotificationReply\x12\n\n\x02id\x18\x01 \x01(\x04\x12-\n\x04\x63ode\x18\x02 \x01(\x0e\x32\x1f.protocol.NotificationReplyCode\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\t*\xda\x01\n\x06\x41\x63tion\x12\x08\n\x04NONE\x10\x00\x12\x11\n\rLOAD_FIREWALL\x10\x01\x12\x13\n\x0fUNLOAD_FIREWALL\x10\x02\x12\x11\n\rCHANGE_CONFIG\x10\x03\x12\x0f\n\x0b\x45NABLE_RULE\x10\x04\x12\x10\n\x0c\x44ISABLE_RULE\x10\x05\x12\x0f\n\x0b\x44\x45LETE_RULE\x10\x06\x12\x0f\n\x0b\x43HANGE_RULE\x10\x07\x12\r\n\tLOG_LEVEL\x10\x08\x12\x08\n\x04STOP\x10\t\x12\x13\n\x0fMONITOR_PROCESS\x10\n\x12\x18\n\x14STOP_MONITOR_PROCESS\x10\x0b**\n\x15NotificationReplyCode\x12\x06\n\x02OK\x10\x00\x12\t\n\x05\x45RROR\x10\x01\x32\xf8\x01\n\x02UI\x12\x34\n\x04Ping\x12\x15.protocol.PingRequest\x1a\x13.protocol.PingReply\"\x00\x12\x31\n\x07\x41skRule\x12\x14.protocol.Connection\x1a\x0e.protocol.Rule\"\x00\x12=\n\tSubscribe\x12\x16.protocol.ClientConfig\x1a\x16.protocol.ClientConfig\"\x00\x12J\n\rNotifications\x12\x1b.protocol.NotificationReply\x1a\x16.protocol.Notification\"\x00(\x01\x30\x01\x62\x06proto3') -) - -_ACTION = _descriptor.EnumDescriptor( - name='Action', - full_name='protocol.Action', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='NONE', index=0, number=0, - options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='LOAD_FIREWALL', index=1, number=1, - options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='UNLOAD_FIREWALL', index=2, number=2, - options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='CHANGE_CONFIG', index=3, number=3, - options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ENABLE_RULE', index=4, number=4, - options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='DISABLE_RULE', index=5, number=5, - options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='DELETE_RULE', index=6, number=6, - options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='CHANGE_RULE', index=7, number=7, - options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='LOG_LEVEL', index=8, number=8, - options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='STOP', index=9, number=9, - options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MONITOR_PROCESS', index=10, number=10, - options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='STOP_MONITOR_PROCESS', index=11, number=11, - options=None, - type=None), - ], - containing_type=None, - options=None, - serialized_start=2010, - serialized_end=2228, -) -_sym_db.RegisterEnumDescriptor(_ACTION) - -Action = enum_type_wrapper.EnumTypeWrapper(_ACTION) -_NOTIFICATIONREPLYCODE = _descriptor.EnumDescriptor( - name='NotificationReplyCode', - full_name='protocol.NotificationReplyCode', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='OK', index=0, number=0, - options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ERROR', index=1, number=1, - options=None, - type=None), - ], - containing_type=None, - options=None, - serialized_start=2230, - serialized_end=2272, -) -_sym_db.RegisterEnumDescriptor(_NOTIFICATIONREPLYCODE) - -NotificationReplyCode = enum_type_wrapper.EnumTypeWrapper(_NOTIFICATIONREPLYCODE) -NONE = 0 -LOAD_FIREWALL = 1 -UNLOAD_FIREWALL = 2 -CHANGE_CONFIG = 3 -ENABLE_RULE = 4 -DISABLE_RULE = 5 -DELETE_RULE = 6 -CHANGE_RULE = 7 -LOG_LEVEL = 8 -STOP = 9 -MONITOR_PROCESS = 10 -STOP_MONITOR_PROCESS = 11 -OK = 0 -ERROR = 1 - - - -_EVENT = _descriptor.Descriptor( - name='Event', - full_name='protocol.Event', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='time', full_name='protocol.Event.time', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='connection', full_name='protocol.Event.connection', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='rule', full_name='protocol.Event.rule', index=2, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='unixnano', full_name='protocol.Event.unixnano', index=3, - number=4, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=22, - serialized_end=133, -) - - -_STATISTICS_BYPROTOENTRY = _descriptor.Descriptor( - name='ByProtoEntry', - full_name='protocol.Statistics.ByProtoEntry', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='key', full_name='protocol.Statistics.ByProtoEntry.key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='value', full_name='protocol.Statistics.ByProtoEntry.value', index=1, - number=2, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=698, - serialized_end=744, -) - -_STATISTICS_BYADDRESSENTRY = _descriptor.Descriptor( - name='ByAddressEntry', - full_name='protocol.Statistics.ByAddressEntry', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='key', full_name='protocol.Statistics.ByAddressEntry.key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='value', full_name='protocol.Statistics.ByAddressEntry.value', index=1, - number=2, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=746, - serialized_end=794, -) - -_STATISTICS_BYHOSTENTRY = _descriptor.Descriptor( - name='ByHostEntry', - full_name='protocol.Statistics.ByHostEntry', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='key', full_name='protocol.Statistics.ByHostEntry.key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='value', full_name='protocol.Statistics.ByHostEntry.value', index=1, - number=2, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=796, - serialized_end=841, -) - -_STATISTICS_BYPORTENTRY = _descriptor.Descriptor( - name='ByPortEntry', - full_name='protocol.Statistics.ByPortEntry', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='key', full_name='protocol.Statistics.ByPortEntry.key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='value', full_name='protocol.Statistics.ByPortEntry.value', index=1, - number=2, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=843, - serialized_end=888, -) - -_STATISTICS_BYUIDENTRY = _descriptor.Descriptor( - name='ByUidEntry', - full_name='protocol.Statistics.ByUidEntry', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='key', full_name='protocol.Statistics.ByUidEntry.key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='value', full_name='protocol.Statistics.ByUidEntry.value', index=1, - number=2, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=890, - serialized_end=934, -) - -_STATISTICS_BYEXECUTABLEENTRY = _descriptor.Descriptor( - name='ByExecutableEntry', - full_name='protocol.Statistics.ByExecutableEntry', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='key', full_name='protocol.Statistics.ByExecutableEntry.key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='value', full_name='protocol.Statistics.ByExecutableEntry.value', index=1, - number=2, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=936, - serialized_end=987, -) - -_STATISTICS = _descriptor.Descriptor( - name='Statistics', - full_name='protocol.Statistics', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='daemon_version', full_name='protocol.Statistics.daemon_version', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='rules', full_name='protocol.Statistics.rules', index=1, - number=2, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='uptime', full_name='protocol.Statistics.uptime', index=2, - number=3, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='dns_responses', full_name='protocol.Statistics.dns_responses', index=3, - number=4, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='connections', full_name='protocol.Statistics.connections', index=4, - number=5, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ignored', full_name='protocol.Statistics.ignored', index=5, - number=6, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='accepted', full_name='protocol.Statistics.accepted', index=6, - number=7, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='dropped', full_name='protocol.Statistics.dropped', index=7, - number=8, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='rule_hits', full_name='protocol.Statistics.rule_hits', index=8, - number=9, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='rule_misses', full_name='protocol.Statistics.rule_misses', index=9, - number=10, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='by_proto', full_name='protocol.Statistics.by_proto', index=10, - number=11, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='by_address', full_name='protocol.Statistics.by_address', index=11, - number=12, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='by_host', full_name='protocol.Statistics.by_host', index=12, - number=13, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='by_port', full_name='protocol.Statistics.by_port', index=13, - number=14, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='by_uid', full_name='protocol.Statistics.by_uid', index=14, - number=15, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='by_executable', full_name='protocol.Statistics.by_executable', index=15, - number=16, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='events', full_name='protocol.Statistics.events', index=16, - number=17, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[_STATISTICS_BYPROTOENTRY, _STATISTICS_BYADDRESSENTRY, _STATISTICS_BYHOSTENTRY, _STATISTICS_BYPORTENTRY, _STATISTICS_BYUIDENTRY, _STATISTICS_BYEXECUTABLEENTRY, ], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=136, - serialized_end=987, -) - - -_PINGREQUEST = _descriptor.Descriptor( - name='PingRequest', - full_name='protocol.PingRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='id', full_name='protocol.PingRequest.id', index=0, - number=1, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='stats', full_name='protocol.PingRequest.stats', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=989, - serialized_end=1051, -) - - -_PINGREPLY = _descriptor.Descriptor( - name='PingReply', - full_name='protocol.PingReply', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='id', full_name='protocol.PingReply.id', index=0, - number=1, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1053, - serialized_end=1076, -) - - -_CONNECTION_PROCESSENVENTRY = _descriptor.Descriptor( - name='ProcessEnvEntry', - full_name='protocol.Connection.ProcessEnvEntry', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='key', full_name='protocol.Connection.ProcessEnvEntry.key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='value', full_name='protocol.Connection.ProcessEnvEntry.value', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1358, - serialized_end=1407, -) - -_CONNECTION = _descriptor.Descriptor( - name='Connection', - full_name='protocol.Connection', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='protocol', full_name='protocol.Connection.protocol', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='src_ip', full_name='protocol.Connection.src_ip', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='src_port', full_name='protocol.Connection.src_port', index=2, - number=3, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='dst_ip', full_name='protocol.Connection.dst_ip', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='dst_host', full_name='protocol.Connection.dst_host', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='dst_port', full_name='protocol.Connection.dst_port', index=5, - number=6, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='user_id', full_name='protocol.Connection.user_id', index=6, - number=7, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='process_id', full_name='protocol.Connection.process_id', index=7, - number=8, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='process_path', full_name='protocol.Connection.process_path', index=8, - number=9, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='process_cwd', full_name='protocol.Connection.process_cwd', index=9, - number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='process_args', full_name='protocol.Connection.process_args', index=10, - number=11, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='process_env', full_name='protocol.Connection.process_env', index=11, - number=12, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[_CONNECTION_PROCESSENVENTRY, ], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1079, - serialized_end=1407, -) - - -_OPERATOR = _descriptor.Descriptor( - name='Operator', - full_name='protocol.Operator', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='type', full_name='protocol.Operator.type', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='operand', full_name='protocol.Operator.operand', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='data', full_name='protocol.Operator.data', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='sensitive', full_name='protocol.Operator.sensitive', index=3, - number=4, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1409, - serialized_end=1483, -) - - -_RULE = _descriptor.Descriptor( - name='Rule', - full_name='protocol.Rule', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='name', full_name='protocol.Rule.name', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='enabled', full_name='protocol.Rule.enabled', index=1, - number=2, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='precedence', full_name='protocol.Rule.precedence', index=2, - number=3, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='action', full_name='protocol.Rule.action', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='duration', full_name='protocol.Rule.duration', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='operator', full_name='protocol.Rule.operator', index=5, - number=6, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1486, - serialized_end=1615, -) - - -_CLIENTCONFIG = _descriptor.Descriptor( - name='ClientConfig', - full_name='protocol.ClientConfig', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='id', full_name='protocol.ClientConfig.id', index=0, - number=1, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='name', full_name='protocol.ClientConfig.name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='version', full_name='protocol.ClientConfig.version', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='isFirewallRunning', full_name='protocol.ClientConfig.isFirewallRunning', index=3, - number=4, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='config', full_name='protocol.ClientConfig.config', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='logLevel', full_name='protocol.ClientConfig.logLevel', index=5, - number=6, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='rules', full_name='protocol.ClientConfig.rules', index=6, - number=7, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1618, - serialized_end=1767, -) - - -_NOTIFICATION = _descriptor.Descriptor( - name='Notification', - full_name='protocol.Notification', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='id', full_name='protocol.Notification.id', index=0, - number=1, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='clientName', full_name='protocol.Notification.clientName', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='serverName', full_name='protocol.Notification.serverName', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='type', full_name='protocol.Notification.type', index=3, - number=4, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='data', full_name='protocol.Notification.data', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='rules', full_name='protocol.Notification.rules', index=5, - number=6, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1770, - serialized_end=1913, -) - - -_NOTIFICATIONREPLY = _descriptor.Descriptor( - name='NotificationReply', - full_name='protocol.NotificationReply', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='id', full_name='protocol.NotificationReply.id', index=0, - number=1, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='code', full_name='protocol.NotificationReply.code', index=1, - number=2, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='data', full_name='protocol.NotificationReply.data', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1915, - serialized_end=2007, -) - -_EVENT.fields_by_name['connection'].message_type = _CONNECTION -_EVENT.fields_by_name['rule'].message_type = _RULE -_STATISTICS_BYPROTOENTRY.containing_type = _STATISTICS -_STATISTICS_BYADDRESSENTRY.containing_type = _STATISTICS -_STATISTICS_BYHOSTENTRY.containing_type = _STATISTICS -_STATISTICS_BYPORTENTRY.containing_type = _STATISTICS -_STATISTICS_BYUIDENTRY.containing_type = _STATISTICS -_STATISTICS_BYEXECUTABLEENTRY.containing_type = _STATISTICS -_STATISTICS.fields_by_name['by_proto'].message_type = _STATISTICS_BYPROTOENTRY -_STATISTICS.fields_by_name['by_address'].message_type = _STATISTICS_BYADDRESSENTRY -_STATISTICS.fields_by_name['by_host'].message_type = _STATISTICS_BYHOSTENTRY -_STATISTICS.fields_by_name['by_port'].message_type = _STATISTICS_BYPORTENTRY -_STATISTICS.fields_by_name['by_uid'].message_type = _STATISTICS_BYUIDENTRY -_STATISTICS.fields_by_name['by_executable'].message_type = _STATISTICS_BYEXECUTABLEENTRY -_STATISTICS.fields_by_name['events'].message_type = _EVENT -_PINGREQUEST.fields_by_name['stats'].message_type = _STATISTICS -_CONNECTION_PROCESSENVENTRY.containing_type = _CONNECTION -_CONNECTION.fields_by_name['process_env'].message_type = _CONNECTION_PROCESSENVENTRY -_RULE.fields_by_name['operator'].message_type = _OPERATOR -_CLIENTCONFIG.fields_by_name['rules'].message_type = _RULE -_NOTIFICATION.fields_by_name['type'].enum_type = _ACTION -_NOTIFICATION.fields_by_name['rules'].message_type = _RULE -_NOTIFICATIONREPLY.fields_by_name['code'].enum_type = _NOTIFICATIONREPLYCODE -DESCRIPTOR.message_types_by_name['Event'] = _EVENT -DESCRIPTOR.message_types_by_name['Statistics'] = _STATISTICS -DESCRIPTOR.message_types_by_name['PingRequest'] = _PINGREQUEST -DESCRIPTOR.message_types_by_name['PingReply'] = _PINGREPLY -DESCRIPTOR.message_types_by_name['Connection'] = _CONNECTION -DESCRIPTOR.message_types_by_name['Operator'] = _OPERATOR -DESCRIPTOR.message_types_by_name['Rule'] = _RULE -DESCRIPTOR.message_types_by_name['ClientConfig'] = _CLIENTCONFIG -DESCRIPTOR.message_types_by_name['Notification'] = _NOTIFICATION -DESCRIPTOR.message_types_by_name['NotificationReply'] = _NOTIFICATIONREPLY -DESCRIPTOR.enum_types_by_name['Action'] = _ACTION -DESCRIPTOR.enum_types_by_name['NotificationReplyCode'] = _NOTIFICATIONREPLYCODE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -Event = _reflection.GeneratedProtocolMessageType('Event', (_message.Message,), dict( - DESCRIPTOR = _EVENT, - __module__ = 'ui_pb2' - # @@protoc_insertion_point(class_scope:protocol.Event) - )) -_sym_db.RegisterMessage(Event) - -Statistics = _reflection.GeneratedProtocolMessageType('Statistics', (_message.Message,), dict( - - ByProtoEntry = _reflection.GeneratedProtocolMessageType('ByProtoEntry', (_message.Message,), dict( - DESCRIPTOR = _STATISTICS_BYPROTOENTRY, - __module__ = 'ui_pb2' - # @@protoc_insertion_point(class_scope:protocol.Statistics.ByProtoEntry) - )) - , - - ByAddressEntry = _reflection.GeneratedProtocolMessageType('ByAddressEntry', (_message.Message,), dict( - DESCRIPTOR = _STATISTICS_BYADDRESSENTRY, - __module__ = 'ui_pb2' - # @@protoc_insertion_point(class_scope:protocol.Statistics.ByAddressEntry) - )) - , - - ByHostEntry = _reflection.GeneratedProtocolMessageType('ByHostEntry', (_message.Message,), dict( - DESCRIPTOR = _STATISTICS_BYHOSTENTRY, - __module__ = 'ui_pb2' - # @@protoc_insertion_point(class_scope:protocol.Statistics.ByHostEntry) - )) - , - - ByPortEntry = _reflection.GeneratedProtocolMessageType('ByPortEntry', (_message.Message,), dict( - DESCRIPTOR = _STATISTICS_BYPORTENTRY, - __module__ = 'ui_pb2' - # @@protoc_insertion_point(class_scope:protocol.Statistics.ByPortEntry) - )) - , - - ByUidEntry = _reflection.GeneratedProtocolMessageType('ByUidEntry', (_message.Message,), dict( - DESCRIPTOR = _STATISTICS_BYUIDENTRY, - __module__ = 'ui_pb2' - # @@protoc_insertion_point(class_scope:protocol.Statistics.ByUidEntry) - )) - , - - ByExecutableEntry = _reflection.GeneratedProtocolMessageType('ByExecutableEntry', (_message.Message,), dict( - DESCRIPTOR = _STATISTICS_BYEXECUTABLEENTRY, - __module__ = 'ui_pb2' - # @@protoc_insertion_point(class_scope:protocol.Statistics.ByExecutableEntry) - )) - , - DESCRIPTOR = _STATISTICS, - __module__ = 'ui_pb2' - # @@protoc_insertion_point(class_scope:protocol.Statistics) - )) -_sym_db.RegisterMessage(Statistics) -_sym_db.RegisterMessage(Statistics.ByProtoEntry) -_sym_db.RegisterMessage(Statistics.ByAddressEntry) -_sym_db.RegisterMessage(Statistics.ByHostEntry) -_sym_db.RegisterMessage(Statistics.ByPortEntry) -_sym_db.RegisterMessage(Statistics.ByUidEntry) -_sym_db.RegisterMessage(Statistics.ByExecutableEntry) - -PingRequest = _reflection.GeneratedProtocolMessageType('PingRequest', (_message.Message,), dict( - DESCRIPTOR = _PINGREQUEST, - __module__ = 'ui_pb2' - # @@protoc_insertion_point(class_scope:protocol.PingRequest) - )) -_sym_db.RegisterMessage(PingRequest) - -PingReply = _reflection.GeneratedProtocolMessageType('PingReply', (_message.Message,), dict( - DESCRIPTOR = _PINGREPLY, - __module__ = 'ui_pb2' - # @@protoc_insertion_point(class_scope:protocol.PingReply) - )) -_sym_db.RegisterMessage(PingReply) - -Connection = _reflection.GeneratedProtocolMessageType('Connection', (_message.Message,), dict( - - ProcessEnvEntry = _reflection.GeneratedProtocolMessageType('ProcessEnvEntry', (_message.Message,), dict( - DESCRIPTOR = _CONNECTION_PROCESSENVENTRY, - __module__ = 'ui_pb2' - # @@protoc_insertion_point(class_scope:protocol.Connection.ProcessEnvEntry) - )) - , - DESCRIPTOR = _CONNECTION, - __module__ = 'ui_pb2' - # @@protoc_insertion_point(class_scope:protocol.Connection) - )) -_sym_db.RegisterMessage(Connection) -_sym_db.RegisterMessage(Connection.ProcessEnvEntry) - -Operator = _reflection.GeneratedProtocolMessageType('Operator', (_message.Message,), dict( - DESCRIPTOR = _OPERATOR, - __module__ = 'ui_pb2' - # @@protoc_insertion_point(class_scope:protocol.Operator) - )) -_sym_db.RegisterMessage(Operator) - -Rule = _reflection.GeneratedProtocolMessageType('Rule', (_message.Message,), dict( - DESCRIPTOR = _RULE, - __module__ = 'ui_pb2' - # @@protoc_insertion_point(class_scope:protocol.Rule) - )) -_sym_db.RegisterMessage(Rule) - -ClientConfig = _reflection.GeneratedProtocolMessageType('ClientConfig', (_message.Message,), dict( - DESCRIPTOR = _CLIENTCONFIG, - __module__ = 'ui_pb2' - # @@protoc_insertion_point(class_scope:protocol.ClientConfig) - )) -_sym_db.RegisterMessage(ClientConfig) - -Notification = _reflection.GeneratedProtocolMessageType('Notification', (_message.Message,), dict( - DESCRIPTOR = _NOTIFICATION, - __module__ = 'ui_pb2' - # @@protoc_insertion_point(class_scope:protocol.Notification) - )) -_sym_db.RegisterMessage(Notification) - -NotificationReply = _reflection.GeneratedProtocolMessageType('NotificationReply', (_message.Message,), dict( - DESCRIPTOR = _NOTIFICATIONREPLY, - __module__ = 'ui_pb2' - # @@protoc_insertion_point(class_scope:protocol.NotificationReply) - )) -_sym_db.RegisterMessage(NotificationReply) - - -_STATISTICS_BYPROTOENTRY.has_options = True -_STATISTICS_BYPROTOENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) -_STATISTICS_BYADDRESSENTRY.has_options = True -_STATISTICS_BYADDRESSENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) -_STATISTICS_BYHOSTENTRY.has_options = True -_STATISTICS_BYHOSTENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) -_STATISTICS_BYPORTENTRY.has_options = True -_STATISTICS_BYPORTENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) -_STATISTICS_BYUIDENTRY.has_options = True -_STATISTICS_BYUIDENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) -_STATISTICS_BYEXECUTABLEENTRY.has_options = True -_STATISTICS_BYEXECUTABLEENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) -_CONNECTION_PROCESSENVENTRY.has_options = True -_CONNECTION_PROCESSENVENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) - -_UI = _descriptor.ServiceDescriptor( - name='UI', - full_name='protocol.UI', - file=DESCRIPTOR, - index=0, - options=None, - serialized_start=2275, - serialized_end=2523, - methods=[ - _descriptor.MethodDescriptor( - name='Ping', - full_name='protocol.UI.Ping', - index=0, - containing_service=None, - input_type=_PINGREQUEST, - output_type=_PINGREPLY, - options=None, - ), - _descriptor.MethodDescriptor( - name='AskRule', - full_name='protocol.UI.AskRule', - index=1, - containing_service=None, - input_type=_CONNECTION, - output_type=_RULE, - options=None, - ), - _descriptor.MethodDescriptor( - name='Subscribe', - full_name='protocol.UI.Subscribe', - index=2, - containing_service=None, - input_type=_CLIENTCONFIG, - output_type=_CLIENTCONFIG, - options=None, - ), - _descriptor.MethodDescriptor( - name='Notifications', - full_name='protocol.UI.Notifications', - index=3, - containing_service=None, - input_type=_NOTIFICATIONREPLY, - output_type=_NOTIFICATION, - options=None, - ), -]) -_sym_db.RegisterServiceDescriptor(_UI) - -DESCRIPTOR.services_by_name['UI'] = _UI - -# @@protoc_insertion_point(module_scope) diff --git a/ui/opensnitch/ui_pb2_grpc.py b/ui/opensnitch/ui_pb2_grpc.py deleted file mode 100644 index f95507a4..00000000 --- a/ui/opensnitch/ui_pb2_grpc.py +++ /dev/null @@ -1,97 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -import grpc - -import ui_pb2 as ui__pb2 - - -class UIStub(object): - # missing associated documentation comment in .proto file - pass - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.Ping = channel.unary_unary( - '/protocol.UI/Ping', - request_serializer=ui__pb2.PingRequest.SerializeToString, - response_deserializer=ui__pb2.PingReply.FromString, - ) - self.AskRule = channel.unary_unary( - '/protocol.UI/AskRule', - request_serializer=ui__pb2.Connection.SerializeToString, - response_deserializer=ui__pb2.Rule.FromString, - ) - self.Subscribe = channel.unary_unary( - '/protocol.UI/Subscribe', - request_serializer=ui__pb2.ClientConfig.SerializeToString, - response_deserializer=ui__pb2.ClientConfig.FromString, - ) - self.Notifications = channel.stream_stream( - '/protocol.UI/Notifications', - request_serializer=ui__pb2.NotificationReply.SerializeToString, - response_deserializer=ui__pb2.Notification.FromString, - ) - - -class UIServicer(object): - # missing associated documentation comment in .proto file - pass - - def Ping(self, request, context): - # missing associated documentation comment in .proto file - pass - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def AskRule(self, request, context): - # missing associated documentation comment in .proto file - pass - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def Subscribe(self, request, context): - # missing associated documentation comment in .proto file - pass - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - def Notifications(self, request_iterator, context): - # missing associated documentation comment in .proto file - pass - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - - -def add_UIServicer_to_server(servicer, server): - rpc_method_handlers = { - 'Ping': grpc.unary_unary_rpc_method_handler( - servicer.Ping, - request_deserializer=ui__pb2.PingRequest.FromString, - response_serializer=ui__pb2.PingReply.SerializeToString, - ), - 'AskRule': grpc.unary_unary_rpc_method_handler( - servicer.AskRule, - request_deserializer=ui__pb2.Connection.FromString, - response_serializer=ui__pb2.Rule.SerializeToString, - ), - 'Subscribe': grpc.unary_unary_rpc_method_handler( - servicer.Subscribe, - request_deserializer=ui__pb2.ClientConfig.FromString, - response_serializer=ui__pb2.ClientConfig.SerializeToString, - ), - 'Notifications': grpc.stream_stream_rpc_method_handler( - servicer.Notifications, - request_deserializer=ui__pb2.NotificationReply.FromString, - response_serializer=ui__pb2.Notification.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'protocol.UI', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,))