summaryrefslogtreecommitdiffstats
path: root/vendor/golang.org/x/net
diff options
context:
space:
mode:
authorChristopher Speller <crspeller@gmail.com>2016-11-16 19:28:52 -0500
committerGitHub <noreply@github.com>2016-11-16 19:28:52 -0500
commit0135904f7d3e1c0e763adaefe267c736616e3d26 (patch)
treec27be7588f98eaea62e0bd0c0087f2b348da9738 /vendor/golang.org/x/net
parent0b296dd8c2aefefe89787be5cc627d44cf431150 (diff)
downloadchat-0135904f7d3e1c0e763adaefe267c736616e3d26.tar.gz
chat-0135904f7d3e1c0e763adaefe267c736616e3d26.tar.bz2
chat-0135904f7d3e1c0e763adaefe267c736616e3d26.zip
Upgrading server dependancies (#4566)
Diffstat (limited to 'vendor/golang.org/x/net')
-rw-r--r--vendor/golang.org/x/net/dict/dict.go2
-rw-r--r--vendor/golang.org/x/net/http2/go17.go12
-rw-r--r--vendor/golang.org/x/net/http2/go18.go32
-rw-r--r--vendor/golang.org/x/net/http2/go18_test.go66
-rw-r--r--vendor/golang.org/x/net/http2/h2demo/h2demo.go36
-rw-r--r--vendor/golang.org/x/net/http2/h2i/h2i.go8
-rw-r--r--vendor/golang.org/x/net/http2/http2.go36
-rw-r--r--vendor/golang.org/x/net/http2/http2_test.go1
-rw-r--r--vendor/golang.org/x/net/http2/not_go17.go12
-rw-r--r--vendor/golang.org/x/net/http2/not_go18.go18
-rw-r--r--vendor/golang.org/x/net/http2/priority_test.go118
-rw-r--r--vendor/golang.org/x/net/http2/server.go1006
-rw-r--r--vendor/golang.org/x/net/http2/server_push_test.go470
-rw-r--r--vendor/golang.org/x/net/http2/server_test.go251
-rw-r--r--vendor/golang.org/x/net/http2/transport.go147
-rw-r--r--vendor/golang.org/x/net/http2/transport_test.go147
-rw-r--r--vendor/golang.org/x/net/http2/write.go167
-rw-r--r--vendor/golang.org/x/net/http2/writesched.go415
-rw-r--r--vendor/golang.org/x/net/http2/writesched_priority.go452
-rw-r--r--vendor/golang.org/x/net/http2/writesched_priority_test.go541
-rw-r--r--vendor/golang.org/x/net/http2/writesched_random.go72
-rw-r--r--vendor/golang.org/x/net/http2/writesched_random_test.go44
-rw-r--r--vendor/golang.org/x/net/http2/writesched_test.go125
-rw-r--r--vendor/golang.org/x/net/icmp/echo.go2
-rw-r--r--vendor/golang.org/x/net/icmp/ipv6.go2
-rw-r--r--vendor/golang.org/x/net/icmp/message.go2
-rw-r--r--vendor/golang.org/x/net/icmp/messagebody.go2
-rw-r--r--vendor/golang.org/x/net/internal/iana/gen.go2
-rw-r--r--vendor/golang.org/x/net/internal/nettest/helper_bsd.go45
-rw-r--r--vendor/golang.org/x/net/internal/nettest/helper_nobsd.go4
-rw-r--r--vendor/golang.org/x/net/internal/nettest/helper_stub.go4
-rw-r--r--vendor/golang.org/x/net/internal/nettest/helper_windows.go4
-rw-r--r--vendor/golang.org/x/net/internal/nettest/interface.go2
-rw-r--r--vendor/golang.org/x/net/internal/nettest/stack.go3
-rw-r--r--vendor/golang.org/x/net/ipv4/bpfopt_linux.go4
-rw-r--r--vendor/golang.org/x/net/ipv4/control.go2
-rw-r--r--vendor/golang.org/x/net/ipv4/control_bsd.go2
-rw-r--r--vendor/golang.org/x/net/ipv4/control_pktinfo.go10
-rw-r--r--vendor/golang.org/x/net/ipv4/control_stub.go4
-rw-r--r--vendor/golang.org/x/net/ipv4/control_unix.go20
-rw-r--r--vendor/golang.org/x/net/ipv4/control_windows.go2
-rw-r--r--vendor/golang.org/x/net/ipv4/defs_darwin.go34
-rw-r--r--vendor/golang.org/x/net/ipv4/defs_dragonfly.go4
-rw-r--r--vendor/golang.org/x/net/ipv4/defs_freebsd.go30
-rw-r--r--vendor/golang.org/x/net/ipv4/defs_linux.go48
-rw-r--r--vendor/golang.org/x/net/ipv4/defs_netbsd.go4
-rw-r--r--vendor/golang.org/x/net/ipv4/defs_openbsd.go4
-rw-r--r--vendor/golang.org/x/net/ipv4/defs_solaris.go77
-rw-r--r--vendor/golang.org/x/net/ipv4/dgramopt_posix.go4
-rw-r--r--vendor/golang.org/x/net/ipv4/dgramopt_stub.go4
-rw-r--r--vendor/golang.org/x/net/ipv4/doc.go2
-rw-r--r--vendor/golang.org/x/net/ipv4/endpoint.go2
-rw-r--r--vendor/golang.org/x/net/ipv4/example_test.go2
-rw-r--r--vendor/golang.org/x/net/ipv4/gen.go11
-rw-r--r--vendor/golang.org/x/net/ipv4/genericopt_posix.go4
-rw-r--r--vendor/golang.org/x/net/ipv4/genericopt_stub.go4
-rw-r--r--vendor/golang.org/x/net/ipv4/header.go25
-rw-r--r--vendor/golang.org/x/net/ipv4/header_test.go30
-rw-r--r--vendor/golang.org/x/net/ipv4/helper.go2
-rw-r--r--vendor/golang.org/x/net/ipv4/icmp.go4
-rw-r--r--vendor/golang.org/x/net/ipv4/icmp_linux.go8
-rw-r--r--vendor/golang.org/x/net/ipv4/icmp_stub.go12
-rw-r--r--vendor/golang.org/x/net/ipv4/mocktransponder_test.go2
-rw-r--r--vendor/golang.org/x/net/ipv4/multicast_test.go8
-rw-r--r--vendor/golang.org/x/net/ipv4/multicastlistener_test.go12
-rw-r--r--vendor/golang.org/x/net/ipv4/multicastsockopt_test.go6
-rw-r--r--vendor/golang.org/x/net/ipv4/packet.go2
-rw-r--r--vendor/golang.org/x/net/ipv4/payload.go2
-rw-r--r--vendor/golang.org/x/net/ipv4/payload_cmsg.go4
-rw-r--r--vendor/golang.org/x/net/ipv4/payload_nocmsg.go4
-rw-r--r--vendor/golang.org/x/net/ipv4/readwrite_test.go4
-rw-r--r--vendor/golang.org/x/net/ipv4/sockopt_asmreq.go6
-rw-r--r--vendor/golang.org/x/net/ipv4/sockopt_asmreq_posix.go8
-rw-r--r--vendor/golang.org/x/net/ipv4/sockopt_asmreq_stub.go4
-rw-r--r--vendor/golang.org/x/net/ipv4/sockopt_asmreqn_unix.go8
-rw-r--r--vendor/golang.org/x/net/ipv4/sockopt_posix.go10
-rw-r--r--vendor/golang.org/x/net/ipv4/sockopt_ssmreq_stub.go2
-rw-r--r--vendor/golang.org/x/net/ipv4/sockopt_ssmreq_unix.go22
-rw-r--r--vendor/golang.org/x/net/ipv4/sockopt_stub.go4
-rw-r--r--vendor/golang.org/x/net/ipv4/sys_darwin.go20
-rw-r--r--vendor/golang.org/x/net/ipv4/sys_freebsd.go16
-rw-r--r--vendor/golang.org/x/net/ipv4/sys_linux.go14
-rw-r--r--vendor/golang.org/x/net/ipv4/sys_linux_386.s (renamed from vendor/golang.org/x/net/ipv4/thunk_linux_386.s)4
-rw-r--r--vendor/golang.org/x/net/ipv4/sys_solaris.go54
-rw-r--r--vendor/golang.org/x/net/ipv4/sys_solaris_amd64.s8
-rw-r--r--vendor/golang.org/x/net/ipv4/sys_stub.go2
-rw-r--r--vendor/golang.org/x/net/ipv4/sys_windows.go14
-rw-r--r--vendor/golang.org/x/net/ipv4/syscall_solaris.go38
-rw-r--r--vendor/golang.org/x/net/ipv4/unicast_test.go14
-rw-r--r--vendor/golang.org/x/net/ipv4/unicastsockopt_test.go8
-rw-r--r--vendor/golang.org/x/net/ipv4/zsys_darwin.go32
-rw-r--r--vendor/golang.org/x/net/ipv4/zsys_dragonfly.go6
-rw-r--r--vendor/golang.org/x/net/ipv4/zsys_freebsd_386.go34
-rw-r--r--vendor/golang.org/x/net/ipv4/zsys_freebsd_amd64.go34
-rw-r--r--vendor/golang.org/x/net/ipv4/zsys_freebsd_arm.go34
-rw-r--r--vendor/golang.org/x/net/ipv4/zsys_linux_386.go56
-rw-r--r--vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go56
-rw-r--r--vendor/golang.org/x/net/ipv4/zsys_linux_arm.go56
-rw-r--r--vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go54
-rw-r--r--vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go54
-rw-r--r--vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go54
-rw-r--r--vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go54
-rw-r--r--vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go54
-rw-r--r--vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go54
-rw-r--r--vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go54
-rw-r--r--vendor/golang.org/x/net/ipv4/zsys_netbsd.go4
-rw-r--r--vendor/golang.org/x/net/ipv4/zsys_openbsd.go4
-rw-r--r--vendor/golang.org/x/net/ipv4/zsys_solaris.go94
-rw-r--r--vendor/golang.org/x/net/ipv6/bpf_test.go3
-rw-r--r--vendor/golang.org/x/net/ipv6/bpfopt_linux.go4
-rw-r--r--vendor/golang.org/x/net/ipv6/control.go2
-rw-r--r--vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go14
-rw-r--r--vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go24
-rw-r--r--vendor/golang.org/x/net/ipv6/control_stub.go4
-rw-r--r--vendor/golang.org/x/net/ipv6/control_unix.go17
-rw-r--r--vendor/golang.org/x/net/ipv6/control_windows.go2
-rw-r--r--vendor/golang.org/x/net/ipv6/defs_darwin.go32
-rw-r--r--vendor/golang.org/x/net/ipv6/defs_dragonfly.go20
-rw-r--r--vendor/golang.org/x/net/ipv6/defs_freebsd.go32
-rw-r--r--vendor/golang.org/x/net/ipv6/defs_linux.go40
-rw-r--r--vendor/golang.org/x/net/ipv6/defs_netbsd.go20
-rw-r--r--vendor/golang.org/x/net/ipv6/defs_openbsd.go20
-rw-r--r--vendor/golang.org/x/net/ipv6/defs_solaris.go38
-rw-r--r--vendor/golang.org/x/net/ipv6/dgramopt_posix.go4
-rw-r--r--vendor/golang.org/x/net/ipv6/dgramopt_stub.go4
-rw-r--r--vendor/golang.org/x/net/ipv6/doc.go11
-rw-r--r--vendor/golang.org/x/net/ipv6/endpoint.go2
-rw-r--r--vendor/golang.org/x/net/ipv6/gen.go11
-rw-r--r--vendor/golang.org/x/net/ipv6/genericopt_posix.go4
-rw-r--r--vendor/golang.org/x/net/ipv6/genericopt_stub.go4
-rw-r--r--vendor/golang.org/x/net/ipv6/helper.go2
-rw-r--r--vendor/golang.org/x/net/ipv6/icmp.go4
-rw-r--r--vendor/golang.org/x/net/ipv6/icmp_bsd.go10
-rw-r--r--vendor/golang.org/x/net/ipv6/icmp_linux.go10
-rw-r--r--vendor/golang.org/x/net/ipv6/icmp_solaris.go27
-rw-r--r--vendor/golang.org/x/net/ipv6/icmp_stub.go12
-rw-r--r--vendor/golang.org/x/net/ipv6/icmp_test.go6
-rw-r--r--vendor/golang.org/x/net/ipv6/icmp_windows.go10
-rw-r--r--vendor/golang.org/x/net/ipv6/main_test.go27
-rw-r--r--vendor/golang.org/x/net/ipv6/mocktransponder_test.go2
-rw-r--r--vendor/golang.org/x/net/ipv6/multicast_test.go24
-rw-r--r--vendor/golang.org/x/net/ipv6/multicastlistener_test.go12
-rw-r--r--vendor/golang.org/x/net/ipv6/multicastsockopt_test.go4
-rw-r--r--vendor/golang.org/x/net/ipv6/payload.go2
-rw-r--r--vendor/golang.org/x/net/ipv6/payload_cmsg.go2
-rw-r--r--vendor/golang.org/x/net/ipv6/payload_nocmsg.go2
-rw-r--r--vendor/golang.org/x/net/ipv6/readwrite_test.go2
-rw-r--r--vendor/golang.org/x/net/ipv6/sockopt_asmreq_posix.go8
-rw-r--r--vendor/golang.org/x/net/ipv6/sockopt_posix.go14
-rw-r--r--vendor/golang.org/x/net/ipv6/sockopt_ssmreq_stub.go2
-rw-r--r--vendor/golang.org/x/net/ipv6/sockopt_ssmreq_unix.go22
-rw-r--r--vendor/golang.org/x/net/ipv6/sockopt_stub.go4
-rw-r--r--vendor/golang.org/x/net/ipv6/sockopt_test.go8
-rw-r--r--vendor/golang.org/x/net/ipv6/sys_bsd.go16
-rw-r--r--vendor/golang.org/x/net/ipv6/sys_darwin.go34
-rw-r--r--vendor/golang.org/x/net/ipv6/sys_freebsd.go32
-rw-r--r--vendor/golang.org/x/net/ipv6/sys_linux.go22
-rw-r--r--vendor/golang.org/x/net/ipv6/sys_linux_386.s (renamed from vendor/golang.org/x/net/ipv6/thunk_linux_386.s)4
-rw-r--r--vendor/golang.org/x/net/ipv6/sys_solaris.go73
-rw-r--r--vendor/golang.org/x/net/ipv6/sys_solaris_amd64.s8
-rw-r--r--vendor/golang.org/x/net/ipv6/sys_stub.go2
-rw-r--r--vendor/golang.org/x/net/ipv6/sys_windows.go24
-rw-r--r--vendor/golang.org/x/net/ipv6/syscall_solaris.go38
-rw-r--r--vendor/golang.org/x/net/ipv6/syscall_unix.go2
-rw-r--r--vendor/golang.org/x/net/ipv6/unicast_test.go12
-rw-r--r--vendor/golang.org/x/net/ipv6/unicastsockopt_test.go6
-rw-r--r--vendor/golang.org/x/net/ipv6/zsys_darwin.go34
-rw-r--r--vendor/golang.org/x/net/ipv6/zsys_dragonfly.go24
-rw-r--r--vendor/golang.org/x/net/ipv6/zsys_freebsd_386.go40
-rw-r--r--vendor/golang.org/x/net/ipv6/zsys_freebsd_amd64.go40
-rw-r--r--vendor/golang.org/x/net/ipv6/zsys_freebsd_arm.go40
-rw-r--r--vendor/golang.org/x/net/ipv6/zsys_linux_386.go50
-rw-r--r--vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go50
-rw-r--r--vendor/golang.org/x/net/ipv6/zsys_linux_arm.go50
-rw-r--r--vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go52
-rw-r--r--vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go52
-rw-r--r--vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go52
-rw-r--r--vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go52
-rw-r--r--vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go52
-rw-r--r--vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go52
-rw-r--r--vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go52
-rw-r--r--vendor/golang.org/x/net/ipv6/zsys_netbsd.go22
-rw-r--r--vendor/golang.org/x/net/ipv6/zsys_openbsd.go22
-rw-r--r--vendor/golang.org/x/net/ipv6/zsys_solaris.go52
-rw-r--r--vendor/golang.org/x/net/lif/address.go105
-rw-r--r--vendor/golang.org/x/net/lif/address_test.go121
-rw-r--r--vendor/golang.org/x/net/lif/binary.go68
-rw-r--r--vendor/golang.org/x/net/lif/defs_solaris.go90
-rw-r--r--vendor/golang.org/x/net/lif/lif.go43
-rw-r--r--vendor/golang.org/x/net/lif/link.go122
-rw-r--r--vendor/golang.org/x/net/lif/link_test.go61
-rw-r--r--vendor/golang.org/x/net/lif/sys_solaris_amd64.s11
-rw-r--r--vendor/golang.org/x/net/lif/syscall.go33
-rw-r--r--vendor/golang.org/x/net/lif/zsys_solaris_amd64.go103
-rw-r--r--vendor/golang.org/x/net/netutil/listen.go2
-rw-r--r--vendor/golang.org/x/net/netutil/listen_test.go2
-rw-r--r--vendor/golang.org/x/net/publicsuffix/table.go17504
-rw-r--r--vendor/golang.org/x/net/publicsuffix/table_test.go196
-rw-r--r--vendor/golang.org/x/net/trace/trace.go28
-rw-r--r--vendor/golang.org/x/net/trace/trace_test.go93
-rw-r--r--vendor/golang.org/x/net/webdav/file.go62
-rw-r--r--vendor/golang.org/x/net/webdav/file_go1.6.go17
-rw-r--r--vendor/golang.org/x/net/webdav/file_go1.7.go16
-rw-r--r--vendor/golang.org/x/net/webdav/file_test.go81
-rw-r--r--vendor/golang.org/x/net/webdav/internal/xml/example_test.go2
-rw-r--r--vendor/golang.org/x/net/webdav/internal/xml/marshal_test.go2
-rw-r--r--vendor/golang.org/x/net/webdav/internal/xml/read.go2
-rw-r--r--vendor/golang.org/x/net/webdav/internal/xml/typeinfo.go2
-rw-r--r--vendor/golang.org/x/net/webdav/internal/xml/xml_test.go2
-rw-r--r--vendor/golang.org/x/net/webdav/prop.go83
-rw-r--r--vendor/golang.org/x/net/webdav/prop_test.go19
-rw-r--r--vendor/golang.org/x/net/webdav/webdav.go51
-rw-r--r--vendor/golang.org/x/net/webdav/webdav_test.go113
-rw-r--r--vendor/golang.org/x/net/websocket/client.go15
-rw-r--r--vendor/golang.org/x/net/websocket/dial.go24
-rw-r--r--vendor/golang.org/x/net/websocket/dial_test.go43
-rw-r--r--vendor/golang.org/x/net/websocket/websocket.go33
-rw-r--r--vendor/golang.org/x/net/websocket/websocket_test.go78
-rw-r--r--vendor/golang.org/x/net/xsrftoken/xsrf.go2
-rw-r--r--vendor/golang.org/x/net/xsrftoken/xsrf_test.go2
220 files changed, 15405 insertions, 11112 deletions
diff --git a/vendor/golang.org/x/net/dict/dict.go b/vendor/golang.org/x/net/dict/dict.go
index 58fef89e0..93e65c03c 100644
--- a/vendor/golang.org/x/net/dict/dict.go
+++ b/vendor/golang.org/x/net/dict/dict.go
@@ -1,4 +1,4 @@
-// Copyright 2010 The Go Authors. All rights reserved.
+// Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/http2/go17.go b/vendor/golang.org/x/net/http2/go17.go
index 730319dd5..47b7fae08 100644
--- a/vendor/golang.org/x/net/http2/go17.go
+++ b/vendor/golang.org/x/net/http2/go17.go
@@ -39,6 +39,13 @@ type clientTrace httptrace.ClientTrace
func reqContext(r *http.Request) context.Context { return r.Context() }
+func (t *Transport) idleConnTimeout() time.Duration {
+ if t.t1 != nil {
+ return t.t1.IdleConnTimeout
+ }
+ return 0
+}
+
func setResponseUncompressed(res *http.Response) { res.Uncompressed = true }
func traceGotConn(req *http.Request, cc *ClientConn) {
@@ -92,3 +99,8 @@ func requestTrace(req *http.Request) *clientTrace {
trace := httptrace.ContextClientTrace(req.Context())
return (*clientTrace)(trace)
}
+
+// Ping sends a PING frame to the server and waits for the ack.
+func (cc *ClientConn) Ping(ctx context.Context) error {
+ return cc.ping(ctx)
+}
diff --git a/vendor/golang.org/x/net/http2/go18.go b/vendor/golang.org/x/net/http2/go18.go
index c2ae16731..8c0dd2508 100644
--- a/vendor/golang.org/x/net/http2/go18.go
+++ b/vendor/golang.org/x/net/http2/go18.go
@@ -6,6 +6,36 @@
package http2
-import "crypto/tls"
+import (
+ "crypto/tls"
+ "net/http"
+)
func cloneTLSConfig(c *tls.Config) *tls.Config { return c.Clone() }
+
+var _ http.Pusher = (*responseWriter)(nil)
+
+// Push implements http.Pusher.
+func (w *responseWriter) Push(target string, opts *http.PushOptions) error {
+ internalOpts := pushOptions{}
+ if opts != nil {
+ internalOpts.Method = opts.Method
+ internalOpts.Header = opts.Header
+ }
+ return w.push(target, internalOpts)
+}
+
+func configureServer18(h1 *http.Server, h2 *Server) error {
+ if h2.IdleTimeout == 0 {
+ if h1.IdleTimeout != 0 {
+ h2.IdleTimeout = h1.IdleTimeout
+ } else {
+ h2.IdleTimeout = h1.ReadTimeout
+ }
+ }
+ return nil
+}
+
+func shouldLogPanic(panicValue interface{}) bool {
+ return panicValue != nil && panicValue != http.ErrAbortHandler
+}
diff --git a/vendor/golang.org/x/net/http2/go18_test.go b/vendor/golang.org/x/net/http2/go18_test.go
new file mode 100644
index 000000000..836550597
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/go18_test.go
@@ -0,0 +1,66 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build go1.8
+
+package http2
+
+import (
+ "net/http"
+ "testing"
+ "time"
+)
+
+// Tests that http2.Server.IdleTimeout is initialized from
+// http.Server.{Idle,Read}Timeout. http.Server.IdleTimeout was
+// added in Go 1.8.
+func TestConfigureServerIdleTimeout_Go18(t *testing.T) {
+ const timeout = 5 * time.Second
+ const notThisOne = 1 * time.Second
+
+ // With a zero http2.Server, verify that it copies IdleTimeout:
+ {
+ s1 := &http.Server{
+ IdleTimeout: timeout,
+ ReadTimeout: notThisOne,
+ }
+ s2 := &Server{}
+ if err := ConfigureServer(s1, s2); err != nil {
+ t.Fatal(err)
+ }
+ if s2.IdleTimeout != timeout {
+ t.Errorf("s2.IdleTimeout = %v; want %v", s2.IdleTimeout, timeout)
+ }
+ }
+
+ // And that it falls back to ReadTimeout:
+ {
+ s1 := &http.Server{
+ ReadTimeout: timeout,
+ }
+ s2 := &Server{}
+ if err := ConfigureServer(s1, s2); err != nil {
+ t.Fatal(err)
+ }
+ if s2.IdleTimeout != timeout {
+ t.Errorf("s2.IdleTimeout = %v; want %v", s2.IdleTimeout, timeout)
+ }
+ }
+
+ // Verify that s1's IdleTimeout doesn't overwrite an existing setting:
+ {
+ s1 := &http.Server{
+ IdleTimeout: notThisOne,
+ }
+ s2 := &Server{
+ IdleTimeout: timeout,
+ }
+ if err := ConfigureServer(s1, s2); err != nil {
+ t.Fatal(err)
+ }
+ if s2.IdleTimeout != timeout {
+ t.Errorf("s2.IdleTimeout = %v; want %v", s2.IdleTimeout, timeout)
+ }
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/h2demo/h2demo.go b/vendor/golang.org/x/net/http2/h2demo/h2demo.go
index a248d479e..980b6d67d 100644
--- a/vendor/golang.org/x/net/http2/h2demo/h2demo.go
+++ b/vendor/golang.org/x/net/http2/h2demo/h2demo.go
@@ -19,6 +19,7 @@ import (
"log"
"net"
"net/http"
+ "os"
"path"
"regexp"
"runtime"
@@ -27,8 +28,8 @@ import (
"sync"
"time"
- "camlistore.org/pkg/googlestorage"
"go4.org/syncutil/singleflight"
+ "golang.org/x/crypto/acme/autocert"
"golang.org/x/net/http2"
)
@@ -378,37 +379,18 @@ func httpHost() string {
}
func serveProdTLS() error {
- c, err := googlestorage.NewServiceClient()
- if err != nil {
+ const cacheDir = "/var/cache/autocert"
+ if err := os.MkdirAll(cacheDir, 0700); err != nil {
return err
}
- slurp := func(key string) ([]byte, error) {
- const bucket = "http2-demo-server-tls"
- rc, _, err := c.GetObject(&googlestorage.Object{
- Bucket: bucket,
- Key: key,
- })
- if err != nil {
- return nil, fmt.Errorf("Error fetching GCS object %q in bucket %q: %v", key, bucket, err)
- }
- defer rc.Close()
- return ioutil.ReadAll(rc)
- }
- certPem, err := slurp("http2.golang.org.chained.pem")
- if err != nil {
- return err
- }
- keyPem, err := slurp("http2.golang.org.key")
- if err != nil {
- return err
- }
- cert, err := tls.X509KeyPair(certPem, keyPem)
- if err != nil {
- return err
+ m := autocert.Manager{
+ Cache: autocert.DirCache(cacheDir),
+ Prompt: autocert.AcceptTOS,
+ HostPolicy: autocert.HostWhitelist("http2.golang.org"),
}
srv := &http.Server{
TLSConfig: &tls.Config{
- Certificates: []tls.Certificate{cert},
+ GetCertificate: m.GetCertificate,
},
}
http2.ConfigureServer(srv, &http2.Server{})
diff --git a/vendor/golang.org/x/net/http2/h2i/h2i.go b/vendor/golang.org/x/net/http2/h2i/h2i.go
index b70976f77..228edf8a4 100644
--- a/vendor/golang.org/x/net/http2/h2i/h2i.go
+++ b/vendor/golang.org/x/net/http2/h2i/h2i.go
@@ -168,7 +168,7 @@ func (app *h2i) Main() error {
app.framer = http2.NewFramer(tc, tc)
- oldState, err := terminal.MakeRaw(0)
+ oldState, err := terminal.MakeRaw(int(os.Stdin.Fd()))
if err != nil {
return err
}
@@ -238,7 +238,7 @@ func (app *h2i) Main() error {
}
func (app *h2i) logf(format string, args ...interface{}) {
- fmt.Fprintf(app.term, format+"\n", args...)
+ fmt.Fprintf(app.term, format+"\r\n", args...)
}
func (app *h2i) readConsole() error {
@@ -435,9 +435,9 @@ func (app *h2i) readFrames() error {
return nil
})
case *http2.WindowUpdateFrame:
- app.logf(" Window-Increment = %v\n", f.Increment)
+ app.logf(" Window-Increment = %v", f.Increment)
case *http2.GoAwayFrame:
- app.logf(" Last-Stream-ID = %d; Error-Code = %v (%d)\n", f.LastStreamID, f.ErrCode, f.ErrCode)
+ app.logf(" Last-Stream-ID = %d; Error-Code = %v (%d)", f.LastStreamID, f.ErrCode, f.ErrCode)
case *http2.DataFrame:
app.logf(" %q", f.Data())
case *http2.HeadersFrame:
diff --git a/vendor/golang.org/x/net/http2/http2.go b/vendor/golang.org/x/net/http2/http2.go
index 2e27b093c..b6b0f9ad1 100644
--- a/vendor/golang.org/x/net/http2/http2.go
+++ b/vendor/golang.org/x/net/http2/http2.go
@@ -36,6 +36,7 @@ var (
VerboseLogs bool
logFrameWrites bool
logFrameReads bool
+ inTests bool
)
func init() {
@@ -77,13 +78,23 @@ var (
type streamState int
+// HTTP/2 stream states.
+//
+// See http://tools.ietf.org/html/rfc7540#section-5.1.
+//
+// For simplicity, the server code merges "reserved (local)" into
+// "half-closed (remote)". This is one less state transition to track.
+// The only downside is that we send PUSH_PROMISEs slightly less
+// liberally than allowable. More discussion here:
+// https://lists.w3.org/Archives/Public/ietf-http-wg/2016JulSep/0599.html
+//
+// "reserved (remote)" is omitted since the client code does not
+// support server push.
const (
stateIdle streamState = iota
stateOpen
stateHalfClosedLocal
stateHalfClosedRemote
- stateResvLocal
- stateResvRemote
stateClosed
)
@@ -92,8 +103,6 @@ var stateName = [...]string{
stateOpen: "Open",
stateHalfClosedLocal: "HalfClosedLocal",
stateHalfClosedRemote: "HalfClosedRemote",
- stateResvLocal: "ResvLocal",
- stateResvRemote: "ResvRemote",
stateClosed: "Closed",
}
@@ -253,14 +262,27 @@ func newBufferedWriter(w io.Writer) *bufferedWriter {
return &bufferedWriter{w: w}
}
+// bufWriterPoolBufferSize is the size of bufio.Writer's
+// buffers created using bufWriterPool.
+//
+// TODO: pick a less arbitrary value? this is a bit under
+// (3 x typical 1500 byte MTU) at least. Other than that,
+// not much thought went into it.
+const bufWriterPoolBufferSize = 4 << 10
+
var bufWriterPool = sync.Pool{
New: func() interface{} {
- // TODO: pick something better? this is a bit under
- // (3 x typical 1500 byte MTU) at least.
- return bufio.NewWriterSize(nil, 4<<10)
+ return bufio.NewWriterSize(nil, bufWriterPoolBufferSize)
},
}
+func (w *bufferedWriter) Available() int {
+ if w.bw == nil {
+ return bufWriterPoolBufferSize
+ }
+ return w.bw.Available()
+}
+
func (w *bufferedWriter) Write(p []byte) (n int, err error) {
if w.bw == nil {
bw := bufWriterPool.Get().(*bufio.Writer)
diff --git a/vendor/golang.org/x/net/http2/http2_test.go b/vendor/golang.org/x/net/http2/http2_test.go
index 22c2ace82..524877647 100644
--- a/vendor/golang.org/x/net/http2/http2_test.go
+++ b/vendor/golang.org/x/net/http2/http2_test.go
@@ -27,6 +27,7 @@ func condSkipFailingTest(t *testing.T) {
}
func init() {
+ inTests = true
DebugGoroutines = true
flag.BoolVar(&VerboseLogs, "verboseh2", VerboseLogs, "Verbose HTTP/2 debug logging")
}
diff --git a/vendor/golang.org/x/net/http2/not_go17.go b/vendor/golang.org/x/net/http2/not_go17.go
index 667867f4d..140434a79 100644
--- a/vendor/golang.org/x/net/http2/not_go17.go
+++ b/vendor/golang.org/x/net/http2/not_go17.go
@@ -10,9 +10,13 @@ import (
"crypto/tls"
"net"
"net/http"
+ "time"
)
-type contextContext interface{}
+type contextContext interface {
+ Done() <-chan struct{}
+ Err() error
+}
type fakeContext struct{}
@@ -75,3 +79,9 @@ func cloneTLSConfig(c *tls.Config) *tls.Config {
CurvePreferences: c.CurvePreferences,
}
}
+
+func (cc *ClientConn) Ping(ctx contextContext) error {
+ return cc.ping(ctx)
+}
+
+func (t *Transport) idleConnTimeout() time.Duration { return 0 }
diff --git a/vendor/golang.org/x/net/http2/not_go18.go b/vendor/golang.org/x/net/http2/not_go18.go
new file mode 100644
index 000000000..2e600dc35
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/not_go18.go
@@ -0,0 +1,18 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build !go1.8
+
+package http2
+
+import "net/http"
+
+func configureServer18(h1 *http.Server, h2 *Server) error {
+ // No IdleTimeout to sync prior to Go 1.8.
+ return nil
+}
+
+func shouldLogPanic(panicValue interface{}) bool {
+ return panicValue != nil
+}
diff --git a/vendor/golang.org/x/net/http2/priority_test.go b/vendor/golang.org/x/net/http2/priority_test.go
deleted file mode 100644
index a3fe2bb49..000000000
--- a/vendor/golang.org/x/net/http2/priority_test.go
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package http2
-
-import (
- "testing"
-)
-
-func TestPriority(t *testing.T) {
- // A -> B
- // move A's parent to B
- streams := make(map[uint32]*stream)
- a := &stream{
- parent: nil,
- weight: 16,
- }
- streams[1] = a
- b := &stream{
- parent: a,
- weight: 16,
- }
- streams[2] = b
- adjustStreamPriority(streams, 1, PriorityParam{
- Weight: 20,
- StreamDep: 2,
- })
- if a.parent != b {
- t.Errorf("Expected A's parent to be B")
- }
- if a.weight != 20 {
- t.Errorf("Expected A's weight to be 20; got %d", a.weight)
- }
- if b.parent != nil {
- t.Errorf("Expected B to have no parent")
- }
- if b.weight != 16 {
- t.Errorf("Expected B's weight to be 16; got %d", b.weight)
- }
-}
-
-func TestPriorityExclusiveZero(t *testing.T) {
- // A B and C are all children of the 0 stream.
- // Exclusive reprioritization to any of the streams
- // should bring the rest of the streams under the
- // reprioritized stream
- streams := make(map[uint32]*stream)
- a := &stream{
- parent: nil,
- weight: 16,
- }
- streams[1] = a
- b := &stream{
- parent: nil,
- weight: 16,
- }
- streams[2] = b
- c := &stream{
- parent: nil,
- weight: 16,
- }
- streams[3] = c
- adjustStreamPriority(streams, 3, PriorityParam{
- Weight: 20,
- StreamDep: 0,
- Exclusive: true,
- })
- if a.parent != c {
- t.Errorf("Expected A's parent to be C")
- }
- if a.weight != 16 {
- t.Errorf("Expected A's weight to be 16; got %d", a.weight)
- }
- if b.parent != c {
- t.Errorf("Expected B's parent to be C")
- }
- if b.weight != 16 {
- t.Errorf("Expected B's weight to be 16; got %d", b.weight)
- }
- if c.parent != nil {
- t.Errorf("Expected C to have no parent")
- }
- if c.weight != 20 {
- t.Errorf("Expected C's weight to be 20; got %d", b.weight)
- }
-}
-
-func TestPriorityOwnParent(t *testing.T) {
- streams := make(map[uint32]*stream)
- a := &stream{
- parent: nil,
- weight: 16,
- }
- streams[1] = a
- b := &stream{
- parent: a,
- weight: 16,
- }
- streams[2] = b
- adjustStreamPriority(streams, 1, PriorityParam{
- Weight: 20,
- StreamDep: 1,
- })
- if a.parent != nil {
- t.Errorf("Expected A's parent to be nil")
- }
- if a.weight != 20 {
- t.Errorf("Expected A's weight to be 20; got %d", a.weight)
- }
- if b.parent != a {
- t.Errorf("Expected B's parent to be A")
- }
- if b.weight != 16 {
- t.Errorf("Expected B's weight to be 16; got %d", b.weight)
- }
-
-}
diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go
index 8206fa79d..0b6b4b08d 100644
--- a/vendor/golang.org/x/net/http2/server.go
+++ b/vendor/golang.org/x/net/http2/server.go
@@ -2,17 +2,6 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// TODO: replace all <-sc.doneServing with reads from the stream's cw
-// instead, and make sure that on close we close all open
-// streams. then remove doneServing?
-
-// TODO: re-audit GOAWAY support. Consider each incoming frame type and
-// whether it should be ignored during graceful shutdown.
-
-// TODO: disconnect idle clients. GFE seems to do 4 minutes. make
-// configurable? or maximum number of idle clients and remove the
-// oldest?
-
// TODO: turn off the serve goroutine when idle, so
// an idle conn only has the readFrames goroutine active. (which could
// also be optimized probably to pin less memory in crypto/tls). This
@@ -44,6 +33,7 @@ import (
"fmt"
"io"
"log"
+ "math"
"net"
"net/http"
"net/textproto"
@@ -114,6 +104,15 @@ type Server struct {
// PermitProhibitedCipherSuites, if true, permits the use of
// cipher suites prohibited by the HTTP/2 spec.
PermitProhibitedCipherSuites bool
+
+ // IdleTimeout specifies how long until idle clients should be
+ // closed with a GOAWAY frame. PING frames are not considered
+ // activity for the purposes of IdleTimeout.
+ IdleTimeout time.Duration
+
+ // NewWriteScheduler constructs a write scheduler for a connection.
+ // If nil, a default scheduler is chosen.
+ NewWriteScheduler func() WriteScheduler
}
func (s *Server) maxReadFrameSize() uint32 {
@@ -136,9 +135,15 @@ func (s *Server) maxConcurrentStreams() uint32 {
//
// ConfigureServer must be called before s begins serving.
func ConfigureServer(s *http.Server, conf *Server) error {
+ if s == nil {
+ panic("nil *http.Server")
+ }
if conf == nil {
conf = new(Server)
}
+ if err := configureServer18(s, conf); err != nil {
+ return err
+ }
if s.TLSConfig == nil {
s.TLSConfig = new(tls.Config)
@@ -183,9 +188,6 @@ func ConfigureServer(s *http.Server, conf *Server) error {
if !haveNPN {
s.TLSConfig.NextProtos = append(s.TLSConfig.NextProtos, NextProtoTLS)
}
- // h2-14 is temporary (as of 2015-03-05) while we wait for all browsers
- // to switch to "h2".
- s.TLSConfig.NextProtos = append(s.TLSConfig.NextProtos, "h2-14")
if s.TLSNextProto == nil {
s.TLSNextProto = map[string]func(*http.Server, *tls.Conn, http.Handler){}
@@ -200,7 +202,6 @@ func ConfigureServer(s *http.Server, conf *Server) error {
})
}
s.TLSNextProto[NextProtoTLS] = protoHandler
- s.TLSNextProto["h2-14"] = protoHandler // temporary; see above.
return nil
}
@@ -254,29 +255,35 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) {
defer cancel()
sc := &serverConn{
- srv: s,
- hs: opts.baseConfig(),
- conn: c,
- baseCtx: baseCtx,
- remoteAddrStr: c.RemoteAddr().String(),
- bw: newBufferedWriter(c),
- handler: opts.handler(),
- streams: make(map[uint32]*stream),
- readFrameCh: make(chan readFrameResult),
- wantWriteFrameCh: make(chan frameWriteMsg, 8),
- wroteFrameCh: make(chan frameWriteResult, 1), // buffered; one send in writeFrameAsync
- bodyReadCh: make(chan bodyReadMsg), // buffering doesn't matter either way
- doneServing: make(chan struct{}),
- advMaxStreams: s.maxConcurrentStreams(),
- writeSched: writeScheduler{
- maxFrameSize: initialMaxFrameSize,
- },
+ srv: s,
+ hs: opts.baseConfig(),
+ conn: c,
+ baseCtx: baseCtx,
+ remoteAddrStr: c.RemoteAddr().String(),
+ bw: newBufferedWriter(c),
+ handler: opts.handler(),
+ streams: make(map[uint32]*stream),
+ readFrameCh: make(chan readFrameResult),
+ wantWriteFrameCh: make(chan FrameWriteRequest, 8),
+ wantStartPushCh: make(chan startPushRequest, 8),
+ wroteFrameCh: make(chan frameWriteResult, 1), // buffered; one send in writeFrameAsync
+ bodyReadCh: make(chan bodyReadMsg), // buffering doesn't matter either way
+ doneServing: make(chan struct{}),
+ clientMaxStreams: math.MaxUint32, // Section 6.5.2: "Initially, there is no limit to this value"
+ advMaxStreams: s.maxConcurrentStreams(),
initialWindowSize: initialWindowSize,
+ maxFrameSize: initialMaxFrameSize,
headerTableSize: initialHeaderTableSize,
serveG: newGoroutineLock(),
pushEnabled: true,
}
+ if s.NewWriteScheduler != nil {
+ sc.writeSched = s.NewWriteScheduler()
+ } else {
+ sc.writeSched = NewRandomWriteScheduler()
+ }
+
sc.flow.add(initialWindowSize)
sc.inflow.add(initialWindowSize)
sc.hpackEncoder = hpack.NewEncoder(&sc.headerWriteBuf)
@@ -356,16 +363,18 @@ type serverConn struct {
handler http.Handler
baseCtx contextContext
framer *Framer
- doneServing chan struct{} // closed when serverConn.serve ends
- readFrameCh chan readFrameResult // written by serverConn.readFrames
- wantWriteFrameCh chan frameWriteMsg // from handlers -> serve
- wroteFrameCh chan frameWriteResult // from writeFrameAsync -> serve, tickles more frame writes
- bodyReadCh chan bodyReadMsg // from handlers -> serve
- testHookCh chan func(int) // code to run on the serve loop
- flow flow // conn-wide (not stream-specific) outbound flow control
- inflow flow // conn-wide inbound flow control
- tlsState *tls.ConnectionState // shared by all handlers, like net/http
+ doneServing chan struct{} // closed when serverConn.serve ends
+ readFrameCh chan readFrameResult // written by serverConn.readFrames
+ wantWriteFrameCh chan FrameWriteRequest // from handlers -> serve
+ wantStartPushCh chan startPushRequest // from handlers -> serve
+ wroteFrameCh chan frameWriteResult // from writeFrameAsync -> serve, tickles more frame writes
+ bodyReadCh chan bodyReadMsg // from handlers -> serve
+ testHookCh chan func(int) // code to run on the serve loop
+ flow flow // conn-wide (not stream-specific) outbound flow control
+ inflow flow // conn-wide inbound flow control
+ tlsState *tls.ConnectionState // shared by all handlers, like net/http
remoteAddrStr string
+ writeSched WriteScheduler
// Everything following is owned by the serve loop; use serveG.check():
serveG goroutineLock // used to verify funcs are on serve()
@@ -375,22 +384,27 @@ type serverConn struct {
unackedSettings int // how many SETTINGS have we sent without ACKs?
clientMaxStreams uint32 // SETTINGS_MAX_CONCURRENT_STREAMS from client (our PUSH_PROMISE limit)
advMaxStreams uint32 // our SETTINGS_MAX_CONCURRENT_STREAMS advertised the client
- curOpenStreams uint32 // client's number of open streams
- maxStreamID uint32 // max ever seen
+ curClientStreams uint32 // number of open streams initiated by the client
+ curPushedStreams uint32 // number of open streams initiated by server push
+ maxClientStreamID uint32 // max ever seen from client (odd), or 0 if there have been no client requests
+ maxPushPromiseID uint32 // ID of the last push promise (even), or 0 if there have been no pushes
streams map[uint32]*stream
initialWindowSize int32
+ maxFrameSize int32
headerTableSize uint32
peerMaxHeaderListSize uint32 // zero means unknown (default)
canonHeader map[string]string // http2-lower-case -> Go-Canonical-Case
- writingFrame bool // started write goroutine but haven't heard back on wroteFrameCh
+ writingFrame bool // started writing a frame (on serve goroutine or separate)
+ writingFrameAsync bool // started a frame on its own goroutine but haven't heard back on wroteFrameCh
needsFrameFlush bool // last frame write wasn't a flush
- writeSched writeScheduler
- inGoAway bool // we've started to or sent GOAWAY
- needToSendGoAway bool // we need to schedule a GOAWAY frame write
+ inGoAway bool // we've started to or sent GOAWAY
+ inFrameScheduleLoop bool // whether we're in the scheduleFrameWrite loop
+ needToSendGoAway bool // we need to schedule a GOAWAY frame write
goAwayCode ErrCode
shutdownTimerCh <-chan time.Time // nil until used
shutdownTimer *time.Timer // nil until used
- freeRequestBodyBuf []byte // if non-nil, a free initialWindowSize buffer for getRequestBodyBuf
+ idleTimer *time.Timer // nil if unused
+ idleTimerCh <-chan time.Time // nil if unused
// Owned by the writeFrameAsync goroutine:
headerWriteBuf bytes.Buffer
@@ -434,11 +448,11 @@ type stream struct {
numTrailerValues int64
weight uint8
state streamState
- sentReset bool // only true once detached from streams map
- gotReset bool // only true once detacted from streams map
- gotTrailerHeader bool // HEADER frame for trailers was seen
- wroteHeaders bool // whether we wrote headers (not status 100)
- reqBuf []byte
+ sentReset bool // only true once detached from streams map
+ gotReset bool // only true once detacted from streams map
+ gotTrailerHeader bool // HEADER frame for trailers was seen
+ wroteHeaders bool // whether we wrote headers (not status 100)
+ reqBuf []byte // if non-nil, body pipe buffer to return later at EOF
trailer http.Header // accumulated trailers
reqTrailer http.Header // handler's Request.Trailer
@@ -453,7 +467,7 @@ func (sc *serverConn) HeaderEncoder() (*hpack.Encoder, *bytes.Buffer) {
func (sc *serverConn) state(streamID uint32) (streamState, *stream) {
sc.serveG.check()
- // http://http2.github.io/http2-spec/#rfc.section.5.1
+ // http://tools.ietf.org/html/rfc7540#section-5.1
if st, ok := sc.streams[streamID]; ok {
return st.state, st
}
@@ -463,8 +477,14 @@ func (sc *serverConn) state(streamID uint32) (streamState, *stream) {
// a client sends a HEADERS frame on stream 7 without ever sending a
// frame on stream 5, then stream 5 transitions to the "closed"
// state when the first frame for stream 7 is sent or received."
- if streamID <= sc.maxStreamID {
- return stateClosed, nil
+ if streamID%2 == 1 {
+ if streamID <= sc.maxClientStreamID {
+ return stateClosed, nil
+ }
+ } else {
+ if streamID <= sc.maxPushPromiseID {
+ return stateClosed, nil
+ }
}
return stateIdle, nil
}
@@ -603,17 +623,17 @@ func (sc *serverConn) readFrames() {
// frameWriteResult is the message passed from writeFrameAsync to the serve goroutine.
type frameWriteResult struct {
- wm frameWriteMsg // what was written (or attempted)
- err error // result of the writeFrame call
+ wr FrameWriteRequest // what was written (or attempted)
+ err error // result of the writeFrame call
}
// writeFrameAsync runs in its own goroutine and writes a single frame
// and then reports when it's done.
// At most one goroutine can be running writeFrameAsync at a time per
// serverConn.
-func (sc *serverConn) writeFrameAsync(wm frameWriteMsg) {
- err := wm.write.writeFrame(sc)
- sc.wroteFrameCh <- frameWriteResult{wm, err}
+func (sc *serverConn) writeFrameAsync(wr FrameWriteRequest) {
+ err := wr.write.writeFrame(sc)
+ sc.wroteFrameCh <- frameWriteResult{wr, err}
}
func (sc *serverConn) closeAllStreamsOnConnClose() {
@@ -657,7 +677,7 @@ func (sc *serverConn) serve() {
sc.vlogf("http2: server connection from %v on %p", sc.conn.RemoteAddr(), sc.hs)
}
- sc.writeFrame(frameWriteMsg{
+ sc.writeFrame(FrameWriteRequest{
write: writeSettings{
{SettingMaxFrameSize, sc.srv.maxReadFrameSize()},
{SettingMaxConcurrentStreams, sc.advMaxStreams},
@@ -682,6 +702,17 @@ func (sc *serverConn) serve() {
sc.setConnState(http.StateActive)
sc.setConnState(http.StateIdle)
+ if sc.srv.IdleTimeout != 0 {
+ sc.idleTimer = time.NewTimer(sc.srv.IdleTimeout)
+ defer sc.idleTimer.Stop()
+ sc.idleTimerCh = sc.idleTimer.C
+ }
+
+ var gracefulShutdownCh <-chan struct{}
+ if sc.hs != nil {
+ gracefulShutdownCh = h1ServerShutdownChan(sc.hs)
+ }
+
go sc.readFrames() // closed by defer sc.conn.Close above
settingsTimer := time.NewTimer(firstSettingsTimeout)
@@ -689,8 +720,10 @@ func (sc *serverConn) serve() {
for {
loopNum++
select {
- case wm := <-sc.wantWriteFrameCh:
- sc.writeFrame(wm)
+ case wr := <-sc.wantWriteFrameCh:
+ sc.writeFrame(wr)
+ case spr := <-sc.wantStartPushCh:
+ sc.startPush(spr)
case res := <-sc.wroteFrameCh:
sc.wroteFrame(res)
case res := <-sc.readFrameCh:
@@ -707,12 +740,22 @@ func (sc *serverConn) serve() {
case <-settingsTimer.C:
sc.logf("timeout waiting for SETTINGS frames from %v", sc.conn.RemoteAddr())
return
+ case <-gracefulShutdownCh:
+ gracefulShutdownCh = nil
+ sc.startGracefulShutdown()
case <-sc.shutdownTimerCh:
sc.vlogf("GOAWAY close timer fired; closing conn from %v", sc.conn.RemoteAddr())
return
+ case <-sc.idleTimerCh:
+ sc.vlogf("connection is idle")
+ sc.goAway(ErrCodeNo)
case fn := <-sc.testHookCh:
fn(loopNum)
}
+
+ if sc.inGoAway && sc.curClientStreams == 0 && !sc.needToSendGoAway && !sc.writingFrame {
+ return
+ }
}
}
@@ -760,7 +803,7 @@ func (sc *serverConn) writeDataFromHandler(stream *stream, data []byte, endStrea
ch := errChanPool.Get().(chan error)
writeArg := writeDataPool.Get().(*writeData)
*writeArg = writeData{stream.id, data, endStream}
- err := sc.writeFrameFromHandler(frameWriteMsg{
+ err := sc.writeFrameFromHandler(FrameWriteRequest{
write: writeArg,
stream: stream,
done: ch,
@@ -796,17 +839,17 @@ func (sc *serverConn) writeDataFromHandler(stream *stream, data []byte, endStrea
return err
}
-// writeFrameFromHandler sends wm to sc.wantWriteFrameCh, but aborts
+// writeFrameFromHandler sends wr to sc.wantWriteFrameCh, but aborts
// if the connection has gone away.
//
// This must not be run from the serve goroutine itself, else it might
// deadlock writing to sc.wantWriteFrameCh (which is only mildly
// buffered and is read by serve itself). If you're on the serve
// goroutine, call writeFrame instead.
-func (sc *serverConn) writeFrameFromHandler(wm frameWriteMsg) error {
+func (sc *serverConn) writeFrameFromHandler(wr FrameWriteRequest) error {
sc.serveG.checkNotOn() // NOT
select {
- case sc.wantWriteFrameCh <- wm:
+ case sc.wantWriteFrameCh <- wr:
return nil
case <-sc.doneServing:
// Serve loop is gone.
@@ -823,38 +866,38 @@ func (sc *serverConn) writeFrameFromHandler(wm frameWriteMsg) error {
// make it onto the wire
//
// If you're not on the serve goroutine, use writeFrameFromHandler instead.
-func (sc *serverConn) writeFrame(wm frameWriteMsg) {
+func (sc *serverConn) writeFrame(wr FrameWriteRequest) {
sc.serveG.check()
var ignoreWrite bool
// Don't send a 100-continue response if we've already sent headers.
// See golang.org/issue/14030.
- switch wm.write.(type) {
+ switch wr.write.(type) {
case *writeResHeaders:
- wm.stream.wroteHeaders = true
+ wr.stream.wroteHeaders = true
case write100ContinueHeadersFrame:
- if wm.stream.wroteHeaders {
+ if wr.stream.wroteHeaders {
ignoreWrite = true
}
}
if !ignoreWrite {
- sc.writeSched.add(wm)
+ sc.writeSched.Push(wr)
}
sc.scheduleFrameWrite()
}
-// startFrameWrite starts a goroutine to write wm (in a separate
+// startFrameWrite starts a goroutine to write wr (in a separate
// goroutine since that might block on the network), and updates the
-// serve goroutine's state about the world, updated from info in wm.
-func (sc *serverConn) startFrameWrite(wm frameWriteMsg) {
+// serve goroutine's state about the world, updated from info in wr.
+func (sc *serverConn) startFrameWrite(wr FrameWriteRequest) {
sc.serveG.check()
if sc.writingFrame {
panic("internal error: can only be writing one frame at a time")
}
- st := wm.stream
+ st := wr.stream
if st != nil {
switch st.state {
case stateHalfClosedLocal:
@@ -865,13 +908,31 @@ func (sc *serverConn) startFrameWrite(wm frameWriteMsg) {
sc.scheduleFrameWrite()
return
}
- panic(fmt.Sprintf("internal error: attempt to send a write %v on a closed stream", wm))
+ panic(fmt.Sprintf("internal error: attempt to send a write %v on a closed stream", wr))
+ }
+ }
+ if wpp, ok := wr.write.(*writePushPromise); ok {
+ var err error
+ wpp.promisedID, err = wpp.allocatePromisedID()
+ if err != nil {
+ sc.writingFrameAsync = false
+ if wr.done != nil {
+ wr.done <- err
+ }
+ return
}
}
sc.writingFrame = true
sc.needsFrameFlush = true
- go sc.writeFrameAsync(wm)
+ if wr.write.staysWithinBuffer(sc.bw.Available()) {
+ sc.writingFrameAsync = false
+ err := wr.write.writeFrame(sc)
+ sc.wroteFrame(frameWriteResult{wr, err})
+ } else {
+ sc.writingFrameAsync = true
+ go sc.writeFrameAsync(wr)
+ }
}
// errHandlerPanicked is the error given to any callers blocked in a read from
@@ -887,25 +948,26 @@ func (sc *serverConn) wroteFrame(res frameWriteResult) {
panic("internal error: expected to be already writing a frame")
}
sc.writingFrame = false
+ sc.writingFrameAsync = false
- wm := res.wm
- st := wm.stream
+ wr := res.wr
+ st := wr.stream
- closeStream := endsStream(wm.write)
+ closeStream := endsStream(wr.write)
- if _, ok := wm.write.(handlerPanicRST); ok {
+ if _, ok := wr.write.(handlerPanicRST); ok {
sc.closeStream(st, errHandlerPanicked)
}
// Reply (if requested) to the blocked ServeHTTP goroutine.
- if ch := wm.done; ch != nil {
+ if ch := wr.done; ch != nil {
select {
case ch <- res.err:
default:
- panic(fmt.Sprintf("unbuffered done channel passed in for type %T", wm.write))
+ panic(fmt.Sprintf("unbuffered done channel passed in for type %T", wr.write))
}
}
- wm.write = nil // prevent use (assume it's tainted after wm.done send)
+ wr.write = nil // prevent use (assume it's tainted after wr.done send)
if closeStream {
if st == nil {
@@ -916,11 +978,11 @@ func (sc *serverConn) wroteFrame(res frameWriteResult) {
// Here we would go to stateHalfClosedLocal in
// theory, but since our handler is done and
// the net/http package provides no mechanism
- // for finishing writing to a ResponseWriter
- // while still reading data (see possible TODO
- // at top of this file), we go into closed
- // state here anyway, after telling the peer
- // we're hanging up on them.
+ // for closing a ResponseWriter while still
+ // reading data (see possible TODO at top of
+ // this file), we go into closed state here
+ // anyway, after telling the peer we're
+ // hanging up on them.
st.state = stateHalfClosedLocal // won't last long, but necessary for closeStream via resetStream
errCancel := streamError(st.id, ErrCodeCancel)
sc.resetStream(errCancel)
@@ -946,47 +1008,68 @@ func (sc *serverConn) wroteFrame(res frameWriteResult) {
// flush the write buffer.
func (sc *serverConn) scheduleFrameWrite() {
sc.serveG.check()
- if sc.writingFrame {
- return
- }
- if sc.needToSendGoAway {
- sc.needToSendGoAway = false
- sc.startFrameWrite(frameWriteMsg{
- write: &writeGoAway{
- maxStreamID: sc.maxStreamID,
- code: sc.goAwayCode,
- },
- })
- return
- }
- if sc.needToSendSettingsAck {
- sc.needToSendSettingsAck = false
- sc.startFrameWrite(frameWriteMsg{write: writeSettingsAck{}})
+ if sc.writingFrame || sc.inFrameScheduleLoop {
return
}
- if !sc.inGoAway {
- if wm, ok := sc.writeSched.take(); ok {
- sc.startFrameWrite(wm)
- return
+ sc.inFrameScheduleLoop = true
+ for !sc.writingFrameAsync {
+ if sc.needToSendGoAway {
+ sc.needToSendGoAway = false
+ sc.startFrameWrite(FrameWriteRequest{
+ write: &writeGoAway{
+ maxStreamID: sc.maxClientStreamID,
+ code: sc.goAwayCode,
+ },
+ })
+ continue
}
+ if sc.needToSendSettingsAck {
+ sc.needToSendSettingsAck = false
+ sc.startFrameWrite(FrameWriteRequest{write: writeSettingsAck{}})
+ continue
+ }
+ if !sc.inGoAway || sc.goAwayCode == ErrCodeNo {
+ if wr, ok := sc.writeSched.Pop(); ok {
+ sc.startFrameWrite(wr)
+ continue
+ }
+ }
+ if sc.needsFrameFlush {
+ sc.startFrameWrite(FrameWriteRequest{write: flushFrameWriter{}})
+ sc.needsFrameFlush = false // after startFrameWrite, since it sets this true
+ continue
+ }
+ break
}
- if sc.needsFrameFlush {
- sc.startFrameWrite(frameWriteMsg{write: flushFrameWriter{}})
- sc.needsFrameFlush = false // after startFrameWrite, since it sets this true
- return
- }
+ sc.inFrameScheduleLoop = false
+}
+
+// startGracefulShutdown sends a GOAWAY with ErrCodeNo to tell the
+// client we're gracefully shutting down. The connection isn't closed
+// until all current streams are done.
+func (sc *serverConn) startGracefulShutdown() {
+ sc.goAwayIn(ErrCodeNo, 0)
}
func (sc *serverConn) goAway(code ErrCode) {
sc.serveG.check()
- if sc.inGoAway {
- return
- }
+ var forceCloseIn time.Duration
if code != ErrCodeNo {
- sc.shutDownIn(250 * time.Millisecond)
+ forceCloseIn = 250 * time.Millisecond
} else {
// TODO: configurable
- sc.shutDownIn(1 * time.Second)
+ forceCloseIn = 1 * time.Second
+ }
+ sc.goAwayIn(code, forceCloseIn)
+}
+
+func (sc *serverConn) goAwayIn(code ErrCode, forceCloseIn time.Duration) {
+ sc.serveG.check()
+ if sc.inGoAway {
+ return
+ }
+ if forceCloseIn != 0 {
+ sc.shutDownIn(forceCloseIn)
}
sc.inGoAway = true
sc.needToSendGoAway = true
@@ -1002,7 +1085,7 @@ func (sc *serverConn) shutDownIn(d time.Duration) {
func (sc *serverConn) resetStream(se StreamError) {
sc.serveG.check()
- sc.writeFrame(frameWriteMsg{write: se})
+ sc.writeFrame(FrameWriteRequest{write: se})
if st, ok := sc.streams[se.StreamID]; ok {
st.sentReset = true
sc.closeStream(st, se)
@@ -1090,6 +1173,8 @@ func (sc *serverConn) processFrame(f Frame) error {
return sc.processResetStream(f)
case *PriorityFrame:
return sc.processPriority(f)
+ case *GoAwayFrame:
+ return sc.processGoAway(f)
case *PushPromiseFrame:
// A client cannot push. Thus, servers MUST treat the receipt of a PUSH_PROMISE
// frame as a connection error (Section 5.4.1) of type PROTOCOL_ERROR.
@@ -1115,7 +1200,10 @@ func (sc *serverConn) processPing(f *PingFrame) error {
// PROTOCOL_ERROR."
return ConnectionError(ErrCodeProtocol)
}
- sc.writeFrame(frameWriteMsg{write: writePingAck{f}})
+ if sc.inGoAway && sc.goAwayCode != ErrCodeNo {
+ return nil
+ }
+ sc.writeFrame(FrameWriteRequest{write: writePingAck{f}})
return nil
}
@@ -1123,7 +1211,14 @@ func (sc *serverConn) processWindowUpdate(f *WindowUpdateFrame) error {
sc.serveG.check()
switch {
case f.StreamID != 0: // stream-level flow control
- st := sc.streams[f.StreamID]
+ state, st := sc.state(f.StreamID)
+ if state == stateIdle {
+ // Section 5.1: "Receiving any frame other than HEADERS
+ // or PRIORITY on a stream in this state MUST be
+ // treated as a connection error (Section 5.4.1) of
+ // type PROTOCOL_ERROR."
+ return ConnectionError(ErrCodeProtocol)
+ }
if st == nil {
// "WINDOW_UPDATE can be sent by a peer that has sent a
// frame bearing the END_STREAM flag. This means that a
@@ -1170,11 +1265,21 @@ func (sc *serverConn) closeStream(st *stream, err error) {
panic(fmt.Sprintf("invariant; can't close stream in state %v", st.state))
}
st.state = stateClosed
- sc.curOpenStreams--
- if sc.curOpenStreams == 0 {
- sc.setConnState(http.StateIdle)
+ if st.isPushed() {
+ sc.curPushedStreams--
+ } else {
+ sc.curClientStreams--
}
delete(sc.streams, st.id)
+ if len(sc.streams) == 0 {
+ sc.setConnState(http.StateIdle)
+ if sc.srv.IdleTimeout != 0 {
+ sc.idleTimer.Reset(sc.srv.IdleTimeout)
+ }
+ if h1ServerKeepAlivesDisabled(sc.hs) {
+ sc.startGracefulShutdown()
+ }
+ }
if p := st.body; p != nil {
// Return any buffered unread bytes worth of conn-level flow control.
// See golang.org/issue/16481
@@ -1183,19 +1288,7 @@ func (sc *serverConn) closeStream(st *stream, err error) {
p.CloseWithError(err)
}
st.cw.Close() // signals Handler's CloseNotifier, unblocks writes, etc
- sc.writeSched.forgetStream(st.id)
- if st.reqBuf != nil {
- // Stash this request body buffer (64k) away for reuse
- // by a future POST/PUT/etc.
- //
- // TODO(bradfitz): share on the server? sync.Pool?
- // Server requires locks and might hurt contention.
- // sync.Pool might work, or might be worse, depending
- // on goroutine CPU migrations. (get and put on
- // separate CPUs). Maybe a mix of strategies. But
- // this is an easy win for now.
- sc.freeRequestBodyBuf = st.reqBuf
- }
+ sc.writeSched.CloseStream(st.id)
}
func (sc *serverConn) processSettings(f *SettingsFrame) error {
@@ -1237,7 +1330,7 @@ func (sc *serverConn) processSetting(s Setting) error {
case SettingInitialWindowSize:
return sc.processSettingInitialWindowSize(s.Val)
case SettingMaxFrameSize:
- sc.writeSched.maxFrameSize = s.Val
+ sc.maxFrameSize = int32(s.Val) // the maximum valid s.Val is < 2^31
case SettingMaxHeaderListSize:
sc.peerMaxHeaderListSize = s.Val
default:
@@ -1281,14 +1374,24 @@ func (sc *serverConn) processSettingInitialWindowSize(val uint32) error {
func (sc *serverConn) processData(f *DataFrame) error {
sc.serveG.check()
+ if sc.inGoAway && sc.goAwayCode != ErrCodeNo {
+ return nil
+ }
data := f.Data()
// "If a DATA frame is received whose stream is not in "open"
// or "half closed (local)" state, the recipient MUST respond
// with a stream error (Section 5.4.2) of type STREAM_CLOSED."
id := f.Header().StreamID
- st, ok := sc.streams[id]
- if !ok || st.state != stateOpen || st.gotTrailerHeader {
+ state, st := sc.state(id)
+ if id == 0 || state == stateIdle {
+ // Section 5.1: "Receiving any frame other than HEADERS
+ // or PRIORITY on a stream in this state MUST be
+ // treated as a connection error (Section 5.4.1) of
+ // type PROTOCOL_ERROR."
+ return ConnectionError(ErrCodeProtocol)
+ }
+ if st == nil || state != stateOpen || st.gotTrailerHeader {
// This includes sending a RST_STREAM if the stream is
// in stateHalfClosedLocal (which currently means that
// the http.Handler returned, so it's done reading &
@@ -1350,6 +1453,25 @@ func (sc *serverConn) processData(f *DataFrame) error {
return nil
}
+func (sc *serverConn) processGoAway(f *GoAwayFrame) error {
+ sc.serveG.check()
+ if f.ErrCode != ErrCodeNo {
+ sc.logf("http2: received GOAWAY %+v, starting graceful shutdown", f)
+ } else {
+ sc.vlogf("http2: received GOAWAY %+v, starting graceful shutdown", f)
+ }
+ sc.startGracefulShutdown()
+ // http://tools.ietf.org/html/rfc7540#section-6.8
+ // We should not create any new streams, which means we should disable push.
+ sc.pushEnabled = false
+ return nil
+}
+
+// isPushed reports whether the stream is server-initiated.
+func (st *stream) isPushed() bool {
+ return st.id%2 == 0
+}
+
// endStream closes a Request.Body's pipe. It is called when a DATA
// frame says a request body is over (or after trailers).
func (st *stream) endStream() {
@@ -1379,12 +1501,12 @@ func (st *stream) copyTrailersToHandlerRequest() {
func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error {
sc.serveG.check()
- id := f.Header().StreamID
+ id := f.StreamID
if sc.inGoAway {
// Ignore.
return nil
}
- // http://http2.github.io/http2-spec/#rfc.section.5.1.1
+ // http://tools.ietf.org/html/rfc7540#section-5.1.1
// Streams initiated by a client MUST use odd-numbered stream
// identifiers. [...] An endpoint that receives an unexpected
// stream identifier MUST respond with a connection error
@@ -1396,8 +1518,7 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error {
// send a trailer for an open one. If we already have a stream
// open, let it process its own HEADERS frame (trailers at this
// point, if it's valid).
- st := sc.streams[f.Header().StreamID]
- if st != nil {
+ if st := sc.streams[f.StreamID]; st != nil {
return st.processTrailerHeaders(f)
}
@@ -1406,54 +1527,45 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error {
// endpoint has opened or reserved. [...] An endpoint that
// receives an unexpected stream identifier MUST respond with
// a connection error (Section 5.4.1) of type PROTOCOL_ERROR.
- if id <= sc.maxStreamID {
+ if id <= sc.maxClientStreamID {
return ConnectionError(ErrCodeProtocol)
}
- sc.maxStreamID = id
+ sc.maxClientStreamID = id
- ctx, cancelCtx := contextWithCancel(sc.baseCtx)
- st = &stream{
- sc: sc,
- id: id,
- state: stateOpen,
- ctx: ctx,
- cancelCtx: cancelCtx,
+ if sc.idleTimer != nil {
+ sc.idleTimer.Stop()
}
- if f.StreamEnded() {
- st.state = stateHalfClosedRemote
- }
- st.cw.Init()
- st.flow.conn = &sc.flow // link to conn-level counter
- st.flow.add(sc.initialWindowSize)
- st.inflow.conn = &sc.inflow // link to conn-level counter
- st.inflow.add(initialWindowSize) // TODO: update this when we send a higher initial window size in the initial settings
-
- sc.streams[id] = st
- if f.HasPriority() {
- adjustStreamPriority(sc.streams, st.id, f.Priority)
- }
- sc.curOpenStreams++
- if sc.curOpenStreams == 1 {
- sc.setConnState(http.StateActive)
- }
- if sc.curOpenStreams > sc.advMaxStreams {
- // "Endpoints MUST NOT exceed the limit set by their
- // peer. An endpoint that receives a HEADERS frame
- // that causes their advertised concurrent stream
- // limit to be exceeded MUST treat this as a stream
- // error (Section 5.4.2) of type PROTOCOL_ERROR or
- // REFUSED_STREAM."
+ // http://tools.ietf.org/html/rfc7540#section-5.1.2
+ // [...] Endpoints MUST NOT exceed the limit set by their peer. An
+ // endpoint that receives a HEADERS frame that causes their
+ // advertised concurrent stream limit to be exceeded MUST treat
+ // this as a stream error (Section 5.4.2) of type PROTOCOL_ERROR
+ // or REFUSED_STREAM.
+ if sc.curClientStreams+1 > sc.advMaxStreams {
if sc.unackedSettings == 0 {
// They should know better.
- return streamError(st.id, ErrCodeProtocol)
+ return streamError(id, ErrCodeProtocol)
}
// Assume it's a network race, where they just haven't
// received our last SETTINGS update. But actually
// this can't happen yet, because we don't yet provide
// a way for users to adjust server parameters at
// runtime.
- return streamError(st.id, ErrCodeRefusedStream)
+ return streamError(id, ErrCodeRefusedStream)
+ }
+
+ initialState := stateOpen
+ if f.StreamEnded() {
+ initialState = stateHalfClosedRemote
+ }
+ st := sc.newStream(id, 0, initialState)
+
+ if f.HasPriority() {
+ if err := checkPriority(f.StreamID, f.Priority); err != nil {
+ return err
+ }
+ sc.writeSched.AdjustStream(st.id, f.Priority)
}
rw, req, err := sc.newWriterAndRequest(st, f)
@@ -1471,10 +1583,21 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error {
if f.Truncated {
// Their header list was too long. Send a 431 error.
handler = handleHeaderListTooLong
- } else if err := checkValidHTTP2Request(req); err != nil {
+ } else if err := checkValidHTTP2RequestHeaders(req.Header); err != nil {
handler = new400Handler(err)
}
+ // The net/http package sets the read deadline from the
+ // http.Server.ReadTimeout during the TLS handshake, but then
+ // passes the connection off to us with the deadline already
+ // set. Disarm it here after the request headers are read,
+ // similar to how the http1 server works. Here it's
+ // technically more like the http1 Server's ReadHeaderTimeout
+ // (in Go 1.8), though. That's a more sane option anyway.
+ if sc.hs.ReadTimeout != 0 {
+ sc.conn.SetReadDeadline(time.Time{})
+ }
+
go sc.runHandler(rw, req, handler)
return nil
}
@@ -1509,62 +1632,78 @@ func (st *stream) processTrailerHeaders(f *MetaHeadersFrame) error {
return nil
}
+func checkPriority(streamID uint32, p PriorityParam) error {
+ if streamID == p.StreamDep {
+ // Section 5.3.1: "A stream cannot depend on itself. An endpoint MUST treat
+ // this as a stream error (Section 5.4.2) of type PROTOCOL_ERROR."
+ // Section 5.3.3 says that a stream can depend on one of its dependencies,
+ // so it's only self-dependencies that are forbidden.
+ return streamError(streamID, ErrCodeProtocol)
+ }
+ return nil
+}
+
func (sc *serverConn) processPriority(f *PriorityFrame) error {
- adjustStreamPriority(sc.streams, f.StreamID, f.PriorityParam)
+ if sc.inGoAway {
+ return nil
+ }
+ if err := checkPriority(f.StreamID, f.PriorityParam); err != nil {
+ return err
+ }
+ sc.writeSched.AdjustStream(f.StreamID, f.PriorityParam)
return nil
}
-func adjustStreamPriority(streams map[uint32]*stream, streamID uint32, priority PriorityParam) {
- st, ok := streams[streamID]
- if !ok {
- // TODO: not quite correct (this streamID might
- // already exist in the dep tree, but be closed), but
- // close enough for now.
- return
+func (sc *serverConn) newStream(id, pusherID uint32, state streamState) *stream {
+ sc.serveG.check()
+ if id == 0 {
+ panic("internal error: cannot create stream with id 0")
}
- st.weight = priority.Weight
- parent := streams[priority.StreamDep] // might be nil
- if parent == st {
- // if client tries to set this stream to be the parent of itself
- // ignore and keep going
- return
+
+ ctx, cancelCtx := contextWithCancel(sc.baseCtx)
+ st := &stream{
+ sc: sc,
+ id: id,
+ state: state,
+ ctx: ctx,
+ cancelCtx: cancelCtx,
}
+ st.cw.Init()
+ st.flow.conn = &sc.flow // link to conn-level counter
+ st.flow.add(sc.initialWindowSize)
+ st.inflow.conn = &sc.inflow // link to conn-level counter
+ st.inflow.add(initialWindowSize) // TODO: update this when we send a higher initial window size in the initial settings
- // section 5.3.3: If a stream is made dependent on one of its
- // own dependencies, the formerly dependent stream is first
- // moved to be dependent on the reprioritized stream's previous
- // parent. The moved dependency retains its weight.
- for piter := parent; piter != nil; piter = piter.parent {
- if piter == st {
- parent.parent = st.parent
- break
- }
+ sc.streams[id] = st
+ sc.writeSched.OpenStream(st.id, OpenStreamOptions{PusherID: pusherID})
+ if st.isPushed() {
+ sc.curPushedStreams++
+ } else {
+ sc.curClientStreams++
}
- st.parent = parent
- if priority.Exclusive && (st.parent != nil || priority.StreamDep == 0) {
- for _, openStream := range streams {
- if openStream != st && openStream.parent == st.parent {
- openStream.parent = st
- }
- }
+ if sc.curClientStreams+sc.curPushedStreams == 1 {
+ sc.setConnState(http.StateActive)
}
+
+ return st
}
func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*responseWriter, *http.Request, error) {
sc.serveG.check()
- method := f.PseudoValue("method")
- path := f.PseudoValue("path")
- scheme := f.PseudoValue("scheme")
- authority := f.PseudoValue("authority")
+ rp := requestParam{
+ method: f.PseudoValue("method"),
+ scheme: f.PseudoValue("scheme"),
+ authority: f.PseudoValue("authority"),
+ path: f.PseudoValue("path"),
+ }
- isConnect := method == "CONNECT"
+ isConnect := rp.method == "CONNECT"
if isConnect {
- if path != "" || scheme != "" || authority == "" {
+ if rp.path != "" || rp.scheme != "" || rp.authority == "" {
return nil, nil, streamError(f.StreamID, ErrCodeProtocol)
}
- } else if method == "" || path == "" ||
- (scheme != "https" && scheme != "http") {
+ } else if rp.method == "" || rp.path == "" || (rp.scheme != "https" && rp.scheme != "http") {
// See 8.1.2.6 Malformed Requests and Responses:
//
// Malformed requests or responses that are detected
@@ -1579,36 +1718,64 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res
}
bodyOpen := !f.StreamEnded()
- if method == "HEAD" && bodyOpen {
+ if rp.method == "HEAD" && bodyOpen {
// HEAD requests can't have bodies
return nil, nil, streamError(f.StreamID, ErrCodeProtocol)
}
- var tlsState *tls.ConnectionState // nil if not scheme https
- if scheme == "https" {
- tlsState = sc.tlsState
+ rp.header = make(http.Header)
+ for _, hf := range f.RegularFields() {
+ rp.header.Add(sc.canonicalHeader(hf.Name), hf.Value)
+ }
+ if rp.authority == "" {
+ rp.authority = rp.header.Get("Host")
}
- header := make(http.Header)
- for _, hf := range f.RegularFields() {
- header.Add(sc.canonicalHeader(hf.Name), hf.Value)
+ rw, req, err := sc.newWriterAndRequestNoBody(st, rp)
+ if err != nil {
+ return nil, nil, err
+ }
+ if bodyOpen {
+ st.reqBuf = getRequestBodyBuf()
+ req.Body.(*requestBody).pipe = &pipe{
+ b: &fixedBuffer{buf: st.reqBuf},
+ }
+
+ if vv, ok := rp.header["Content-Length"]; ok {
+ req.ContentLength, _ = strconv.ParseInt(vv[0], 10, 64)
+ } else {
+ req.ContentLength = -1
+ }
}
+ return rw, req, nil
+}
- if authority == "" {
- authority = header.Get("Host")
+type requestParam struct {
+ method string
+ scheme, authority, path string
+ header http.Header
+}
+
+func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*responseWriter, *http.Request, error) {
+ sc.serveG.check()
+
+ var tlsState *tls.ConnectionState // nil if not scheme https
+ if rp.scheme == "https" {
+ tlsState = sc.tlsState
}
- needsContinue := header.Get("Expect") == "100-continue"
+
+ needsContinue := rp.header.Get("Expect") == "100-continue"
if needsContinue {
- header.Del("Expect")
+ rp.header.Del("Expect")
}
// Merge Cookie headers into one "; "-delimited value.
- if cookies := header["Cookie"]; len(cookies) > 1 {
- header.Set("Cookie", strings.Join(cookies, "; "))
+ if cookies := rp.header["Cookie"]; len(cookies) > 1 {
+ rp.header.Set("Cookie", strings.Join(cookies, "; "))
}
// Setup Trailers
var trailer http.Header
- for _, v := range header["Trailer"] {
+ for _, v := range rp.header["Trailer"] {
for _, key := range strings.Split(v, ",") {
key = http.CanonicalHeaderKey(strings.TrimSpace(key))
switch key {
@@ -1623,57 +1790,42 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res
}
}
}
- delete(header, "Trailer")
+ delete(rp.header, "Trailer")
- body := &requestBody{
- conn: sc,
- stream: st,
- needsContinue: needsContinue,
- }
var url_ *url.URL
var requestURI string
- if isConnect {
- url_ = &url.URL{Host: authority}
- requestURI = authority // mimic HTTP/1 server behavior
+ if rp.method == "CONNECT" {
+ url_ = &url.URL{Host: rp.authority}
+ requestURI = rp.authority // mimic HTTP/1 server behavior
} else {
var err error
- url_, err = url.ParseRequestURI(path)
+ url_, err = url.ParseRequestURI(rp.path)
if err != nil {
- return nil, nil, streamError(f.StreamID, ErrCodeProtocol)
+ return nil, nil, streamError(st.id, ErrCodeProtocol)
}
- requestURI = path
+ requestURI = rp.path
+ }
+
+ body := &requestBody{
+ conn: sc,
+ stream: st,
+ needsContinue: needsContinue,
}
req := &http.Request{
- Method: method,
+ Method: rp.method,
URL: url_,
RemoteAddr: sc.remoteAddrStr,
- Header: header,
+ Header: rp.header,
RequestURI: requestURI,
Proto: "HTTP/2.0",
ProtoMajor: 2,
ProtoMinor: 0,
TLS: tlsState,
- Host: authority,
+ Host: rp.authority,
Body: body,
Trailer: trailer,
}
req = requestWithContext(req, st.ctx)
- if bodyOpen {
- // Disabled, per golang.org/issue/14960:
- // st.reqBuf = sc.getRequestBodyBuf()
- // TODO: remove this 64k of garbage per request (again, but without a data race):
- buf := make([]byte, initialWindowSize)
-
- body.pipe = &pipe{
- b: &fixedBuffer{buf: buf},
- }
-
- if vv, ok := header["Content-Length"]; ok {
- req.ContentLength, _ = strconv.ParseInt(vv[0], 10, 64)
- } else {
- req.ContentLength = -1
- }
- }
rws := responseWriterStatePool.Get().(*responseWriterState)
bwSave := rws.bw
@@ -1689,13 +1841,22 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res
return rw, req, nil
}
-func (sc *serverConn) getRequestBodyBuf() []byte {
- sc.serveG.check()
- if buf := sc.freeRequestBodyBuf; buf != nil {
- sc.freeRequestBodyBuf = nil
- return buf
+var reqBodyCache = make(chan []byte, 8)
+
+func getRequestBodyBuf() []byte {
+ select {
+ case b := <-reqBodyCache:
+ return b
+ default:
+ return make([]byte, initialWindowSize)
+ }
+}
+
+func putRequestBodyBuf(b []byte) {
+ select {
+ case reqBodyCache <- b:
+ default:
}
- return make([]byte, initialWindowSize)
}
// Run on its own goroutine.
@@ -1705,15 +1866,17 @@ func (sc *serverConn) runHandler(rw *responseWriter, req *http.Request, handler
rw.rws.stream.cancelCtx()
if didPanic {
e := recover()
- // Same as net/http:
- const size = 64 << 10
- buf := make([]byte, size)
- buf = buf[:runtime.Stack(buf, false)]
- sc.writeFrameFromHandler(frameWriteMsg{
+ sc.writeFrameFromHandler(FrameWriteRequest{
write: handlerPanicRST{rw.rws.stream.id},
stream: rw.rws.stream,
})
- sc.logf("http2: panic serving %v: %v\n%s", sc.conn.RemoteAddr(), e, buf)
+ // Same as net/http:
+ if shouldLogPanic(e) {
+ const size = 64 << 10
+ buf := make([]byte, size)
+ buf = buf[:runtime.Stack(buf, false)]
+ sc.logf("http2: panic serving %v: %v\n%s", sc.conn.RemoteAddr(), e, buf)
+ }
return
}
rw.handlerDone()
@@ -1744,7 +1907,7 @@ func (sc *serverConn) writeHeaders(st *stream, headerData *writeResHeaders) erro
// mutates it.
errc = errChanPool.Get().(chan error)
}
- if err := sc.writeFrameFromHandler(frameWriteMsg{
+ if err := sc.writeFrameFromHandler(FrameWriteRequest{
write: headerData,
stream: st,
done: errc,
@@ -1767,7 +1930,7 @@ func (sc *serverConn) writeHeaders(st *stream, headerData *writeResHeaders) erro
// called from handler goroutines.
func (sc *serverConn) write100ContinueHeaders(st *stream) {
- sc.writeFrameFromHandler(frameWriteMsg{
+ sc.writeFrameFromHandler(FrameWriteRequest{
write: write100ContinueHeadersFrame{st.id},
stream: st,
})
@@ -1783,11 +1946,19 @@ type bodyReadMsg struct {
// called from handler goroutines.
// Notes that the handler for the given stream ID read n bytes of its body
// and schedules flow control tokens to be sent.
-func (sc *serverConn) noteBodyReadFromHandler(st *stream, n int) {
+func (sc *serverConn) noteBodyReadFromHandler(st *stream, n int, err error) {
sc.serveG.checkNotOn() // NOT on
- select {
- case sc.bodyReadCh <- bodyReadMsg{st, n}:
- case <-sc.doneServing:
+ if n > 0 {
+ select {
+ case sc.bodyReadCh <- bodyReadMsg{st, n}:
+ case <-sc.doneServing:
+ }
+ }
+ if err == io.EOF {
+ if buf := st.reqBuf; buf != nil {
+ st.reqBuf = nil // shouldn't matter; field unused by other
+ putRequestBodyBuf(buf)
+ }
}
}
@@ -1830,7 +2001,7 @@ func (sc *serverConn) sendWindowUpdate32(st *stream, n int32) {
if st != nil {
streamID = st.id
}
- sc.writeFrame(frameWriteMsg{
+ sc.writeFrame(FrameWriteRequest{
write: writeWindowUpdate{streamID: streamID, n: uint32(n)},
stream: st,
})
@@ -1845,16 +2016,19 @@ func (sc *serverConn) sendWindowUpdate32(st *stream, n int32) {
}
}
+// requestBody is the Handler's Request.Body type.
+// Read and Close may be called concurrently.
type requestBody struct {
stream *stream
conn *serverConn
- closed bool
+ closed bool // for use by Close only
+ sawEOF bool // for use by Read only
pipe *pipe // non-nil if we have a HTTP entity message body
needsContinue bool // need to send a 100-continue
}
func (b *requestBody) Close() error {
- if b.pipe != nil {
+ if b.pipe != nil && !b.closed {
b.pipe.BreakWithError(errClosedBody)
}
b.closed = true
@@ -1866,13 +2040,17 @@ func (b *requestBody) Read(p []byte) (n int, err error) {
b.needsContinue = false
b.conn.write100ContinueHeaders(b.stream)
}
- if b.pipe == nil {
+ if b.pipe == nil || b.sawEOF {
return 0, io.EOF
}
n, err = b.pipe.Read(p)
- if n > 0 {
- b.conn.noteBodyReadFromHandler(b.stream, n)
+ if err == io.EOF {
+ b.sawEOF = true
}
+ if b.conn == nil && inTests {
+ return
+ }
+ b.conn.noteBodyReadFromHandler(b.stream, n, err)
return
}
@@ -2110,8 +2288,9 @@ func (w *responseWriter) CloseNotify() <-chan bool {
if ch == nil {
ch = make(chan bool, 1)
rws.closeNotifierCh = ch
+ cw := rws.stream.cw
go func() {
- rws.stream.cw.Wait() // wait for close
+ cw.Wait() // wait for close
ch <- true
}()
}
@@ -2207,6 +2386,200 @@ func (w *responseWriter) handlerDone() {
responseWriterStatePool.Put(rws)
}
+// Push errors.
+var (
+ ErrRecursivePush = errors.New("http2: recursive push not allowed")
+ ErrPushLimitReached = errors.New("http2: push would exceed peer's SETTINGS_MAX_CONCURRENT_STREAMS")
+)
+
+// pushOptions is the internal version of http.PushOptions, which we
+// cannot include here because it's only defined in Go 1.8 and later.
+type pushOptions struct {
+ Method string
+ Header http.Header
+}
+
+func (w *responseWriter) push(target string, opts pushOptions) error {
+ st := w.rws.stream
+ sc := st.sc
+ sc.serveG.checkNotOn()
+
+ // No recursive pushes: "PUSH_PROMISE frames MUST only be sent on a peer-initiated stream."
+ // http://tools.ietf.org/html/rfc7540#section-6.6
+ if st.isPushed() {
+ return ErrRecursivePush
+ }
+
+ // Default options.
+ if opts.Method == "" {
+ opts.Method = "GET"
+ }
+ if opts.Header == nil {
+ opts.Header = http.Header{}
+ }
+ wantScheme := "http"
+ if w.rws.req.TLS != nil {
+ wantScheme = "https"
+ }
+
+ // Validate the request.
+ u, err := url.Parse(target)
+ if err != nil {
+ return err
+ }
+ if u.Scheme == "" {
+ if !strings.HasPrefix(target, "/") {
+ return fmt.Errorf("target must be an absolute URL or an absolute path: %q", target)
+ }
+ u.Scheme = wantScheme
+ u.Host = w.rws.req.Host
+ } else {
+ if u.Scheme != wantScheme {
+ return fmt.Errorf("cannot push URL with scheme %q from request with scheme %q", u.Scheme, wantScheme)
+ }
+ if u.Host == "" {
+ return errors.New("URL must have a host")
+ }
+ }
+ for k := range opts.Header {
+ if strings.HasPrefix(k, ":") {
+ return fmt.Errorf("promised request headers cannot include pseudo header %q", k)
+ }
+ // These headers are meaningful only if the request has a body,
+ // but PUSH_PROMISE requests cannot have a body.
+ // http://tools.ietf.org/html/rfc7540#section-8.2
+ // Also disallow Host, since the promised URL must be absolute.
+ switch strings.ToLower(k) {
+ case "content-length", "content-encoding", "trailer", "te", "expect", "host":
+ return fmt.Errorf("promised request headers cannot include %q", k)
+ }
+ }
+ if err := checkValidHTTP2RequestHeaders(opts.Header); err != nil {
+ return err
+ }
+
+ // The RFC effectively limits promised requests to GET and HEAD:
+ // "Promised requests MUST be cacheable [GET, HEAD, or POST], and MUST be safe [GET or HEAD]"
+ // http://tools.ietf.org/html/rfc7540#section-8.2
+ if opts.Method != "GET" && opts.Method != "HEAD" {
+ return fmt.Errorf("method %q must be GET or HEAD", opts.Method)
+ }
+
+ msg := startPushRequest{
+ parent: st,
+ method: opts.Method,
+ url: u,
+ header: cloneHeader(opts.Header),
+ done: errChanPool.Get().(chan error),
+ }
+
+ select {
+ case <-sc.doneServing:
+ return errClientDisconnected
+ case <-st.cw:
+ return errStreamClosed
+ case sc.wantStartPushCh <- msg:
+ }
+
+ select {
+ case <-sc.doneServing:
+ return errClientDisconnected
+ case <-st.cw:
+ return errStreamClosed
+ case err := <-msg.done:
+ errChanPool.Put(msg.done)
+ return err
+ }
+}
+
+type startPushRequest struct {
+ parent *stream
+ method string
+ url *url.URL
+ header http.Header
+ done chan error
+}
+
+func (sc *serverConn) startPush(msg startPushRequest) {
+ sc.serveG.check()
+
+ // http://tools.ietf.org/html/rfc7540#section-6.6.
+ // PUSH_PROMISE frames MUST only be sent on a peer-initiated stream that
+ // is in either the "open" or "half-closed (remote)" state.
+ if msg.parent.state != stateOpen && msg.parent.state != stateHalfClosedRemote {
+ // responseWriter.Push checks that the stream is peer-initiaed.
+ msg.done <- errStreamClosed
+ return
+ }
+
+ // http://tools.ietf.org/html/rfc7540#section-6.6.
+ if !sc.pushEnabled {
+ msg.done <- http.ErrNotSupported
+ return
+ }
+
+ // PUSH_PROMISE frames must be sent in increasing order by stream ID, so
+ // we allocate an ID for the promised stream lazily, when the PUSH_PROMISE
+ // is written. Once the ID is allocated, we start the request handler.
+ allocatePromisedID := func() (uint32, error) {
+ sc.serveG.check()
+
+ // Check this again, just in case. Technically, we might have received
+ // an updated SETTINGS by the time we got around to writing this frame.
+ if !sc.pushEnabled {
+ return 0, http.ErrNotSupported
+ }
+ // http://tools.ietf.org/html/rfc7540#section-6.5.2.
+ if sc.curPushedStreams+1 > sc.clientMaxStreams {
+ return 0, ErrPushLimitReached
+ }
+
+ // http://tools.ietf.org/html/rfc7540#section-5.1.1.
+ // Streams initiated by the server MUST use even-numbered identifiers.
+ // A server that is unable to establish a new stream identifier can send a GOAWAY
+ // frame so that the client is forced to open a new connection for new streams.
+ if sc.maxPushPromiseID+2 >= 1<<31 {
+ sc.startGracefulShutdown()
+ return 0, ErrPushLimitReached
+ }
+ sc.maxPushPromiseID += 2
+ promisedID := sc.maxPushPromiseID
+
+ // http://tools.ietf.org/html/rfc7540#section-8.2.
+ // Strictly speaking, the new stream should start in "reserved (local)", then
+ // transition to "half closed (remote)" after sending the initial HEADERS, but
+ // we start in "half closed (remote)" for simplicity.
+ // See further comments at the definition of stateHalfClosedRemote.
+ promised := sc.newStream(promisedID, msg.parent.id, stateHalfClosedRemote)
+ rw, req, err := sc.newWriterAndRequestNoBody(promised, requestParam{
+ method: msg.method,
+ scheme: msg.url.Scheme,
+ authority: msg.url.Host,
+ path: msg.url.RequestURI(),
+ header: msg.header,
+ })
+ if err != nil {
+ // Should not happen, since we've already validated msg.url.
+ panic(fmt.Sprintf("newWriterAndRequestNoBody(%+v): %v", msg.url, err))
+ }
+
+ go sc.runHandler(rw, req, sc.handler.ServeHTTP)
+ return promisedID, nil
+ }
+
+ sc.writeFrame(FrameWriteRequest{
+ write: &writePushPromise{
+ streamID: msg.parent.id,
+ method: msg.method,
+ url: msg.url,
+ h: msg.header,
+ allocatePromisedID: allocatePromisedID,
+ },
+ stream: msg.parent,
+ done: msg.done,
+ })
+}
+
// foreachHeaderElement splits v according to the "#rule" construction
// in RFC 2616 section 2.1 and calls fn for each non-empty element.
func foreachHeaderElement(v string, fn func(string)) {
@@ -2234,16 +2607,16 @@ var connHeaders = []string{
"Upgrade",
}
-// checkValidHTTP2Request checks whether req is a valid HTTP/2 request,
+// checkValidHTTP2RequestHeaders checks whether h is a valid HTTP/2 request,
// per RFC 7540 Section 8.1.2.2.
// The returned error is reported to users.
-func checkValidHTTP2Request(req *http.Request) error {
- for _, h := range connHeaders {
- if _, ok := req.Header[h]; ok {
- return fmt.Errorf("request header %q is not valid in HTTP/2", h)
+func checkValidHTTP2RequestHeaders(h http.Header) error {
+ for _, k := range connHeaders {
+ if _, ok := h[k]; ok {
+ return fmt.Errorf("request header %q is not valid in HTTP/2", k)
}
}
- te := req.Header["Te"]
+ te := h["Te"]
if len(te) > 0 && (len(te) > 1 || (te[0] != "trailers" && te[0] != "")) {
return errors.New(`request header "TE" may only be "trailers" in HTTP/2`)
}
@@ -2290,3 +2663,42 @@ var badTrailer = map[string]bool{
"Transfer-Encoding": true,
"Www-Authenticate": true,
}
+
+// h1ServerShutdownChan returns a channel that will be closed when the
+// provided *http.Server wants to shut down.
+//
+// This is a somewhat hacky way to get at http1 innards. It works
+// when the http2 code is bundled into the net/http package in the
+// standard library. The alternatives ended up making the cmd/go tool
+// depend on http Servers. This is the lightest option for now.
+// This is tested via the TestServeShutdown* tests in net/http.
+func h1ServerShutdownChan(hs *http.Server) <-chan struct{} {
+ if fn := testh1ServerShutdownChan; fn != nil {
+ return fn(hs)
+ }
+ var x interface{} = hs
+ type I interface {
+ getDoneChan() <-chan struct{}
+ }
+ if hs, ok := x.(I); ok {
+ return hs.getDoneChan()
+ }
+ return nil
+}
+
+// optional test hook for h1ServerShutdownChan.
+var testh1ServerShutdownChan func(hs *http.Server) <-chan struct{}
+
+// h1ServerKeepAlivesDisabled reports whether hs has its keep-alives
+// disabled. See comments on h1ServerShutdownChan above for why
+// the code is written this way.
+func h1ServerKeepAlivesDisabled(hs *http.Server) bool {
+ var x interface{} = hs
+ type I interface {
+ doKeepAlives() bool
+ }
+ if hs, ok := x.(I); ok {
+ return !hs.doKeepAlives()
+ }
+ return false
+}
diff --git a/vendor/golang.org/x/net/http2/server_push_test.go b/vendor/golang.org/x/net/http2/server_push_test.go
new file mode 100644
index 000000000..3fea20870
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/server_push_test.go
@@ -0,0 +1,470 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build go1.8
+
+package http2
+
+import (
+ "errors"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "net/http"
+ "reflect"
+ "strconv"
+ "sync"
+ "testing"
+ "time"
+)
+
+func TestServer_Push_Success(t *testing.T) {
+ const (
+ mainBody = "<html>index page</html>"
+ pushedBody = "<html>pushed page</html>"
+ userAgent = "testagent"
+ cookie = "testcookie"
+ )
+
+ var stURL string
+ checkPromisedReq := func(r *http.Request, wantMethod string, wantH http.Header) error {
+ if got, want := r.Method, wantMethod; got != want {
+ return fmt.Errorf("promised Req.Method=%q, want %q", got, want)
+ }
+ if got, want := r.Header, wantH; !reflect.DeepEqual(got, want) {
+ return fmt.Errorf("promised Req.Header=%q, want %q", got, want)
+ }
+ if got, want := "https://"+r.Host, stURL; got != want {
+ return fmt.Errorf("promised Req.Host=%q, want %q", got, want)
+ }
+ if r.Body == nil {
+ return fmt.Errorf("nil Body")
+ }
+ if buf, err := ioutil.ReadAll(r.Body); err != nil || len(buf) != 0 {
+ return fmt.Errorf("ReadAll(Body)=%q,%v, want '',nil", buf, err)
+ }
+ return nil
+ }
+
+ errc := make(chan error, 3)
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ switch r.URL.RequestURI() {
+ case "/":
+ // Push "/pushed?get" as a GET request, using an absolute URL.
+ opt := &http.PushOptions{
+ Header: http.Header{
+ "User-Agent": {userAgent},
+ },
+ }
+ if err := w.(http.Pusher).Push(stURL+"/pushed?get", opt); err != nil {
+ errc <- fmt.Errorf("error pushing /pushed?get: %v", err)
+ return
+ }
+ // Push "/pushed?head" as a HEAD request, using a path.
+ opt = &http.PushOptions{
+ Method: "HEAD",
+ Header: http.Header{
+ "User-Agent": {userAgent},
+ "Cookie": {cookie},
+ },
+ }
+ if err := w.(http.Pusher).Push("/pushed?head", opt); err != nil {
+ errc <- fmt.Errorf("error pushing /pushed?head: %v", err)
+ return
+ }
+ w.Header().Set("Content-Type", "text/html")
+ w.Header().Set("Content-Length", strconv.Itoa(len(mainBody)))
+ w.WriteHeader(200)
+ io.WriteString(w, mainBody)
+ errc <- nil
+
+ case "/pushed?get":
+ wantH := http.Header{}
+ wantH.Set("User-Agent", userAgent)
+ if err := checkPromisedReq(r, "GET", wantH); err != nil {
+ errc <- fmt.Errorf("/pushed?get: %v", err)
+ return
+ }
+ w.Header().Set("Content-Type", "text/html")
+ w.Header().Set("Content-Length", strconv.Itoa(len(pushedBody)))
+ w.WriteHeader(200)
+ io.WriteString(w, pushedBody)
+ errc <- nil
+
+ case "/pushed?head":
+ wantH := http.Header{}
+ wantH.Set("User-Agent", userAgent)
+ wantH.Set("Cookie", cookie)
+ if err := checkPromisedReq(r, "HEAD", wantH); err != nil {
+ errc <- fmt.Errorf("/pushed?head: %v", err)
+ return
+ }
+ w.WriteHeader(204)
+ errc <- nil
+
+ default:
+ errc <- fmt.Errorf("unknown RequestURL %q", r.URL.RequestURI())
+ }
+ })
+ stURL = st.ts.URL
+
+ // Send one request, which should push two responses.
+ st.greet()
+ getSlash(st)
+ for k := 0; k < 3; k++ {
+ select {
+ case <-time.After(2 * time.Second):
+ t.Errorf("timeout waiting for handler %d to finish", k)
+ case err := <-errc:
+ if err != nil {
+ t.Fatal(err)
+ }
+ }
+ }
+
+ checkPushPromise := func(f Frame, promiseID uint32, wantH [][2]string) error {
+ pp, ok := f.(*PushPromiseFrame)
+ if !ok {
+ return fmt.Errorf("got a %T; want *PushPromiseFrame", f)
+ }
+ if !pp.HeadersEnded() {
+ return fmt.Errorf("want END_HEADERS flag in PushPromiseFrame")
+ }
+ if got, want := pp.PromiseID, promiseID; got != want {
+ return fmt.Errorf("got PromiseID %v; want %v", got, want)
+ }
+ gotH := st.decodeHeader(pp.HeaderBlockFragment())
+ if !reflect.DeepEqual(gotH, wantH) {
+ return fmt.Errorf("got promised headers %v; want %v", gotH, wantH)
+ }
+ return nil
+ }
+ checkHeaders := func(f Frame, wantH [][2]string) error {
+ hf, ok := f.(*HeadersFrame)
+ if !ok {
+ return fmt.Errorf("got a %T; want *HeadersFrame", f)
+ }
+ gotH := st.decodeHeader(hf.HeaderBlockFragment())
+ if !reflect.DeepEqual(gotH, wantH) {
+ return fmt.Errorf("got response headers %v; want %v", gotH, wantH)
+ }
+ return nil
+ }
+ checkData := func(f Frame, wantData string) error {
+ df, ok := f.(*DataFrame)
+ if !ok {
+ return fmt.Errorf("got a %T; want *DataFrame", f)
+ }
+ if gotData := string(df.Data()); gotData != wantData {
+ return fmt.Errorf("got response data %q; want %q", gotData, wantData)
+ }
+ return nil
+ }
+
+ // Stream 1 has 2 PUSH_PROMISE + HEADERS + DATA
+ // Stream 2 has HEADERS + DATA
+ // Stream 4 has HEADERS
+ expected := map[uint32][]func(Frame) error{
+ 1: {
+ func(f Frame) error {
+ return checkPushPromise(f, 2, [][2]string{
+ {":method", "GET"},
+ {":scheme", "https"},
+ {":authority", st.ts.Listener.Addr().String()},
+ {":path", "/pushed?get"},
+ {"user-agent", userAgent},
+ })
+ },
+ func(f Frame) error {
+ return checkPushPromise(f, 4, [][2]string{
+ {":method", "HEAD"},
+ {":scheme", "https"},
+ {":authority", st.ts.Listener.Addr().String()},
+ {":path", "/pushed?head"},
+ {"cookie", cookie},
+ {"user-agent", userAgent},
+ })
+ },
+ func(f Frame) error {
+ return checkHeaders(f, [][2]string{
+ {":status", "200"},
+ {"content-type", "text/html"},
+ {"content-length", strconv.Itoa(len(mainBody))},
+ })
+ },
+ func(f Frame) error {
+ return checkData(f, mainBody)
+ },
+ },
+ 2: {
+ func(f Frame) error {
+ return checkHeaders(f, [][2]string{
+ {":status", "200"},
+ {"content-type", "text/html"},
+ {"content-length", strconv.Itoa(len(pushedBody))},
+ })
+ },
+ func(f Frame) error {
+ return checkData(f, pushedBody)
+ },
+ },
+ 4: {
+ func(f Frame) error {
+ return checkHeaders(f, [][2]string{
+ {":status", "204"},
+ })
+ },
+ },
+ }
+
+ consumed := map[uint32]int{}
+ for k := 0; len(expected) > 0; k++ {
+ f, err := st.readFrame()
+ if err != nil {
+ for id, left := range expected {
+ t.Errorf("stream %d: missing %d frames", id, len(left))
+ }
+ t.Fatalf("readFrame %d: %v", k, err)
+ }
+ id := f.Header().StreamID
+ label := fmt.Sprintf("stream %d, frame %d", id, consumed[id])
+ if len(expected[id]) == 0 {
+ t.Fatalf("%s: unexpected frame %#+v", label, f)
+ }
+ check := expected[id][0]
+ expected[id] = expected[id][1:]
+ if len(expected[id]) == 0 {
+ delete(expected, id)
+ }
+ if err := check(f); err != nil {
+ t.Fatalf("%s: %v", label, err)
+ }
+ consumed[id]++
+ }
+}
+
+func TestServer_Push_RejectRecursivePush(t *testing.T) {
+ // Expect two requests, but might get three if there's a bug and the second push succeeds.
+ errc := make(chan error, 3)
+ handler := func(w http.ResponseWriter, r *http.Request) error {
+ baseURL := "https://" + r.Host
+ switch r.URL.Path {
+ case "/":
+ if err := w.(http.Pusher).Push(baseURL+"/push1", nil); err != nil {
+ return fmt.Errorf("first Push()=%v, want nil", err)
+ }
+ return nil
+
+ case "/push1":
+ if got, want := w.(http.Pusher).Push(baseURL+"/push2", nil), ErrRecursivePush; got != want {
+ return fmt.Errorf("Push()=%v, want %v", got, want)
+ }
+ return nil
+
+ default:
+ return fmt.Errorf("unexpected path: %q", r.URL.Path)
+ }
+ }
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ errc <- handler(w, r)
+ })
+ defer st.Close()
+ st.greet()
+ getSlash(st)
+ if err := <-errc; err != nil {
+ t.Errorf("First request failed: %v", err)
+ }
+ if err := <-errc; err != nil {
+ t.Errorf("Second request failed: %v", err)
+ }
+}
+
+func testServer_Push_RejectSingleRequest(t *testing.T, doPush func(http.Pusher, *http.Request) error, settings ...Setting) {
+ // Expect one request, but might get two if there's a bug and the push succeeds.
+ errc := make(chan error, 2)
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ errc <- doPush(w.(http.Pusher), r)
+ })
+ defer st.Close()
+ st.greet()
+ if err := st.fr.WriteSettings(settings...); err != nil {
+ st.t.Fatalf("WriteSettings: %v", err)
+ }
+ st.wantSettingsAck()
+ getSlash(st)
+ if err := <-errc; err != nil {
+ t.Error(err)
+ }
+ // Should not get a PUSH_PROMISE frame.
+ hf := st.wantHeaders()
+ if !hf.StreamEnded() {
+ t.Error("stream should end after headers")
+ }
+}
+
+func TestServer_Push_RejectIfDisabled(t *testing.T) {
+ testServer_Push_RejectSingleRequest(t,
+ func(p http.Pusher, r *http.Request) error {
+ if got, want := p.Push("https://"+r.Host+"/pushed", nil), http.ErrNotSupported; got != want {
+ return fmt.Errorf("Push()=%v, want %v", got, want)
+ }
+ return nil
+ },
+ Setting{SettingEnablePush, 0})
+}
+
+func TestServer_Push_RejectWhenNoConcurrentStreams(t *testing.T) {
+ testServer_Push_RejectSingleRequest(t,
+ func(p http.Pusher, r *http.Request) error {
+ if got, want := p.Push("https://"+r.Host+"/pushed", nil), ErrPushLimitReached; got != want {
+ return fmt.Errorf("Push()=%v, want %v", got, want)
+ }
+ return nil
+ },
+ Setting{SettingMaxConcurrentStreams, 0})
+}
+
+func TestServer_Push_RejectWrongScheme(t *testing.T) {
+ testServer_Push_RejectSingleRequest(t,
+ func(p http.Pusher, r *http.Request) error {
+ if err := p.Push("http://"+r.Host+"/pushed", nil); err == nil {
+ return errors.New("Push() should have failed (push target URL is http)")
+ }
+ return nil
+ })
+}
+
+func TestServer_Push_RejectMissingHost(t *testing.T) {
+ testServer_Push_RejectSingleRequest(t,
+ func(p http.Pusher, r *http.Request) error {
+ if err := p.Push("https:pushed", nil); err == nil {
+ return errors.New("Push() should have failed (push target URL missing host)")
+ }
+ return nil
+ })
+}
+
+func TestServer_Push_RejectRelativePath(t *testing.T) {
+ testServer_Push_RejectSingleRequest(t,
+ func(p http.Pusher, r *http.Request) error {
+ if err := p.Push("../test", nil); err == nil {
+ return errors.New("Push() should have failed (push target is a relative path)")
+ }
+ return nil
+ })
+}
+
+func TestServer_Push_RejectForbiddenMethod(t *testing.T) {
+ testServer_Push_RejectSingleRequest(t,
+ func(p http.Pusher, r *http.Request) error {
+ if err := p.Push("https://"+r.Host+"/pushed", &http.PushOptions{Method: "POST"}); err == nil {
+ return errors.New("Push() should have failed (cannot promise a POST)")
+ }
+ return nil
+ })
+}
+
+func TestServer_Push_RejectForbiddenHeader(t *testing.T) {
+ testServer_Push_RejectSingleRequest(t,
+ func(p http.Pusher, r *http.Request) error {
+ header := http.Header{
+ "Content-Length": {"10"},
+ "Content-Encoding": {"gzip"},
+ "Trailer": {"Foo"},
+ "Te": {"trailers"},
+ "Host": {"test.com"},
+ ":authority": {"test.com"},
+ }
+ if err := p.Push("https://"+r.Host+"/pushed", &http.PushOptions{Header: header}); err == nil {
+ return errors.New("Push() should have failed (forbidden headers)")
+ }
+ return nil
+ })
+}
+
+func TestServer_Push_StateTransitions(t *testing.T) {
+ const body = "foo"
+
+ startedPromise := make(chan bool)
+ finishedPush := make(chan bool)
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ switch r.URL.RequestURI() {
+ case "/":
+ if err := w.(http.Pusher).Push("/pushed", nil); err != nil {
+ t.Errorf("Push error: %v", err)
+ }
+ close(startedPromise)
+ // Don't finish this request until the push finishes so we don't
+ // nondeterministically interleave output frames with the push.
+ <-finishedPush
+ }
+ w.Header().Set("Content-Type", "text/html")
+ w.Header().Set("Content-Length", strconv.Itoa(len(body)))
+ w.WriteHeader(200)
+ io.WriteString(w, body)
+ })
+ defer st.Close()
+
+ st.greet()
+ if st.stream(2) != nil {
+ t.Fatal("stream 2 should be empty")
+ }
+ if got, want := st.streamState(2), stateIdle; got != want {
+ t.Fatalf("streamState(2)=%v, want %v", got, want)
+ }
+ getSlash(st)
+ <-startedPromise
+ if got, want := st.streamState(2), stateHalfClosedRemote; got != want {
+ t.Fatalf("streamState(2)=%v, want %v", got, want)
+ }
+ st.wantPushPromise()
+ st.wantHeaders()
+ if df := st.wantData(); !df.StreamEnded() {
+ t.Fatal("expected END_STREAM flag on DATA")
+ }
+ if got, want := st.streamState(2), stateClosed; got != want {
+ t.Fatalf("streamState(2)=%v, want %v", got, want)
+ }
+ close(finishedPush)
+}
+
+func TestServer_Push_RejectAfterGoAway(t *testing.T) {
+ var readyOnce sync.Once
+ ready := make(chan struct{})
+ errc := make(chan error, 2)
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ select {
+ case <-ready:
+ case <-time.After(5 * time.Second):
+ errc <- fmt.Errorf("timeout waiting for GOAWAY to be processed")
+ }
+ if got, want := w.(http.Pusher).Push("https://"+r.Host+"/pushed", nil), http.ErrNotSupported; got != want {
+ errc <- fmt.Errorf("Push()=%v, want %v", got, want)
+ }
+ errc <- nil
+ })
+ defer st.Close()
+ st.greet()
+ getSlash(st)
+
+ // Send GOAWAY and wait for it to be processed.
+ st.fr.WriteGoAway(1, ErrCodeNo, nil)
+ go func() {
+ for {
+ select {
+ case <-ready:
+ return
+ default:
+ }
+ st.sc.testHookCh <- func(loopNum int) {
+ if !st.sc.pushEnabled {
+ readyOnce.Do(func() { close(ready) })
+ }
+ }
+ }
+ }()
+ if err := <-errc; err != nil {
+ t.Error(err)
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/server_test.go b/vendor/golang.org/x/net/http2/server_test.go
index 879e82135..2e6146b67 100644
--- a/vendor/golang.org/x/net/http2/server_test.go
+++ b/vendor/golang.org/x/net/http2/server_test.go
@@ -80,18 +80,19 @@ func newServerTester(t testing.TB, handler http.HandlerFunc, opts ...interface{}
tlsConfig := &tls.Config{
InsecureSkipVerify: true,
- // The h2-14 is temporary, until curl is updated. (as used by unit tests
- // in Docker)
- NextProtos: []string{NextProtoTLS, "h2-14"},
+ NextProtos: []string{NextProtoTLS},
}
var onlyServer, quiet bool
+ h2server := new(Server)
for _, opt := range opts {
switch v := opt.(type) {
case func(*tls.Config):
v(tlsConfig)
case func(*httptest.Server):
v(ts)
+ case func(*Server):
+ v(h2server)
case serverTesterOpt:
switch v {
case optOnlyServer:
@@ -106,7 +107,7 @@ func newServerTester(t testing.TB, handler http.HandlerFunc, opts ...interface{}
}
}
- ConfigureServer(ts.Config, &Server{})
+ ConfigureServer(ts.Config, h2server)
st := &serverTester{
t: t,
@@ -253,6 +254,12 @@ func (st *serverTester) writeHeaders(p HeadersFrameParam) {
}
}
+func (st *serverTester) writePriority(id uint32, p PriorityParam) {
+ if err := st.fr.WritePriority(id, p); err != nil {
+ st.t.Fatalf("Error writing PRIORITY: %v", err)
+ }
+}
+
func (st *serverTester) encodeHeaderField(k, v string) {
err := st.hpackEnc.WriteField(hpack.HeaderField{Name: k, Value: v})
if err != nil {
@@ -278,37 +285,42 @@ func (st *serverTester) encodeHeaderRaw(headers ...string) []byte {
// encodeHeader encodes headers and returns their HPACK bytes. headers
// must contain an even number of key/value pairs. There may be
// multiple pairs for keys (e.g. "cookie"). The :method, :path, and
-// :scheme headers default to GET, / and https.
+// :scheme headers default to GET, / and https. The :authority header
+// defaults to st.ts.Listener.Addr().
func (st *serverTester) encodeHeader(headers ...string) []byte {
if len(headers)%2 == 1 {
panic("odd number of kv args")
}
st.headerBuf.Reset()
+ defaultAuthority := st.ts.Listener.Addr().String()
if len(headers) == 0 {
// Fast path, mostly for benchmarks, so test code doesn't pollute
// profiles when we're looking to improve server allocations.
st.encodeHeaderField(":method", "GET")
- st.encodeHeaderField(":path", "/")
st.encodeHeaderField(":scheme", "https")
+ st.encodeHeaderField(":authority", defaultAuthority)
+ st.encodeHeaderField(":path", "/")
return st.headerBuf.Bytes()
}
if len(headers) == 2 && headers[0] == ":method" {
// Another fast path for benchmarks.
st.encodeHeaderField(":method", headers[1])
- st.encodeHeaderField(":path", "/")
st.encodeHeaderField(":scheme", "https")
+ st.encodeHeaderField(":authority", defaultAuthority)
+ st.encodeHeaderField(":path", "/")
return st.headerBuf.Bytes()
}
pseudoCount := map[string]int{}
- keys := []string{":method", ":path", ":scheme"}
+ keys := []string{":method", ":scheme", ":authority", ":path"}
vals := map[string][]string{
- ":method": {"GET"},
- ":path": {"/"},
- ":scheme": {"https"},
+ ":method": {"GET"},
+ ":scheme": {"https"},
+ ":authority": {defaultAuthority},
+ ":path": {"/"},
}
for len(headers) > 0 {
k, v := headers[0], headers[1]
@@ -503,7 +515,18 @@ func (st *serverTester) wantSettingsAck() {
if !sf.Header().Flags.Has(FlagSettingsAck) {
st.t.Fatal("Settings Frame didn't have ACK set")
}
+}
+func (st *serverTester) wantPushPromise() *PushPromiseFrame {
+ f, err := st.readFrame()
+ if err != nil {
+ st.t.Fatal(err)
+ }
+ ppf, ok := f.(*PushPromiseFrame)
+ if !ok {
+ st.t.Fatalf("Wanted PushPromise, received %T", ppf)
+ }
+ return ppf
}
func TestServer(t *testing.T) {
@@ -758,7 +781,7 @@ func TestServer_Request_Get_Host(t *testing.T) {
testServerRequest(t, func(st *serverTester) {
st.writeHeaders(HeadersFrameParam{
StreamID: 1, // clients send odd numbers
- BlockFragment: st.encodeHeader("host", host),
+ BlockFragment: st.encodeHeader(":authority", "", "host", host),
EndStream: true,
EndHeaders: true,
})
@@ -937,7 +960,7 @@ func TestServer_Request_Reject_Pseudo_Unknown(t *testing.T) {
func testRejectRequest(t *testing.T, send func(*serverTester)) {
st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
- t.Fatal("server request made it to handler; should've been rejected")
+ t.Error("server request made it to handler; should've been rejected")
})
defer st.Close()
@@ -946,6 +969,39 @@ func testRejectRequest(t *testing.T, send func(*serverTester)) {
st.wantRSTStream(1, ErrCodeProtocol)
}
+func testRejectRequestWithProtocolError(t *testing.T, send func(*serverTester)) {
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ t.Error("server request made it to handler; should've been rejected")
+ }, optQuiet)
+ defer st.Close()
+
+ st.greet()
+ send(st)
+ gf := st.wantGoAway()
+ if gf.ErrCode != ErrCodeProtocol {
+ t.Errorf("err code = %v; want %v", gf.ErrCode, ErrCodeProtocol)
+ }
+}
+
+// Section 5.1, on idle connections: "Receiving any frame other than
+// HEADERS or PRIORITY on a stream in this state MUST be treated as a
+// connection error (Section 5.4.1) of type PROTOCOL_ERROR."
+func TestRejectFrameOnIdle_WindowUpdate(t *testing.T) {
+ testRejectRequestWithProtocolError(t, func(st *serverTester) {
+ st.fr.WriteWindowUpdate(123, 456)
+ })
+}
+func TestRejectFrameOnIdle_Data(t *testing.T) {
+ testRejectRequestWithProtocolError(t, func(st *serverTester) {
+ st.fr.WriteData(123, true, nil)
+ })
+}
+func TestRejectFrameOnIdle_RSTStream(t *testing.T) {
+ testRejectRequestWithProtocolError(t, func(st *serverTester) {
+ st.fr.WriteRSTStream(123, ErrCodeCancel)
+ })
+}
+
func TestServer_Request_Connect(t *testing.T) {
testServerRequest(t, func(st *serverTester) {
st.writeHeaders(HeadersFrameParam{
@@ -1445,6 +1501,36 @@ func TestServer_Rejects_Continuation0(t *testing.T) {
})
}
+// No PRIORITY on stream 0.
+func TestServer_Rejects_Priority0(t *testing.T) {
+ testServerRejectsConn(t, func(st *serverTester) {
+ st.fr.AllowIllegalWrites = true
+ st.writePriority(0, PriorityParam{StreamDep: 1})
+ })
+}
+
+// No HEADERS frame with a self-dependence.
+func TestServer_Rejects_HeadersSelfDependence(t *testing.T) {
+ testServerRejectsStream(t, ErrCodeProtocol, func(st *serverTester) {
+ st.fr.AllowIllegalWrites = true
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1,
+ BlockFragment: st.encodeHeader(),
+ EndStream: true,
+ EndHeaders: true,
+ Priority: PriorityParam{StreamDep: 1},
+ })
+ })
+}
+
+// No PRIORTY frame with a self-dependence.
+func TestServer_Rejects_PrioritySelfDependence(t *testing.T) {
+ testServerRejectsStream(t, ErrCodeProtocol, func(st *serverTester) {
+ st.fr.AllowIllegalWrites = true
+ st.writePriority(1, PriorityParam{StreamDep: 1})
+ })
+}
+
func TestServer_Rejects_PushPromise(t *testing.T) {
testServerRejectsConn(t, func(st *serverTester) {
pp := PushPromiseParam{
@@ -2840,6 +2926,12 @@ func BenchmarkServerPosts(b *testing.B) {
const msg = "Hello, world"
st := newServerTester(b, func(w http.ResponseWriter, r *http.Request) {
+ // Consume the (empty) body from th peer before replying, otherwise
+ // the server will sometimes (depending on scheduling) send the peer a
+ // a RST_STREAM with the CANCEL error code.
+ if n, err := io.Copy(ioutil.Discard, r.Body); n != 0 || err != nil {
+ b.Errorf("Copy error; got %v, %v; want 0, nil", n, err)
+ }
io.WriteString(w, msg)
})
defer st.Close()
@@ -3236,40 +3328,40 @@ func (he *hpackEncoder) encodeHeaderRaw(t *testing.T, headers ...string) []byte
func TestCheckValidHTTP2Request(t *testing.T) {
tests := []struct {
- req *http.Request
+ h http.Header
want error
}{
{
- req: &http.Request{Header: http.Header{"Te": {"trailers"}}},
+ h: http.Header{"Te": {"trailers"}},
want: nil,
},
{
- req: &http.Request{Header: http.Header{"Te": {"trailers", "bogus"}}},
+ h: http.Header{"Te": {"trailers", "bogus"}},
want: errors.New(`request header "TE" may only be "trailers" in HTTP/2`),
},
{
- req: &http.Request{Header: http.Header{"Foo": {""}}},
+ h: http.Header{"Foo": {""}},
want: nil,
},
{
- req: &http.Request{Header: http.Header{"Connection": {""}}},
+ h: http.Header{"Connection": {""}},
want: errors.New(`request header "Connection" is not valid in HTTP/2`),
},
{
- req: &http.Request{Header: http.Header{"Proxy-Connection": {""}}},
+ h: http.Header{"Proxy-Connection": {""}},
want: errors.New(`request header "Proxy-Connection" is not valid in HTTP/2`),
},
{
- req: &http.Request{Header: http.Header{"Keep-Alive": {""}}},
+ h: http.Header{"Keep-Alive": {""}},
want: errors.New(`request header "Keep-Alive" is not valid in HTTP/2`),
},
{
- req: &http.Request{Header: http.Header{"Upgrade": {""}}},
+ h: http.Header{"Upgrade": {""}},
want: errors.New(`request header "Upgrade" is not valid in HTTP/2`),
},
}
for i, tt := range tests {
- got := checkValidHTTP2Request(tt.req)
+ got := checkValidHTTP2RequestHeaders(tt.h)
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("%d. checkValidHTTP2Request = %v; want %v", i, got, tt.want)
}
@@ -3366,3 +3458,118 @@ func TestUnreadFlowControlReturned_Server(t *testing.T) {
}
}
+
+func TestServerIdleTimeout(t *testing.T) {
+ if testing.Short() {
+ t.Skip("skipping in short mode")
+ }
+
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ }, func(h2s *Server) {
+ h2s.IdleTimeout = 500 * time.Millisecond
+ })
+ defer st.Close()
+
+ st.greet()
+ ga := st.wantGoAway()
+ if ga.ErrCode != ErrCodeNo {
+ t.Errorf("GOAWAY error = %v; want ErrCodeNo", ga.ErrCode)
+ }
+}
+
+func TestServerIdleTimeout_AfterRequest(t *testing.T) {
+ if testing.Short() {
+ t.Skip("skipping in short mode")
+ }
+ const timeout = 250 * time.Millisecond
+
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ time.Sleep(timeout * 2)
+ }, func(h2s *Server) {
+ h2s.IdleTimeout = timeout
+ })
+ defer st.Close()
+
+ st.greet()
+
+ // Send a request which takes twice the timeout. Verifies the
+ // idle timeout doesn't fire while we're in a request:
+ st.bodylessReq1()
+ st.wantHeaders()
+
+ // But the idle timeout should be rearmed after the request
+ // is done:
+ ga := st.wantGoAway()
+ if ga.ErrCode != ErrCodeNo {
+ t.Errorf("GOAWAY error = %v; want ErrCodeNo", ga.ErrCode)
+ }
+}
+
+// grpc-go closes the Request.Body currently with a Read.
+// Verify that it doesn't race.
+// See https://github.com/grpc/grpc-go/pull/938
+func TestRequestBodyReadCloseRace(t *testing.T) {
+ for i := 0; i < 100; i++ {
+ body := &requestBody{
+ pipe: &pipe{
+ b: new(bytes.Buffer),
+ },
+ }
+ body.pipe.CloseWithError(io.EOF)
+
+ done := make(chan bool, 1)
+ buf := make([]byte, 10)
+ go func() {
+ time.Sleep(1 * time.Millisecond)
+ body.Close()
+ done <- true
+ }()
+ body.Read(buf)
+ <-done
+ }
+}
+
+func TestServerGracefulShutdown(t *testing.T) {
+ shutdownCh := make(chan struct{})
+ defer func() { testh1ServerShutdownChan = nil }()
+ testh1ServerShutdownChan = func(*http.Server) <-chan struct{} { return shutdownCh }
+
+ var st *serverTester
+ handlerDone := make(chan struct{})
+ st = newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ defer close(handlerDone)
+ close(shutdownCh)
+
+ ga := st.wantGoAway()
+ if ga.ErrCode != ErrCodeNo {
+ t.Errorf("GOAWAY error = %v; want ErrCodeNo", ga.ErrCode)
+ }
+ if ga.LastStreamID != 1 {
+ t.Errorf("GOAWAY LastStreamID = %v; want 1", ga.LastStreamID)
+ }
+
+ w.Header().Set("x-foo", "bar")
+ })
+ defer st.Close()
+
+ st.greet()
+ st.bodylessReq1()
+
+ <-handlerDone
+ hf := st.wantHeaders()
+ goth := st.decodeHeader(hf.HeaderBlockFragment())
+ wanth := [][2]string{
+ {":status", "200"},
+ {"x-foo", "bar"},
+ {"content-type", "text/plain; charset=utf-8"},
+ {"content-length", "0"},
+ }
+ if !reflect.DeepEqual(goth, wanth) {
+ t.Errorf("Got headers %v; want %v", goth, wanth)
+ }
+
+ n, err := st.cc.Read([]byte{0})
+ if n != 0 || err == nil {
+ t.Errorf("Read = %v, %v; want 0, non-nil", n, err)
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go
index 42c73bd1e..8f5f84412 100644
--- a/vendor/golang.org/x/net/http2/transport.go
+++ b/vendor/golang.org/x/net/http2/transport.go
@@ -10,6 +10,7 @@ import (
"bufio"
"bytes"
"compress/gzip"
+ "crypto/rand"
"crypto/tls"
"errors"
"fmt"
@@ -150,6 +151,9 @@ type ClientConn struct {
readerDone chan struct{} // closed on error
readerErr error // set before readerDone is closed
+ idleTimeout time.Duration // or 0 for never
+ idleTimer *time.Timer
+
mu sync.Mutex // guards following
cond *sync.Cond // hold mu; broadcast on flow/closed changes
flow flow // our conn-level flow control quota (cs.flow is per stream)
@@ -160,6 +164,7 @@ type ClientConn struct {
goAwayDebug string // goAway frame's debug data, retained as a string
streams map[uint32]*clientStream // client-initiated
nextStreamID uint32
+ pings map[[8]byte]chan struct{} // in flight ping data to notification channel
bw *bufio.Writer
br *bufio.Reader
fr *Framer
@@ -194,6 +199,7 @@ type clientStream struct {
bytesRemain int64 // -1 means unknown; owned by transportResponseBody.Read
readErr error // sticky read error; owned by transportResponseBody.Read
stopReqBody error // if non-nil, stop writing req body; guarded by cc.mu
+ didReset bool // whether we sent a RST_STREAM to the server; guarded by cc.mu
peerReset chan struct{} // closed on peer reset
resetErr error // populated before peerReset is closed
@@ -221,15 +227,26 @@ func (cs *clientStream) awaitRequestCancel(req *http.Request) {
}
select {
case <-req.Cancel:
+ cs.cancelStream()
cs.bufPipe.CloseWithError(errRequestCanceled)
- cs.cc.writeStreamReset(cs.ID, ErrCodeCancel, nil)
case <-ctx.Done():
+ cs.cancelStream()
cs.bufPipe.CloseWithError(ctx.Err())
- cs.cc.writeStreamReset(cs.ID, ErrCodeCancel, nil)
case <-cs.done:
}
}
+func (cs *clientStream) cancelStream() {
+ cs.cc.mu.Lock()
+ didReset := cs.didReset
+ cs.didReset = true
+ cs.cc.mu.Unlock()
+
+ if !didReset {
+ cs.cc.writeStreamReset(cs.ID, ErrCodeCancel, nil)
+ }
+}
+
// checkResetOrDone reports any error sent in a RST_STREAM frame by the
// server, or errStreamClosed if the stream is complete.
func (cs *clientStream) checkResetOrDone() error {
@@ -431,6 +448,11 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro
streams: make(map[uint32]*clientStream),
singleUse: singleUse,
wantSettingsAck: true,
+ pings: make(map[[8]byte]chan struct{}),
+ }
+ if d := t.idleConnTimeout(); d != 0 {
+ cc.idleTimeout = d
+ cc.idleTimer = time.AfterFunc(d, cc.onIdleTimeout)
}
if VerboseLogs {
t.vlogf("http2: Transport creating client conn %p to %v", cc, c.RemoteAddr())
@@ -508,6 +530,16 @@ func (cc *ClientConn) canTakeNewRequestLocked() bool {
cc.nextStreamID < math.MaxInt32
}
+// onIdleTimeout is called from a time.AfterFunc goroutine. It will
+// only be called when we're idle, but because we're coming from a new
+// goroutine, there could be a new request coming in at the same time,
+// so this simply calls the synchronized closeIfIdle to shut down this
+// connection. The timer could just call closeIfIdle, but this is more
+// clear.
+func (cc *ClientConn) onIdleTimeout() {
+ cc.closeIfIdle()
+}
+
func (cc *ClientConn) closeIfIdle() {
cc.mu.Lock()
if len(cc.streams) > 0 {
@@ -604,51 +636,37 @@ func (cc *ClientConn) responseHeaderTimeout() time.Duration {
// Certain headers are special-cased as okay but not transmitted later.
func checkConnHeaders(req *http.Request) error {
if v := req.Header.Get("Upgrade"); v != "" {
- return errors.New("http2: invalid Upgrade request header")
+ return fmt.Errorf("http2: invalid Upgrade request header: %q", req.Header["Upgrade"])
}
- if v := req.Header.Get("Transfer-Encoding"); (v != "" && v != "chunked") || len(req.Header["Transfer-Encoding"]) > 1 {
- return errors.New("http2: invalid Transfer-Encoding request header")
+ if vv := req.Header["Transfer-Encoding"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && vv[0] != "chunked") {
+ return fmt.Errorf("http2: invalid Transfer-Encoding request header: %q", vv)
}
- if v := req.Header.Get("Connection"); (v != "" && v != "close" && v != "keep-alive") || len(req.Header["Connection"]) > 1 {
- return errors.New("http2: invalid Connection request header")
+ if vv := req.Header["Connection"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && vv[0] != "close" && vv[0] != "keep-alive") {
+ return fmt.Errorf("http2: invalid Connection request header: %q", vv)
}
return nil
}
-func bodyAndLength(req *http.Request) (body io.Reader, contentLen int64) {
- body = req.Body
- if body == nil {
- return nil, 0
+// actualContentLength returns a sanitized version of
+// req.ContentLength, where 0 actually means zero (not unknown) and -1
+// means unknown.
+func actualContentLength(req *http.Request) int64 {
+ if req.Body == nil {
+ return 0
}
if req.ContentLength != 0 {
- return req.Body, req.ContentLength
- }
-
- // We have a body but a zero content length. Test to see if
- // it's actually zero or just unset.
- var buf [1]byte
- n, rerr := body.Read(buf[:])
- if rerr != nil && rerr != io.EOF {
- return errorReader{rerr}, -1
+ return req.ContentLength
}
- if n == 1 {
- // Oh, guess there is data in this Body Reader after all.
- // The ContentLength field just wasn't set.
- // Stitch the Body back together again, re-attaching our
- // consumed byte.
- if rerr == io.EOF {
- return bytes.NewReader(buf[:]), 1
- }
- return io.MultiReader(bytes.NewReader(buf[:]), body), -1
- }
- // Body is actually zero bytes.
- return nil, 0
+ return -1
}
func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) {
if err := checkConnHeaders(req); err != nil {
return nil, err
}
+ if cc.idleTimer != nil {
+ cc.idleTimer.Stop()
+ }
trailers, err := commaSeparatedTrailers(req)
if err != nil {
@@ -663,8 +681,9 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) {
return nil, errClientConnUnusable
}
- body, contentLen := bodyAndLength(req)
+ body := req.Body
hasBody := body != nil
+ contentLen := actualContentLength(req)
// TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere?
var requestedGzip bool
@@ -1046,7 +1065,7 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail
cc.writeHeader(":method", req.Method)
if req.Method != "CONNECT" {
cc.writeHeader(":path", path)
- cc.writeHeader(":scheme", "https")
+ cc.writeHeader(":scheme", req.URL.Scheme)
}
if trailers != "" {
cc.writeHeader("trailer", trailers)
@@ -1173,6 +1192,9 @@ func (cc *ClientConn) streamByID(id uint32, andRemove bool) *clientStream {
if andRemove && cs != nil && !cc.closed {
cc.lastActive = time.Now()
delete(cc.streams, id)
+ if len(cc.streams) == 0 && cc.idleTimer != nil {
+ cc.idleTimer.Reset(cc.idleTimeout)
+ }
close(cs.done)
cc.cond.Broadcast() // wake up checkResetOrDone via clientStream.awaitFlowControl
}
@@ -1229,6 +1251,10 @@ func (rl *clientConnReadLoop) cleanup() {
defer cc.t.connPool().MarkDead(cc)
defer close(cc.readerDone)
+ if cc.idleTimer != nil {
+ cc.idleTimer.Stop()
+ }
+
// Close any response bodies if the server closes prematurely.
// TODO: also do this if we've written the headers but not
// gotten a response yet.
@@ -1652,9 +1678,10 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error {
cc.bw.Flush()
cc.wmu.Unlock()
}
+ didReset := cs.didReset
cc.mu.Unlock()
- if len(data) > 0 {
+ if len(data) > 0 && !didReset {
if _, err := cs.bufPipe.Write(data); err != nil {
rl.endStreamError(cs, err)
return err
@@ -1815,10 +1842,56 @@ func (rl *clientConnReadLoop) processResetStream(f *RSTStreamFrame) error {
return nil
}
+// Ping sends a PING frame to the server and waits for the ack.
+// Public implementation is in go17.go and not_go17.go
+func (cc *ClientConn) ping(ctx contextContext) error {
+ c := make(chan struct{})
+ // Generate a random payload
+ var p [8]byte
+ for {
+ if _, err := rand.Read(p[:]); err != nil {
+ return err
+ }
+ cc.mu.Lock()
+ // check for dup before insert
+ if _, found := cc.pings[p]; !found {
+ cc.pings[p] = c
+ cc.mu.Unlock()
+ break
+ }
+ cc.mu.Unlock()
+ }
+ cc.wmu.Lock()
+ if err := cc.fr.WritePing(false, p); err != nil {
+ cc.wmu.Unlock()
+ return err
+ }
+ if err := cc.bw.Flush(); err != nil {
+ cc.wmu.Unlock()
+ return err
+ }
+ cc.wmu.Unlock()
+ select {
+ case <-c:
+ return nil
+ case <-ctx.Done():
+ return ctx.Err()
+ case <-cc.readerDone:
+ // connection closed
+ return cc.readerErr
+ }
+}
+
func (rl *clientConnReadLoop) processPing(f *PingFrame) error {
if f.IsAck() {
- // 6.7 PING: " An endpoint MUST NOT respond to PING frames
- // containing this flag."
+ cc := rl.cc
+ cc.mu.Lock()
+ defer cc.mu.Unlock()
+ // If ack, notify listener if any
+ if c, ok := cc.pings[f.Data]; ok {
+ close(c)
+ delete(cc.pings, f.Data)
+ }
return nil
}
cc := rl.cc
diff --git a/vendor/golang.org/x/net/http2/transport_test.go b/vendor/golang.org/x/net/http2/transport_test.go
index 96d0a0867..f9287e575 100644
--- a/vendor/golang.org/x/net/http2/transport_test.go
+++ b/vendor/golang.org/x/net/http2/transport_test.go
@@ -39,6 +39,13 @@ var (
var tlsConfigInsecure = &tls.Config{InsecureSkipVerify: true}
+type testContext struct{}
+
+func (testContext) Done() <-chan struct{} { return make(chan struct{}) }
+func (testContext) Err() error { panic("should not be called") }
+func (testContext) Deadline() (deadline time.Time, ok bool) { return time.Time{}, false }
+func (testContext) Value(key interface{}) interface{} { return nil }
+
func TestTransportExternal(t *testing.T) {
if !*extNet {
t.Skip("skipping external network test")
@@ -52,6 +59,16 @@ func TestTransportExternal(t *testing.T) {
res.Write(os.Stdout)
}
+type fakeTLSConn struct {
+ net.Conn
+}
+
+func (c *fakeTLSConn) ConnectionState() tls.ConnectionState {
+ return tls.ConnectionState{
+ Version: tls.VersionTLS12,
+ }
+}
+
func startH2cServer(t *testing.T) net.Listener {
h2Server := &Server{}
l := newLocalListener(t)
@@ -61,8 +78,8 @@ func startH2cServer(t *testing.T) net.Listener {
t.Error(err)
return
}
- h2Server.ServeConn(conn, &ServeConnOpts{Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- fmt.Fprintf(w, "Hello, %v", r.URL.Path)
+ h2Server.ServeConn(&fakeTLSConn{conn}, &ServeConnOpts{Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ fmt.Fprintf(w, "Hello, %v, http: %v", r.URL.Path, r.TLS == nil)
})})
}()
return l
@@ -92,7 +109,7 @@ func TestTransportH2c(t *testing.T) {
if err != nil {
t.Fatal(err)
}
- if got, want := string(body), "Hello, /foobar"; got != want {
+ if got, want := string(body), "Hello, /foobar, http: true"; got != want {
t.Fatalf("response got %v, want %v", got, want)
}
}
@@ -374,6 +391,40 @@ func randString(n int) string {
return string(b)
}
+type panicReader struct{}
+
+func (panicReader) Read([]byte) (int, error) { panic("unexpected Read") }
+func (panicReader) Close() error { panic("unexpected Close") }
+
+func TestActualContentLength(t *testing.T) {
+ tests := []struct {
+ req *http.Request
+ want int64
+ }{
+ // Verify we don't read from Body:
+ 0: {
+ req: &http.Request{Body: panicReader{}},
+ want: -1,
+ },
+ // nil Body means 0, regardless of ContentLength:
+ 1: {
+ req: &http.Request{Body: nil, ContentLength: 5},
+ want: 0,
+ },
+ // ContentLength is used if set.
+ 2: {
+ req: &http.Request{Body: panicReader{}, ContentLength: 5},
+ want: 5,
+ },
+ }
+ for i, tt := range tests {
+ got := actualContentLength(tt.req)
+ if got != tt.want {
+ t.Errorf("test[%d]: got %d; want %d", i, got, tt.want)
+ }
+ }
+}
+
func TestTransportBody(t *testing.T) {
bodyTests := []struct {
body string
@@ -381,8 +432,6 @@ func TestTransportBody(t *testing.T) {
}{
{body: "some message"},
{body: "some message", noContentLen: true},
- {body: ""},
- {body: "", noContentLen: true},
{body: strings.Repeat("a", 1<<20), noContentLen: true},
{body: strings.Repeat("a", 1<<20)},
{body: randString(16<<10 - 1)},
@@ -1690,12 +1739,12 @@ func TestTransportRejectsConnHeaders(t *testing.T) {
{
key: "Upgrade",
value: []string{"anything"},
- want: "ERROR: http2: invalid Upgrade request header",
+ want: "ERROR: http2: invalid Upgrade request header: [\"anything\"]",
},
{
key: "Connection",
value: []string{"foo"},
- want: "ERROR: http2: invalid Connection request header",
+ want: "ERROR: http2: invalid Connection request header: [\"foo\"]",
},
{
key: "Connection",
@@ -1705,7 +1754,7 @@ func TestTransportRejectsConnHeaders(t *testing.T) {
{
key: "Connection",
value: []string{"close", "something-else"},
- want: "ERROR: http2: invalid Connection request header",
+ want: "ERROR: http2: invalid Connection request header: [\"close\" \"something-else\"]",
},
{
key: "Connection",
@@ -1725,7 +1774,7 @@ func TestTransportRejectsConnHeaders(t *testing.T) {
{
key: "Transfer-Encoding",
value: []string{"foo"},
- want: "ERROR: http2: invalid Transfer-Encoding request header",
+ want: "ERROR: http2: invalid Transfer-Encoding request header: [\"foo\"]",
},
{
key: "Transfer-Encoding",
@@ -1735,7 +1784,7 @@ func TestTransportRejectsConnHeaders(t *testing.T) {
{
key: "Transfer-Encoding",
value: []string{"chunked", "other"},
- want: "ERROR: http2: invalid Transfer-Encoding request header",
+ want: "ERROR: http2: invalid Transfer-Encoding request header: [\"chunked\" \"other\"]",
},
{
key: "Content-Length",
@@ -1898,8 +1947,17 @@ func TestTransportNewTLSConfig(t *testing.T) {
},
}
for i, tt := range tests {
+ // Ignore the session ticket keys part, which ends up populating
+ // unexported fields in the Config:
+ if tt.conf != nil {
+ tt.conf.SessionTicketsDisabled = true
+ }
+
tr := &Transport{TLSClientConfig: tt.conf}
got := tr.newTLSConfig(tt.host)
+
+ got.SessionTicketsDisabled = false
+
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("%d. got %#v; want %#v", i, got, tt.want)
}
@@ -2618,3 +2676,72 @@ func TestRoundTripDoesntConsumeRequestBodyEarly(t *testing.T) {
t.Errorf("Body = %q; want %q", slurp, body)
}
}
+
+func TestClientConnPing(t *testing.T) {
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {}, optOnlyServer)
+ defer st.Close()
+ tr := &Transport{TLSClientConfig: tlsConfigInsecure}
+ defer tr.CloseIdleConnections()
+ cc, err := tr.dialClientConn(st.ts.Listener.Addr().String(), false)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if err = cc.Ping(testContext{}); err != nil {
+ t.Fatal(err)
+ }
+}
+
+// Issue 16974: if the server sent a DATA frame after the user
+// canceled the Transport's Request, the Transport previously wrote to a
+// closed pipe, got an error, and ended up closing the whole TCP
+// connection.
+func TestTransportCancelDataResponseRace(t *testing.T) {
+ cancel := make(chan struct{})
+ clientGotError := make(chan bool, 1)
+
+ const msg = "Hello."
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ if strings.Contains(r.URL.Path, "/hello") {
+ time.Sleep(50 * time.Millisecond)
+ io.WriteString(w, msg)
+ return
+ }
+ for i := 0; i < 50; i++ {
+ io.WriteString(w, "Some data.")
+ w.(http.Flusher).Flush()
+ if i == 2 {
+ close(cancel)
+ <-clientGotError
+ }
+ time.Sleep(10 * time.Millisecond)
+ }
+ }, optOnlyServer)
+ defer st.Close()
+
+ tr := &Transport{TLSClientConfig: tlsConfigInsecure}
+ defer tr.CloseIdleConnections()
+
+ c := &http.Client{Transport: tr}
+ req, _ := http.NewRequest("GET", st.ts.URL, nil)
+ req.Cancel = cancel
+ res, err := c.Do(req)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if _, err = io.Copy(ioutil.Discard, res.Body); err == nil {
+ t.Fatal("unexpected success")
+ }
+ clientGotError <- true
+
+ res, err = c.Get(st.ts.URL + "/hello")
+ if err != nil {
+ t.Fatal(err)
+ }
+ slurp, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if string(slurp) != msg {
+ t.Errorf("Got = %q; want %q", slurp, msg)
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/write.go b/vendor/golang.org/x/net/http2/write.go
index 27ef0dd4d..1c135fdf7 100644
--- a/vendor/golang.org/x/net/http2/write.go
+++ b/vendor/golang.org/x/net/http2/write.go
@@ -9,6 +9,7 @@ import (
"fmt"
"log"
"net/http"
+ "net/url"
"time"
"golang.org/x/net/http2/hpack"
@@ -18,6 +19,11 @@ import (
// writeFramer is implemented by any type that is used to write frames.
type writeFramer interface {
writeFrame(writeContext) error
+
+ // staysWithinBuffer reports whether this writer promises that
+ // it will only write less than or equal to size bytes, and it
+ // won't Flush the write context.
+ staysWithinBuffer(size int) bool
}
// writeContext is the interface needed by the various frame writer
@@ -62,8 +68,16 @@ func (flushFrameWriter) writeFrame(ctx writeContext) error {
return ctx.Flush()
}
+func (flushFrameWriter) staysWithinBuffer(max int) bool { return false }
+
type writeSettings []Setting
+func (s writeSettings) staysWithinBuffer(max int) bool {
+ const settingSize = 6 // uint16 + uint32
+ return frameHeaderLen+settingSize*len(s) <= max
+
+}
+
func (s writeSettings) writeFrame(ctx writeContext) error {
return ctx.Framer().WriteSettings([]Setting(s)...)
}
@@ -83,6 +97,8 @@ func (p *writeGoAway) writeFrame(ctx writeContext) error {
return err
}
+func (*writeGoAway) staysWithinBuffer(max int) bool { return false } // flushes
+
type writeData struct {
streamID uint32
p []byte
@@ -97,6 +113,10 @@ func (w *writeData) writeFrame(ctx writeContext) error {
return ctx.Framer().WriteData(w.streamID, w.endStream, w.p)
}
+func (w *writeData) staysWithinBuffer(max int) bool {
+ return frameHeaderLen+len(w.p) <= max
+}
+
// handlerPanicRST is the message sent from handler goroutines when
// the handler panics.
type handlerPanicRST struct {
@@ -107,22 +127,57 @@ func (hp handlerPanicRST) writeFrame(ctx writeContext) error {
return ctx.Framer().WriteRSTStream(hp.StreamID, ErrCodeInternal)
}
+func (hp handlerPanicRST) staysWithinBuffer(max int) bool { return frameHeaderLen+4 <= max }
+
func (se StreamError) writeFrame(ctx writeContext) error {
return ctx.Framer().WriteRSTStream(se.StreamID, se.Code)
}
+func (se StreamError) staysWithinBuffer(max int) bool { return frameHeaderLen+4 <= max }
+
type writePingAck struct{ pf *PingFrame }
func (w writePingAck) writeFrame(ctx writeContext) error {
return ctx.Framer().WritePing(true, w.pf.Data)
}
+func (w writePingAck) staysWithinBuffer(max int) bool { return frameHeaderLen+len(w.pf.Data) <= max }
+
type writeSettingsAck struct{}
func (writeSettingsAck) writeFrame(ctx writeContext) error {
return ctx.Framer().WriteSettingsAck()
}
+func (writeSettingsAck) staysWithinBuffer(max int) bool { return frameHeaderLen <= max }
+
+// splitHeaderBlock splits headerBlock into fragments so that each fragment fits
+// in a single frame, then calls fn for each fragment. firstFrag/lastFrag are true
+// for the first/last fragment, respectively.
+func splitHeaderBlock(ctx writeContext, headerBlock []byte, fn func(ctx writeContext, frag []byte, firstFrag, lastFrag bool) error) error {
+ // For now we're lazy and just pick the minimum MAX_FRAME_SIZE
+ // that all peers must support (16KB). Later we could care
+ // more and send larger frames if the peer advertised it, but
+ // there's little point. Most headers are small anyway (so we
+ // generally won't have CONTINUATION frames), and extra frames
+ // only waste 9 bytes anyway.
+ const maxFrameSize = 16384
+
+ first := true
+ for len(headerBlock) > 0 {
+ frag := headerBlock
+ if len(frag) > maxFrameSize {
+ frag = frag[:maxFrameSize]
+ }
+ headerBlock = headerBlock[len(frag):]
+ if err := fn(ctx, frag, first, len(headerBlock) == 0); err != nil {
+ return err
+ }
+ first = false
+ }
+ return nil
+}
+
// writeResHeaders is a request to write a HEADERS and 0+ CONTINUATION frames
// for HTTP response headers or trailers from a server handler.
type writeResHeaders struct {
@@ -144,6 +199,17 @@ func encKV(enc *hpack.Encoder, k, v string) {
enc.WriteField(hpack.HeaderField{Name: k, Value: v})
}
+func (w *writeResHeaders) staysWithinBuffer(max int) bool {
+ // TODO: this is a common one. It'd be nice to return true
+ // here and get into the fast path if we could be clever and
+ // calculate the size fast enough, or at least a conservative
+ // uppper bound that usually fires. (Maybe if w.h and
+ // w.trailers are nil, so we don't need to enumerate it.)
+ // Otherwise I'm afraid that just calculating the length to
+ // answer this question would be slower than the ~2µs benefit.
+ return false
+}
+
func (w *writeResHeaders) writeFrame(ctx writeContext) error {
enc, buf := ctx.HeaderEncoder()
buf.Reset()
@@ -169,39 +235,69 @@ func (w *writeResHeaders) writeFrame(ctx writeContext) error {
panic("unexpected empty hpack")
}
- // For now we're lazy and just pick the minimum MAX_FRAME_SIZE
- // that all peers must support (16KB). Later we could care
- // more and send larger frames if the peer advertised it, but
- // there's little point. Most headers are small anyway (so we
- // generally won't have CONTINUATION frames), and extra frames
- // only waste 9 bytes anyway.
- const maxFrameSize = 16384
+ return splitHeaderBlock(ctx, headerBlock, w.writeHeaderBlock)
+}
- first := true
- for len(headerBlock) > 0 {
- frag := headerBlock
- if len(frag) > maxFrameSize {
- frag = frag[:maxFrameSize]
- }
- headerBlock = headerBlock[len(frag):]
- endHeaders := len(headerBlock) == 0
- var err error
- if first {
- first = false
- err = ctx.Framer().WriteHeaders(HeadersFrameParam{
- StreamID: w.streamID,
- BlockFragment: frag,
- EndStream: w.endStream,
- EndHeaders: endHeaders,
- })
- } else {
- err = ctx.Framer().WriteContinuation(w.streamID, endHeaders, frag)
- }
- if err != nil {
- return err
- }
+func (w *writeResHeaders) writeHeaderBlock(ctx writeContext, frag []byte, firstFrag, lastFrag bool) error {
+ if firstFrag {
+ return ctx.Framer().WriteHeaders(HeadersFrameParam{
+ StreamID: w.streamID,
+ BlockFragment: frag,
+ EndStream: w.endStream,
+ EndHeaders: lastFrag,
+ })
+ } else {
+ return ctx.Framer().WriteContinuation(w.streamID, lastFrag, frag)
+ }
+}
+
+// writePushPromise is a request to write a PUSH_PROMISE and 0+ CONTINUATION frames.
+type writePushPromise struct {
+ streamID uint32 // pusher stream
+ method string // for :method
+ url *url.URL // for :scheme, :authority, :path
+ h http.Header
+
+ // Creates an ID for a pushed stream. This runs on serveG just before
+ // the frame is written. The returned ID is copied to promisedID.
+ allocatePromisedID func() (uint32, error)
+ promisedID uint32
+}
+
+func (w *writePushPromise) staysWithinBuffer(max int) bool {
+ // TODO: see writeResHeaders.staysWithinBuffer
+ return false
+}
+
+func (w *writePushPromise) writeFrame(ctx writeContext) error {
+ enc, buf := ctx.HeaderEncoder()
+ buf.Reset()
+
+ encKV(enc, ":method", w.method)
+ encKV(enc, ":scheme", w.url.Scheme)
+ encKV(enc, ":authority", w.url.Host)
+ encKV(enc, ":path", w.url.RequestURI())
+ encodeHeaders(enc, w.h, nil)
+
+ headerBlock := buf.Bytes()
+ if len(headerBlock) == 0 {
+ panic("unexpected empty hpack")
+ }
+
+ return splitHeaderBlock(ctx, headerBlock, w.writeHeaderBlock)
+}
+
+func (w *writePushPromise) writeHeaderBlock(ctx writeContext, frag []byte, firstFrag, lastFrag bool) error {
+ if firstFrag {
+ return ctx.Framer().WritePushPromise(PushPromiseParam{
+ StreamID: w.streamID,
+ PromiseID: w.promisedID,
+ BlockFragment: frag,
+ EndHeaders: lastFrag,
+ })
+ } else {
+ return ctx.Framer().WriteContinuation(w.streamID, lastFrag, frag)
}
- return nil
}
type write100ContinueHeadersFrame struct {
@@ -220,15 +316,24 @@ func (w write100ContinueHeadersFrame) writeFrame(ctx writeContext) error {
})
}
+func (w write100ContinueHeadersFrame) staysWithinBuffer(max int) bool {
+ // Sloppy but conservative:
+ return 9+2*(len(":status")+len("100")) <= max
+}
+
type writeWindowUpdate struct {
streamID uint32 // or 0 for conn-level
n uint32
}
+func (wu writeWindowUpdate) staysWithinBuffer(max int) bool { return frameHeaderLen+4 <= max }
+
func (wu writeWindowUpdate) writeFrame(ctx writeContext) error {
return ctx.Framer().WriteWindowUpdate(wu.streamID, wu.n)
}
+// encodeHeaders encodes an http.Header. If keys is not nil, then (k, h[k])
+// is encoded only only if k is in keys.
func encodeHeaders(enc *hpack.Encoder, h http.Header, keys []string) {
if keys == nil {
sorter := sorterPool.Get().(*sorter)
diff --git a/vendor/golang.org/x/net/http2/writesched.go b/vendor/golang.org/x/net/http2/writesched.go
index c24316ce7..caa77c7cb 100644
--- a/vendor/golang.org/x/net/http2/writesched.go
+++ b/vendor/golang.org/x/net/http2/writesched.go
@@ -6,14 +6,53 @@ package http2
import "fmt"
-// frameWriteMsg is a request to write a frame.
-type frameWriteMsg struct {
+// WriteScheduler is the interface implemented by HTTP/2 write schedulers.
+// Methods are never called concurrently.
+type WriteScheduler interface {
+ // OpenStream opens a new stream in the write scheduler.
+ // It is illegal to call this with streamID=0 or with a streamID that is
+ // already open -- the call may panic.
+ OpenStream(streamID uint32, options OpenStreamOptions)
+
+ // CloseStream closes a stream in the write scheduler. Any frames queued on
+ // this stream should be discarded. It is illegal to call this on a stream
+ // that is not open -- the call may panic.
+ CloseStream(streamID uint32)
+
+ // AdjustStream adjusts the priority of the given stream. This may be called
+ // on a stream that has not yet been opened or has been closed. Note that
+ // RFC 7540 allows PRIORITY frames to be sent on streams in any state. See:
+ // https://tools.ietf.org/html/rfc7540#section-5.1
+ AdjustStream(streamID uint32, priority PriorityParam)
+
+ // Push queues a frame in the scheduler. In most cases, this will not be
+ // called with wr.StreamID()!=0 unless that stream is currently open. The one
+ // exception is RST_STREAM frames, which may be sent on idle or closed streams.
+ Push(wr FrameWriteRequest)
+
+ // Pop dequeues the next frame to write. Returns false if no frames can
+ // be written. Frames with a given wr.StreamID() are Pop'd in the same
+ // order they are Push'd.
+ Pop() (wr FrameWriteRequest, ok bool)
+}
+
+// OpenStreamOptions specifies extra options for WriteScheduler.OpenStream.
+type OpenStreamOptions struct {
+ // PusherID is zero if the stream was initiated by the client. Otherwise,
+ // PusherID names the stream that pushed the newly opened stream.
+ PusherID uint32
+}
+
+// FrameWriteRequest is a request to write a frame.
+type FrameWriteRequest struct {
// write is the interface value that does the writing, once the
- // writeScheduler (below) has decided to select this frame
- // to write. The write functions are all defined in write.go.
+ // WriteScheduler has selected this frame to write. The write
+ // functions are all defined in write.go.
write writeFramer
- stream *stream // used for prioritization. nil for non-stream frames.
+ // stream is the stream on which this frame will be written.
+ // nil for non-stream frames like PING and SETTINGS.
+ stream *stream
// done, if non-nil, must be a buffered channel with space for
// 1 message and is sent the return value from write (or an
@@ -21,263 +60,169 @@ type frameWriteMsg struct {
done chan error
}
-// for debugging only:
-func (wm frameWriteMsg) String() string {
- var streamID uint32
- if wm.stream != nil {
- streamID = wm.stream.id
- }
- var des string
- if s, ok := wm.write.(fmt.Stringer); ok {
- des = s.String()
- } else {
- des = fmt.Sprintf("%T", wm.write)
- }
- return fmt.Sprintf("[frameWriteMsg stream=%d, ch=%v, type: %v]", streamID, wm.done != nil, des)
-}
-
-// writeScheduler tracks pending frames to write, priorities, and decides
-// the next one to use. It is not thread-safe.
-type writeScheduler struct {
- // zero are frames not associated with a specific stream.
- // They're sent before any stream-specific freams.
- zero writeQueue
-
- // maxFrameSize is the maximum size of a DATA frame
- // we'll write. Must be non-zero and between 16K-16M.
- maxFrameSize uint32
-
- // sq contains the stream-specific queues, keyed by stream ID.
- // when a stream is idle, it's deleted from the map.
- sq map[uint32]*writeQueue
-
- // canSend is a slice of memory that's reused between frame
- // scheduling decisions to hold the list of writeQueues (from sq)
- // which have enough flow control data to send. After canSend is
- // built, the best is selected.
- canSend []*writeQueue
-
- // pool of empty queues for reuse.
- queuePool []*writeQueue
-}
-
-func (ws *writeScheduler) putEmptyQueue(q *writeQueue) {
- if len(q.s) != 0 {
- panic("queue must be empty")
- }
- ws.queuePool = append(ws.queuePool, q)
-}
-
-func (ws *writeScheduler) getEmptyQueue() *writeQueue {
- ln := len(ws.queuePool)
- if ln == 0 {
- return new(writeQueue)
- }
- q := ws.queuePool[ln-1]
- ws.queuePool = ws.queuePool[:ln-1]
- return q
-}
-
-func (ws *writeScheduler) empty() bool { return ws.zero.empty() && len(ws.sq) == 0 }
-
-func (ws *writeScheduler) add(wm frameWriteMsg) {
- st := wm.stream
- if st == nil {
- ws.zero.push(wm)
- } else {
- ws.streamQueue(st.id).push(wm)
- }
-}
-
-func (ws *writeScheduler) streamQueue(streamID uint32) *writeQueue {
- if q, ok := ws.sq[streamID]; ok {
- return q
- }
- if ws.sq == nil {
- ws.sq = make(map[uint32]*writeQueue)
- }
- q := ws.getEmptyQueue()
- ws.sq[streamID] = q
- return q
-}
-
-// take returns the most important frame to write and removes it from the scheduler.
-// It is illegal to call this if the scheduler is empty or if there are no connection-level
-// flow control bytes available.
-func (ws *writeScheduler) take() (wm frameWriteMsg, ok bool) {
- if ws.maxFrameSize == 0 {
- panic("internal error: ws.maxFrameSize not initialized or invalid")
- }
-
- // If there any frames not associated with streams, prefer those first.
- // These are usually SETTINGS, etc.
- if !ws.zero.empty() {
- return ws.zero.shift(), true
- }
- if len(ws.sq) == 0 {
- return
- }
-
- // Next, prioritize frames on streams that aren't DATA frames (no cost).
- for id, q := range ws.sq {
- if q.firstIsNoCost() {
- return ws.takeFrom(id, q)
+// StreamID returns the id of the stream this frame will be written to.
+// 0 is used for non-stream frames such as PING and SETTINGS.
+func (wr FrameWriteRequest) StreamID() uint32 {
+ if wr.stream == nil {
+ if se, ok := wr.write.(StreamError); ok {
+ // (*serverConn).resetStream doesn't set
+ // stream because it doesn't necessarily have
+ // one. So special case this type of write
+ // message.
+ return se.StreamID
}
- }
-
- // Now, all that remains are DATA frames with non-zero bytes to
- // send. So pick the best one.
- if len(ws.canSend) != 0 {
- panic("should be empty")
- }
- for _, q := range ws.sq {
- if n := ws.streamWritableBytes(q); n > 0 {
- ws.canSend = append(ws.canSend, q)
- }
- }
- if len(ws.canSend) == 0 {
- return
- }
- defer ws.zeroCanSend()
-
- // TODO: find the best queue
- q := ws.canSend[0]
-
- return ws.takeFrom(q.streamID(), q)
-}
-
-// zeroCanSend is defered from take.
-func (ws *writeScheduler) zeroCanSend() {
- for i := range ws.canSend {
- ws.canSend[i] = nil
- }
- ws.canSend = ws.canSend[:0]
-}
-
-// streamWritableBytes returns the number of DATA bytes we could write
-// from the given queue's stream, if this stream/queue were
-// selected. It is an error to call this if q's head isn't a
-// *writeData.
-func (ws *writeScheduler) streamWritableBytes(q *writeQueue) int32 {
- wm := q.head()
- ret := wm.stream.flow.available() // max we can write
- if ret == 0 {
return 0
}
- if int32(ws.maxFrameSize) < ret {
- ret = int32(ws.maxFrameSize)
- }
- if ret == 0 {
- panic("internal error: ws.maxFrameSize not initialized or invalid")
- }
- wd := wm.write.(*writeData)
- if len(wd.p) < int(ret) {
- ret = int32(len(wd.p))
- }
- return ret
-}
-
-func (ws *writeScheduler) takeFrom(id uint32, q *writeQueue) (wm frameWriteMsg, ok bool) {
- wm = q.head()
- // If the first item in this queue costs flow control tokens
- // and we don't have enough, write as much as we can.
- if wd, ok := wm.write.(*writeData); ok && len(wd.p) > 0 {
- allowed := wm.stream.flow.available() // max we can write
- if allowed == 0 {
- // No quota available. Caller can try the next stream.
- return frameWriteMsg{}, false
+ return wr.stream.id
+}
+
+// DataSize returns the number of flow control bytes that must be consumed
+// to write this entire frame. This is 0 for non-DATA frames.
+func (wr FrameWriteRequest) DataSize() int {
+ if wd, ok := wr.write.(*writeData); ok {
+ return len(wd.p)
+ }
+ return 0
+}
+
+// Consume consumes min(n, available) bytes from this frame, where available
+// is the number of flow control bytes available on the stream. Consume returns
+// 0, 1, or 2 frames, where the integer return value gives the number of frames
+// returned.
+//
+// If flow control prevents consuming any bytes, this returns (_, _, 0). If
+// the entire frame was consumed, this returns (wr, _, 1). Otherwise, this
+// returns (consumed, rest, 2), where 'consumed' contains the consumed bytes and
+// 'rest' contains the remaining bytes. The consumed bytes are deducted from the
+// underlying stream's flow control budget.
+func (wr FrameWriteRequest) Consume(n int32) (FrameWriteRequest, FrameWriteRequest, int) {
+ var empty FrameWriteRequest
+
+ // Non-DATA frames are always consumed whole.
+ wd, ok := wr.write.(*writeData)
+ if !ok || len(wd.p) == 0 {
+ return wr, empty, 1
+ }
+
+ // Might need to split after applying limits.
+ allowed := wr.stream.flow.available()
+ if n < allowed {
+ allowed = n
+ }
+ if wr.stream.sc.maxFrameSize < allowed {
+ allowed = wr.stream.sc.maxFrameSize
+ }
+ if allowed <= 0 {
+ return empty, empty, 0
+ }
+ if len(wd.p) > int(allowed) {
+ wr.stream.flow.take(allowed)
+ consumed := FrameWriteRequest{
+ stream: wr.stream,
+ write: &writeData{
+ streamID: wd.streamID,
+ p: wd.p[:allowed],
+ // Even if the original had endStream set, there
+ // are bytes remaining because len(wd.p) > allowed,
+ // so we know endStream is false.
+ endStream: false,
+ },
+ // Our caller is blocking on the final DATA frame, not
+ // this intermediate frame, so no need to wait.
+ done: nil,
}
- if int32(ws.maxFrameSize) < allowed {
- allowed = int32(ws.maxFrameSize)
+ rest := FrameWriteRequest{
+ stream: wr.stream,
+ write: &writeData{
+ streamID: wd.streamID,
+ p: wd.p[allowed:],
+ endStream: wd.endStream,
+ },
+ done: wr.done,
}
- // TODO: further restrict the allowed size, because even if
- // the peer says it's okay to write 16MB data frames, we might
- // want to write smaller ones to properly weight competing
- // streams' priorities.
-
- if len(wd.p) > int(allowed) {
- wm.stream.flow.take(allowed)
- chunk := wd.p[:allowed]
- wd.p = wd.p[allowed:]
- // Make up a new write message of a valid size, rather
- // than shifting one off the queue.
- return frameWriteMsg{
- stream: wm.stream,
- write: &writeData{
- streamID: wd.streamID,
- p: chunk,
- // even if the original had endStream set, there
- // arebytes remaining because len(wd.p) > allowed,
- // so we know endStream is false:
- endStream: false,
- },
- // our caller is blocking on the final DATA frame, not
- // these intermediates, so no need to wait:
- done: nil,
- }, true
- }
- wm.stream.flow.take(int32(len(wd.p)))
+ return consumed, rest, 2
}
- q.shift()
- if q.empty() {
- ws.putEmptyQueue(q)
- delete(ws.sq, id)
- }
- return wm, true
+ // The frame is consumed whole.
+ // NB: This cast cannot overflow because allowed is <= math.MaxInt32.
+ wr.stream.flow.take(int32(len(wd.p)))
+ return wr, empty, 1
}
-func (ws *writeScheduler) forgetStream(id uint32) {
- q, ok := ws.sq[id]
- if !ok {
- return
- }
- delete(ws.sq, id)
-
- // But keep it for others later.
- for i := range q.s {
- q.s[i] = frameWriteMsg{}
+// String is for debugging only.
+func (wr FrameWriteRequest) String() string {
+ var des string
+ if s, ok := wr.write.(fmt.Stringer); ok {
+ des = s.String()
+ } else {
+ des = fmt.Sprintf("%T", wr.write)
}
- q.s = q.s[:0]
- ws.putEmptyQueue(q)
+ return fmt.Sprintf("[FrameWriteRequest stream=%d, ch=%v, writer=%v]", wr.StreamID(), wr.done != nil, des)
}
+// writeQueue is used by implementations of WriteScheduler.
type writeQueue struct {
- s []frameWriteMsg
+ s []FrameWriteRequest
}
-// streamID returns the stream ID for a non-empty stream-specific queue.
-func (q *writeQueue) streamID() uint32 { return q.s[0].stream.id }
-
func (q *writeQueue) empty() bool { return len(q.s) == 0 }
-func (q *writeQueue) push(wm frameWriteMsg) {
- q.s = append(q.s, wm)
+func (q *writeQueue) push(wr FrameWriteRequest) {
+ q.s = append(q.s, wr)
}
-// head returns the next item that would be removed by shift.
-func (q *writeQueue) head() frameWriteMsg {
+func (q *writeQueue) shift() FrameWriteRequest {
if len(q.s) == 0 {
panic("invalid use of queue")
}
- return q.s[0]
+ wr := q.s[0]
+ // TODO: less copy-happy queue.
+ copy(q.s, q.s[1:])
+ q.s[len(q.s)-1] = FrameWriteRequest{}
+ q.s = q.s[:len(q.s)-1]
+ return wr
}
-func (q *writeQueue) shift() frameWriteMsg {
+// consume consumes up to n bytes from q.s[0]. If the frame is
+// entirely consumed, it is removed from the queue. If the frame
+// is partially consumed, the frame is kept with the consumed
+// bytes removed. Returns true iff any bytes were consumed.
+func (q *writeQueue) consume(n int32) (FrameWriteRequest, bool) {
if len(q.s) == 0 {
- panic("invalid use of queue")
+ return FrameWriteRequest{}, false
}
- wm := q.s[0]
- // TODO: less copy-happy queue.
- copy(q.s, q.s[1:])
- q.s[len(q.s)-1] = frameWriteMsg{}
- q.s = q.s[:len(q.s)-1]
- return wm
+ consumed, rest, numresult := q.s[0].Consume(n)
+ switch numresult {
+ case 0:
+ return FrameWriteRequest{}, false
+ case 1:
+ q.shift()
+ case 2:
+ q.s[0] = rest
+ }
+ return consumed, true
+}
+
+type writeQueuePool []*writeQueue
+
+// put inserts an unused writeQueue into the pool.
+func (p *writeQueuePool) put(q *writeQueue) {
+ for i := range q.s {
+ q.s[i] = FrameWriteRequest{}
+ }
+ q.s = q.s[:0]
+ *p = append(*p, q)
}
-func (q *writeQueue) firstIsNoCost() bool {
- if df, ok := q.s[0].write.(*writeData); ok {
- return len(df.p) == 0
+// get returns an empty writeQueue.
+func (p *writeQueuePool) get() *writeQueue {
+ ln := len(*p)
+ if ln == 0 {
+ return new(writeQueue)
}
- return true
+ x := ln - 1
+ q := (*p)[x]
+ (*p)[x] = nil
+ *p = (*p)[:x]
+ return q
}
diff --git a/vendor/golang.org/x/net/http2/writesched_priority.go b/vendor/golang.org/x/net/http2/writesched_priority.go
new file mode 100644
index 000000000..01132721b
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/writesched_priority.go
@@ -0,0 +1,452 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import (
+ "fmt"
+ "math"
+ "sort"
+)
+
+// RFC 7540, Section 5.3.5: the default weight is 16.
+const priorityDefaultWeight = 15 // 16 = 15 + 1
+
+// PriorityWriteSchedulerConfig configures a priorityWriteScheduler.
+type PriorityWriteSchedulerConfig struct {
+ // MaxClosedNodesInTree controls the maximum number of closed streams to
+ // retain in the priority tree. Setting this to zero saves a small amount
+ // of memory at the cost of performance.
+ //
+ // See RFC 7540, Section 5.3.4:
+ // "It is possible for a stream to become closed while prioritization
+ // information ... is in transit. ... This potentially creates suboptimal
+ // prioritization, since the stream could be given a priority that is
+ // different from what is intended. To avoid these problems, an endpoint
+ // SHOULD retain stream prioritization state for a period after streams
+ // become closed. The longer state is retained, the lower the chance that
+ // streams are assigned incorrect or default priority values."
+ MaxClosedNodesInTree int
+
+ // MaxIdleNodesInTree controls the maximum number of idle streams to
+ // retain in the priority tree. Setting this to zero saves a small amount
+ // of memory at the cost of performance.
+ //
+ // See RFC 7540, Section 5.3.4:
+ // Similarly, streams that are in the "idle" state can be assigned
+ // priority or become a parent of other streams. This allows for the
+ // creation of a grouping node in the dependency tree, which enables
+ // more flexible expressions of priority. Idle streams begin with a
+ // default priority (Section 5.3.5).
+ MaxIdleNodesInTree int
+
+ // ThrottleOutOfOrderWrites enables write throttling to help ensure that
+ // data is delivered in priority order. This works around a race where
+ // stream B depends on stream A and both streams are about to call Write
+ // to queue DATA frames. If B wins the race, a naive scheduler would eagerly
+ // write as much data from B as possible, but this is suboptimal because A
+ // is a higher-priority stream. With throttling enabled, we write a small
+ // amount of data from B to minimize the amount of bandwidth that B can
+ // steal from A.
+ ThrottleOutOfOrderWrites bool
+}
+
+// NewPriorityWriteScheduler constructs a WriteScheduler that schedules
+// frames by following HTTP/2 priorities as described in RFC 7340 Section 5.3.
+// If cfg is nil, default options are used.
+func NewPriorityWriteScheduler(cfg *PriorityWriteSchedulerConfig) WriteScheduler {
+ if cfg == nil {
+ // For justification of these defaults, see:
+ // https://docs.google.com/document/d/1oLhNg1skaWD4_DtaoCxdSRN5erEXrH-KnLrMwEpOtFY
+ cfg = &PriorityWriteSchedulerConfig{
+ MaxClosedNodesInTree: 10,
+ MaxIdleNodesInTree: 10,
+ ThrottleOutOfOrderWrites: false,
+ }
+ }
+
+ ws := &priorityWriteScheduler{
+ nodes: make(map[uint32]*priorityNode),
+ maxClosedNodesInTree: cfg.MaxClosedNodesInTree,
+ maxIdleNodesInTree: cfg.MaxIdleNodesInTree,
+ enableWriteThrottle: cfg.ThrottleOutOfOrderWrites,
+ }
+ ws.nodes[0] = &ws.root
+ if cfg.ThrottleOutOfOrderWrites {
+ ws.writeThrottleLimit = 1024
+ } else {
+ ws.writeThrottleLimit = math.MaxInt32
+ }
+ return ws
+}
+
+type priorityNodeState int
+
+const (
+ priorityNodeOpen priorityNodeState = iota
+ priorityNodeClosed
+ priorityNodeIdle
+)
+
+// priorityNode is a node in an HTTP/2 priority tree.
+// Each node is associated with a single stream ID.
+// See RFC 7540, Section 5.3.
+type priorityNode struct {
+ q writeQueue // queue of pending frames to write
+ id uint32 // id of the stream, or 0 for the root of the tree
+ weight uint8 // the actual weight is weight+1, so the value is in [1,256]
+ state priorityNodeState // open | closed | idle
+ bytes int64 // number of bytes written by this node, or 0 if closed
+ subtreeBytes int64 // sum(node.bytes) of all nodes in this subtree
+
+ // These links form the priority tree.
+ parent *priorityNode
+ kids *priorityNode // start of the kids list
+ prev, next *priorityNode // doubly-linked list of siblings
+}
+
+func (n *priorityNode) setParent(parent *priorityNode) {
+ if n == parent {
+ panic("setParent to self")
+ }
+ if n.parent == parent {
+ return
+ }
+ // Unlink from current parent.
+ if parent := n.parent; parent != nil {
+ if n.prev == nil {
+ parent.kids = n.next
+ } else {
+ n.prev.next = n.next
+ }
+ if n.next != nil {
+ n.next.prev = n.prev
+ }
+ }
+ // Link to new parent.
+ // If parent=nil, remove n from the tree.
+ // Always insert at the head of parent.kids (this is assumed by walkReadyInOrder).
+ n.parent = parent
+ if parent == nil {
+ n.next = nil
+ n.prev = nil
+ } else {
+ n.next = parent.kids
+ n.prev = nil
+ if n.next != nil {
+ n.next.prev = n
+ }
+ parent.kids = n
+ }
+}
+
+func (n *priorityNode) addBytes(b int64) {
+ n.bytes += b
+ for ; n != nil; n = n.parent {
+ n.subtreeBytes += b
+ }
+}
+
+// walkReadyInOrder iterates over the tree in priority order, calling f for each node
+// with a non-empty write queue. When f returns true, this funcion returns true and the
+// walk halts. tmp is used as scratch space for sorting.
+//
+// f(n, openParent) takes two arguments: the node to visit, n, and a bool that is true
+// if any ancestor p of n is still open (ignoring the root node).
+func (n *priorityNode) walkReadyInOrder(openParent bool, tmp *[]*priorityNode, f func(*priorityNode, bool) bool) bool {
+ if !n.q.empty() && f(n, openParent) {
+ return true
+ }
+ if n.kids == nil {
+ return false
+ }
+
+ // Don't consider the root "open" when updating openParent since
+ // we can't send data frames on the root stream (only control frames).
+ if n.id != 0 {
+ openParent = openParent || (n.state == priorityNodeOpen)
+ }
+
+ // Common case: only one kid or all kids have the same weight.
+ // Some clients don't use weights; other clients (like web browsers)
+ // use mostly-linear priority trees.
+ w := n.kids.weight
+ needSort := false
+ for k := n.kids.next; k != nil; k = k.next {
+ if k.weight != w {
+ needSort = true
+ break
+ }
+ }
+ if !needSort {
+ for k := n.kids; k != nil; k = k.next {
+ if k.walkReadyInOrder(openParent, tmp, f) {
+ return true
+ }
+ }
+ return false
+ }
+
+ // Uncommon case: sort the child nodes. We remove the kids from the parent,
+ // then re-insert after sorting so we can reuse tmp for future sort calls.
+ *tmp = (*tmp)[:0]
+ for n.kids != nil {
+ *tmp = append(*tmp, n.kids)
+ n.kids.setParent(nil)
+ }
+ sort.Sort(sortPriorityNodeSiblings(*tmp))
+ for i := len(*tmp) - 1; i >= 0; i-- {
+ (*tmp)[i].setParent(n) // setParent inserts at the head of n.kids
+ }
+ for k := n.kids; k != nil; k = k.next {
+ if k.walkReadyInOrder(openParent, tmp, f) {
+ return true
+ }
+ }
+ return false
+}
+
+type sortPriorityNodeSiblings []*priorityNode
+
+func (z sortPriorityNodeSiblings) Len() int { return len(z) }
+func (z sortPriorityNodeSiblings) Swap(i, k int) { z[i], z[k] = z[k], z[i] }
+func (z sortPriorityNodeSiblings) Less(i, k int) bool {
+ // Prefer the subtree that has sent fewer bytes relative to its weight.
+ // See sections 5.3.2 and 5.3.4.
+ wi, bi := float64(z[i].weight+1), float64(z[i].subtreeBytes)
+ wk, bk := float64(z[k].weight+1), float64(z[k].subtreeBytes)
+ if bi == 0 && bk == 0 {
+ return wi >= wk
+ }
+ if bk == 0 {
+ return false
+ }
+ return bi/bk <= wi/wk
+}
+
+type priorityWriteScheduler struct {
+ // root is the root of the priority tree, where root.id = 0.
+ // The root queues control frames that are not associated with any stream.
+ root priorityNode
+
+ // nodes maps stream ids to priority tree nodes.
+ nodes map[uint32]*priorityNode
+
+ // maxID is the maximum stream id in nodes.
+ maxID uint32
+
+ // lists of nodes that have been closed or are idle, but are kept in
+ // the tree for improved prioritization. When the lengths exceed either
+ // maxClosedNodesInTree or maxIdleNodesInTree, old nodes are discarded.
+ closedNodes, idleNodes []*priorityNode
+
+ // From the config.
+ maxClosedNodesInTree int
+ maxIdleNodesInTree int
+ writeThrottleLimit int32
+ enableWriteThrottle bool
+
+ // tmp is scratch space for priorityNode.walkReadyInOrder to reduce allocations.
+ tmp []*priorityNode
+
+ // pool of empty queues for reuse.
+ queuePool writeQueuePool
+}
+
+func (ws *priorityWriteScheduler) OpenStream(streamID uint32, options OpenStreamOptions) {
+ // The stream may be currently idle but cannot be opened or closed.
+ if curr := ws.nodes[streamID]; curr != nil {
+ if curr.state != priorityNodeIdle {
+ panic(fmt.Sprintf("stream %d already opened", streamID))
+ }
+ curr.state = priorityNodeOpen
+ return
+ }
+
+ // RFC 7540, Section 5.3.5:
+ // "All streams are initially assigned a non-exclusive dependency on stream 0x0.
+ // Pushed streams initially depend on their associated stream. In both cases,
+ // streams are assigned a default weight of 16."
+ parent := ws.nodes[options.PusherID]
+ if parent == nil {
+ parent = &ws.root
+ }
+ n := &priorityNode{
+ q: *ws.queuePool.get(),
+ id: streamID,
+ weight: priorityDefaultWeight,
+ state: priorityNodeOpen,
+ }
+ n.setParent(parent)
+ ws.nodes[streamID] = n
+ if streamID > ws.maxID {
+ ws.maxID = streamID
+ }
+}
+
+func (ws *priorityWriteScheduler) CloseStream(streamID uint32) {
+ if streamID == 0 {
+ panic("violation of WriteScheduler interface: cannot close stream 0")
+ }
+ if ws.nodes[streamID] == nil {
+ panic(fmt.Sprintf("violation of WriteScheduler interface: unknown stream %d", streamID))
+ }
+ if ws.nodes[streamID].state != priorityNodeOpen {
+ panic(fmt.Sprintf("violation of WriteScheduler interface: stream %d already closed", streamID))
+ }
+
+ n := ws.nodes[streamID]
+ n.state = priorityNodeClosed
+ n.addBytes(-n.bytes)
+
+ q := n.q
+ ws.queuePool.put(&q)
+ n.q.s = nil
+ if ws.maxClosedNodesInTree > 0 {
+ ws.addClosedOrIdleNode(&ws.closedNodes, ws.maxClosedNodesInTree, n)
+ } else {
+ ws.removeNode(n)
+ }
+}
+
+func (ws *priorityWriteScheduler) AdjustStream(streamID uint32, priority PriorityParam) {
+ if streamID == 0 {
+ panic("adjustPriority on root")
+ }
+
+ // If streamID does not exist, there are two cases:
+ // - A closed stream that has been removed (this will have ID <= maxID)
+ // - An idle stream that is being used for "grouping" (this will have ID > maxID)
+ n := ws.nodes[streamID]
+ if n == nil {
+ if streamID <= ws.maxID || ws.maxIdleNodesInTree == 0 {
+ return
+ }
+ ws.maxID = streamID
+ n = &priorityNode{
+ q: *ws.queuePool.get(),
+ id: streamID,
+ weight: priorityDefaultWeight,
+ state: priorityNodeIdle,
+ }
+ n.setParent(&ws.root)
+ ws.nodes[streamID] = n
+ ws.addClosedOrIdleNode(&ws.idleNodes, ws.maxIdleNodesInTree, n)
+ }
+
+ // Section 5.3.1: A dependency on a stream that is not currently in the tree
+ // results in that stream being given a default priority (Section 5.3.5).
+ parent := ws.nodes[priority.StreamDep]
+ if parent == nil {
+ n.setParent(&ws.root)
+ n.weight = priorityDefaultWeight
+ return
+ }
+
+ // Ignore if the client tries to make a node its own parent.
+ if n == parent {
+ return
+ }
+
+ // Section 5.3.3:
+ // "If a stream is made dependent on one of its own dependencies, the
+ // formerly dependent stream is first moved to be dependent on the
+ // reprioritized stream's previous parent. The moved dependency retains
+ // its weight."
+ //
+ // That is: if parent depends on n, move parent to depend on n.parent.
+ for x := parent.parent; x != nil; x = x.parent {
+ if x == n {
+ parent.setParent(n.parent)
+ break
+ }
+ }
+
+ // Section 5.3.3: The exclusive flag causes the stream to become the sole
+ // dependency of its parent stream, causing other dependencies to become
+ // dependent on the exclusive stream.
+ if priority.Exclusive {
+ k := parent.kids
+ for k != nil {
+ next := k.next
+ if k != n {
+ k.setParent(n)
+ }
+ k = next
+ }
+ }
+
+ n.setParent(parent)
+ n.weight = priority.Weight
+}
+
+func (ws *priorityWriteScheduler) Push(wr FrameWriteRequest) {
+ var n *priorityNode
+ if id := wr.StreamID(); id == 0 {
+ n = &ws.root
+ } else {
+ n = ws.nodes[id]
+ if n == nil {
+ // id is an idle or closed stream. wr should not be a HEADERS or
+ // DATA frame. However, wr can be a RST_STREAM. In this case, we
+ // push wr onto the root, rather than creating a new priorityNode,
+ // since RST_STREAM is tiny and the stream's priority is unknown
+ // anyway. See issue #17919.
+ if wr.DataSize() > 0 {
+ panic("add DATA on non-open stream")
+ }
+ n = &ws.root
+ }
+ }
+ n.q.push(wr)
+}
+
+func (ws *priorityWriteScheduler) Pop() (wr FrameWriteRequest, ok bool) {
+ ws.root.walkReadyInOrder(false, &ws.tmp, func(n *priorityNode, openParent bool) bool {
+ limit := int32(math.MaxInt32)
+ if openParent {
+ limit = ws.writeThrottleLimit
+ }
+ wr, ok = n.q.consume(limit)
+ if !ok {
+ return false
+ }
+ n.addBytes(int64(wr.DataSize()))
+ // If B depends on A and B continuously has data available but A
+ // does not, gradually increase the throttling limit to allow B to
+ // steal more and more bandwidth from A.
+ if openParent {
+ ws.writeThrottleLimit += 1024
+ if ws.writeThrottleLimit < 0 {
+ ws.writeThrottleLimit = math.MaxInt32
+ }
+ } else if ws.enableWriteThrottle {
+ ws.writeThrottleLimit = 1024
+ }
+ return true
+ })
+ return wr, ok
+}
+
+func (ws *priorityWriteScheduler) addClosedOrIdleNode(list *[]*priorityNode, maxSize int, n *priorityNode) {
+ if maxSize == 0 {
+ return
+ }
+ if len(*list) == maxSize {
+ // Remove the oldest node, then shift left.
+ ws.removeNode((*list)[0])
+ x := (*list)[1:]
+ copy(*list, x)
+ *list = (*list)[:len(x)]
+ }
+ *list = append(*list, n)
+}
+
+func (ws *priorityWriteScheduler) removeNode(n *priorityNode) {
+ for k := n.kids; k != nil; k = k.next {
+ k.setParent(n.parent)
+ }
+ n.setParent(nil)
+ delete(ws.nodes, n.id)
+}
diff --git a/vendor/golang.org/x/net/http2/writesched_priority_test.go b/vendor/golang.org/x/net/http2/writesched_priority_test.go
new file mode 100644
index 000000000..2b232043c
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/writesched_priority_test.go
@@ -0,0 +1,541 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import (
+ "bytes"
+ "fmt"
+ "sort"
+ "testing"
+)
+
+func defaultPriorityWriteScheduler() *priorityWriteScheduler {
+ return NewPriorityWriteScheduler(nil).(*priorityWriteScheduler)
+}
+
+func checkPriorityWellFormed(ws *priorityWriteScheduler) error {
+ for id, n := range ws.nodes {
+ if id != n.id {
+ return fmt.Errorf("bad ws.nodes: ws.nodes[%d] = %d", id, n.id)
+ }
+ if n.parent == nil {
+ if n.next != nil || n.prev != nil {
+ return fmt.Errorf("bad node %d: nil parent but prev/next not nil", id)
+ }
+ continue
+ }
+ found := false
+ for k := n.parent.kids; k != nil; k = k.next {
+ if k.id == id {
+ found = true
+ break
+ }
+ }
+ if !found {
+ return fmt.Errorf("bad node %d: not found in parent %d kids list", id, n.parent.id)
+ }
+ }
+ return nil
+}
+
+func fmtTree(ws *priorityWriteScheduler, fmtNode func(*priorityNode) string) string {
+ var ids []int
+ for _, n := range ws.nodes {
+ ids = append(ids, int(n.id))
+ }
+ sort.Ints(ids)
+
+ var buf bytes.Buffer
+ for _, id := range ids {
+ if buf.Len() != 0 {
+ buf.WriteString(" ")
+ }
+ if id == 0 {
+ buf.WriteString(fmtNode(&ws.root))
+ } else {
+ buf.WriteString(fmtNode(ws.nodes[uint32(id)]))
+ }
+ }
+ return buf.String()
+}
+
+func fmtNodeParentSkipRoot(n *priorityNode) string {
+ switch {
+ case n.id == 0:
+ return ""
+ case n.parent == nil:
+ return fmt.Sprintf("%d{parent:nil}", n.id)
+ default:
+ return fmt.Sprintf("%d{parent:%d}", n.id, n.parent.id)
+ }
+}
+
+func fmtNodeWeightParentSkipRoot(n *priorityNode) string {
+ switch {
+ case n.id == 0:
+ return ""
+ case n.parent == nil:
+ return fmt.Sprintf("%d{weight:%d,parent:nil}", n.id, n.weight)
+ default:
+ return fmt.Sprintf("%d{weight:%d,parent:%d}", n.id, n.weight, n.parent.id)
+ }
+}
+
+func TestPriorityTwoStreams(t *testing.T) {
+ ws := defaultPriorityWriteScheduler()
+ ws.OpenStream(1, OpenStreamOptions{})
+ ws.OpenStream(2, OpenStreamOptions{})
+
+ want := "1{weight:15,parent:0} 2{weight:15,parent:0}"
+ if got := fmtTree(ws, fmtNodeWeightParentSkipRoot); got != want {
+ t.Errorf("After open\ngot %q\nwant %q", got, want)
+ }
+
+ // Move 1's parent to 2.
+ ws.AdjustStream(1, PriorityParam{
+ StreamDep: 2,
+ Weight: 32,
+ Exclusive: false,
+ })
+ want = "1{weight:32,parent:2} 2{weight:15,parent:0}"
+ if got := fmtTree(ws, fmtNodeWeightParentSkipRoot); got != want {
+ t.Errorf("After adjust\ngot %q\nwant %q", got, want)
+ }
+
+ if err := checkPriorityWellFormed(ws); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestPriorityAdjustExclusiveZero(t *testing.T) {
+ // 1, 2, and 3 are all children of the 0 stream.
+ // Exclusive reprioritization to any of the streams should bring
+ // the rest of the streams under the reprioritized stream.
+ ws := defaultPriorityWriteScheduler()
+ ws.OpenStream(1, OpenStreamOptions{})
+ ws.OpenStream(2, OpenStreamOptions{})
+ ws.OpenStream(3, OpenStreamOptions{})
+
+ want := "1{weight:15,parent:0} 2{weight:15,parent:0} 3{weight:15,parent:0}"
+ if got := fmtTree(ws, fmtNodeWeightParentSkipRoot); got != want {
+ t.Errorf("After open\ngot %q\nwant %q", got, want)
+ }
+
+ ws.AdjustStream(2, PriorityParam{
+ StreamDep: 0,
+ Weight: 20,
+ Exclusive: true,
+ })
+ want = "1{weight:15,parent:2} 2{weight:20,parent:0} 3{weight:15,parent:2}"
+ if got := fmtTree(ws, fmtNodeWeightParentSkipRoot); got != want {
+ t.Errorf("After adjust\ngot %q\nwant %q", got, want)
+ }
+
+ if err := checkPriorityWellFormed(ws); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestPriorityAdjustOwnParent(t *testing.T) {
+ // Assigning a node as its own parent should have no effect.
+ ws := defaultPriorityWriteScheduler()
+ ws.OpenStream(1, OpenStreamOptions{})
+ ws.OpenStream(2, OpenStreamOptions{})
+ ws.AdjustStream(2, PriorityParam{
+ StreamDep: 2,
+ Weight: 20,
+ Exclusive: true,
+ })
+ want := "1{weight:15,parent:0} 2{weight:15,parent:0}"
+ if got := fmtTree(ws, fmtNodeWeightParentSkipRoot); got != want {
+ t.Errorf("After adjust\ngot %q\nwant %q", got, want)
+ }
+ if err := checkPriorityWellFormed(ws); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestPriorityClosedStreams(t *testing.T) {
+ ws := NewPriorityWriteScheduler(&PriorityWriteSchedulerConfig{MaxClosedNodesInTree: 2}).(*priorityWriteScheduler)
+ ws.OpenStream(1, OpenStreamOptions{})
+ ws.OpenStream(2, OpenStreamOptions{PusherID: 1})
+ ws.OpenStream(3, OpenStreamOptions{PusherID: 2})
+ ws.OpenStream(4, OpenStreamOptions{PusherID: 3})
+
+ // Close the first three streams. We lose 1, but keep 2 and 3.
+ ws.CloseStream(1)
+ ws.CloseStream(2)
+ ws.CloseStream(3)
+
+ want := "2{weight:15,parent:0} 3{weight:15,parent:2} 4{weight:15,parent:3}"
+ if got := fmtTree(ws, fmtNodeWeightParentSkipRoot); got != want {
+ t.Errorf("After close\ngot %q\nwant %q", got, want)
+ }
+ if err := checkPriorityWellFormed(ws); err != nil {
+ t.Error(err)
+ }
+
+ // Adding a stream as an exclusive child of 1 gives it default
+ // priorities, since 1 is gone.
+ ws.OpenStream(5, OpenStreamOptions{})
+ ws.AdjustStream(5, PriorityParam{StreamDep: 1, Weight: 15, Exclusive: true})
+
+ // Adding a stream as an exclusive child of 2 should work, since 2 is not gone.
+ ws.OpenStream(6, OpenStreamOptions{})
+ ws.AdjustStream(6, PriorityParam{StreamDep: 2, Weight: 15, Exclusive: true})
+
+ want = "2{weight:15,parent:0} 3{weight:15,parent:6} 4{weight:15,parent:3} 5{weight:15,parent:0} 6{weight:15,parent:2}"
+ if got := fmtTree(ws, fmtNodeWeightParentSkipRoot); got != want {
+ t.Errorf("After add streams\ngot %q\nwant %q", got, want)
+ }
+ if err := checkPriorityWellFormed(ws); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestPriorityClosedStreamsDisabled(t *testing.T) {
+ ws := NewPriorityWriteScheduler(&PriorityWriteSchedulerConfig{}).(*priorityWriteScheduler)
+ ws.OpenStream(1, OpenStreamOptions{})
+ ws.OpenStream(2, OpenStreamOptions{PusherID: 1})
+ ws.OpenStream(3, OpenStreamOptions{PusherID: 2})
+
+ // Close the first two streams. We keep only 3.
+ ws.CloseStream(1)
+ ws.CloseStream(2)
+
+ want := "3{weight:15,parent:0}"
+ if got := fmtTree(ws, fmtNodeWeightParentSkipRoot); got != want {
+ t.Errorf("After close\ngot %q\nwant %q", got, want)
+ }
+ if err := checkPriorityWellFormed(ws); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestPriorityIdleStreams(t *testing.T) {
+ ws := NewPriorityWriteScheduler(&PriorityWriteSchedulerConfig{MaxIdleNodesInTree: 2}).(*priorityWriteScheduler)
+ ws.AdjustStream(1, PriorityParam{StreamDep: 0, Weight: 15}) // idle
+ ws.AdjustStream(2, PriorityParam{StreamDep: 0, Weight: 15}) // idle
+ ws.AdjustStream(3, PriorityParam{StreamDep: 2, Weight: 20}) // idle
+ ws.OpenStream(4, OpenStreamOptions{})
+ ws.OpenStream(5, OpenStreamOptions{})
+ ws.OpenStream(6, OpenStreamOptions{})
+ ws.AdjustStream(4, PriorityParam{StreamDep: 1, Weight: 15})
+ ws.AdjustStream(5, PriorityParam{StreamDep: 2, Weight: 15})
+ ws.AdjustStream(6, PriorityParam{StreamDep: 3, Weight: 15})
+
+ want := "2{weight:15,parent:0} 3{weight:20,parent:2} 4{weight:15,parent:0} 5{weight:15,parent:2} 6{weight:15,parent:3}"
+ if got := fmtTree(ws, fmtNodeWeightParentSkipRoot); got != want {
+ t.Errorf("After open\ngot %q\nwant %q", got, want)
+ }
+ if err := checkPriorityWellFormed(ws); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestPriorityIdleStreamsDisabled(t *testing.T) {
+ ws := NewPriorityWriteScheduler(&PriorityWriteSchedulerConfig{}).(*priorityWriteScheduler)
+ ws.AdjustStream(1, PriorityParam{StreamDep: 0, Weight: 15}) // idle
+ ws.AdjustStream(2, PriorityParam{StreamDep: 0, Weight: 15}) // idle
+ ws.AdjustStream(3, PriorityParam{StreamDep: 2, Weight: 20}) // idle
+ ws.OpenStream(4, OpenStreamOptions{})
+
+ want := "4{weight:15,parent:0}"
+ if got := fmtTree(ws, fmtNodeWeightParentSkipRoot); got != want {
+ t.Errorf("After open\ngot %q\nwant %q", got, want)
+ }
+ if err := checkPriorityWellFormed(ws); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestPrioritySection531NonExclusive(t *testing.T) {
+ // Example from RFC 7540 Section 5.3.1.
+ // A,B,C,D = 1,2,3,4
+ ws := defaultPriorityWriteScheduler()
+ ws.OpenStream(1, OpenStreamOptions{})
+ ws.OpenStream(2, OpenStreamOptions{PusherID: 1})
+ ws.OpenStream(3, OpenStreamOptions{PusherID: 1})
+ ws.OpenStream(4, OpenStreamOptions{})
+ ws.AdjustStream(4, PriorityParam{
+ StreamDep: 1,
+ Weight: 15,
+ Exclusive: false,
+ })
+ want := "1{parent:0} 2{parent:1} 3{parent:1} 4{parent:1}"
+ if got := fmtTree(ws, fmtNodeParentSkipRoot); got != want {
+ t.Errorf("After adjust\ngot %q\nwant %q", got, want)
+ }
+ if err := checkPriorityWellFormed(ws); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestPrioritySection531Exclusive(t *testing.T) {
+ // Example from RFC 7540 Section 5.3.1.
+ // A,B,C,D = 1,2,3,4
+ ws := defaultPriorityWriteScheduler()
+ ws.OpenStream(1, OpenStreamOptions{})
+ ws.OpenStream(2, OpenStreamOptions{PusherID: 1})
+ ws.OpenStream(3, OpenStreamOptions{PusherID: 1})
+ ws.OpenStream(4, OpenStreamOptions{})
+ ws.AdjustStream(4, PriorityParam{
+ StreamDep: 1,
+ Weight: 15,
+ Exclusive: true,
+ })
+ want := "1{parent:0} 2{parent:4} 3{parent:4} 4{parent:1}"
+ if got := fmtTree(ws, fmtNodeParentSkipRoot); got != want {
+ t.Errorf("After adjust\ngot %q\nwant %q", got, want)
+ }
+ if err := checkPriorityWellFormed(ws); err != nil {
+ t.Error(err)
+ }
+}
+
+func makeSection533Tree() *priorityWriteScheduler {
+ // Initial tree from RFC 7540 Section 5.3.3.
+ // A,B,C,D,E,F = 1,2,3,4,5,6
+ ws := defaultPriorityWriteScheduler()
+ ws.OpenStream(1, OpenStreamOptions{})
+ ws.OpenStream(2, OpenStreamOptions{PusherID: 1})
+ ws.OpenStream(3, OpenStreamOptions{PusherID: 1})
+ ws.OpenStream(4, OpenStreamOptions{PusherID: 3})
+ ws.OpenStream(5, OpenStreamOptions{PusherID: 3})
+ ws.OpenStream(6, OpenStreamOptions{PusherID: 4})
+ return ws
+}
+
+func TestPrioritySection533NonExclusive(t *testing.T) {
+ // Example from RFC 7540 Section 5.3.3.
+ // A,B,C,D,E,F = 1,2,3,4,5,6
+ ws := defaultPriorityWriteScheduler()
+ ws.OpenStream(1, OpenStreamOptions{})
+ ws.OpenStream(2, OpenStreamOptions{PusherID: 1})
+ ws.OpenStream(3, OpenStreamOptions{PusherID: 1})
+ ws.OpenStream(4, OpenStreamOptions{PusherID: 3})
+ ws.OpenStream(5, OpenStreamOptions{PusherID: 3})
+ ws.OpenStream(6, OpenStreamOptions{PusherID: 4})
+ ws.AdjustStream(1, PriorityParam{
+ StreamDep: 4,
+ Weight: 15,
+ Exclusive: false,
+ })
+ want := "1{parent:4} 2{parent:1} 3{parent:1} 4{parent:0} 5{parent:3} 6{parent:4}"
+ if got := fmtTree(ws, fmtNodeParentSkipRoot); got != want {
+ t.Errorf("After adjust\ngot %q\nwant %q", got, want)
+ }
+ if err := checkPriorityWellFormed(ws); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestPrioritySection533Exclusive(t *testing.T) {
+ // Example from RFC 7540 Section 5.3.3.
+ // A,B,C,D,E,F = 1,2,3,4,5,6
+ ws := defaultPriorityWriteScheduler()
+ ws.OpenStream(1, OpenStreamOptions{})
+ ws.OpenStream(2, OpenStreamOptions{PusherID: 1})
+ ws.OpenStream(3, OpenStreamOptions{PusherID: 1})
+ ws.OpenStream(4, OpenStreamOptions{PusherID: 3})
+ ws.OpenStream(5, OpenStreamOptions{PusherID: 3})
+ ws.OpenStream(6, OpenStreamOptions{PusherID: 4})
+ ws.AdjustStream(1, PriorityParam{
+ StreamDep: 4,
+ Weight: 15,
+ Exclusive: true,
+ })
+ want := "1{parent:4} 2{parent:1} 3{parent:1} 4{parent:0} 5{parent:3} 6{parent:1}"
+ if got := fmtTree(ws, fmtNodeParentSkipRoot); got != want {
+ t.Errorf("After adjust\ngot %q\nwant %q", got, want)
+ }
+ if err := checkPriorityWellFormed(ws); err != nil {
+ t.Error(err)
+ }
+}
+
+func checkPopAll(ws WriteScheduler, order []uint32) error {
+ for k, id := range order {
+ wr, ok := ws.Pop()
+ if !ok {
+ return fmt.Errorf("Pop[%d]: got ok=false, want %d (order=%v)", k, id, order)
+ }
+ if got := wr.StreamID(); got != id {
+ return fmt.Errorf("Pop[%d]: got %v, want %d (order=%v)", k, got, id, order)
+ }
+ }
+ wr, ok := ws.Pop()
+ if ok {
+ return fmt.Errorf("Pop[%d]: got %v, want ok=false (order=%v)", len(order), wr.StreamID(), order)
+ }
+ return nil
+}
+
+func TestPriorityPopFrom533Tree(t *testing.T) {
+ ws := makeSection533Tree()
+
+ ws.Push(makeWriteHeadersRequest(3 /*C*/))
+ ws.Push(makeWriteNonStreamRequest())
+ ws.Push(makeWriteHeadersRequest(5 /*E*/))
+ ws.Push(makeWriteHeadersRequest(1 /*A*/))
+ t.Log("tree:", fmtTree(ws, fmtNodeParentSkipRoot))
+
+ if err := checkPopAll(ws, []uint32{0 /*NonStream*/, 1, 3, 5}); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestPriorityPopFromLinearTree(t *testing.T) {
+ ws := defaultPriorityWriteScheduler()
+ ws.OpenStream(1, OpenStreamOptions{})
+ ws.OpenStream(2, OpenStreamOptions{PusherID: 1})
+ ws.OpenStream(3, OpenStreamOptions{PusherID: 2})
+ ws.OpenStream(4, OpenStreamOptions{PusherID: 3})
+
+ ws.Push(makeWriteHeadersRequest(3))
+ ws.Push(makeWriteHeadersRequest(4))
+ ws.Push(makeWriteHeadersRequest(1))
+ ws.Push(makeWriteHeadersRequest(2))
+ ws.Push(makeWriteNonStreamRequest())
+ ws.Push(makeWriteNonStreamRequest())
+ t.Log("tree:", fmtTree(ws, fmtNodeParentSkipRoot))
+
+ if err := checkPopAll(ws, []uint32{0, 0 /*NonStreams*/, 1, 2, 3, 4}); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestPriorityFlowControl(t *testing.T) {
+ ws := NewPriorityWriteScheduler(&PriorityWriteSchedulerConfig{ThrottleOutOfOrderWrites: false})
+ ws.OpenStream(1, OpenStreamOptions{})
+ ws.OpenStream(2, OpenStreamOptions{PusherID: 1})
+
+ sc := &serverConn{maxFrameSize: 16}
+ st1 := &stream{id: 1, sc: sc}
+ st2 := &stream{id: 2, sc: sc}
+
+ ws.Push(FrameWriteRequest{&writeData{1, make([]byte, 16), false}, st1, nil})
+ ws.Push(FrameWriteRequest{&writeData{2, make([]byte, 16), false}, st2, nil})
+ ws.AdjustStream(2, PriorityParam{StreamDep: 1})
+
+ // No flow-control bytes available.
+ if wr, ok := ws.Pop(); ok {
+ t.Fatalf("Pop(limited by flow control)=%v,true, want false", wr)
+ }
+
+ // Add enough flow-control bytes to write st2 in two Pop calls.
+ // Should write data from st2 even though it's lower priority than st1.
+ for i := 1; i <= 2; i++ {
+ st2.flow.add(8)
+ wr, ok := ws.Pop()
+ if !ok {
+ t.Fatalf("Pop(%d)=false, want true", i)
+ }
+ if got, want := wr.DataSize(), 8; got != want {
+ t.Fatalf("Pop(%d)=%d bytes, want %d bytes", got, want)
+ }
+ }
+}
+
+func TestPriorityThrottleOutOfOrderWrites(t *testing.T) {
+ ws := NewPriorityWriteScheduler(&PriorityWriteSchedulerConfig{ThrottleOutOfOrderWrites: true})
+ ws.OpenStream(1, OpenStreamOptions{})
+ ws.OpenStream(2, OpenStreamOptions{PusherID: 1})
+
+ sc := &serverConn{maxFrameSize: 4096}
+ st1 := &stream{id: 1, sc: sc}
+ st2 := &stream{id: 2, sc: sc}
+ st1.flow.add(4096)
+ st2.flow.add(4096)
+ ws.Push(FrameWriteRequest{&writeData{2, make([]byte, 4096), false}, st2, nil})
+ ws.AdjustStream(2, PriorityParam{StreamDep: 1})
+
+ // We have enough flow-control bytes to write st2 in a single Pop call.
+ // However, due to out-of-order write throttling, the first call should
+ // only write 1KB.
+ wr, ok := ws.Pop()
+ if !ok {
+ t.Fatalf("Pop(st2.first)=false, want true")
+ }
+ if got, want := wr.StreamID(), uint32(2); got != want {
+ t.Fatalf("Pop(st2.first)=stream %d, want stream %d", got, want)
+ }
+ if got, want := wr.DataSize(), 1024; got != want {
+ t.Fatalf("Pop(st2.first)=%d bytes, want %d bytes", got, want)
+ }
+
+ // Now add data on st1. This should take precedence.
+ ws.Push(FrameWriteRequest{&writeData{1, make([]byte, 4096), false}, st1, nil})
+ wr, ok = ws.Pop()
+ if !ok {
+ t.Fatalf("Pop(st1)=false, want true")
+ }
+ if got, want := wr.StreamID(), uint32(1); got != want {
+ t.Fatalf("Pop(st1)=stream %d, want stream %d", got, want)
+ }
+ if got, want := wr.DataSize(), 4096; got != want {
+ t.Fatalf("Pop(st1)=%d bytes, want %d bytes", got, want)
+ }
+
+ // Should go back to writing 1KB from st2.
+ wr, ok = ws.Pop()
+ if !ok {
+ t.Fatalf("Pop(st2.last)=false, want true")
+ }
+ if got, want := wr.StreamID(), uint32(2); got != want {
+ t.Fatalf("Pop(st2.last)=stream %d, want stream %d", got, want)
+ }
+ if got, want := wr.DataSize(), 1024; got != want {
+ t.Fatalf("Pop(st2.last)=%d bytes, want %d bytes", got, want)
+ }
+}
+
+func TestPriorityWeights(t *testing.T) {
+ ws := defaultPriorityWriteScheduler()
+ ws.OpenStream(1, OpenStreamOptions{})
+ ws.OpenStream(2, OpenStreamOptions{})
+
+ sc := &serverConn{maxFrameSize: 8}
+ st1 := &stream{id: 1, sc: sc}
+ st2 := &stream{id: 2, sc: sc}
+ st1.flow.add(40)
+ st2.flow.add(40)
+
+ ws.Push(FrameWriteRequest{&writeData{1, make([]byte, 40), false}, st1, nil})
+ ws.Push(FrameWriteRequest{&writeData{2, make([]byte, 40), false}, st2, nil})
+ ws.AdjustStream(1, PriorityParam{StreamDep: 0, Weight: 34})
+ ws.AdjustStream(2, PriorityParam{StreamDep: 0, Weight: 9})
+
+ // st1 gets 3.5x the bandwidth of st2 (3.5 = (34+1)/(9+1)).
+ // The maximum frame size is 8 bytes. The write sequence should be:
+ // st1, total bytes so far is (st1=8, st=0)
+ // st2, total bytes so far is (st1=8, st=8)
+ // st1, total bytes so far is (st1=16, st=8)
+ // st1, total bytes so far is (st1=24, st=8) // 3x bandwidth
+ // st1, total bytes so far is (st1=32, st=8) // 4x bandwidth
+ // st2, total bytes so far is (st1=32, st=16) // 2x bandwidth
+ // st1, total bytes so far is (st1=40, st=16)
+ // st2, total bytes so far is (st1=40, st=24)
+ // st2, total bytes so far is (st1=40, st=32)
+ // st2, total bytes so far is (st1=40, st=40)
+ if err := checkPopAll(ws, []uint32{1, 2, 1, 1, 1, 2, 1, 2, 2, 2}); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestPriorityRstStreamOnNonOpenStreams(t *testing.T) {
+ ws := NewPriorityWriteScheduler(&PriorityWriteSchedulerConfig{
+ MaxClosedNodesInTree: 0,
+ MaxIdleNodesInTree: 0,
+ })
+ ws.OpenStream(1, OpenStreamOptions{})
+ ws.CloseStream(1)
+ ws.Push(FrameWriteRequest{write: streamError(1, ErrCodeProtocol)})
+ ws.Push(FrameWriteRequest{write: streamError(2, ErrCodeProtocol)})
+
+ if err := checkPopAll(ws, []uint32{1, 2}); err != nil {
+ t.Error(err)
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/writesched_random.go b/vendor/golang.org/x/net/http2/writesched_random.go
new file mode 100644
index 000000000..36d7919f1
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/writesched_random.go
@@ -0,0 +1,72 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import "math"
+
+// NewRandomWriteScheduler constructs a WriteScheduler that ignores HTTP/2
+// priorities. Control frames like SETTINGS and PING are written before DATA
+// frames, but if no control frames are queued and multiple streams have queued
+// HEADERS or DATA frames, Pop selects a ready stream arbitrarily.
+func NewRandomWriteScheduler() WriteScheduler {
+ return &randomWriteScheduler{sq: make(map[uint32]*writeQueue)}
+}
+
+type randomWriteScheduler struct {
+ // zero are frames not associated with a specific stream.
+ zero writeQueue
+
+ // sq contains the stream-specific queues, keyed by stream ID.
+ // When a stream is idle or closed, it's deleted from the map.
+ sq map[uint32]*writeQueue
+
+ // pool of empty queues for reuse.
+ queuePool writeQueuePool
+}
+
+func (ws *randomWriteScheduler) OpenStream(streamID uint32, options OpenStreamOptions) {
+ // no-op: idle streams are not tracked
+}
+
+func (ws *randomWriteScheduler) CloseStream(streamID uint32) {
+ q, ok := ws.sq[streamID]
+ if !ok {
+ return
+ }
+ delete(ws.sq, streamID)
+ ws.queuePool.put(q)
+}
+
+func (ws *randomWriteScheduler) AdjustStream(streamID uint32, priority PriorityParam) {
+ // no-op: priorities are ignored
+}
+
+func (ws *randomWriteScheduler) Push(wr FrameWriteRequest) {
+ id := wr.StreamID()
+ if id == 0 {
+ ws.zero.push(wr)
+ return
+ }
+ q, ok := ws.sq[id]
+ if !ok {
+ q = ws.queuePool.get()
+ ws.sq[id] = q
+ }
+ q.push(wr)
+}
+
+func (ws *randomWriteScheduler) Pop() (FrameWriteRequest, bool) {
+ // Control frames first.
+ if !ws.zero.empty() {
+ return ws.zero.shift(), true
+ }
+ // Iterate over all non-idle streams until finding one that can be consumed.
+ for _, q := range ws.sq {
+ if wr, ok := q.consume(math.MaxInt32); ok {
+ return wr, true
+ }
+ }
+ return FrameWriteRequest{}, false
+}
diff --git a/vendor/golang.org/x/net/http2/writesched_random_test.go b/vendor/golang.org/x/net/http2/writesched_random_test.go
new file mode 100644
index 000000000..97b0bcdbf
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/writesched_random_test.go
@@ -0,0 +1,44 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import "testing"
+
+func TestRandomScheduler(t *testing.T) {
+ ws := NewRandomWriteScheduler()
+ ws.Push(makeWriteHeadersRequest(3))
+ ws.Push(makeWriteHeadersRequest(4))
+ ws.Push(makeWriteHeadersRequest(1))
+ ws.Push(makeWriteHeadersRequest(2))
+ ws.Push(makeWriteNonStreamRequest())
+ ws.Push(makeWriteNonStreamRequest())
+
+ // Pop all frames. Should get the non-stream requests first,
+ // followed by the stream requests in any order.
+ var order []FrameWriteRequest
+ for {
+ wr, ok := ws.Pop()
+ if !ok {
+ break
+ }
+ order = append(order, wr)
+ }
+ t.Logf("got frames: %v", order)
+ if len(order) != 6 {
+ t.Fatalf("got %d frames, expected 6", len(order))
+ }
+ if order[0].StreamID() != 0 || order[1].StreamID() != 0 {
+ t.Fatalf("expected non-stream frames first", order[0], order[1])
+ }
+ got := make(map[uint32]bool)
+ for _, wr := range order[2:] {
+ got[wr.StreamID()] = true
+ }
+ for id := uint32(1); id <= 4; id++ {
+ if !got[id] {
+ t.Errorf("frame not found for stream %d", id)
+ }
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/writesched_test.go b/vendor/golang.org/x/net/http2/writesched_test.go
new file mode 100644
index 000000000..0807056bc
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/writesched_test.go
@@ -0,0 +1,125 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import (
+ "fmt"
+ "math"
+ "reflect"
+ "testing"
+)
+
+func makeWriteNonStreamRequest() FrameWriteRequest {
+ return FrameWriteRequest{writeSettingsAck{}, nil, nil}
+}
+
+func makeWriteHeadersRequest(streamID uint32) FrameWriteRequest {
+ st := &stream{id: streamID}
+ return FrameWriteRequest{&writeResHeaders{streamID: streamID, httpResCode: 200}, st, nil}
+}
+
+func checkConsume(wr FrameWriteRequest, nbytes int32, want []FrameWriteRequest) error {
+ consumed, rest, n := wr.Consume(nbytes)
+ var wantConsumed, wantRest FrameWriteRequest
+ switch len(want) {
+ case 0:
+ case 1:
+ wantConsumed = want[0]
+ case 2:
+ wantConsumed = want[0]
+ wantRest = want[1]
+ }
+ if !reflect.DeepEqual(consumed, wantConsumed) || !reflect.DeepEqual(rest, wantRest) || n != len(want) {
+ return fmt.Errorf("got %v, %v, %v\nwant %v, %v, %v", consumed, rest, n, wantConsumed, wantRest, len(want))
+ }
+ return nil
+}
+
+func TestFrameWriteRequestNonData(t *testing.T) {
+ wr := makeWriteNonStreamRequest()
+ if got, want := wr.DataSize(), 0; got != want {
+ t.Errorf("DataSize: got %v, want %v", got, want)
+ }
+
+ // Non-DATA frames are always consumed whole.
+ if err := checkConsume(wr, 0, []FrameWriteRequest{wr}); err != nil {
+ t.Errorf("Consume:\n%v", err)
+ }
+}
+
+func TestFrameWriteRequestData(t *testing.T) {
+ st := &stream{
+ id: 1,
+ sc: &serverConn{maxFrameSize: 16},
+ }
+ const size = 32
+ wr := FrameWriteRequest{&writeData{st.id, make([]byte, size), true}, st, make(chan error)}
+ if got, want := wr.DataSize(), size; got != want {
+ t.Errorf("DataSize: got %v, want %v", got, want)
+ }
+
+ // No flow-control bytes available: cannot consume anything.
+ if err := checkConsume(wr, math.MaxInt32, []FrameWriteRequest{}); err != nil {
+ t.Errorf("Consume(limited by flow control):\n%v", err)
+ }
+
+ // Add enough flow-control bytes to consume the entire frame,
+ // but we're now restricted by st.sc.maxFrameSize.
+ st.flow.add(size)
+ want := []FrameWriteRequest{
+ {
+ write: &writeData{st.id, make([]byte, st.sc.maxFrameSize), false},
+ stream: st,
+ done: nil,
+ },
+ {
+ write: &writeData{st.id, make([]byte, size-st.sc.maxFrameSize), true},
+ stream: st,
+ done: wr.done,
+ },
+ }
+ if err := checkConsume(wr, math.MaxInt32, want); err != nil {
+ t.Errorf("Consume(limited by maxFrameSize):\n%v", err)
+ }
+ rest := want[1]
+
+ // Consume 8 bytes from the remaining frame.
+ want = []FrameWriteRequest{
+ {
+ write: &writeData{st.id, make([]byte, 8), false},
+ stream: st,
+ done: nil,
+ },
+ {
+ write: &writeData{st.id, make([]byte, size-st.sc.maxFrameSize-8), true},
+ stream: st,
+ done: wr.done,
+ },
+ }
+ if err := checkConsume(rest, 8, want); err != nil {
+ t.Errorf("Consume(8):\n%v", err)
+ }
+ rest = want[1]
+
+ // Consume all remaining bytes.
+ want = []FrameWriteRequest{
+ {
+ write: &writeData{st.id, make([]byte, size-st.sc.maxFrameSize-8), true},
+ stream: st,
+ done: wr.done,
+ },
+ }
+ if err := checkConsume(rest, math.MaxInt32, want); err != nil {
+ t.Errorf("Consume(remainder):\n%v", err)
+ }
+}
+
+func TestFrameWriteRequest_StreamID(t *testing.T) {
+ const streamID = 123
+ wr := FrameWriteRequest{write: streamError(streamID, ErrCodeNo)}
+ if got := wr.StreamID(); got != streamID {
+ t.Errorf("FrameWriteRequest(StreamError) = %v; want %v", got, streamID)
+ }
+}
diff --git a/vendor/golang.org/x/net/icmp/echo.go b/vendor/golang.org/x/net/icmp/echo.go
index dd5518115..e6f15efd7 100644
--- a/vendor/golang.org/x/net/icmp/echo.go
+++ b/vendor/golang.org/x/net/icmp/echo.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/icmp/ipv6.go b/vendor/golang.org/x/net/icmp/ipv6.go
index 58eaa77d0..2e8cfeb13 100644
--- a/vendor/golang.org/x/net/icmp/ipv6.go
+++ b/vendor/golang.org/x/net/icmp/ipv6.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/icmp/message.go b/vendor/golang.org/x/net/icmp/message.go
index 42d6df2c1..ea01bba38 100644
--- a/vendor/golang.org/x/net/icmp/message.go
+++ b/vendor/golang.org/x/net/icmp/message.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/icmp/messagebody.go b/vendor/golang.org/x/net/icmp/messagebody.go
index 2121a17be..2463730ae 100644
--- a/vendor/golang.org/x/net/icmp/messagebody.go
+++ b/vendor/golang.org/x/net/icmp/messagebody.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/internal/iana/gen.go b/vendor/golang.org/x/net/internal/iana/gen.go
index 2d8c07ca1..86c78b3bb 100644
--- a/vendor/golang.org/x/net/internal/iana/gen.go
+++ b/vendor/golang.org/x/net/internal/iana/gen.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/internal/nettest/helper_bsd.go b/vendor/golang.org/x/net/internal/nettest/helper_bsd.go
index b2308a0e8..a6e433b58 100644
--- a/vendor/golang.org/x/net/internal/nettest/helper_bsd.go
+++ b/vendor/golang.org/x/net/internal/nettest/helper_bsd.go
@@ -13,6 +13,23 @@ import (
"syscall"
)
+var darwinVersion int
+
+func init() {
+ if runtime.GOOS == "darwin" {
+ // See http://support.apple.com/kb/HT1633.
+ s, err := syscall.Sysctl("kern.osrelease")
+ if err != nil {
+ return
+ }
+ ss := strings.Split(s, ".")
+ if len(ss) == 0 {
+ return
+ }
+ darwinVersion, _ = strconv.Atoi(ss[0])
+ }
+}
+
func supportsIPv6MulticastDeliveryOnLoopback() bool {
switch runtime.GOOS {
case "freebsd":
@@ -22,27 +39,15 @@ func supportsIPv6MulticastDeliveryOnLoopback() bool {
// packets correctly.
return false
case "darwin":
- // See http://support.apple.com/kb/HT1633.
- s, err := syscall.Sysctl("kern.osrelease")
- if err != nil {
- return false
- }
- ss := strings.Split(s, ".")
- if len(ss) == 0 {
- return false
- }
- // OS X 10.9 (Darwin 13) or above seems to do the
- // right thing; preserving the packet header as it's
- // needed for the checksum calcuration with pseudo
- // header on loopback multicast delivery process.
- // If not, you'll probably see what is the slow-acting
- // kernel crash caused by lazy mbuf corruption.
- // See ip6_mloopback in netinet6/ip6_output.c.
- if mjver, err := strconv.Atoi(ss[0]); err != nil || mjver < 13 {
- return false
- }
- return true
+ return !causesIPv6Crash()
default:
return true
}
}
+
+func causesIPv6Crash() bool {
+ // We see some kernel crash when running IPv6 with IP-level
+ // options on Darwin kernel version 12 or below.
+ // See golang.org/issues/17015.
+ return darwinVersion < 13
+}
diff --git a/vendor/golang.org/x/net/internal/nettest/helper_nobsd.go b/vendor/golang.org/x/net/internal/nettest/helper_nobsd.go
index a42b80709..bc7da5e0d 100644
--- a/vendor/golang.org/x/net/internal/nettest/helper_nobsd.go
+++ b/vendor/golang.org/x/net/internal/nettest/helper_nobsd.go
@@ -9,3 +9,7 @@ package nettest
func supportsIPv6MulticastDeliveryOnLoopback() bool {
return true
}
+
+func causesIPv6Crash() bool {
+ return false
+}
diff --git a/vendor/golang.org/x/net/internal/nettest/helper_stub.go b/vendor/golang.org/x/net/internal/nettest/helper_stub.go
index 22d493585..ea61b6f39 100644
--- a/vendor/golang.org/x/net/internal/nettest/helper_stub.go
+++ b/vendor/golang.org/x/net/internal/nettest/helper_stub.go
@@ -23,6 +23,10 @@ func supportsIPv6MulticastDeliveryOnLoopback() bool {
return false
}
+func causesIPv6Crash() bool {
+ return false
+}
+
func protocolNotSupported(err error) bool {
return false
}
diff --git a/vendor/golang.org/x/net/internal/nettest/helper_windows.go b/vendor/golang.org/x/net/internal/nettest/helper_windows.go
index b0a6a30c4..3dcb727c9 100644
--- a/vendor/golang.org/x/net/internal/nettest/helper_windows.go
+++ b/vendor/golang.org/x/net/internal/nettest/helper_windows.go
@@ -36,3 +36,7 @@ func supportsRawIPSocket() (string, bool) {
func supportsIPv6MulticastDeliveryOnLoopback() bool {
return true
}
+
+func causesIPv6Crash() bool {
+ return false
+}
diff --git a/vendor/golang.org/x/net/internal/nettest/interface.go b/vendor/golang.org/x/net/internal/nettest/interface.go
index 53ae13a98..8e6333afe 100644
--- a/vendor/golang.org/x/net/internal/nettest/interface.go
+++ b/vendor/golang.org/x/net/internal/nettest/interface.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/internal/nettest/stack.go b/vendor/golang.org/x/net/internal/nettest/stack.go
index 86de2773d..5ab95305d 100644
--- a/vendor/golang.org/x/net/internal/nettest/stack.go
+++ b/vendor/golang.org/x/net/internal/nettest/stack.go
@@ -21,6 +21,9 @@ func SupportsIPv4() bool {
// SupportsIPv6 reports whether the platform supports IPv6 networking
// functionality.
func SupportsIPv6() bool {
+ if causesIPv6Crash() {
+ return false
+ }
ln, err := net.Listen("tcp6", "[::1]:0")
if err != nil {
return false
diff --git a/vendor/golang.org/x/net/ipv4/bpfopt_linux.go b/vendor/golang.org/x/net/ipv4/bpfopt_linux.go
index e9bbda96e..2d626d924 100644
--- a/vendor/golang.org/x/net/ipv4/bpfopt_linux.go
+++ b/vendor/golang.org/x/net/ipv4/bpfopt_linux.go
@@ -20,9 +20,9 @@ func (c *dgramOpt) SetBPF(filter []bpf.RawInstruction) error {
if err != nil {
return err
}
- prog := sysSockFProg{
+ prog := sockFProg{
Len: uint16(len(filter)),
- Filter: (*sysSockFilter)(unsafe.Pointer(&filter[0])),
+ Filter: (*sockFilter)(unsafe.Pointer(&filter[0])),
}
return os.NewSyscallError("setsockopt", setsockopt(s, sysSOL_SOCKET, sysSO_ATTACH_FILTER, unsafe.Pointer(&prog), uint32(unsafe.Sizeof(prog))))
}
diff --git a/vendor/golang.org/x/net/ipv4/control.go b/vendor/golang.org/x/net/ipv4/control.go
index 8cadfd7f3..da4da2dd0 100644
--- a/vendor/golang.org/x/net/ipv4/control.go
+++ b/vendor/golang.org/x/net/ipv4/control.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/ipv4/control_bsd.go b/vendor/golang.org/x/net/ipv4/control_bsd.go
index 33d8bc8b3..3f27f9945 100644
--- a/vendor/golang.org/x/net/ipv4/control_bsd.go
+++ b/vendor/golang.org/x/net/ipv4/control_bsd.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/ipv4/control_pktinfo.go b/vendor/golang.org/x/net/ipv4/control_pktinfo.go
index 444782f39..9ed977341 100644
--- a/vendor/golang.org/x/net/ipv4/control_pktinfo.go
+++ b/vendor/golang.org/x/net/ipv4/control_pktinfo.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin linux
+// +build darwin linux solaris
package ipv4
@@ -17,9 +17,9 @@ func marshalPacketInfo(b []byte, cm *ControlMessage) []byte {
m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
m.Level = iana.ProtocolIP
m.Type = sysIP_PKTINFO
- m.SetLen(syscall.CmsgLen(sysSizeofInetPktinfo))
+ m.SetLen(syscall.CmsgLen(sizeofInetPktinfo))
if cm != nil {
- pi := (*sysInetPktinfo)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
+ pi := (*inetPktinfo)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
if ip := cm.Src.To4(); ip != nil {
copy(pi.Spec_dst[:], ip)
}
@@ -27,11 +27,11 @@ func marshalPacketInfo(b []byte, cm *ControlMessage) []byte {
pi.setIfindex(cm.IfIndex)
}
}
- return b[syscall.CmsgSpace(sysSizeofInetPktinfo):]
+ return b[syscall.CmsgSpace(sizeofInetPktinfo):]
}
func parsePacketInfo(cm *ControlMessage, b []byte) {
- pi := (*sysInetPktinfo)(unsafe.Pointer(&b[0]))
+ pi := (*inetPktinfo)(unsafe.Pointer(&b[0]))
cm.IfIndex = int(pi.Ifindex)
cm.Dst = pi.Addr[:]
}
diff --git a/vendor/golang.org/x/net/ipv4/control_stub.go b/vendor/golang.org/x/net/ipv4/control_stub.go
index 5f5a1bd0d..27e618bc2 100644
--- a/vendor/golang.org/x/net/ipv4/control_stub.go
+++ b/vendor/golang.org/x/net/ipv4/control_stub.go
@@ -1,8 +1,8 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build nacl plan9 solaris
+// +build nacl plan9
package ipv4
diff --git a/vendor/golang.org/x/net/ipv4/control_unix.go b/vendor/golang.org/x/net/ipv4/control_unix.go
index 6b6682d65..25ef66192 100644
--- a/vendor/golang.org/x/net/ipv4/control_unix.go
+++ b/vendor/golang.org/x/net/ipv4/control_unix.go
@@ -1,8 +1,8 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux netbsd openbsd
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris
package ipv4
@@ -83,22 +83,6 @@ func newControlMessage(opt *rawOpt) (oob []byte) {
}
if l > 0 {
oob = make([]byte, l)
- b := oob
- if opt.isset(FlagTTL) && ctlOpts[ctlTTL].name > 0 {
- b = ctlOpts[ctlTTL].marshal(b, nil)
- }
- if ctlOpts[ctlPacketInfo].name > 0 {
- if opt.isset(FlagSrc | FlagDst | FlagInterface) {
- b = ctlOpts[ctlPacketInfo].marshal(b, nil)
- }
- } else {
- if opt.isset(FlagDst) && ctlOpts[ctlDst].name > 0 {
- b = ctlOpts[ctlDst].marshal(b, nil)
- }
- if opt.isset(FlagInterface) && ctlOpts[ctlInterface].name > 0 {
- b = ctlOpts[ctlInterface].marshal(b, nil)
- }
- }
}
opt.RUnlock()
return
diff --git a/vendor/golang.org/x/net/ipv4/control_windows.go b/vendor/golang.org/x/net/ipv4/control_windows.go
index 49a113b58..b27407db9 100644
--- a/vendor/golang.org/x/net/ipv4/control_windows.go
+++ b/vendor/golang.org/x/net/ipv4/control_windows.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/ipv4/defs_darwin.go b/vendor/golang.org/x/net/ipv4/defs_darwin.go
index 731d56a71..c8f2e05b8 100644
--- a/vendor/golang.org/x/net/ipv4/defs_darwin.go
+++ b/vendor/golang.org/x/net/ipv4/defs_darwin.go
@@ -49,29 +49,29 @@ const (
sysMCAST_BLOCK_SOURCE = C.MCAST_BLOCK_SOURCE
sysMCAST_UNBLOCK_SOURCE = C.MCAST_UNBLOCK_SOURCE
- sysSizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
- sysSizeofSockaddrInet = C.sizeof_struct_sockaddr_in
- sysSizeofInetPktinfo = C.sizeof_struct_in_pktinfo
-
- sysSizeofIPMreq = C.sizeof_struct_ip_mreq
- sysSizeofIPMreqn = C.sizeof_struct_ip_mreqn
- sysSizeofIPMreqSource = C.sizeof_struct_ip_mreq_source
- sysSizeofGroupReq = C.sizeof_struct_group_req
- sysSizeofGroupSourceReq = C.sizeof_struct_group_source_req
+ sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
+ sizeofSockaddrInet = C.sizeof_struct_sockaddr_in
+ sizeofInetPktinfo = C.sizeof_struct_in_pktinfo
+
+ sizeofIPMreq = C.sizeof_struct_ip_mreq
+ sizeofIPMreqn = C.sizeof_struct_ip_mreqn
+ sizeofIPMreqSource = C.sizeof_struct_ip_mreq_source
+ sizeofGroupReq = C.sizeof_struct_group_req
+ sizeofGroupSourceReq = C.sizeof_struct_group_source_req
)
-type sysSockaddrStorage C.struct_sockaddr_storage
+type sockaddrStorage C.struct_sockaddr_storage
-type sysSockaddrInet C.struct_sockaddr_in
+type sockaddrInet C.struct_sockaddr_in
-type sysInetPktinfo C.struct_in_pktinfo
+type inetPktinfo C.struct_in_pktinfo
-type sysIPMreq C.struct_ip_mreq
+type ipMreq C.struct_ip_mreq
-type sysIPMreqn C.struct_ip_mreqn
+type ipMreqn C.struct_ip_mreqn
-type sysIPMreqSource C.struct_ip_mreq_source
+type ipMreqSource C.struct_ip_mreq_source
-type sysGroupReq C.struct_group_req
+type groupReq C.struct_group_req
-type sysGroupSourceReq C.struct_group_source_req
+type groupSourceReq C.struct_group_source_req
diff --git a/vendor/golang.org/x/net/ipv4/defs_dragonfly.go b/vendor/golang.org/x/net/ipv4/defs_dragonfly.go
index 08e3b855d..f30544ea2 100644
--- a/vendor/golang.org/x/net/ipv4/defs_dragonfly.go
+++ b/vendor/golang.org/x/net/ipv4/defs_dragonfly.go
@@ -32,7 +32,7 @@ const (
sysIP_ADD_MEMBERSHIP = C.IP_ADD_MEMBERSHIP
sysIP_DROP_MEMBERSHIP = C.IP_DROP_MEMBERSHIP
- sysSizeofIPMreq = C.sizeof_struct_ip_mreq
+ sizeofIPMreq = C.sizeof_struct_ip_mreq
)
-type sysIPMreq C.struct_ip_mreq
+type ipMreq C.struct_ip_mreq
diff --git a/vendor/golang.org/x/net/ipv4/defs_freebsd.go b/vendor/golang.org/x/net/ipv4/defs_freebsd.go
index f12ca327b..4dd57d865 100644
--- a/vendor/golang.org/x/net/ipv4/defs_freebsd.go
+++ b/vendor/golang.org/x/net/ipv4/defs_freebsd.go
@@ -50,26 +50,26 @@ const (
sysMCAST_BLOCK_SOURCE = C.MCAST_BLOCK_SOURCE
sysMCAST_UNBLOCK_SOURCE = C.MCAST_UNBLOCK_SOURCE
- sysSizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
- sysSizeofSockaddrInet = C.sizeof_struct_sockaddr_in
-
- sysSizeofIPMreq = C.sizeof_struct_ip_mreq
- sysSizeofIPMreqn = C.sizeof_struct_ip_mreqn
- sysSizeofIPMreqSource = C.sizeof_struct_ip_mreq_source
- sysSizeofGroupReq = C.sizeof_struct_group_req
- sysSizeofGroupSourceReq = C.sizeof_struct_group_source_req
+ sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
+ sizeofSockaddrInet = C.sizeof_struct_sockaddr_in
+
+ sizeofIPMreq = C.sizeof_struct_ip_mreq
+ sizeofIPMreqn = C.sizeof_struct_ip_mreqn
+ sizeofIPMreqSource = C.sizeof_struct_ip_mreq_source
+ sizeofGroupReq = C.sizeof_struct_group_req
+ sizeofGroupSourceReq = C.sizeof_struct_group_source_req
)
-type sysSockaddrStorage C.struct_sockaddr_storage
+type sockaddrStorage C.struct_sockaddr_storage
-type sysSockaddrInet C.struct_sockaddr_in
+type sockaddrInet C.struct_sockaddr_in
-type sysIPMreq C.struct_ip_mreq
+type ipMreq C.struct_ip_mreq
-type sysIPMreqn C.struct_ip_mreqn
+type ipMreqn C.struct_ip_mreqn
-type sysIPMreqSource C.struct_ip_mreq_source
+type ipMreqSource C.struct_ip_mreq_source
-type sysGroupReq C.struct_group_req
+type groupReq C.struct_group_req
-type sysGroupSourceReq C.struct_group_source_req
+type groupSourceReq C.struct_group_source_req
diff --git a/vendor/golang.org/x/net/ipv4/defs_linux.go b/vendor/golang.org/x/net/ipv4/defs_linux.go
index c4042eb60..31dfa093c 100644
--- a/vendor/golang.org/x/net/ipv4/defs_linux.go
+++ b/vendor/golang.org/x/net/ipv4/defs_linux.go
@@ -81,40 +81,40 @@ const (
sysSOL_SOCKET = C.SOL_SOCKET
sysSO_ATTACH_FILTER = C.SO_ATTACH_FILTER
- sysSizeofKernelSockaddrStorage = C.sizeof_struct___kernel_sockaddr_storage
- sysSizeofSockaddrInet = C.sizeof_struct_sockaddr_in
- sysSizeofInetPktinfo = C.sizeof_struct_in_pktinfo
- sysSizeofSockExtendedErr = C.sizeof_struct_sock_extended_err
-
- sysSizeofIPMreq = C.sizeof_struct_ip_mreq
- sysSizeofIPMreqn = C.sizeof_struct_ip_mreqn
- sysSizeofIPMreqSource = C.sizeof_struct_ip_mreq_source
- sysSizeofGroupReq = C.sizeof_struct_group_req
- sysSizeofGroupSourceReq = C.sizeof_struct_group_source_req
-
- sysSizeofICMPFilter = C.sizeof_struct_icmp_filter
+ sizeofKernelSockaddrStorage = C.sizeof_struct___kernel_sockaddr_storage
+ sizeofSockaddrInet = C.sizeof_struct_sockaddr_in
+ sizeofInetPktinfo = C.sizeof_struct_in_pktinfo
+ sizeofSockExtendedErr = C.sizeof_struct_sock_extended_err
+
+ sizeofIPMreq = C.sizeof_struct_ip_mreq
+ sizeofIPMreqn = C.sizeof_struct_ip_mreqn
+ sizeofIPMreqSource = C.sizeof_struct_ip_mreq_source
+ sizeofGroupReq = C.sizeof_struct_group_req
+ sizeofGroupSourceReq = C.sizeof_struct_group_source_req
+
+ sizeofICMPFilter = C.sizeof_struct_icmp_filter
)
-type sysKernelSockaddrStorage C.struct___kernel_sockaddr_storage
+type kernelSockaddrStorage C.struct___kernel_sockaddr_storage
-type sysSockaddrInet C.struct_sockaddr_in
+type sockaddrInet C.struct_sockaddr_in
-type sysInetPktinfo C.struct_in_pktinfo
+type inetPktinfo C.struct_in_pktinfo
-type sysSockExtendedErr C.struct_sock_extended_err
+type sockExtendedErr C.struct_sock_extended_err
-type sysIPMreq C.struct_ip_mreq
+type ipMreq C.struct_ip_mreq
-type sysIPMreqn C.struct_ip_mreqn
+type ipMreqn C.struct_ip_mreqn
-type sysIPMreqSource C.struct_ip_mreq_source
+type ipMreqSource C.struct_ip_mreq_source
-type sysGroupReq C.struct_group_req
+type groupReq C.struct_group_req
-type sysGroupSourceReq C.struct_group_source_req
+type groupSourceReq C.struct_group_source_req
-type sysICMPFilter C.struct_icmp_filter
+type icmpFilter C.struct_icmp_filter
-type sysSockFProg C.struct_sock_fprog
+type sockFProg C.struct_sock_fprog
-type sysSockFilter C.struct_sock_filter
+type sockFilter C.struct_sock_filter
diff --git a/vendor/golang.org/x/net/ipv4/defs_netbsd.go b/vendor/golang.org/x/net/ipv4/defs_netbsd.go
index 8642354f4..8f8af1b89 100644
--- a/vendor/golang.org/x/net/ipv4/defs_netbsd.go
+++ b/vendor/golang.org/x/net/ipv4/defs_netbsd.go
@@ -31,7 +31,7 @@ const (
sysIP_ADD_MEMBERSHIP = C.IP_ADD_MEMBERSHIP
sysIP_DROP_MEMBERSHIP = C.IP_DROP_MEMBERSHIP
- sysSizeofIPMreq = C.sizeof_struct_ip_mreq
+ sizeofIPMreq = C.sizeof_struct_ip_mreq
)
-type sysIPMreq C.struct_ip_mreq
+type ipMreq C.struct_ip_mreq
diff --git a/vendor/golang.org/x/net/ipv4/defs_openbsd.go b/vendor/golang.org/x/net/ipv4/defs_openbsd.go
index 8642354f4..8f8af1b89 100644
--- a/vendor/golang.org/x/net/ipv4/defs_openbsd.go
+++ b/vendor/golang.org/x/net/ipv4/defs_openbsd.go
@@ -31,7 +31,7 @@ const (
sysIP_ADD_MEMBERSHIP = C.IP_ADD_MEMBERSHIP
sysIP_DROP_MEMBERSHIP = C.IP_DROP_MEMBERSHIP
- sysSizeofIPMreq = C.sizeof_struct_ip_mreq
+ sizeofIPMreq = C.sizeof_struct_ip_mreq
)
-type sysIPMreq C.struct_ip_mreq
+type ipMreq C.struct_ip_mreq
diff --git a/vendor/golang.org/x/net/ipv4/defs_solaris.go b/vendor/golang.org/x/net/ipv4/defs_solaris.go
index bb74afa49..aeb33e9c8 100644
--- a/vendor/golang.org/x/net/ipv4/defs_solaris.go
+++ b/vendor/golang.org/x/net/ipv4/defs_solaris.go
@@ -9,30 +9,24 @@
package ipv4
/*
+#include <sys/socket.h>
+
#include <netinet/in.h>
*/
import "C"
const (
- sysIP_OPTIONS = C.IP_OPTIONS
- sysIP_HDRINCL = C.IP_HDRINCL
- sysIP_TOS = C.IP_TOS
- sysIP_TTL = C.IP_TTL
- sysIP_RECVOPTS = C.IP_RECVOPTS
- sysIP_RECVRETOPTS = C.IP_RECVRETOPTS
- sysIP_RECVDSTADDR = C.IP_RECVDSTADDR
- sysIP_RETOPTS = C.IP_RETOPTS
- sysIP_RECVIF = C.IP_RECVIF
- sysIP_RECVSLLA = C.IP_RECVSLLA
- sysIP_RECVTTL = C.IP_RECVTTL
- sysIP_NEXTHOP = C.IP_NEXTHOP
- sysIP_PKTINFO = C.IP_PKTINFO
- sysIP_RECVPKTINFO = C.IP_RECVPKTINFO
- sysIP_DONTFRAG = C.IP_DONTFRAG
- sysIP_BOUND_IF = C.IP_BOUND_IF
- sysIP_UNSPEC_SRC = C.IP_UNSPEC_SRC
- sysIP_BROADCAST_TTL = C.IP_BROADCAST_TTL
- sysIP_DHCPINIT_IF = C.IP_DHCPINIT_IF
+ sysIP_OPTIONS = C.IP_OPTIONS
+ sysIP_HDRINCL = C.IP_HDRINCL
+ sysIP_TOS = C.IP_TOS
+ sysIP_TTL = C.IP_TTL
+ sysIP_RECVOPTS = C.IP_RECVOPTS
+ sysIP_RECVRETOPTS = C.IP_RECVRETOPTS
+ sysIP_RECVDSTADDR = C.IP_RECVDSTADDR
+ sysIP_RETOPTS = C.IP_RETOPTS
+ sysIP_RECVIF = C.IP_RECVIF
+ sysIP_RECVSLLA = C.IP_RECVSLLA
+ sysIP_RECVTTL = C.IP_RECVTTL
sysIP_MULTICAST_IF = C.IP_MULTICAST_IF
sysIP_MULTICAST_TTL = C.IP_MULTICAST_TTL
@@ -43,15 +37,48 @@ const (
sysIP_UNBLOCK_SOURCE = C.IP_UNBLOCK_SOURCE
sysIP_ADD_SOURCE_MEMBERSHIP = C.IP_ADD_SOURCE_MEMBERSHIP
sysIP_DROP_SOURCE_MEMBERSHIP = C.IP_DROP_SOURCE_MEMBERSHIP
+ sysIP_NEXTHOP = C.IP_NEXTHOP
- sysSizeofInetPktinfo = C.sizeof_struct_in_pktinfo
+ sysIP_PKTINFO = C.IP_PKTINFO
+ sysIP_RECVPKTINFO = C.IP_RECVPKTINFO
+ sysIP_DONTFRAG = C.IP_DONTFRAG
- sysSizeofIPMreq = C.sizeof_struct_ip_mreq
- sysSizeofIPMreqSource = C.sizeof_struct_ip_mreq_source
+ sysIP_BOUND_IF = C.IP_BOUND_IF
+ sysIP_UNSPEC_SRC = C.IP_UNSPEC_SRC
+ sysIP_BROADCAST_TTL = C.IP_BROADCAST_TTL
+ sysIP_DHCPINIT_IF = C.IP_DHCPINIT_IF
+
+ sysIP_REUSEADDR = C.IP_REUSEADDR
+ sysIP_DONTROUTE = C.IP_DONTROUTE
+ sysIP_BROADCAST = C.IP_BROADCAST
+
+ sysMCAST_JOIN_GROUP = C.MCAST_JOIN_GROUP
+ sysMCAST_LEAVE_GROUP = C.MCAST_LEAVE_GROUP
+ sysMCAST_BLOCK_SOURCE = C.MCAST_BLOCK_SOURCE
+ sysMCAST_UNBLOCK_SOURCE = C.MCAST_UNBLOCK_SOURCE
+ sysMCAST_JOIN_SOURCE_GROUP = C.MCAST_JOIN_SOURCE_GROUP
+ sysMCAST_LEAVE_SOURCE_GROUP = C.MCAST_LEAVE_SOURCE_GROUP
+
+ sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
+ sizeofSockaddrInet = C.sizeof_struct_sockaddr_in
+ sizeofInetPktinfo = C.sizeof_struct_in_pktinfo
+
+ sizeofIPMreq = C.sizeof_struct_ip_mreq
+ sizeofIPMreqSource = C.sizeof_struct_ip_mreq_source
+ sizeofGroupReq = C.sizeof_struct_group_req
+ sizeofGroupSourceReq = C.sizeof_struct_group_source_req
)
-type sysInetPktinfo C.struct_in_pktinfo
+type sockaddrStorage C.struct_sockaddr_storage
+
+type sockaddrInet C.struct_sockaddr_in
+
+type inetPktinfo C.struct_in_pktinfo
+
+type ipMreq C.struct_ip_mreq
+
+type ipMreqSource C.struct_ip_mreq_source
-type sysIPMreq C.struct_ip_mreq
+type groupReq C.struct_group_req
-type sysIPMreqSource C.struct_ip_mreq_source
+type groupSourceReq C.struct_group_source_req
diff --git a/vendor/golang.org/x/net/ipv4/dgramopt_posix.go b/vendor/golang.org/x/net/ipv4/dgramopt_posix.go
index 40b5e1cdc..fbc5df198 100644
--- a/vendor/golang.org/x/net/ipv4/dgramopt_posix.go
+++ b/vendor/golang.org/x/net/ipv4/dgramopt_posix.go
@@ -1,8 +1,8 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux netbsd openbsd windows
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
package ipv4
diff --git a/vendor/golang.org/x/net/ipv4/dgramopt_stub.go b/vendor/golang.org/x/net/ipv4/dgramopt_stub.go
index b74df6931..f6b867f92 100644
--- a/vendor/golang.org/x/net/ipv4/dgramopt_stub.go
+++ b/vendor/golang.org/x/net/ipv4/dgramopt_stub.go
@@ -1,8 +1,8 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build nacl plan9 solaris
+// +build nacl plan9
package ipv4
diff --git a/vendor/golang.org/x/net/ipv4/doc.go b/vendor/golang.org/x/net/ipv4/doc.go
index d58a4c9e6..7b25ea2ee 100644
--- a/vendor/golang.org/x/net/ipv4/doc.go
+++ b/vendor/golang.org/x/net/ipv4/doc.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/ipv4/endpoint.go b/vendor/golang.org/x/net/ipv4/endpoint.go
index a8ca2ff67..dc7557b66 100644
--- a/vendor/golang.org/x/net/ipv4/endpoint.go
+++ b/vendor/golang.org/x/net/ipv4/endpoint.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/ipv4/example_test.go b/vendor/golang.org/x/net/ipv4/example_test.go
index 4f5e2f312..ddc7577e8 100644
--- a/vendor/golang.org/x/net/ipv4/example_test.go
+++ b/vendor/golang.org/x/net/ipv4/example_test.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/ipv4/gen.go b/vendor/golang.org/x/net/ipv4/gen.go
index cbe70327b..ffb44fe68 100644
--- a/vendor/golang.org/x/net/ipv4/gen.go
+++ b/vendor/golang.org/x/net/ipv4/gen.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -52,15 +52,6 @@ func genzsys() error {
if err != nil {
return err
}
- // The ipv4 package still supports go1.2, and so we need to
- // take care of additional platforms in go1.3 and above for
- // working with go1.2.
- switch {
- case runtime.GOOS == "dragonfly" || runtime.GOOS == "solaris":
- b = bytes.Replace(b, []byte("package ipv4\n"), []byte("// +build "+runtime.GOOS+"\n\npackage ipv4\n"), 1)
- case runtime.GOOS == "linux" && (runtime.GOARCH == "arm64" || runtime.GOARCH == "mips64" || runtime.GOARCH == "mips64le" || runtime.GOARCH == "ppc" || runtime.GOARCH == "ppc64" || runtime.GOARCH == "ppc64le" || runtime.GOARCH == "s390x"):
- b = bytes.Replace(b, []byte("package ipv4\n"), []byte("// +build "+runtime.GOOS+","+runtime.GOARCH+"\n\npackage ipv4\n"), 1)
- }
b, err = format.Source(b)
if err != nil {
return err
diff --git a/vendor/golang.org/x/net/ipv4/genericopt_posix.go b/vendor/golang.org/x/net/ipv4/genericopt_posix.go
index 53bc79ff5..58168b737 100644
--- a/vendor/golang.org/x/net/ipv4/genericopt_posix.go
+++ b/vendor/golang.org/x/net/ipv4/genericopt_posix.go
@@ -1,8 +1,8 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux netbsd openbsd windows
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
package ipv4
diff --git a/vendor/golang.org/x/net/ipv4/genericopt_stub.go b/vendor/golang.org/x/net/ipv4/genericopt_stub.go
index 1817badb1..661a4d1ab 100644
--- a/vendor/golang.org/x/net/ipv4/genericopt_stub.go
+++ b/vendor/golang.org/x/net/ipv4/genericopt_stub.go
@@ -1,8 +1,8 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build nacl plan9 solaris
+// +build nacl plan9
package ipv4
diff --git a/vendor/golang.org/x/net/ipv4/header.go b/vendor/golang.org/x/net/ipv4/header.go
index 363d9c21a..6dc26d43f 100644
--- a/vendor/golang.org/x/net/ipv4/header.go
+++ b/vendor/golang.org/x/net/ipv4/header.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -63,9 +63,17 @@ func (h *Header) Marshal() ([]byte, error) {
b[1] = byte(h.TOS)
flagsAndFragOff := (h.FragOff & 0x1fff) | int(h.Flags<<13)
switch runtime.GOOS {
- case "darwin", "dragonfly", "freebsd", "netbsd":
+ case "darwin", "dragonfly", "netbsd":
nativeEndian.PutUint16(b[2:4], uint16(h.TotalLen))
nativeEndian.PutUint16(b[6:8], uint16(flagsAndFragOff))
+ case "freebsd":
+ if freebsdVersion < 1100000 {
+ nativeEndian.PutUint16(b[2:4], uint16(h.TotalLen))
+ nativeEndian.PutUint16(b[6:8], uint16(flagsAndFragOff))
+ } else {
+ binary.BigEndian.PutUint16(b[2:4], uint16(h.TotalLen))
+ binary.BigEndian.PutUint16(b[6:8], uint16(flagsAndFragOff))
+ }
default:
binary.BigEndian.PutUint16(b[2:4], uint16(h.TotalLen))
binary.BigEndian.PutUint16(b[6:8], uint16(flagsAndFragOff))
@@ -113,11 +121,16 @@ func ParseHeader(b []byte) (*Header, error) {
h.TotalLen = int(nativeEndian.Uint16(b[2:4])) + hdrlen
h.FragOff = int(nativeEndian.Uint16(b[6:8]))
case "freebsd":
- h.TotalLen = int(nativeEndian.Uint16(b[2:4]))
- if freebsdVersion < 1000000 {
- h.TotalLen += hdrlen
+ if freebsdVersion < 1100000 {
+ h.TotalLen = int(nativeEndian.Uint16(b[2:4]))
+ if freebsdVersion < 1000000 {
+ h.TotalLen += hdrlen
+ }
+ h.FragOff = int(nativeEndian.Uint16(b[6:8]))
+ } else {
+ h.TotalLen = int(binary.BigEndian.Uint16(b[2:4]))
+ h.FragOff = int(binary.BigEndian.Uint16(b[6:8]))
}
- h.FragOff = int(nativeEndian.Uint16(b[6:8]))
default:
h.TotalLen = int(binary.BigEndian.Uint16(b[2:4]))
h.FragOff = int(binary.BigEndian.Uint16(b[6:8]))
diff --git a/vendor/golang.org/x/net/ipv4/header_test.go b/vendor/golang.org/x/net/ipv4/header_test.go
index 85cb9c489..cdf27fd03 100644
--- a/vendor/golang.org/x/net/ipv4/header_test.go
+++ b/vendor/golang.org/x/net/ipv4/header_test.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -18,8 +18,9 @@ type headerTest struct {
wireHeaderFromKernel [HeaderLen]byte
wireHeaderToKernel [HeaderLen]byte
wireHeaderFromTradBSDKernel [HeaderLen]byte
- wireHeaderFromFreeBSD10Kernel [HeaderLen]byte
wireHeaderToTradBSDKernel [HeaderLen]byte
+ wireHeaderFromFreeBSD10Kernel [HeaderLen]byte
+ wireHeaderToFreeBSD10Kernel [HeaderLen]byte
*Header
}
@@ -47,6 +48,13 @@ var headerLittleEndianTest = headerTest{
172, 16, 254, 254,
192, 168, 0, 1,
},
+ wireHeaderToTradBSDKernel: [HeaderLen]byte{
+ 0x45, 0x01, 0xef, 0xbe,
+ 0xca, 0xfe, 0xdc, 0x45,
+ 0xff, 0x01, 0xde, 0xad,
+ 172, 16, 254, 254,
+ 192, 168, 0, 1,
+ },
wireHeaderFromFreeBSD10Kernel: [HeaderLen]byte{
0x45, 0x01, 0xef, 0xbe,
0xca, 0xfe, 0xdc, 0x45,
@@ -54,7 +62,7 @@ var headerLittleEndianTest = headerTest{
172, 16, 254, 254,
192, 168, 0, 1,
},
- wireHeaderToTradBSDKernel: [HeaderLen]byte{
+ wireHeaderToFreeBSD10Kernel: [HeaderLen]byte{
0x45, 0x01, 0xef, 0xbe,
0xca, 0xfe, 0xdc, 0x45,
0xff, 0x01, 0xde, 0xad,
@@ -92,10 +100,13 @@ func TestMarshalHeader(t *testing.T) {
case "darwin", "dragonfly", "netbsd":
wh = tt.wireHeaderToTradBSDKernel[:]
case "freebsd":
- if freebsdVersion < 1000000 {
+ switch {
+ case freebsdVersion < 1000000:
wh = tt.wireHeaderToTradBSDKernel[:]
- } else {
- wh = tt.wireHeaderFromFreeBSD10Kernel[:]
+ case 1000000 <= freebsdVersion && freebsdVersion < 1100000:
+ wh = tt.wireHeaderToFreeBSD10Kernel[:]
+ default:
+ wh = tt.wireHeaderToKernel[:]
}
default:
wh = tt.wireHeaderToKernel[:]
@@ -116,10 +127,13 @@ func TestParseHeader(t *testing.T) {
case "darwin", "dragonfly", "netbsd":
wh = tt.wireHeaderFromTradBSDKernel[:]
case "freebsd":
- if freebsdVersion < 1000000 {
+ switch {
+ case freebsdVersion < 1000000:
wh = tt.wireHeaderFromTradBSDKernel[:]
- } else {
+ case 1000000 <= freebsdVersion && freebsdVersion < 1100000:
wh = tt.wireHeaderFromFreeBSD10Kernel[:]
+ default:
+ wh = tt.wireHeaderFromKernel[:]
}
default:
wh = tt.wireHeaderFromKernel[:]
diff --git a/vendor/golang.org/x/net/ipv4/helper.go b/vendor/golang.org/x/net/ipv4/helper.go
index acecfd0d3..083897995 100644
--- a/vendor/golang.org/x/net/ipv4/helper.go
+++ b/vendor/golang.org/x/net/ipv4/helper.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/ipv4/icmp.go b/vendor/golang.org/x/net/ipv4/icmp.go
index dbd05cff2..097bea846 100644
--- a/vendor/golang.org/x/net/ipv4/icmp.go
+++ b/vendor/golang.org/x/net/ipv4/icmp.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -31,7 +31,7 @@ func (typ ICMPType) Protocol() int {
// A router means a node that forwards IP packets not explicitly
// addressed to itself, and a host means a node that is not a router.
type ICMPFilter struct {
- sysICMPFilter
+ icmpFilter
}
// Accept accepts incoming ICMP packets including the type field value
diff --git a/vendor/golang.org/x/net/ipv4/icmp_linux.go b/vendor/golang.org/x/net/ipv4/icmp_linux.go
index c91225335..6e1c5c80a 100644
--- a/vendor/golang.org/x/net/ipv4/icmp_linux.go
+++ b/vendor/golang.org/x/net/ipv4/icmp_linux.go
@@ -4,15 +4,15 @@
package ipv4
-func (f *sysICMPFilter) accept(typ ICMPType) {
+func (f *icmpFilter) accept(typ ICMPType) {
f.Data &^= 1 << (uint32(typ) & 31)
}
-func (f *sysICMPFilter) block(typ ICMPType) {
+func (f *icmpFilter) block(typ ICMPType) {
f.Data |= 1 << (uint32(typ) & 31)
}
-func (f *sysICMPFilter) setAll(block bool) {
+func (f *icmpFilter) setAll(block bool) {
if block {
f.Data = 1<<32 - 1
} else {
@@ -20,6 +20,6 @@ func (f *sysICMPFilter) setAll(block bool) {
}
}
-func (f *sysICMPFilter) willBlock(typ ICMPType) bool {
+func (f *icmpFilter) willBlock(typ ICMPType) bool {
return f.Data&(1<<(uint32(typ)&31)) != 0
}
diff --git a/vendor/golang.org/x/net/ipv4/icmp_stub.go b/vendor/golang.org/x/net/ipv4/icmp_stub.go
index 9ee9b6a32..21bb29ab3 100644
--- a/vendor/golang.org/x/net/ipv4/icmp_stub.go
+++ b/vendor/golang.org/x/net/ipv4/icmp_stub.go
@@ -6,20 +6,20 @@
package ipv4
-const sysSizeofICMPFilter = 0x0
+const sizeofICMPFilter = 0x0
-type sysICMPFilter struct {
+type icmpFilter struct {
}
-func (f *sysICMPFilter) accept(typ ICMPType) {
+func (f *icmpFilter) accept(typ ICMPType) {
}
-func (f *sysICMPFilter) block(typ ICMPType) {
+func (f *icmpFilter) block(typ ICMPType) {
}
-func (f *sysICMPFilter) setAll(block bool) {
+func (f *icmpFilter) setAll(block bool) {
}
-func (f *sysICMPFilter) willBlock(typ ICMPType) bool {
+func (f *icmpFilter) willBlock(typ ICMPType) bool {
return false
}
diff --git a/vendor/golang.org/x/net/ipv4/mocktransponder_test.go b/vendor/golang.org/x/net/ipv4/mocktransponder_test.go
index e55aaee91..e96c48af8 100644
--- a/vendor/golang.org/x/net/ipv4/mocktransponder_test.go
+++ b/vendor/golang.org/x/net/ipv4/mocktransponder_test.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/ipv4/multicast_test.go b/vendor/golang.org/x/net/ipv4/multicast_test.go
index d2bcf8533..bcf49736b 100644
--- a/vendor/golang.org/x/net/ipv4/multicast_test.go
+++ b/vendor/golang.org/x/net/ipv4/multicast_test.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -166,7 +166,11 @@ func TestPacketConnReadWriteMulticastICMP(t *testing.T) {
if _, err := p.MulticastLoopback(); err != nil {
t.Fatal(err)
}
- cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
+ cf := ipv4.FlagDst | ipv4.FlagInterface
+ if runtime.GOOS != "solaris" {
+ // Solaris never allows to modify ICMP properties.
+ cf |= ipv4.FlagTTL
+ }
for i, toggle := range []bool{true, false, true} {
wb, err := (&icmp.Message{
diff --git a/vendor/golang.org/x/net/ipv4/multicastlistener_test.go b/vendor/golang.org/x/net/ipv4/multicastlistener_test.go
index e342bf1d9..a0c24b55b 100644
--- a/vendor/golang.org/x/net/ipv4/multicastlistener_test.go
+++ b/vendor/golang.org/x/net/ipv4/multicastlistener_test.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -21,7 +21,7 @@ var udpMultipleGroupListenerTests = []net.Addr{
func TestUDPSinglePacketConnWithMultipleGroupListeners(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if testing.Short() {
@@ -61,7 +61,7 @@ func TestUDPSinglePacketConnWithMultipleGroupListeners(t *testing.T) {
func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if testing.Short() {
@@ -113,7 +113,7 @@ func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) {
func TestUDPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if testing.Short() {
@@ -156,7 +156,7 @@ func TestUDPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) {
func TestIPSingleRawConnWithSingleGroupListener(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if testing.Short() {
@@ -201,7 +201,7 @@ func TestIPSingleRawConnWithSingleGroupListener(t *testing.T) {
func TestIPPerInterfaceSingleRawConnWithSingleGroupListener(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if testing.Short() {
diff --git a/vendor/golang.org/x/net/ipv4/multicastsockopt_test.go b/vendor/golang.org/x/net/ipv4/multicastsockopt_test.go
index c76dbe4de..f7efac24c 100644
--- a/vendor/golang.org/x/net/ipv4/multicastsockopt_test.go
+++ b/vendor/golang.org/x/net/ipv4/multicastsockopt_test.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -26,7 +26,7 @@ var packetConnMulticastSocketOptionTests = []struct {
func TestPacketConnMulticastSocketOptions(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris":
+ case "nacl", "plan9":
t.Skipf("not supported on %s", runtime.GOOS)
}
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
@@ -66,7 +66,7 @@ var rawConnMulticastSocketOptionTests = []struct {
func TestRawConnMulticastSocketOptions(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris":
+ case "nacl", "plan9":
t.Skipf("not supported on %s", runtime.GOOS)
}
if m, ok := nettest.SupportsRawIPSocket(); !ok {
diff --git a/vendor/golang.org/x/net/ipv4/packet.go b/vendor/golang.org/x/net/ipv4/packet.go
index 09864314e..a4ff8159b 100644
--- a/vendor/golang.org/x/net/ipv4/packet.go
+++ b/vendor/golang.org/x/net/ipv4/packet.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/ipv4/payload.go b/vendor/golang.org/x/net/ipv4/payload.go
index d7698cbd3..25ca8a5fb 100644
--- a/vendor/golang.org/x/net/ipv4/payload.go
+++ b/vendor/golang.org/x/net/ipv4/payload.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/ipv4/payload_cmsg.go b/vendor/golang.org/x/net/ipv4/payload_cmsg.go
index d358fc3ac..9bcde8f9a 100644
--- a/vendor/golang.org/x/net/ipv4/payload_cmsg.go
+++ b/vendor/golang.org/x/net/ipv4/payload_cmsg.go
@@ -1,8 +1,8 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build !plan9,!solaris,!windows
+// +build !plan9,!windows
package ipv4
diff --git a/vendor/golang.org/x/net/ipv4/payload_nocmsg.go b/vendor/golang.org/x/net/ipv4/payload_nocmsg.go
index d128c9c2e..6f1b402f7 100644
--- a/vendor/golang.org/x/net/ipv4/payload_nocmsg.go
+++ b/vendor/golang.org/x/net/ipv4/payload_nocmsg.go
@@ -1,8 +1,8 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build plan9 solaris windows
+// +build plan9 windows
package ipv4
diff --git a/vendor/golang.org/x/net/ipv4/readwrite_test.go b/vendor/golang.org/x/net/ipv4/readwrite_test.go
index 247d06c1a..a2384b8f9 100644
--- a/vendor/golang.org/x/net/ipv4/readwrite_test.go
+++ b/vendor/golang.org/x/net/ipv4/readwrite_test.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -91,7 +91,7 @@ func benchmarkReadWriteIPv4UDP(b *testing.B, p *ipv4.PacketConn, wb, rb []byte,
func TestPacketConnConcurrentReadWriteUnicastUDP(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
diff --git a/vendor/golang.org/x/net/ipv4/sockopt_asmreq.go b/vendor/golang.org/x/net/ipv4/sockopt_asmreq.go
index 4a6aa78ef..8092f1db0 100644
--- a/vendor/golang.org/x/net/ipv4/sockopt_asmreq.go
+++ b/vendor/golang.org/x/net/ipv4/sockopt_asmreq.go
@@ -1,14 +1,14 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd netbsd openbsd windows
+// +build darwin dragonfly freebsd netbsd openbsd solaris windows
package ipv4
import "net"
-func setIPMreqInterface(mreq *sysIPMreq, ifi *net.Interface) error {
+func setIPMreqInterface(mreq *ipMreq, ifi *net.Interface) error {
if ifi == nil {
return nil
}
diff --git a/vendor/golang.org/x/net/ipv4/sockopt_asmreq_posix.go b/vendor/golang.org/x/net/ipv4/sockopt_asmreq_posix.go
index ef9b13902..2259a3903 100644
--- a/vendor/golang.org/x/net/ipv4/sockopt_asmreq_posix.go
+++ b/vendor/golang.org/x/net/ipv4/sockopt_asmreq_posix.go
@@ -1,8 +1,8 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd netbsd openbsd windows
+// +build darwin dragonfly freebsd netbsd openbsd solaris windows
package ipv4
@@ -15,11 +15,11 @@ import (
)
func setsockoptIPMreq(s uintptr, name int, ifi *net.Interface, grp net.IP) error {
- mreq := sysIPMreq{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3]}}
+ mreq := ipMreq{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3]}}
if err := setIPMreqInterface(&mreq, ifi); err != nil {
return err
}
- return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolIP, name, unsafe.Pointer(&mreq), sysSizeofIPMreq))
+ return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolIP, name, unsafe.Pointer(&mreq), sizeofIPMreq))
}
func getsockoptInterface(s uintptr, name int) (*net.Interface, error) {
diff --git a/vendor/golang.org/x/net/ipv4/sockopt_asmreq_stub.go b/vendor/golang.org/x/net/ipv4/sockopt_asmreq_stub.go
index 9f7b655f5..e655635ec 100644
--- a/vendor/golang.org/x/net/ipv4/sockopt_asmreq_stub.go
+++ b/vendor/golang.org/x/net/ipv4/sockopt_asmreq_stub.go
@@ -1,8 +1,8 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build !darwin,!dragonfly,!freebsd,!netbsd,!openbsd,!windows
+// +build !darwin,!dragonfly,!freebsd,!netbsd,!openbsd,!solaris,!windows
package ipv4
diff --git a/vendor/golang.org/x/net/ipv4/sockopt_asmreqn_unix.go b/vendor/golang.org/x/net/ipv4/sockopt_asmreqn_unix.go
index 9d4069ff5..92daffb0d 100644
--- a/vendor/golang.org/x/net/ipv4/sockopt_asmreqn_unix.go
+++ b/vendor/golang.org/x/net/ipv4/sockopt_asmreqn_unix.go
@@ -15,8 +15,8 @@ import (
)
func getsockoptIPMreqn(s uintptr, name int) (*net.Interface, error) {
- var mreqn sysIPMreqn
- l := uint32(sysSizeofIPMreqn)
+ var mreqn ipMreqn
+ l := uint32(sizeofIPMreqn)
if err := getsockopt(s, iana.ProtocolIP, name, unsafe.Pointer(&mreqn), &l); err != nil {
return nil, os.NewSyscallError("getsockopt", err)
}
@@ -31,12 +31,12 @@ func getsockoptIPMreqn(s uintptr, name int) (*net.Interface, error) {
}
func setsockoptIPMreqn(s uintptr, name int, ifi *net.Interface, grp net.IP) error {
- var mreqn sysIPMreqn
+ var mreqn ipMreqn
if ifi != nil {
mreqn.Ifindex = int32(ifi.Index)
}
if grp != nil {
mreqn.Multiaddr = [4]byte{grp[0], grp[1], grp[2], grp[3]}
}
- return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolIP, name, unsafe.Pointer(&mreqn), sysSizeofIPMreqn))
+ return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolIP, name, unsafe.Pointer(&mreqn), sizeofIPMreqn))
}
diff --git a/vendor/golang.org/x/net/ipv4/sockopt_posix.go b/vendor/golang.org/x/net/ipv4/sockopt_posix.go
index 0b7d6b659..d80680373 100644
--- a/vendor/golang.org/x/net/ipv4/sockopt_posix.go
+++ b/vendor/golang.org/x/net/ipv4/sockopt_posix.go
@@ -1,8 +1,8 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux netbsd openbsd windows
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
package ipv4
@@ -84,8 +84,8 @@ func getICMPFilter(s uintptr, opt *sockOpt) (*ICMPFilter, error) {
return nil, errOpNoSupport
}
var f ICMPFilter
- l := uint32(sysSizeofICMPFilter)
- if err := getsockopt(s, iana.ProtocolReserved, opt.name, unsafe.Pointer(&f.sysICMPFilter), &l); err != nil {
+ l := uint32(sizeofICMPFilter)
+ if err := getsockopt(s, iana.ProtocolReserved, opt.name, unsafe.Pointer(&f.icmpFilter), &l); err != nil {
return nil, os.NewSyscallError("getsockopt", err)
}
return &f, nil
@@ -95,7 +95,7 @@ func setICMPFilter(s uintptr, opt *sockOpt, f *ICMPFilter) error {
if opt.name < 1 || opt.typ != ssoTypeICMPFilter {
return errOpNoSupport
}
- return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolReserved, opt.name, unsafe.Pointer(&f.sysICMPFilter), sysSizeofICMPFilter))
+ return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolReserved, opt.name, unsafe.Pointer(&f.icmpFilter), sizeofICMPFilter))
}
func setGroup(s uintptr, opt *sockOpt, ifi *net.Interface, grp net.IP) error {
diff --git a/vendor/golang.org/x/net/ipv4/sockopt_ssmreq_stub.go b/vendor/golang.org/x/net/ipv4/sockopt_ssmreq_stub.go
index e2d98fdf5..02873962e 100644
--- a/vendor/golang.org/x/net/ipv4/sockopt_ssmreq_stub.go
+++ b/vendor/golang.org/x/net/ipv4/sockopt_ssmreq_stub.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build !darwin,!freebsd,!linux
+// +build !darwin,!freebsd,!linux,!solaris
package ipv4
diff --git a/vendor/golang.org/x/net/ipv4/sockopt_ssmreq_unix.go b/vendor/golang.org/x/net/ipv4/sockopt_ssmreq_unix.go
index 588e9b943..c9af55b91 100644
--- a/vendor/golang.org/x/net/ipv4/sockopt_ssmreq_unix.go
+++ b/vendor/golang.org/x/net/ipv4/sockopt_ssmreq_unix.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin freebsd linux
+// +build darwin freebsd linux solaris
package ipv4
@@ -17,7 +17,7 @@ import (
var freebsd32o64 bool
func setsockoptGroupReq(s uintptr, name int, ifi *net.Interface, grp net.IP) error {
- var gr sysGroupReq
+ var gr groupReq
if ifi != nil {
gr.Interface = uint32(ifi.Index)
}
@@ -25,21 +25,21 @@ func setsockoptGroupReq(s uintptr, name int, ifi *net.Interface, grp net.IP) err
var p unsafe.Pointer
var l uint32
if freebsd32o64 {
- var d [sysSizeofGroupReq + 4]byte
- s := (*[sysSizeofGroupReq]byte)(unsafe.Pointer(&gr))
+ var d [sizeofGroupReq + 4]byte
+ s := (*[sizeofGroupReq]byte)(unsafe.Pointer(&gr))
copy(d[:4], s[:4])
copy(d[8:], s[4:])
p = unsafe.Pointer(&d[0])
- l = sysSizeofGroupReq + 4
+ l = sizeofGroupReq + 4
} else {
p = unsafe.Pointer(&gr)
- l = sysSizeofGroupReq
+ l = sizeofGroupReq
}
return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolIP, name, p, l))
}
func setsockoptGroupSourceReq(s uintptr, name int, ifi *net.Interface, grp, src net.IP) error {
- var gsr sysGroupSourceReq
+ var gsr groupSourceReq
if ifi != nil {
gsr.Interface = uint32(ifi.Index)
}
@@ -47,15 +47,15 @@ func setsockoptGroupSourceReq(s uintptr, name int, ifi *net.Interface, grp, src
var p unsafe.Pointer
var l uint32
if freebsd32o64 {
- var d [sysSizeofGroupSourceReq + 4]byte
- s := (*[sysSizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr))
+ var d [sizeofGroupSourceReq + 4]byte
+ s := (*[sizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr))
copy(d[:4], s[:4])
copy(d[8:], s[4:])
p = unsafe.Pointer(&d[0])
- l = sysSizeofGroupSourceReq + 4
+ l = sizeofGroupSourceReq + 4
} else {
p = unsafe.Pointer(&gsr)
- l = sysSizeofGroupSourceReq
+ l = sizeofGroupSourceReq
}
return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolIP, name, p, l))
}
diff --git a/vendor/golang.org/x/net/ipv4/sockopt_stub.go b/vendor/golang.org/x/net/ipv4/sockopt_stub.go
index 7cfe57ca3..4ff609917 100644
--- a/vendor/golang.org/x/net/ipv4/sockopt_stub.go
+++ b/vendor/golang.org/x/net/ipv4/sockopt_stub.go
@@ -1,8 +1,8 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build nacl plan9 solaris
+// +build nacl plan9
package ipv4
diff --git a/vendor/golang.org/x/net/ipv4/sys_darwin.go b/vendor/golang.org/x/net/ipv4/sys_darwin.go
index b5f5bd515..bc694141c 100644
--- a/vendor/golang.org/x/net/ipv4/sys_darwin.go
+++ b/vendor/golang.org/x/net/ipv4/sys_darwin.go
@@ -52,7 +52,7 @@ func init() {
// See http://support.apple.com/kb/HT1633.
if i > 2 || i == 2 && osver[0] >= '1' && osver[1] >= '2' {
ctlOpts[ctlPacketInfo].name = sysIP_PKTINFO
- ctlOpts[ctlPacketInfo].length = sysSizeofInetPktinfo
+ ctlOpts[ctlPacketInfo].length = sizeofInetPktinfo
ctlOpts[ctlPacketInfo].marshal = marshalPacketInfo
ctlOpts[ctlPacketInfo].parse = parsePacketInfo
sockOpts[ssoPacketInfo].name = sysIP_RECVPKTINFO
@@ -73,24 +73,24 @@ func init() {
}
}
-func (pi *sysInetPktinfo) setIfindex(i int) {
+func (pi *inetPktinfo) setIfindex(i int) {
pi.Ifindex = uint32(i)
}
-func (gr *sysGroupReq) setGroup(grp net.IP) {
- sa := (*sysSockaddrInet)(unsafe.Pointer(&gr.Pad_cgo_0[0]))
- sa.Len = sysSizeofSockaddrInet
+func (gr *groupReq) setGroup(grp net.IP) {
+ sa := (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gr)) + 4))
+ sa.Len = sizeofSockaddrInet
sa.Family = syscall.AF_INET
copy(sa.Addr[:], grp)
}
-func (gsr *sysGroupSourceReq) setSourceGroup(grp, src net.IP) {
- sa := (*sysSockaddrInet)(unsafe.Pointer(&gsr.Pad_cgo_0[0]))
- sa.Len = sysSizeofSockaddrInet
+func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) {
+ sa := (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 4))
+ sa.Len = sizeofSockaddrInet
sa.Family = syscall.AF_INET
copy(sa.Addr[:], grp)
- sa = (*sysSockaddrInet)(unsafe.Pointer(&gsr.Pad_cgo_1[0]))
- sa.Len = sysSizeofSockaddrInet
+ sa = (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 132))
+ sa.Len = sizeofSockaddrInet
sa.Family = syscall.AF_INET
copy(sa.Addr[:], src)
}
diff --git a/vendor/golang.org/x/net/ipv4/sys_freebsd.go b/vendor/golang.org/x/net/ipv4/sys_freebsd.go
index 163ff9a77..fceffe98e 100644
--- a/vendor/golang.org/x/net/ipv4/sys_freebsd.go
+++ b/vendor/golang.org/x/net/ipv4/sys_freebsd.go
@@ -54,20 +54,20 @@ func init() {
}
}
-func (gr *sysGroupReq) setGroup(grp net.IP) {
- sa := (*sysSockaddrInet)(unsafe.Pointer(&gr.Group))
- sa.Len = sysSizeofSockaddrInet
+func (gr *groupReq) setGroup(grp net.IP) {
+ sa := (*sockaddrInet)(unsafe.Pointer(&gr.Group))
+ sa.Len = sizeofSockaddrInet
sa.Family = syscall.AF_INET
copy(sa.Addr[:], grp)
}
-func (gsr *sysGroupSourceReq) setSourceGroup(grp, src net.IP) {
- sa := (*sysSockaddrInet)(unsafe.Pointer(&gsr.Group))
- sa.Len = sysSizeofSockaddrInet
+func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) {
+ sa := (*sockaddrInet)(unsafe.Pointer(&gsr.Group))
+ sa.Len = sizeofSockaddrInet
sa.Family = syscall.AF_INET
copy(sa.Addr[:], grp)
- sa = (*sysSockaddrInet)(unsafe.Pointer(&gsr.Source))
- sa.Len = sysSizeofSockaddrInet
+ sa = (*sockaddrInet)(unsafe.Pointer(&gsr.Source))
+ sa.Len = sizeofSockaddrInet
sa.Family = syscall.AF_INET
copy(sa.Addr[:], src)
}
diff --git a/vendor/golang.org/x/net/ipv4/sys_linux.go b/vendor/golang.org/x/net/ipv4/sys_linux.go
index 73e0d4623..c6c2a5067 100644
--- a/vendor/golang.org/x/net/ipv4/sys_linux.go
+++ b/vendor/golang.org/x/net/ipv4/sys_linux.go
@@ -13,7 +13,7 @@ import (
var (
ctlOpts = [ctlMax]ctlOpt{
ctlTTL: {sysIP_TTL, 1, marshalTTL, parseTTL},
- ctlPacketInfo: {sysIP_PKTINFO, sysSizeofInetPktinfo, marshalPacketInfo, parsePacketInfo},
+ ctlPacketInfo: {sysIP_PKTINFO, sizeofInetPktinfo, marshalPacketInfo, parsePacketInfo},
}
sockOpts = [ssoMax]sockOpt{
@@ -35,21 +35,21 @@ var (
}
)
-func (pi *sysInetPktinfo) setIfindex(i int) {
+func (pi *inetPktinfo) setIfindex(i int) {
pi.Ifindex = int32(i)
}
-func (gr *sysGroupReq) setGroup(grp net.IP) {
- sa := (*sysSockaddrInet)(unsafe.Pointer(&gr.Group))
+func (gr *groupReq) setGroup(grp net.IP) {
+ sa := (*sockaddrInet)(unsafe.Pointer(&gr.Group))
sa.Family = syscall.AF_INET
copy(sa.Addr[:], grp)
}
-func (gsr *sysGroupSourceReq) setSourceGroup(grp, src net.IP) {
- sa := (*sysSockaddrInet)(unsafe.Pointer(&gsr.Group))
+func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) {
+ sa := (*sockaddrInet)(unsafe.Pointer(&gsr.Group))
sa.Family = syscall.AF_INET
copy(sa.Addr[:], grp)
- sa = (*sysSockaddrInet)(unsafe.Pointer(&gsr.Source))
+ sa = (*sockaddrInet)(unsafe.Pointer(&gsr.Source))
sa.Family = syscall.AF_INET
copy(sa.Addr[:], src)
}
diff --git a/vendor/golang.org/x/net/ipv4/thunk_linux_386.s b/vendor/golang.org/x/net/ipv4/sys_linux_386.s
index daa78bc02..b85551a5c 100644
--- a/vendor/golang.org/x/net/ipv4/thunk_linux_386.s
+++ b/vendor/golang.org/x/net/ipv4/sys_linux_386.s
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build go1.2
+#include "textflag.h"
-TEXT ·socketcall(SB),4,$0-36
+TEXT ·socketcall(SB),NOSPLIT,$0-36
JMP syscall·socketcall(SB)
diff --git a/vendor/golang.org/x/net/ipv4/sys_solaris.go b/vendor/golang.org/x/net/ipv4/sys_solaris.go
new file mode 100644
index 000000000..879f39e0a
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv4/sys_solaris.go
@@ -0,0 +1,54 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package ipv4
+
+import (
+ "net"
+ "syscall"
+ "unsafe"
+)
+
+var (
+ ctlOpts = [ctlMax]ctlOpt{
+ ctlTTL: {sysIP_RECVTTL, 4, marshalTTL, parseTTL},
+ ctlPacketInfo: {sysIP_PKTINFO, sizeofInetPktinfo, marshalPacketInfo, parsePacketInfo},
+ }
+
+ sockOpts = [ssoMax]sockOpt{
+ ssoTOS: {sysIP_TOS, ssoTypeInt},
+ ssoTTL: {sysIP_TTL, ssoTypeInt},
+ ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeByte},
+ ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeInterface},
+ ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeByte},
+ ssoReceiveTTL: {sysIP_RECVTTL, ssoTypeInt},
+ ssoPacketInfo: {sysIP_RECVPKTINFO, ssoTypeInt},
+ ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt},
+ ssoJoinGroup: {sysMCAST_JOIN_GROUP, ssoTypeGroupReq},
+ ssoLeaveGroup: {sysMCAST_LEAVE_GROUP, ssoTypeGroupReq},
+ ssoJoinSourceGroup: {sysMCAST_JOIN_SOURCE_GROUP, ssoTypeGroupSourceReq},
+ ssoLeaveSourceGroup: {sysMCAST_LEAVE_SOURCE_GROUP, ssoTypeGroupSourceReq},
+ ssoBlockSourceGroup: {sysMCAST_BLOCK_SOURCE, ssoTypeGroupSourceReq},
+ ssoUnblockSourceGroup: {sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq},
+ }
+)
+
+func (pi *inetPktinfo) setIfindex(i int) {
+ pi.Ifindex = uint32(i)
+}
+
+func (gr *groupReq) setGroup(grp net.IP) {
+ sa := (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gr)) + 4))
+ sa.Family = syscall.AF_INET
+ copy(sa.Addr[:], grp)
+}
+
+func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) {
+ sa := (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 4))
+ sa.Family = syscall.AF_INET
+ copy(sa.Addr[:], grp)
+ sa = (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 260))
+ sa.Family = syscall.AF_INET
+ copy(sa.Addr[:], src)
+}
diff --git a/vendor/golang.org/x/net/ipv4/sys_solaris_amd64.s b/vendor/golang.org/x/net/ipv4/sys_solaris_amd64.s
new file mode 100644
index 000000000..39d76af79
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv4/sys_solaris_amd64.s
@@ -0,0 +1,8 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+#include "textflag.h"
+
+TEXT ·sysvicall6(SB),NOSPLIT,$0-88
+ JMP syscall·sysvicall6(SB)
diff --git a/vendor/golang.org/x/net/ipv4/sys_stub.go b/vendor/golang.org/x/net/ipv4/sys_stub.go
index c8e55cbc8..d6dd812fd 100644
--- a/vendor/golang.org/x/net/ipv4/sys_stub.go
+++ b/vendor/golang.org/x/net/ipv4/sys_stub.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build nacl plan9 solaris
+// +build nacl plan9
package ipv4
diff --git a/vendor/golang.org/x/net/ipv4/sys_windows.go b/vendor/golang.org/x/net/ipv4/sys_windows.go
index 466489fe0..3f4c5357b 100644
--- a/vendor/golang.org/x/net/ipv4/sys_windows.go
+++ b/vendor/golang.org/x/net/ipv4/sys_windows.go
@@ -20,22 +20,22 @@ const (
sysIP_DROP_SOURCE_MEMBERSHIP = 0x10
sysIP_PKTINFO = 0x13
- sysSizeofInetPktinfo = 0x8
- sysSizeofIPMreq = 0x8
- sysSizeofIPMreqSource = 0xc
+ sizeofInetPktinfo = 0x8
+ sizeofIPMreq = 0x8
+ sizeofIPMreqSource = 0xc
)
-type sysInetPktinfo struct {
+type inetPktinfo struct {
Addr [4]byte
Ifindex int32
}
-type sysIPMreq struct {
+type ipMreq struct {
Multiaddr [4]byte
Interface [4]byte
}
-type sysIPMreqSource struct {
+type ipMreqSource struct {
Multiaddr [4]byte
Sourceaddr [4]byte
Interface [4]byte
@@ -56,6 +56,6 @@ var (
}
)
-func (pi *sysInetPktinfo) setIfindex(i int) {
+func (pi *inetPktinfo) setIfindex(i int) {
pi.Ifindex = int32(i)
}
diff --git a/vendor/golang.org/x/net/ipv4/syscall_solaris.go b/vendor/golang.org/x/net/ipv4/syscall_solaris.go
new file mode 100644
index 000000000..8b0e1e447
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv4/syscall_solaris.go
@@ -0,0 +1,38 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package ipv4
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+//go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt "libsocket.so"
+//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so"
+
+//go:linkname procGetsockopt libc___xnet_getsockopt
+//go:linkname procSetsockopt libc_setsockopt
+
+var (
+ procGetsockopt uintptr
+ procSetsockopt uintptr
+)
+
+func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (uintptr, uintptr, syscall.Errno)
+
+func getsockopt(s uintptr, level, name int, v unsafe.Pointer, l *uint32) error {
+ _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procGetsockopt)), 5, s, uintptr(level), uintptr(name), uintptr(v), uintptr(unsafe.Pointer(l)), 0)
+ if errno != 0 {
+ return error(errno)
+ }
+ return nil
+}
+
+func setsockopt(s uintptr, level, name int, v unsafe.Pointer, l uint32) error {
+ if _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procSetsockopt)), 5, s, uintptr(level), uintptr(name), uintptr(v), uintptr(l), 0); errno != 0 {
+ return error(errno)
+ }
+ return nil
+}
diff --git a/vendor/golang.org/x/net/ipv4/unicast_test.go b/vendor/golang.org/x/net/ipv4/unicast_test.go
index 9c632cd89..bce8763f7 100644
--- a/vendor/golang.org/x/net/ipv4/unicast_test.go
+++ b/vendor/golang.org/x/net/ipv4/unicast_test.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -20,7 +20,7 @@ import (
func TestPacketConnReadWriteUnicastUDP(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
@@ -74,7 +74,7 @@ func TestPacketConnReadWriteUnicastUDP(t *testing.T) {
func TestPacketConnReadWriteUnicastICMP(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if m, ok := nettest.SupportsRawIPSocket(); !ok {
@@ -97,7 +97,11 @@ func TestPacketConnReadWriteUnicastICMP(t *testing.T) {
}
p := ipv4.NewPacketConn(c)
defer p.Close()
- cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
+ cf := ipv4.FlagDst | ipv4.FlagInterface
+ if runtime.GOOS != "solaris" {
+ // Solaris never allows to modify ICMP properties.
+ cf |= ipv4.FlagTTL
+ }
for i, toggle := range []bool{true, false, true} {
wb, err := (&icmp.Message{
@@ -156,7 +160,7 @@ func TestPacketConnReadWriteUnicastICMP(t *testing.T) {
func TestRawConnReadWriteUnicastICMP(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if m, ok := nettest.SupportsRawIPSocket(); !ok {
diff --git a/vendor/golang.org/x/net/ipv4/unicastsockopt_test.go b/vendor/golang.org/x/net/ipv4/unicastsockopt_test.go
index 25606f21d..b047e51f9 100644
--- a/vendor/golang.org/x/net/ipv4/unicastsockopt_test.go
+++ b/vendor/golang.org/x/net/ipv4/unicastsockopt_test.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -16,7 +16,7 @@ import (
func TestConnUnicastSocketOptions(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris":
+ case "nacl", "plan9":
t.Skipf("not supported on %s", runtime.GOOS)
}
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
@@ -53,7 +53,7 @@ var packetConnUnicastSocketOptionTests = []struct {
func TestPacketConnUnicastSocketOptions(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris":
+ case "nacl", "plan9":
t.Skipf("not supported on %s", runtime.GOOS)
}
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
@@ -79,7 +79,7 @@ func TestPacketConnUnicastSocketOptions(t *testing.T) {
func TestRawConnUnicastSocketOptions(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris":
+ case "nacl", "plan9":
t.Skipf("not supported on %s", runtime.GOOS)
}
if m, ok := nettest.SupportsRawIPSocket(); !ok {
diff --git a/vendor/golang.org/x/net/ipv4/zsys_darwin.go b/vendor/golang.org/x/net/ipv4/zsys_darwin.go
index 087c63906..c07cc883f 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_darwin.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_darwin.go
@@ -37,18 +37,18 @@ const (
sysMCAST_BLOCK_SOURCE = 0x54
sysMCAST_UNBLOCK_SOURCE = 0x55
- sysSizeofSockaddrStorage = 0x80
- sysSizeofSockaddrInet = 0x10
- sysSizeofInetPktinfo = 0xc
+ sizeofSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofInetPktinfo = 0xc
- sysSizeofIPMreq = 0x8
- sysSizeofIPMreqn = 0xc
- sysSizeofIPMreqSource = 0xc
- sysSizeofGroupReq = 0x84
- sysSizeofGroupSourceReq = 0x104
+ sizeofIPMreq = 0x8
+ sizeofIPMreqn = 0xc
+ sizeofIPMreqSource = 0xc
+ sizeofGroupReq = 0x84
+ sizeofGroupSourceReq = 0x104
)
-type sysSockaddrStorage struct {
+type sockaddrStorage struct {
Len uint8
Family uint8
X__ss_pad1 [6]int8
@@ -56,7 +56,7 @@ type sysSockaddrStorage struct {
X__ss_pad2 [112]int8
}
-type sysSockaddrInet struct {
+type sockaddrInet struct {
Len uint8
Family uint8
Port uint16
@@ -64,35 +64,35 @@ type sysSockaddrInet struct {
Zero [8]int8
}
-type sysInetPktinfo struct {
+type inetPktinfo struct {
Ifindex uint32
Spec_dst [4]byte /* in_addr */
Addr [4]byte /* in_addr */
}
-type sysIPMreq struct {
+type ipMreq struct {
Multiaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
-type sysIPMreqn struct {
+type ipMreqn struct {
Multiaddr [4]byte /* in_addr */
Address [4]byte /* in_addr */
Ifindex int32
}
-type sysIPMreqSource struct {
+type ipMreqSource struct {
Multiaddr [4]byte /* in_addr */
Sourceaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
Pad_cgo_0 [128]byte
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
Pad_cgo_0 [128]byte
Pad_cgo_1 [128]byte
diff --git a/vendor/golang.org/x/net/ipv4/zsys_dragonfly.go b/vendor/golang.org/x/net/ipv4/zsys_dragonfly.go
index f5c9ccec4..c4365e9e7 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_dragonfly.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_dragonfly.go
@@ -1,8 +1,6 @@
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs defs_dragonfly.go
-// +build dragonfly
-
package ipv4
const (
@@ -24,10 +22,10 @@ const (
sysIP_ADD_MEMBERSHIP = 0xc
sysIP_DROP_MEMBERSHIP = 0xd
- sysSizeofIPMreq = 0x8
+ sizeofIPMreq = 0x8
)
-type sysIPMreq struct {
+type ipMreq struct {
Multiaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
diff --git a/vendor/golang.org/x/net/ipv4/zsys_freebsd_386.go b/vendor/golang.org/x/net/ipv4/zsys_freebsd_386.go
index 6fd67e1e9..8c4aec94c 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_freebsd_386.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_freebsd_386.go
@@ -38,17 +38,17 @@ const (
sysMCAST_BLOCK_SOURCE = 0x54
sysMCAST_UNBLOCK_SOURCE = 0x55
- sysSizeofSockaddrStorage = 0x80
- sysSizeofSockaddrInet = 0x10
+ sizeofSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
- sysSizeofIPMreq = 0x8
- sysSizeofIPMreqn = 0xc
- sysSizeofIPMreqSource = 0xc
- sysSizeofGroupReq = 0x84
- sysSizeofGroupSourceReq = 0x104
+ sizeofIPMreq = 0x8
+ sizeofIPMreqn = 0xc
+ sizeofIPMreqSource = 0xc
+ sizeofGroupReq = 0x84
+ sizeofGroupSourceReq = 0x104
)
-type sysSockaddrStorage struct {
+type sockaddrStorage struct {
Len uint8
Family uint8
X__ss_pad1 [6]int8
@@ -56,7 +56,7 @@ type sysSockaddrStorage struct {
X__ss_pad2 [112]int8
}
-type sysSockaddrInet struct {
+type sockaddrInet struct {
Len uint8
Family uint8
Port uint16
@@ -64,30 +64,30 @@ type sysSockaddrInet struct {
Zero [8]int8
}
-type sysIPMreq struct {
+type ipMreq struct {
Multiaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
-type sysIPMreqn struct {
+type ipMreqn struct {
Multiaddr [4]byte /* in_addr */
Address [4]byte /* in_addr */
Ifindex int32
}
-type sysIPMreqSource struct {
+type ipMreqSource struct {
Multiaddr [4]byte /* in_addr */
Sourceaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
- Group sysSockaddrStorage
+ Group sockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
- Group sysSockaddrStorage
- Source sysSockaddrStorage
+ Group sockaddrStorage
+ Source sockaddrStorage
}
diff --git a/vendor/golang.org/x/net/ipv4/zsys_freebsd_amd64.go b/vendor/golang.org/x/net/ipv4/zsys_freebsd_amd64.go
index ebac6d792..4b10b7c57 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_freebsd_amd64.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_freebsd_amd64.go
@@ -38,17 +38,17 @@ const (
sysMCAST_BLOCK_SOURCE = 0x54
sysMCAST_UNBLOCK_SOURCE = 0x55
- sysSizeofSockaddrStorage = 0x80
- sysSizeofSockaddrInet = 0x10
+ sizeofSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
- sysSizeofIPMreq = 0x8
- sysSizeofIPMreqn = 0xc
- sysSizeofIPMreqSource = 0xc
- sysSizeofGroupReq = 0x88
- sysSizeofGroupSourceReq = 0x108
+ sizeofIPMreq = 0x8
+ sizeofIPMreqn = 0xc
+ sizeofIPMreqSource = 0xc
+ sizeofGroupReq = 0x88
+ sizeofGroupSourceReq = 0x108
)
-type sysSockaddrStorage struct {
+type sockaddrStorage struct {
Len uint8
Family uint8
X__ss_pad1 [6]int8
@@ -56,7 +56,7 @@ type sysSockaddrStorage struct {
X__ss_pad2 [112]int8
}
-type sysSockaddrInet struct {
+type sockaddrInet struct {
Len uint8
Family uint8
Port uint16
@@ -64,32 +64,32 @@ type sysSockaddrInet struct {
Zero [8]int8
}
-type sysIPMreq struct {
+type ipMreq struct {
Multiaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
-type sysIPMreqn struct {
+type ipMreqn struct {
Multiaddr [4]byte /* in_addr */
Address [4]byte /* in_addr */
Ifindex int32
}
-type sysIPMreqSource struct {
+type ipMreqSource struct {
Multiaddr [4]byte /* in_addr */
Sourceaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysSockaddrStorage
+ Group sockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysSockaddrStorage
- Source sysSockaddrStorage
+ Group sockaddrStorage
+ Source sockaddrStorage
}
diff --git a/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm.go b/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm.go
index ebac6d792..4b10b7c57 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm.go
@@ -38,17 +38,17 @@ const (
sysMCAST_BLOCK_SOURCE = 0x54
sysMCAST_UNBLOCK_SOURCE = 0x55
- sysSizeofSockaddrStorage = 0x80
- sysSizeofSockaddrInet = 0x10
+ sizeofSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
- sysSizeofIPMreq = 0x8
- sysSizeofIPMreqn = 0xc
- sysSizeofIPMreqSource = 0xc
- sysSizeofGroupReq = 0x88
- sysSizeofGroupSourceReq = 0x108
+ sizeofIPMreq = 0x8
+ sizeofIPMreqn = 0xc
+ sizeofIPMreqSource = 0xc
+ sizeofGroupReq = 0x88
+ sizeofGroupSourceReq = 0x108
)
-type sysSockaddrStorage struct {
+type sockaddrStorage struct {
Len uint8
Family uint8
X__ss_pad1 [6]int8
@@ -56,7 +56,7 @@ type sysSockaddrStorage struct {
X__ss_pad2 [112]int8
}
-type sysSockaddrInet struct {
+type sockaddrInet struct {
Len uint8
Family uint8
Port uint16
@@ -64,32 +64,32 @@ type sysSockaddrInet struct {
Zero [8]int8
}
-type sysIPMreq struct {
+type ipMreq struct {
Multiaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
-type sysIPMreqn struct {
+type ipMreqn struct {
Multiaddr [4]byte /* in_addr */
Address [4]byte /* in_addr */
Ifindex int32
}
-type sysIPMreqSource struct {
+type ipMreqSource struct {
Multiaddr [4]byte /* in_addr */
Sourceaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysSockaddrStorage
+ Group sockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysSockaddrStorage
- Source sysSockaddrStorage
+ Group sockaddrStorage
+ Source sockaddrStorage
}
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_386.go b/vendor/golang.org/x/net/ipv4/zsys_linux_386.go
index 3733152a4..4da672013 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_386.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_386.go
@@ -58,39 +58,39 @@ const (
sysSOL_SOCKET = 0x1
sysSO_ATTACH_FILTER = 0x1a
- sysSizeofKernelSockaddrStorage = 0x80
- sysSizeofSockaddrInet = 0x10
- sysSizeofInetPktinfo = 0xc
- sysSizeofSockExtendedErr = 0x10
-
- sysSizeofIPMreq = 0x8
- sysSizeofIPMreqn = 0xc
- sysSizeofIPMreqSource = 0xc
- sysSizeofGroupReq = 0x84
- sysSizeofGroupSourceReq = 0x104
-
- sysSizeofICMPFilter = 0x4
+ sizeofKernelSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofInetPktinfo = 0xc
+ sizeofSockExtendedErr = 0x10
+
+ sizeofIPMreq = 0x8
+ sizeofIPMreqn = 0xc
+ sizeofIPMreqSource = 0xc
+ sizeofGroupReq = 0x84
+ sizeofGroupSourceReq = 0x104
+
+ sizeofICMPFilter = 0x4
)
-type sysKernelSockaddrStorage struct {
+type kernelSockaddrStorage struct {
Family uint16
X__data [126]int8
}
-type sysSockaddrInet struct {
+type sockaddrInet struct {
Family uint16
Port uint16
Addr [4]byte /* in_addr */
X__pad [8]uint8
}
-type sysInetPktinfo struct {
+type inetPktinfo struct {
Ifindex int32
Spec_dst [4]byte /* in_addr */
Addr [4]byte /* in_addr */
}
-type sysSockExtendedErr struct {
+type sockExtendedErr struct {
Errno uint32
Origin uint8
Type uint8
@@ -100,45 +100,45 @@ type sysSockExtendedErr struct {
Data uint32
}
-type sysIPMreq struct {
+type ipMreq struct {
Multiaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
-type sysIPMreqn struct {
+type ipMreqn struct {
Multiaddr [4]byte /* in_addr */
Address [4]byte /* in_addr */
Ifindex int32
}
-type sysIPMreqSource struct {
+type ipMreqSource struct {
Multiaddr uint32
Interface uint32
Sourceaddr uint32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
- Group sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
- Group sysKernelSockaddrStorage
- Source sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
+ Source kernelSockaddrStorage
}
-type sysICMPFilter struct {
+type icmpFilter struct {
Data uint32
}
-type sysSockFProg struct {
+type sockFProg struct {
Len uint16
Pad_cgo_0 [2]byte
- Filter *sysSockFilter
+ Filter *sockFilter
}
-type sysSockFilter struct {
+type sockFilter struct {
Code uint16
Jt uint8
Jf uint8
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go
index afa451906..65945bbd0 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go
@@ -58,39 +58,39 @@ const (
sysSOL_SOCKET = 0x1
sysSO_ATTACH_FILTER = 0x1a
- sysSizeofKernelSockaddrStorage = 0x80
- sysSizeofSockaddrInet = 0x10
- sysSizeofInetPktinfo = 0xc
- sysSizeofSockExtendedErr = 0x10
-
- sysSizeofIPMreq = 0x8
- sysSizeofIPMreqn = 0xc
- sysSizeofIPMreqSource = 0xc
- sysSizeofGroupReq = 0x88
- sysSizeofGroupSourceReq = 0x108
-
- sysSizeofICMPFilter = 0x4
+ sizeofKernelSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofInetPktinfo = 0xc
+ sizeofSockExtendedErr = 0x10
+
+ sizeofIPMreq = 0x8
+ sizeofIPMreqn = 0xc
+ sizeofIPMreqSource = 0xc
+ sizeofGroupReq = 0x88
+ sizeofGroupSourceReq = 0x108
+
+ sizeofICMPFilter = 0x4
)
-type sysKernelSockaddrStorage struct {
+type kernelSockaddrStorage struct {
Family uint16
X__data [126]int8
}
-type sysSockaddrInet struct {
+type sockaddrInet struct {
Family uint16
Port uint16
Addr [4]byte /* in_addr */
X__pad [8]uint8
}
-type sysInetPktinfo struct {
+type inetPktinfo struct {
Ifindex int32
Spec_dst [4]byte /* in_addr */
Addr [4]byte /* in_addr */
}
-type sysSockExtendedErr struct {
+type sockExtendedErr struct {
Errno uint32
Origin uint8
Type uint8
@@ -100,47 +100,47 @@ type sysSockExtendedErr struct {
Data uint32
}
-type sysIPMreq struct {
+type ipMreq struct {
Multiaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
-type sysIPMreqn struct {
+type ipMreqn struct {
Multiaddr [4]byte /* in_addr */
Address [4]byte /* in_addr */
Ifindex int32
}
-type sysIPMreqSource struct {
+type ipMreqSource struct {
Multiaddr uint32
Interface uint32
Sourceaddr uint32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
- Source sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
+ Source kernelSockaddrStorage
}
-type sysICMPFilter struct {
+type icmpFilter struct {
Data uint32
}
-type sysSockFProg struct {
+type sockFProg struct {
Len uint16
Pad_cgo_0 [6]byte
- Filter *sysSockFilter
+ Filter *sockFilter
}
-type sysSockFilter struct {
+type sockFilter struct {
Code uint16
Jt uint8
Jf uint8
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go b/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go
index 3733152a4..4da672013 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go
@@ -58,39 +58,39 @@ const (
sysSOL_SOCKET = 0x1
sysSO_ATTACH_FILTER = 0x1a
- sysSizeofKernelSockaddrStorage = 0x80
- sysSizeofSockaddrInet = 0x10
- sysSizeofInetPktinfo = 0xc
- sysSizeofSockExtendedErr = 0x10
-
- sysSizeofIPMreq = 0x8
- sysSizeofIPMreqn = 0xc
- sysSizeofIPMreqSource = 0xc
- sysSizeofGroupReq = 0x84
- sysSizeofGroupSourceReq = 0x104
-
- sysSizeofICMPFilter = 0x4
+ sizeofKernelSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofInetPktinfo = 0xc
+ sizeofSockExtendedErr = 0x10
+
+ sizeofIPMreq = 0x8
+ sizeofIPMreqn = 0xc
+ sizeofIPMreqSource = 0xc
+ sizeofGroupReq = 0x84
+ sizeofGroupSourceReq = 0x104
+
+ sizeofICMPFilter = 0x4
)
-type sysKernelSockaddrStorage struct {
+type kernelSockaddrStorage struct {
Family uint16
X__data [126]int8
}
-type sysSockaddrInet struct {
+type sockaddrInet struct {
Family uint16
Port uint16
Addr [4]byte /* in_addr */
X__pad [8]uint8
}
-type sysInetPktinfo struct {
+type inetPktinfo struct {
Ifindex int32
Spec_dst [4]byte /* in_addr */
Addr [4]byte /* in_addr */
}
-type sysSockExtendedErr struct {
+type sockExtendedErr struct {
Errno uint32
Origin uint8
Type uint8
@@ -100,45 +100,45 @@ type sysSockExtendedErr struct {
Data uint32
}
-type sysIPMreq struct {
+type ipMreq struct {
Multiaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
-type sysIPMreqn struct {
+type ipMreqn struct {
Multiaddr [4]byte /* in_addr */
Address [4]byte /* in_addr */
Ifindex int32
}
-type sysIPMreqSource struct {
+type ipMreqSource struct {
Multiaddr uint32
Interface uint32
Sourceaddr uint32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
- Group sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
- Group sysKernelSockaddrStorage
- Source sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
+ Source kernelSockaddrStorage
}
-type sysICMPFilter struct {
+type icmpFilter struct {
Data uint32
}
-type sysSockFProg struct {
+type sockFProg struct {
Len uint16
Pad_cgo_0 [2]byte
- Filter *sysSockFilter
+ Filter *sockFilter
}
-type sysSockFilter struct {
+type sockFilter struct {
Code uint16
Jt uint8
Jf uint8
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go
index 129a20ac6..65945bbd0 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go
@@ -1,8 +1,6 @@
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs defs_linux.go
-// +build linux,arm64
-
package ipv4
const (
@@ -60,39 +58,39 @@ const (
sysSOL_SOCKET = 0x1
sysSO_ATTACH_FILTER = 0x1a
- sysSizeofKernelSockaddrStorage = 0x80
- sysSizeofSockaddrInet = 0x10
- sysSizeofInetPktinfo = 0xc
- sysSizeofSockExtendedErr = 0x10
+ sizeofKernelSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofInetPktinfo = 0xc
+ sizeofSockExtendedErr = 0x10
- sysSizeofIPMreq = 0x8
- sysSizeofIPMreqn = 0xc
- sysSizeofIPMreqSource = 0xc
- sysSizeofGroupReq = 0x88
- sysSizeofGroupSourceReq = 0x108
+ sizeofIPMreq = 0x8
+ sizeofIPMreqn = 0xc
+ sizeofIPMreqSource = 0xc
+ sizeofGroupReq = 0x88
+ sizeofGroupSourceReq = 0x108
- sysSizeofICMPFilter = 0x4
+ sizeofICMPFilter = 0x4
)
-type sysKernelSockaddrStorage struct {
+type kernelSockaddrStorage struct {
Family uint16
X__data [126]int8
}
-type sysSockaddrInet struct {
+type sockaddrInet struct {
Family uint16
Port uint16
Addr [4]byte /* in_addr */
X__pad [8]uint8
}
-type sysInetPktinfo struct {
+type inetPktinfo struct {
Ifindex int32
Spec_dst [4]byte /* in_addr */
Addr [4]byte /* in_addr */
}
-type sysSockExtendedErr struct {
+type sockExtendedErr struct {
Errno uint32
Origin uint8
Type uint8
@@ -102,47 +100,47 @@ type sysSockExtendedErr struct {
Data uint32
}
-type sysIPMreq struct {
+type ipMreq struct {
Multiaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
-type sysIPMreqn struct {
+type ipMreqn struct {
Multiaddr [4]byte /* in_addr */
Address [4]byte /* in_addr */
Ifindex int32
}
-type sysIPMreqSource struct {
+type ipMreqSource struct {
Multiaddr uint32
Interface uint32
Sourceaddr uint32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
- Source sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
+ Source kernelSockaddrStorage
}
-type sysICMPFilter struct {
+type icmpFilter struct {
Data uint32
}
-type sysSockFProg struct {
+type sockFProg struct {
Len uint16
Pad_cgo_0 [6]byte
- Filter *sysSockFilter
+ Filter *sockFilter
}
-type sysSockFilter struct {
+type sockFilter struct {
Code uint16
Jt uint8
Jf uint8
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go
index 7ed9368f5..65945bbd0 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go
@@ -1,8 +1,6 @@
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs defs_linux.go
-// +build linux,mips64
-
package ipv4
const (
@@ -60,39 +58,39 @@ const (
sysSOL_SOCKET = 0x1
sysSO_ATTACH_FILTER = 0x1a
- sysSizeofKernelSockaddrStorage = 0x80
- sysSizeofSockaddrInet = 0x10
- sysSizeofInetPktinfo = 0xc
- sysSizeofSockExtendedErr = 0x10
+ sizeofKernelSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofInetPktinfo = 0xc
+ sizeofSockExtendedErr = 0x10
- sysSizeofIPMreq = 0x8
- sysSizeofIPMreqn = 0xc
- sysSizeofIPMreqSource = 0xc
- sysSizeofGroupReq = 0x88
- sysSizeofGroupSourceReq = 0x108
+ sizeofIPMreq = 0x8
+ sizeofIPMreqn = 0xc
+ sizeofIPMreqSource = 0xc
+ sizeofGroupReq = 0x88
+ sizeofGroupSourceReq = 0x108
- sysSizeofICMPFilter = 0x4
+ sizeofICMPFilter = 0x4
)
-type sysKernelSockaddrStorage struct {
+type kernelSockaddrStorage struct {
Family uint16
X__data [126]int8
}
-type sysSockaddrInet struct {
+type sockaddrInet struct {
Family uint16
Port uint16
Addr [4]byte /* in_addr */
X__pad [8]uint8
}
-type sysInetPktinfo struct {
+type inetPktinfo struct {
Ifindex int32
Spec_dst [4]byte /* in_addr */
Addr [4]byte /* in_addr */
}
-type sysSockExtendedErr struct {
+type sockExtendedErr struct {
Errno uint32
Origin uint8
Type uint8
@@ -102,47 +100,47 @@ type sysSockExtendedErr struct {
Data uint32
}
-type sysIPMreq struct {
+type ipMreq struct {
Multiaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
-type sysIPMreqn struct {
+type ipMreqn struct {
Multiaddr [4]byte /* in_addr */
Address [4]byte /* in_addr */
Ifindex int32
}
-type sysIPMreqSource struct {
+type ipMreqSource struct {
Multiaddr uint32
Interface uint32
Sourceaddr uint32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
- Source sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
+ Source kernelSockaddrStorage
}
-type sysICMPFilter struct {
+type icmpFilter struct {
Data uint32
}
-type sysSockFProg struct {
+type sockFProg struct {
Len uint16
Pad_cgo_0 [6]byte
- Filter *sysSockFilter
+ Filter *sockFilter
}
-type sysSockFilter struct {
+type sockFilter struct {
Code uint16
Jt uint8
Jf uint8
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go b/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go
index 19fadae62..65945bbd0 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go
@@ -1,8 +1,6 @@
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs defs_linux.go
-// +build linux,mips64le
-
package ipv4
const (
@@ -60,39 +58,39 @@ const (
sysSOL_SOCKET = 0x1
sysSO_ATTACH_FILTER = 0x1a
- sysSizeofKernelSockaddrStorage = 0x80
- sysSizeofSockaddrInet = 0x10
- sysSizeofInetPktinfo = 0xc
- sysSizeofSockExtendedErr = 0x10
+ sizeofKernelSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofInetPktinfo = 0xc
+ sizeofSockExtendedErr = 0x10
- sysSizeofIPMreq = 0x8
- sysSizeofIPMreqn = 0xc
- sysSizeofIPMreqSource = 0xc
- sysSizeofGroupReq = 0x88
- sysSizeofGroupSourceReq = 0x108
+ sizeofIPMreq = 0x8
+ sizeofIPMreqn = 0xc
+ sizeofIPMreqSource = 0xc
+ sizeofGroupReq = 0x88
+ sizeofGroupSourceReq = 0x108
- sysSizeofICMPFilter = 0x4
+ sizeofICMPFilter = 0x4
)
-type sysKernelSockaddrStorage struct {
+type kernelSockaddrStorage struct {
Family uint16
X__data [126]int8
}
-type sysSockaddrInet struct {
+type sockaddrInet struct {
Family uint16
Port uint16
Addr [4]byte /* in_addr */
X__pad [8]uint8
}
-type sysInetPktinfo struct {
+type inetPktinfo struct {
Ifindex int32
Spec_dst [4]byte /* in_addr */
Addr [4]byte /* in_addr */
}
-type sysSockExtendedErr struct {
+type sockExtendedErr struct {
Errno uint32
Origin uint8
Type uint8
@@ -102,47 +100,47 @@ type sysSockExtendedErr struct {
Data uint32
}
-type sysIPMreq struct {
+type ipMreq struct {
Multiaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
-type sysIPMreqn struct {
+type ipMreqn struct {
Multiaddr [4]byte /* in_addr */
Address [4]byte /* in_addr */
Ifindex int32
}
-type sysIPMreqSource struct {
+type ipMreqSource struct {
Multiaddr uint32
Interface uint32
Sourceaddr uint32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
- Source sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
+ Source kernelSockaddrStorage
}
-type sysICMPFilter struct {
+type icmpFilter struct {
Data uint32
}
-type sysSockFProg struct {
+type sockFProg struct {
Len uint16
Pad_cgo_0 [6]byte
- Filter *sysSockFilter
+ Filter *sockFilter
}
-type sysSockFilter struct {
+type sockFilter struct {
Code uint16
Jt uint8
Jf uint8
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go
index 15426beee..b825a18e9 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go
@@ -1,8 +1,6 @@
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs defs_linux.go
-// +build linux,ppc
-
package ipv4
const (
@@ -60,39 +58,39 @@ const (
sysSOL_SOCKET = 0x1
sysSO_ATTACH_FILTER = 0x1a
- sysSizeofKernelSockaddrStorage = 0x80
- sysSizeofSockaddrInet = 0x10
- sysSizeofInetPktinfo = 0xc
- sysSizeofSockExtendedErr = 0x10
+ sizeofKernelSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofInetPktinfo = 0xc
+ sizeofSockExtendedErr = 0x10
- sysSizeofIPMreq = 0x8
- sysSizeofIPMreqn = 0xc
- sysSizeofIPMreqSource = 0xc
- sysSizeofGroupReq = 0x84
- sysSizeofGroupSourceReq = 0x104
+ sizeofIPMreq = 0x8
+ sizeofIPMreqn = 0xc
+ sizeofIPMreqSource = 0xc
+ sizeofGroupReq = 0x84
+ sizeofGroupSourceReq = 0x104
- sysSizeofICMPFilter = 0x4
+ sizeofICMPFilter = 0x4
)
-type sysKernelSockaddrStorage struct {
+type kernelSockaddrStorage struct {
Family uint16
X__data [126]uint8
}
-type sysSockaddrInet struct {
+type sockaddrInet struct {
Family uint16
Port uint16
Addr [4]byte /* in_addr */
X__pad [8]uint8
}
-type sysInetPktinfo struct {
+type inetPktinfo struct {
Ifindex int32
Spec_dst [4]byte /* in_addr */
Addr [4]byte /* in_addr */
}
-type sysSockExtendedErr struct {
+type sockExtendedErr struct {
Errno uint32
Origin uint8
Type uint8
@@ -102,45 +100,45 @@ type sysSockExtendedErr struct {
Data uint32
}
-type sysIPMreq struct {
+type ipMreq struct {
Multiaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
-type sysIPMreqn struct {
+type ipMreqn struct {
Multiaddr [4]byte /* in_addr */
Address [4]byte /* in_addr */
Ifindex int32
}
-type sysIPMreqSource struct {
+type ipMreqSource struct {
Multiaddr uint32
Interface uint32
Sourceaddr uint32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
- Group sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
- Group sysKernelSockaddrStorage
- Source sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
+ Source kernelSockaddrStorage
}
-type sysICMPFilter struct {
+type icmpFilter struct {
Data uint32
}
-type sysSockFProg struct {
+type sockFProg struct {
Len uint16
Pad_cgo_0 [2]byte
- Filter *sysSockFilter
+ Filter *sockFilter
}
-type sysSockFilter struct {
+type sockFilter struct {
Code uint16
Jt uint8
Jf uint8
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go
index beaadd5f0..65945bbd0 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go
@@ -1,8 +1,6 @@
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs defs_linux.go
-// +build linux,ppc64
-
package ipv4
const (
@@ -60,39 +58,39 @@ const (
sysSOL_SOCKET = 0x1
sysSO_ATTACH_FILTER = 0x1a
- sysSizeofKernelSockaddrStorage = 0x80
- sysSizeofSockaddrInet = 0x10
- sysSizeofInetPktinfo = 0xc
- sysSizeofSockExtendedErr = 0x10
+ sizeofKernelSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofInetPktinfo = 0xc
+ sizeofSockExtendedErr = 0x10
- sysSizeofIPMreq = 0x8
- sysSizeofIPMreqn = 0xc
- sysSizeofIPMreqSource = 0xc
- sysSizeofGroupReq = 0x88
- sysSizeofGroupSourceReq = 0x108
+ sizeofIPMreq = 0x8
+ sizeofIPMreqn = 0xc
+ sizeofIPMreqSource = 0xc
+ sizeofGroupReq = 0x88
+ sizeofGroupSourceReq = 0x108
- sysSizeofICMPFilter = 0x4
+ sizeofICMPFilter = 0x4
)
-type sysKernelSockaddrStorage struct {
+type kernelSockaddrStorage struct {
Family uint16
X__data [126]int8
}
-type sysSockaddrInet struct {
+type sockaddrInet struct {
Family uint16
Port uint16
Addr [4]byte /* in_addr */
X__pad [8]uint8
}
-type sysInetPktinfo struct {
+type inetPktinfo struct {
Ifindex int32
Spec_dst [4]byte /* in_addr */
Addr [4]byte /* in_addr */
}
-type sysSockExtendedErr struct {
+type sockExtendedErr struct {
Errno uint32
Origin uint8
Type uint8
@@ -102,47 +100,47 @@ type sysSockExtendedErr struct {
Data uint32
}
-type sysIPMreq struct {
+type ipMreq struct {
Multiaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
-type sysIPMreqn struct {
+type ipMreqn struct {
Multiaddr [4]byte /* in_addr */
Address [4]byte /* in_addr */
Ifindex int32
}
-type sysIPMreqSource struct {
+type ipMreqSource struct {
Multiaddr uint32
Interface uint32
Sourceaddr uint32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
- Source sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
+ Source kernelSockaddrStorage
}
-type sysICMPFilter struct {
+type icmpFilter struct {
Data uint32
}
-type sysSockFProg struct {
+type sockFProg struct {
Len uint16
Pad_cgo_0 [6]byte
- Filter *sysSockFilter
+ Filter *sockFilter
}
-type sysSockFilter struct {
+type sockFilter struct {
Code uint16
Jt uint8
Jf uint8
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go
index 0eb262305..65945bbd0 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go
@@ -1,8 +1,6 @@
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs defs_linux.go
-// +build linux,ppc64le
-
package ipv4
const (
@@ -60,39 +58,39 @@ const (
sysSOL_SOCKET = 0x1
sysSO_ATTACH_FILTER = 0x1a
- sysSizeofKernelSockaddrStorage = 0x80
- sysSizeofSockaddrInet = 0x10
- sysSizeofInetPktinfo = 0xc
- sysSizeofSockExtendedErr = 0x10
+ sizeofKernelSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofInetPktinfo = 0xc
+ sizeofSockExtendedErr = 0x10
- sysSizeofIPMreq = 0x8
- sysSizeofIPMreqn = 0xc
- sysSizeofIPMreqSource = 0xc
- sysSizeofGroupReq = 0x88
- sysSizeofGroupSourceReq = 0x108
+ sizeofIPMreq = 0x8
+ sizeofIPMreqn = 0xc
+ sizeofIPMreqSource = 0xc
+ sizeofGroupReq = 0x88
+ sizeofGroupSourceReq = 0x108
- sysSizeofICMPFilter = 0x4
+ sizeofICMPFilter = 0x4
)
-type sysKernelSockaddrStorage struct {
+type kernelSockaddrStorage struct {
Family uint16
X__data [126]int8
}
-type sysSockaddrInet struct {
+type sockaddrInet struct {
Family uint16
Port uint16
Addr [4]byte /* in_addr */
X__pad [8]uint8
}
-type sysInetPktinfo struct {
+type inetPktinfo struct {
Ifindex int32
Spec_dst [4]byte /* in_addr */
Addr [4]byte /* in_addr */
}
-type sysSockExtendedErr struct {
+type sockExtendedErr struct {
Errno uint32
Origin uint8
Type uint8
@@ -102,47 +100,47 @@ type sysSockExtendedErr struct {
Data uint32
}
-type sysIPMreq struct {
+type ipMreq struct {
Multiaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
-type sysIPMreqn struct {
+type ipMreqn struct {
Multiaddr [4]byte /* in_addr */
Address [4]byte /* in_addr */
Ifindex int32
}
-type sysIPMreqSource struct {
+type ipMreqSource struct {
Multiaddr uint32
Interface uint32
Sourceaddr uint32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
- Source sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
+ Source kernelSockaddrStorage
}
-type sysICMPFilter struct {
+type icmpFilter struct {
Data uint32
}
-type sysSockFProg struct {
+type sockFProg struct {
Len uint16
Pad_cgo_0 [6]byte
- Filter *sysSockFilter
+ Filter *sockFilter
}
-type sysSockFilter struct {
+type sockFilter struct {
Code uint16
Jt uint8
Jf uint8
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go b/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go
index 90fe99ebb..65945bbd0 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go
@@ -1,8 +1,6 @@
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs defs_linux.go
-// +build linux,s390x
-
package ipv4
const (
@@ -60,39 +58,39 @@ const (
sysSOL_SOCKET = 0x1
sysSO_ATTACH_FILTER = 0x1a
- sysSizeofKernelSockaddrStorage = 0x80
- sysSizeofSockaddrInet = 0x10
- sysSizeofInetPktinfo = 0xc
- sysSizeofSockExtendedErr = 0x10
+ sizeofKernelSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofInetPktinfo = 0xc
+ sizeofSockExtendedErr = 0x10
- sysSizeofIPMreq = 0x8
- sysSizeofIPMreqn = 0xc
- sysSizeofIPMreqSource = 0xc
- sysSizeofGroupReq = 0x88
- sysSizeofGroupSourceReq = 0x108
+ sizeofIPMreq = 0x8
+ sizeofIPMreqn = 0xc
+ sizeofIPMreqSource = 0xc
+ sizeofGroupReq = 0x88
+ sizeofGroupSourceReq = 0x108
- sysSizeofICMPFilter = 0x4
+ sizeofICMPFilter = 0x4
)
-type sysKernelSockaddrStorage struct {
+type kernelSockaddrStorage struct {
Family uint16
X__data [126]int8
}
-type sysSockaddrInet struct {
+type sockaddrInet struct {
Family uint16
Port uint16
Addr [4]byte /* in_addr */
X__pad [8]uint8
}
-type sysInetPktinfo struct {
+type inetPktinfo struct {
Ifindex int32
Spec_dst [4]byte /* in_addr */
Addr [4]byte /* in_addr */
}
-type sysSockExtendedErr struct {
+type sockExtendedErr struct {
Errno uint32
Origin uint8
Type uint8
@@ -102,47 +100,47 @@ type sysSockExtendedErr struct {
Data uint32
}
-type sysIPMreq struct {
+type ipMreq struct {
Multiaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
-type sysIPMreqn struct {
+type ipMreqn struct {
Multiaddr [4]byte /* in_addr */
Address [4]byte /* in_addr */
Ifindex int32
}
-type sysIPMreqSource struct {
+type ipMreqSource struct {
Multiaddr uint32
Interface uint32
Sourceaddr uint32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
- Source sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
+ Source kernelSockaddrStorage
}
-type sysICMPFilter struct {
+type icmpFilter struct {
Data uint32
}
-type sysSockFProg struct {
+type sockFProg struct {
Len uint16
Pad_cgo_0 [6]byte
- Filter *sysSockFilter
+ Filter *sockFilter
}
-type sysSockFilter struct {
+type sockFilter struct {
Code uint16
Jt uint8
Jf uint8
diff --git a/vendor/golang.org/x/net/ipv4/zsys_netbsd.go b/vendor/golang.org/x/net/ipv4/zsys_netbsd.go
index 8a440eb65..fd3624d93 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_netbsd.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_netbsd.go
@@ -21,10 +21,10 @@ const (
sysIP_ADD_MEMBERSHIP = 0xc
sysIP_DROP_MEMBERSHIP = 0xd
- sysSizeofIPMreq = 0x8
+ sizeofIPMreq = 0x8
)
-type sysIPMreq struct {
+type ipMreq struct {
Multiaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
diff --git a/vendor/golang.org/x/net/ipv4/zsys_openbsd.go b/vendor/golang.org/x/net/ipv4/zsys_openbsd.go
index fd522b573..12f36be75 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_openbsd.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_openbsd.go
@@ -21,10 +21,10 @@ const (
sysIP_ADD_MEMBERSHIP = 0xc
sysIP_DROP_MEMBERSHIP = 0xd
- sysSizeofIPMreq = 0x8
+ sizeofIPMreq = 0x8
)
-type sysIPMreq struct {
+type ipMreq struct {
Multiaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
diff --git a/vendor/golang.org/x/net/ipv4/zsys_solaris.go b/vendor/golang.org/x/net/ipv4/zsys_solaris.go
index d7c23349a..0a3875cc4 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_solaris.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_solaris.go
@@ -1,30 +1,20 @@
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs defs_solaris.go
-// +build solaris
-
package ipv4
const (
- sysIP_OPTIONS = 0x1
- sysIP_HDRINCL = 0x2
- sysIP_TOS = 0x3
- sysIP_TTL = 0x4
- sysIP_RECVOPTS = 0x5
- sysIP_RECVRETOPTS = 0x6
- sysIP_RECVDSTADDR = 0x7
- sysIP_RETOPTS = 0x8
- sysIP_RECVIF = 0x9
- sysIP_RECVSLLA = 0xa
- sysIP_RECVTTL = 0xb
- sysIP_NEXTHOP = 0x19
- sysIP_PKTINFO = 0x1a
- sysIP_RECVPKTINFO = 0x1a
- sysIP_DONTFRAG = 0x1b
- sysIP_BOUND_IF = 0x41
- sysIP_UNSPEC_SRC = 0x42
- sysIP_BROADCAST_TTL = 0x43
- sysIP_DHCPINIT_IF = 0x45
+ sysIP_OPTIONS = 0x1
+ sysIP_HDRINCL = 0x2
+ sysIP_TOS = 0x3
+ sysIP_TTL = 0x4
+ sysIP_RECVOPTS = 0x5
+ sysIP_RECVRETOPTS = 0x6
+ sysIP_RECVDSTADDR = 0x7
+ sysIP_RETOPTS = 0x8
+ sysIP_RECVIF = 0x9
+ sysIP_RECVSLLA = 0xa
+ sysIP_RECVTTL = 0xb
sysIP_MULTICAST_IF = 0x10
sysIP_MULTICAST_TTL = 0x11
@@ -35,26 +25,76 @@ const (
sysIP_UNBLOCK_SOURCE = 0x16
sysIP_ADD_SOURCE_MEMBERSHIP = 0x17
sysIP_DROP_SOURCE_MEMBERSHIP = 0x18
+ sysIP_NEXTHOP = 0x19
+
+ sysIP_PKTINFO = 0x1a
+ sysIP_RECVPKTINFO = 0x1a
+ sysIP_DONTFRAG = 0x1b
+
+ sysIP_BOUND_IF = 0x41
+ sysIP_UNSPEC_SRC = 0x42
+ sysIP_BROADCAST_TTL = 0x43
+ sysIP_DHCPINIT_IF = 0x45
- sysSizeofInetPktinfo = 0xc
+ sysIP_REUSEADDR = 0x104
+ sysIP_DONTROUTE = 0x105
+ sysIP_BROADCAST = 0x106
- sysSizeofIPMreq = 0x8
- sysSizeofIPMreqSource = 0xc
+ sysMCAST_JOIN_GROUP = 0x29
+ sysMCAST_LEAVE_GROUP = 0x2a
+ sysMCAST_BLOCK_SOURCE = 0x2b
+ sysMCAST_UNBLOCK_SOURCE = 0x2c
+ sysMCAST_JOIN_SOURCE_GROUP = 0x2d
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x2e
+
+ sizeofSockaddrStorage = 0x100
+ sizeofSockaddrInet = 0x10
+ sizeofInetPktinfo = 0xc
+
+ sizeofIPMreq = 0x8
+ sizeofIPMreqSource = 0xc
+ sizeofGroupReq = 0x104
+ sizeofGroupSourceReq = 0x204
)
-type sysInetPktinfo struct {
+type sockaddrStorage struct {
+ Family uint16
+ X_ss_pad1 [6]int8
+ X_ss_align float64
+ X_ss_pad2 [240]int8
+}
+
+type sockaddrInet struct {
+ Family uint16
+ Port uint16
+ Addr [4]byte /* in_addr */
+ Zero [8]int8
+}
+
+type inetPktinfo struct {
Ifindex uint32
Spec_dst [4]byte /* in_addr */
Addr [4]byte /* in_addr */
}
-type sysIPMreq struct {
+type ipMreq struct {
Multiaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
-type sysIPMreqSource struct {
+type ipMreqSource struct {
Multiaddr [4]byte /* in_addr */
Sourceaddr [4]byte /* in_addr */
Interface [4]byte /* in_addr */
}
+
+type groupReq struct {
+ Interface uint32
+ Pad_cgo_0 [256]byte
+}
+
+type groupSourceReq struct {
+ Interface uint32
+ Pad_cgo_0 [256]byte
+ Pad_cgo_1 [256]byte
+}
diff --git a/vendor/golang.org/x/net/ipv6/bpf_test.go b/vendor/golang.org/x/net/ipv6/bpf_test.go
index 03d478dc0..8253e1f42 100644
--- a/vendor/golang.org/x/net/ipv6/bpf_test.go
+++ b/vendor/golang.org/x/net/ipv6/bpf_test.go
@@ -18,6 +18,9 @@ func TestBPF(t *testing.T) {
if runtime.GOOS != "linux" {
t.Skipf("not supported on %s", runtime.GOOS)
}
+ if !supportsIPv6 {
+ t.Skip("ipv6 is not supported")
+ }
l, err := net.ListenPacket("udp6", "[::1]:0")
if err != nil {
diff --git a/vendor/golang.org/x/net/ipv6/bpfopt_linux.go b/vendor/golang.org/x/net/ipv6/bpfopt_linux.go
index 328427cba..daf7ea853 100644
--- a/vendor/golang.org/x/net/ipv6/bpfopt_linux.go
+++ b/vendor/golang.org/x/net/ipv6/bpfopt_linux.go
@@ -20,9 +20,9 @@ func (c *dgramOpt) SetBPF(filter []bpf.RawInstruction) error {
if err != nil {
return err
}
- prog := sysSockFProg{
+ prog := sockFProg{
Len: uint16(len(filter)),
- Filter: (*sysSockFilter)(unsafe.Pointer(&filter[0])),
+ Filter: (*sockFilter)(unsafe.Pointer(&filter[0])),
}
return os.NewSyscallError("setsockopt", setsockopt(s, sysSOL_SOCKET, sysSO_ATTACH_FILTER, unsafe.Pointer(&prog), uint32(unsafe.Sizeof(prog))))
}
diff --git a/vendor/golang.org/x/net/ipv6/control.go b/vendor/golang.org/x/net/ipv6/control.go
index b7362aae7..56303f08d 100644
--- a/vendor/golang.org/x/net/ipv6/control.go
+++ b/vendor/golang.org/x/net/ipv6/control.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go b/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go
index 80ec2e2f0..d1693af1f 100644
--- a/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go
+++ b/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -29,9 +29,9 @@ func marshal2292PacketInfo(b []byte, cm *ControlMessage) []byte {
m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
m.Level = iana.ProtocolIPv6
m.Type = sysIPV6_2292PKTINFO
- m.SetLen(syscall.CmsgLen(sysSizeofInet6Pktinfo))
+ m.SetLen(syscall.CmsgLen(sizeofInet6Pktinfo))
if cm != nil {
- pi := (*sysInet6Pktinfo)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
+ pi := (*inet6Pktinfo)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
if ip := cm.Src.To16(); ip != nil && ip.To4() == nil {
copy(pi.Addr[:], ip)
}
@@ -39,17 +39,17 @@ func marshal2292PacketInfo(b []byte, cm *ControlMessage) []byte {
pi.setIfindex(cm.IfIndex)
}
}
- return b[syscall.CmsgSpace(sysSizeofInet6Pktinfo):]
+ return b[syscall.CmsgSpace(sizeofInet6Pktinfo):]
}
func marshal2292NextHop(b []byte, cm *ControlMessage) []byte {
m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
m.Level = iana.ProtocolIPv6
m.Type = sysIPV6_2292NEXTHOP
- m.SetLen(syscall.CmsgLen(sysSizeofSockaddrInet6))
+ m.SetLen(syscall.CmsgLen(sizeofSockaddrInet6))
if cm != nil {
- sa := (*sysSockaddrInet6)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
+ sa := (*sockaddrInet6)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
sa.setSockaddr(cm.NextHop, cm.IfIndex)
}
- return b[syscall.CmsgSpace(sysSizeofSockaddrInet6):]
+ return b[syscall.CmsgSpace(sizeofSockaddrInet6):]
}
diff --git a/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go b/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go
index f344d16d0..2800df4bc 100644
--- a/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go
+++ b/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go
@@ -1,8 +1,8 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux netbsd openbsd
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris
package ipv6
@@ -49,9 +49,9 @@ func marshalPacketInfo(b []byte, cm *ControlMessage) []byte {
m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
m.Level = iana.ProtocolIPv6
m.Type = sysIPV6_PKTINFO
- m.SetLen(syscall.CmsgLen(sysSizeofInet6Pktinfo))
+ m.SetLen(syscall.CmsgLen(sizeofInet6Pktinfo))
if cm != nil {
- pi := (*sysInet6Pktinfo)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
+ pi := (*inet6Pktinfo)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
if ip := cm.Src.To16(); ip != nil && ip.To4() == nil {
copy(pi.Addr[:], ip)
}
@@ -59,11 +59,11 @@ func marshalPacketInfo(b []byte, cm *ControlMessage) []byte {
pi.setIfindex(cm.IfIndex)
}
}
- return b[syscall.CmsgSpace(sysSizeofInet6Pktinfo):]
+ return b[syscall.CmsgSpace(sizeofInet6Pktinfo):]
}
func parsePacketInfo(cm *ControlMessage, b []byte) {
- pi := (*sysInet6Pktinfo)(unsafe.Pointer(&b[0]))
+ pi := (*inet6Pktinfo)(unsafe.Pointer(&b[0]))
cm.Dst = pi.Addr[:]
cm.IfIndex = int(pi.Ifindex)
}
@@ -72,12 +72,12 @@ func marshalNextHop(b []byte, cm *ControlMessage) []byte {
m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
m.Level = iana.ProtocolIPv6
m.Type = sysIPV6_NEXTHOP
- m.SetLen(syscall.CmsgLen(sysSizeofSockaddrInet6))
+ m.SetLen(syscall.CmsgLen(sizeofSockaddrInet6))
if cm != nil {
- sa := (*sysSockaddrInet6)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
+ sa := (*sockaddrInet6)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
sa.setSockaddr(cm.NextHop, cm.IfIndex)
}
- return b[syscall.CmsgSpace(sysSizeofSockaddrInet6):]
+ return b[syscall.CmsgSpace(sizeofSockaddrInet6):]
}
func parseNextHop(cm *ControlMessage, b []byte) {
@@ -87,12 +87,12 @@ func marshalPathMTU(b []byte, cm *ControlMessage) []byte {
m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
m.Level = iana.ProtocolIPv6
m.Type = sysIPV6_PATHMTU
- m.SetLen(syscall.CmsgLen(sysSizeofIPv6Mtuinfo))
- return b[syscall.CmsgSpace(sysSizeofIPv6Mtuinfo):]
+ m.SetLen(syscall.CmsgLen(sizeofIPv6Mtuinfo))
+ return b[syscall.CmsgSpace(sizeofIPv6Mtuinfo):]
}
func parsePathMTU(cm *ControlMessage, b []byte) {
- mi := (*sysIPv6Mtuinfo)(unsafe.Pointer(&b[0]))
+ mi := (*ipv6Mtuinfo)(unsafe.Pointer(&b[0]))
cm.Dst = mi.Addr.Addr[:]
cm.IfIndex = int(mi.Addr.Scope_id)
cm.MTU = int(mi.Mtu)
diff --git a/vendor/golang.org/x/net/ipv6/control_stub.go b/vendor/golang.org/x/net/ipv6/control_stub.go
index 952b2bd2a..24b40a82d 100644
--- a/vendor/golang.org/x/net/ipv6/control_stub.go
+++ b/vendor/golang.org/x/net/ipv6/control_stub.go
@@ -1,8 +1,8 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build nacl plan9 solaris
+// +build nacl plan9
package ipv6
diff --git a/vendor/golang.org/x/net/ipv6/control_unix.go b/vendor/golang.org/x/net/ipv6/control_unix.go
index 46fbdcbe3..7bd421053 100644
--- a/vendor/golang.org/x/net/ipv6/control_unix.go
+++ b/vendor/golang.org/x/net/ipv6/control_unix.go
@@ -1,8 +1,8 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux netbsd openbsd
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris
package ipv6
@@ -76,19 +76,6 @@ func newControlMessage(opt *rawOpt) (oob []byte) {
}
if l > 0 {
oob = make([]byte, l)
- b := oob
- if opt.isset(FlagTrafficClass) && ctlOpts[ctlTrafficClass].name > 0 {
- b = ctlOpts[ctlTrafficClass].marshal(b, nil)
- }
- if opt.isset(FlagHopLimit) && ctlOpts[ctlHopLimit].name > 0 {
- b = ctlOpts[ctlHopLimit].marshal(b, nil)
- }
- if opt.isset(flagPacketInfo) && ctlOpts[ctlPacketInfo].name > 0 {
- b = ctlOpts[ctlPacketInfo].marshal(b, nil)
- }
- if opt.isset(FlagPathMTU) && ctlOpts[ctlPathMTU].name > 0 {
- b = ctlOpts[ctlPathMTU].marshal(b, nil)
- }
}
opt.RUnlock()
return
diff --git a/vendor/golang.org/x/net/ipv6/control_windows.go b/vendor/golang.org/x/net/ipv6/control_windows.go
index 2773a5204..feef6ab86 100644
--- a/vendor/golang.org/x/net/ipv6/control_windows.go
+++ b/vendor/golang.org/x/net/ipv6/control_windows.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/ipv6/defs_darwin.go b/vendor/golang.org/x/net/ipv6/defs_darwin.go
index 4c7f476a8..55ddc116f 100644
--- a/vendor/golang.org/x/net/ipv6/defs_darwin.go
+++ b/vendor/golang.org/x/net/ipv6/defs_darwin.go
@@ -83,30 +83,30 @@ const (
sysIPV6_PORTRANGE_HIGH = C.IPV6_PORTRANGE_HIGH
sysIPV6_PORTRANGE_LOW = C.IPV6_PORTRANGE_LOW
- sysSizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
- sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
- sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
- sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
+ sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
+ sizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
+ sizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
- sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
- sysSizeofGroupReq = C.sizeof_struct_group_req
- sysSizeofGroupSourceReq = C.sizeof_struct_group_source_req
+ sizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
+ sizeofGroupReq = C.sizeof_struct_group_req
+ sizeofGroupSourceReq = C.sizeof_struct_group_source_req
- sysSizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
+ sizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
)
-type sysSockaddrStorage C.struct_sockaddr_storage
+type sockaddrStorage C.struct_sockaddr_storage
-type sysSockaddrInet6 C.struct_sockaddr_in6
+type sockaddrInet6 C.struct_sockaddr_in6
-type sysInet6Pktinfo C.struct_in6_pktinfo
+type inet6Pktinfo C.struct_in6_pktinfo
-type sysIPv6Mtuinfo C.struct_ip6_mtuinfo
+type ipv6Mtuinfo C.struct_ip6_mtuinfo
-type sysIPv6Mreq C.struct_ipv6_mreq
+type ipv6Mreq C.struct_ipv6_mreq
-type sysICMPv6Filter C.struct_icmp6_filter
+type icmpv6Filter C.struct_icmp6_filter
-type sysGroupReq C.struct_group_req
+type groupReq C.struct_group_req
-type sysGroupSourceReq C.struct_group_source_req
+type groupSourceReq C.struct_group_source_req
diff --git a/vendor/golang.org/x/net/ipv6/defs_dragonfly.go b/vendor/golang.org/x/net/ipv6/defs_dragonfly.go
index c72487ceb..a4c383a51 100644
--- a/vendor/golang.org/x/net/ipv6/defs_dragonfly.go
+++ b/vendor/golang.org/x/net/ipv6/defs_dragonfly.go
@@ -64,21 +64,21 @@ const (
sysIPV6_PORTRANGE_HIGH = C.IPV6_PORTRANGE_HIGH
sysIPV6_PORTRANGE_LOW = C.IPV6_PORTRANGE_LOW
- sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
- sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
- sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
+ sizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
+ sizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
- sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
+ sizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
- sysSizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
+ sizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
)
-type sysSockaddrInet6 C.struct_sockaddr_in6
+type sockaddrInet6 C.struct_sockaddr_in6
-type sysInet6Pktinfo C.struct_in6_pktinfo
+type inet6Pktinfo C.struct_in6_pktinfo
-type sysIPv6Mtuinfo C.struct_ip6_mtuinfo
+type ipv6Mtuinfo C.struct_ip6_mtuinfo
-type sysIPv6Mreq C.struct_ipv6_mreq
+type ipv6Mreq C.struct_ipv6_mreq
-type sysICMPv6Filter C.struct_icmp6_filter
+type icmpv6Filter C.struct_icmp6_filter
diff --git a/vendor/golang.org/x/net/ipv6/defs_freebsd.go b/vendor/golang.org/x/net/ipv6/defs_freebsd.go
index de199ec6a..53e625389 100644
--- a/vendor/golang.org/x/net/ipv6/defs_freebsd.go
+++ b/vendor/golang.org/x/net/ipv6/defs_freebsd.go
@@ -76,30 +76,30 @@ const (
sysIPV6_PORTRANGE_HIGH = C.IPV6_PORTRANGE_HIGH
sysIPV6_PORTRANGE_LOW = C.IPV6_PORTRANGE_LOW
- sysSizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
- sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
- sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
- sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
+ sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
+ sizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
+ sizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
- sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
- sysSizeofGroupReq = C.sizeof_struct_group_req
- sysSizeofGroupSourceReq = C.sizeof_struct_group_source_req
+ sizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
+ sizeofGroupReq = C.sizeof_struct_group_req
+ sizeofGroupSourceReq = C.sizeof_struct_group_source_req
- sysSizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
+ sizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
)
-type sysSockaddrStorage C.struct_sockaddr_storage
+type sockaddrStorage C.struct_sockaddr_storage
-type sysSockaddrInet6 C.struct_sockaddr_in6
+type sockaddrInet6 C.struct_sockaddr_in6
-type sysInet6Pktinfo C.struct_in6_pktinfo
+type inet6Pktinfo C.struct_in6_pktinfo
-type sysIPv6Mtuinfo C.struct_ip6_mtuinfo
+type ipv6Mtuinfo C.struct_ip6_mtuinfo
-type sysIPv6Mreq C.struct_ipv6_mreq
+type ipv6Mreq C.struct_ipv6_mreq
-type sysGroupReq C.struct_group_req
+type groupReq C.struct_group_req
-type sysGroupSourceReq C.struct_group_source_req
+type groupSourceReq C.struct_group_source_req
-type sysICMPv6Filter C.struct_icmp6_filter
+type icmpv6Filter C.struct_icmp6_filter
diff --git a/vendor/golang.org/x/net/ipv6/defs_linux.go b/vendor/golang.org/x/net/ipv6/defs_linux.go
index 664305d8b..8a967fd21 100644
--- a/vendor/golang.org/x/net/ipv6/defs_linux.go
+++ b/vendor/golang.org/x/net/ipv6/defs_linux.go
@@ -109,37 +109,37 @@ const (
sysSOL_SOCKET = C.SOL_SOCKET
sysSO_ATTACH_FILTER = C.SO_ATTACH_FILTER
- sysSizeofKernelSockaddrStorage = C.sizeof_struct___kernel_sockaddr_storage
- sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
- sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
- sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
- sysSizeofIPv6FlowlabelReq = C.sizeof_struct_in6_flowlabel_req
+ sizeofKernelSockaddrStorage = C.sizeof_struct___kernel_sockaddr_storage
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
+ sizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
+ sizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
+ sizeofIPv6FlowlabelReq = C.sizeof_struct_in6_flowlabel_req
- sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
- sysSizeofGroupReq = C.sizeof_struct_group_req
- sysSizeofGroupSourceReq = C.sizeof_struct_group_source_req
+ sizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
+ sizeofGroupReq = C.sizeof_struct_group_req
+ sizeofGroupSourceReq = C.sizeof_struct_group_source_req
- sysSizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
+ sizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
)
-type sysKernelSockaddrStorage C.struct___kernel_sockaddr_storage
+type kernelSockaddrStorage C.struct___kernel_sockaddr_storage
-type sysSockaddrInet6 C.struct_sockaddr_in6
+type sockaddrInet6 C.struct_sockaddr_in6
-type sysInet6Pktinfo C.struct_in6_pktinfo
+type inet6Pktinfo C.struct_in6_pktinfo
-type sysIPv6Mtuinfo C.struct_ip6_mtuinfo
+type ipv6Mtuinfo C.struct_ip6_mtuinfo
-type sysIPv6FlowlabelReq C.struct_in6_flowlabel_req
+type ipv6FlowlabelReq C.struct_in6_flowlabel_req
-type sysIPv6Mreq C.struct_ipv6_mreq
+type ipv6Mreq C.struct_ipv6_mreq
-type sysGroupReq C.struct_group_req
+type groupReq C.struct_group_req
-type sysGroupSourceReq C.struct_group_source_req
+type groupSourceReq C.struct_group_source_req
-type sysICMPv6Filter C.struct_icmp6_filter
+type icmpv6Filter C.struct_icmp6_filter
-type sysSockFProg C.struct_sock_fprog
+type sockFProg C.struct_sock_fprog
-type sysSockFilter C.struct_sock_filter
+type sockFilter C.struct_sock_filter
diff --git a/vendor/golang.org/x/net/ipv6/defs_netbsd.go b/vendor/golang.org/x/net/ipv6/defs_netbsd.go
index 7bd09e8e8..be9ceb9cc 100644
--- a/vendor/golang.org/x/net/ipv6/defs_netbsd.go
+++ b/vendor/golang.org/x/net/ipv6/defs_netbsd.go
@@ -60,21 +60,21 @@ const (
sysIPV6_PORTRANGE_HIGH = C.IPV6_PORTRANGE_HIGH
sysIPV6_PORTRANGE_LOW = C.IPV6_PORTRANGE_LOW
- sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
- sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
- sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
+ sizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
+ sizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
- sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
+ sizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
- sysSizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
+ sizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
)
-type sysSockaddrInet6 C.struct_sockaddr_in6
+type sockaddrInet6 C.struct_sockaddr_in6
-type sysInet6Pktinfo C.struct_in6_pktinfo
+type inet6Pktinfo C.struct_in6_pktinfo
-type sysIPv6Mtuinfo C.struct_ip6_mtuinfo
+type ipv6Mtuinfo C.struct_ip6_mtuinfo
-type sysIPv6Mreq C.struct_ipv6_mreq
+type ipv6Mreq C.struct_ipv6_mreq
-type sysICMPv6Filter C.struct_icmp6_filter
+type icmpv6Filter C.struct_icmp6_filter
diff --git a/vendor/golang.org/x/net/ipv6/defs_openbsd.go b/vendor/golang.org/x/net/ipv6/defs_openbsd.go
index 6796d9b2f..177ddf87d 100644
--- a/vendor/golang.org/x/net/ipv6/defs_openbsd.go
+++ b/vendor/golang.org/x/net/ipv6/defs_openbsd.go
@@ -69,21 +69,21 @@ const (
sysIPV6_PORTRANGE_HIGH = C.IPV6_PORTRANGE_HIGH
sysIPV6_PORTRANGE_LOW = C.IPV6_PORTRANGE_LOW
- sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
- sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
- sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
+ sizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
+ sizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
- sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
+ sizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
- sysSizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
+ sizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
)
-type sysSockaddrInet6 C.struct_sockaddr_in6
+type sockaddrInet6 C.struct_sockaddr_in6
-type sysInet6Pktinfo C.struct_in6_pktinfo
+type inet6Pktinfo C.struct_in6_pktinfo
-type sysIPv6Mtuinfo C.struct_ip6_mtuinfo
+type ipv6Mtuinfo C.struct_ip6_mtuinfo
-type sysIPv6Mreq C.struct_ipv6_mreq
+type ipv6Mreq C.struct_ipv6_mreq
-type sysICMPv6Filter C.struct_icmp6_filter
+type icmpv6Filter C.struct_icmp6_filter
diff --git a/vendor/golang.org/x/net/ipv6/defs_solaris.go b/vendor/golang.org/x/net/ipv6/defs_solaris.go
index 972b17126..0f8ce2b46 100644
--- a/vendor/golang.org/x/net/ipv6/defs_solaris.go
+++ b/vendor/golang.org/x/net/ipv6/defs_solaris.go
@@ -9,6 +9,8 @@
package ipv6
/*
+#include <sys/socket.h>
+
#include <netinet/in.h>
#include <netinet/icmp6.h>
*/
@@ -53,6 +55,13 @@ const (
sysIPV6_RECVDSTOPTS = C.IPV6_RECVDSTOPTS
+ sysMCAST_JOIN_GROUP = C.MCAST_JOIN_GROUP
+ sysMCAST_LEAVE_GROUP = C.MCAST_LEAVE_GROUP
+ sysMCAST_BLOCK_SOURCE = C.MCAST_BLOCK_SOURCE
+ sysMCAST_UNBLOCK_SOURCE = C.MCAST_UNBLOCK_SOURCE
+ sysMCAST_JOIN_SOURCE_GROUP = C.MCAST_JOIN_SOURCE_GROUP
+ sysMCAST_LEAVE_SOURCE_GROUP = C.MCAST_LEAVE_SOURCE_GROUP
+
sysIPV6_PREFER_SRC_HOME = C.IPV6_PREFER_SRC_HOME
sysIPV6_PREFER_SRC_COA = C.IPV6_PREFER_SRC_COA
sysIPV6_PREFER_SRC_PUBLIC = C.IPV6_PREFER_SRC_PUBLIC
@@ -76,21 +85,30 @@ const (
sysICMP6_FILTER = C.ICMP6_FILTER
- sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
- sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
- sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
+ sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
+ sizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
+ sizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
- sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
+ sizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
+ sizeofGroupReq = C.sizeof_struct_group_req
+ sizeofGroupSourceReq = C.sizeof_struct_group_source_req
- sysSizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
+ sizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
)
-type sysSockaddrInet6 C.struct_sockaddr_in6
+type sockaddrStorage C.struct_sockaddr_storage
+
+type sockaddrInet6 C.struct_sockaddr_in6
+
+type inet6Pktinfo C.struct_in6_pktinfo
+
+type ipv6Mtuinfo C.struct_ip6_mtuinfo
-type sysInet6Pktinfo C.struct_in6_pktinfo
+type ipv6Mreq C.struct_ipv6_mreq
-type sysIPv6Mtuinfo C.struct_ip6_mtuinfo
+type groupReq C.struct_group_req
-type sysIPv6Mreq C.struct_ipv6_mreq
+type groupSourceReq C.struct_group_source_req
-type sysICMPv6Filter C.struct_icmp6_filter
+type icmpv6Filter C.struct_icmp6_filter
diff --git a/vendor/golang.org/x/net/ipv6/dgramopt_posix.go b/vendor/golang.org/x/net/ipv6/dgramopt_posix.go
index 4ea7bc2d6..46f7f2ffb 100644
--- a/vendor/golang.org/x/net/ipv6/dgramopt_posix.go
+++ b/vendor/golang.org/x/net/ipv6/dgramopt_posix.go
@@ -1,8 +1,8 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux netbsd openbsd windows
+// +build darwin dragonfly freebsd linux netbsd openbsd windows solaris
package ipv6
diff --git a/vendor/golang.org/x/net/ipv6/dgramopt_stub.go b/vendor/golang.org/x/net/ipv6/dgramopt_stub.go
index fb067fb2f..bc3290ad8 100644
--- a/vendor/golang.org/x/net/ipv6/dgramopt_stub.go
+++ b/vendor/golang.org/x/net/ipv6/dgramopt_stub.go
@@ -1,8 +1,8 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build nacl plan9 solaris
+// +build nacl plan9
package ipv6
diff --git a/vendor/golang.org/x/net/ipv6/doc.go b/vendor/golang.org/x/net/ipv6/doc.go
index 7d75698fb..78a779c4e 100644
--- a/vendor/golang.org/x/net/ipv6/doc.go
+++ b/vendor/golang.org/x/net/ipv6/doc.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -9,13 +9,14 @@
// manipulation of IPv6 facilities.
//
// The IPv6 protocol is defined in RFC 2460.
-// Basic and advanced socket interface extensions are defined in RFC
-// 3493 and RFC 3542.
-// Socket interface extensions for multicast source filters are
-// defined in RFC 3678.
+// Socket interface extensions are defined in RFC 3493, RFC 3542 and
+// RFC 3678.
// MLDv1 and MLDv2 are defined in RFC 2710 and RFC 3810.
// Source-specific multicast is defined in RFC 4607.
//
+// On Darwin, this package requires OS X Mavericks version 10.9 or
+// above, or equivalent.
+//
//
// Unicasting
//
diff --git a/vendor/golang.org/x/net/ipv6/endpoint.go b/vendor/golang.org/x/net/ipv6/endpoint.go
index 60e7d93c2..b988782a9 100644
--- a/vendor/golang.org/x/net/ipv6/endpoint.go
+++ b/vendor/golang.org/x/net/ipv6/endpoint.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/ipv6/gen.go b/vendor/golang.org/x/net/ipv6/gen.go
index 826e3ae28..41886ec72 100644
--- a/vendor/golang.org/x/net/ipv6/gen.go
+++ b/vendor/golang.org/x/net/ipv6/gen.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -52,15 +52,6 @@ func genzsys() error {
if err != nil {
return err
}
- // The ipv6 package still supports go1.2, and so we need to
- // take care of additional platforms in go1.3 and above for
- // working with go1.2.
- switch {
- case runtime.GOOS == "dragonfly" || runtime.GOOS == "solaris":
- b = bytes.Replace(b, []byte("package ipv6\n"), []byte("// +build "+runtime.GOOS+"\n\npackage ipv6\n"), 1)
- case runtime.GOOS == "linux" && (runtime.GOARCH == "arm64" || runtime.GOARCH == "mips64" || runtime.GOARCH == "mips64le" || runtime.GOARCH == "ppc" || runtime.GOARCH == "ppc64" || runtime.GOARCH == "ppc64le" || runtime.GOARCH == "s390x"):
- b = bytes.Replace(b, []byte("package ipv6\n"), []byte("// +build "+runtime.GOOS+","+runtime.GOARCH+"\n\npackage ipv6\n"), 1)
- }
b, err = format.Source(b)
if err != nil {
return err
diff --git a/vendor/golang.org/x/net/ipv6/genericopt_posix.go b/vendor/golang.org/x/net/ipv6/genericopt_posix.go
index 513bd8c74..0a8d9883d 100644
--- a/vendor/golang.org/x/net/ipv6/genericopt_posix.go
+++ b/vendor/golang.org/x/net/ipv6/genericopt_posix.go
@@ -1,8 +1,8 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux netbsd openbsd windows
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
package ipv6
diff --git a/vendor/golang.org/x/net/ipv6/genericopt_stub.go b/vendor/golang.org/x/net/ipv6/genericopt_stub.go
index f5c372242..9dfc57dae 100644
--- a/vendor/golang.org/x/net/ipv6/genericopt_stub.go
+++ b/vendor/golang.org/x/net/ipv6/genericopt_stub.go
@@ -1,8 +1,8 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build nacl plan9 solaris
+// +build nacl plan9
package ipv6
diff --git a/vendor/golang.org/x/net/ipv6/helper.go b/vendor/golang.org/x/net/ipv6/helper.go
index 53b999905..7a42e5860 100644
--- a/vendor/golang.org/x/net/ipv6/helper.go
+++ b/vendor/golang.org/x/net/ipv6/helper.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/ipv6/icmp.go b/vendor/golang.org/x/net/ipv6/icmp.go
index a2de65a08..df9e4fbe3 100644
--- a/vendor/golang.org/x/net/ipv6/icmp.go
+++ b/vendor/golang.org/x/net/ipv6/icmp.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -31,7 +31,7 @@ func (typ ICMPType) Protocol() int {
// packets not explicitly addressed to itself, and a host means a node
// that is not a router.
type ICMPFilter struct {
- sysICMPv6Filter
+ icmpv6Filter
}
// Accept accepts incoming ICMP packets including the type field value
diff --git a/vendor/golang.org/x/net/ipv6/icmp_bsd.go b/vendor/golang.org/x/net/ipv6/icmp_bsd.go
index 30e3ce424..e1a791de4 100644
--- a/vendor/golang.org/x/net/ipv6/icmp_bsd.go
+++ b/vendor/golang.org/x/net/ipv6/icmp_bsd.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -6,15 +6,15 @@
package ipv6
-func (f *sysICMPv6Filter) accept(typ ICMPType) {
+func (f *icmpv6Filter) accept(typ ICMPType) {
f.Filt[typ>>5] |= 1 << (uint32(typ) & 31)
}
-func (f *sysICMPv6Filter) block(typ ICMPType) {
+func (f *icmpv6Filter) block(typ ICMPType) {
f.Filt[typ>>5] &^= 1 << (uint32(typ) & 31)
}
-func (f *sysICMPv6Filter) setAll(block bool) {
+func (f *icmpv6Filter) setAll(block bool) {
for i := range f.Filt {
if block {
f.Filt[i] = 0
@@ -24,6 +24,6 @@ func (f *sysICMPv6Filter) setAll(block bool) {
}
}
-func (f *sysICMPv6Filter) willBlock(typ ICMPType) bool {
+func (f *icmpv6Filter) willBlock(typ ICMPType) bool {
return f.Filt[typ>>5]&(1<<(uint32(typ)&31)) == 0
}
diff --git a/vendor/golang.org/x/net/ipv6/icmp_linux.go b/vendor/golang.org/x/net/ipv6/icmp_linux.go
index a67ecf690..647f6b44f 100644
--- a/vendor/golang.org/x/net/ipv6/icmp_linux.go
+++ b/vendor/golang.org/x/net/ipv6/icmp_linux.go
@@ -1,18 +1,18 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package ipv6
-func (f *sysICMPv6Filter) accept(typ ICMPType) {
+func (f *icmpv6Filter) accept(typ ICMPType) {
f.Data[typ>>5] &^= 1 << (uint32(typ) & 31)
}
-func (f *sysICMPv6Filter) block(typ ICMPType) {
+func (f *icmpv6Filter) block(typ ICMPType) {
f.Data[typ>>5] |= 1 << (uint32(typ) & 31)
}
-func (f *sysICMPv6Filter) setAll(block bool) {
+func (f *icmpv6Filter) setAll(block bool) {
for i := range f.Data {
if block {
f.Data[i] = 1<<32 - 1
@@ -22,6 +22,6 @@ func (f *sysICMPv6Filter) setAll(block bool) {
}
}
-func (f *sysICMPv6Filter) willBlock(typ ICMPType) bool {
+func (f *icmpv6Filter) willBlock(typ ICMPType) bool {
return f.Data[typ>>5]&(1<<(uint32(typ)&31)) != 0
}
diff --git a/vendor/golang.org/x/net/ipv6/icmp_solaris.go b/vendor/golang.org/x/net/ipv6/icmp_solaris.go
index a942f354c..7c23bb1cf 100644
--- a/vendor/golang.org/x/net/ipv6/icmp_solaris.go
+++ b/vendor/golang.org/x/net/ipv6/icmp_solaris.go
@@ -1,24 +1,27 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build solaris
-
package ipv6
-func (f *sysICMPv6Filter) accept(typ ICMPType) {
- // TODO(mikio): implement this
+func (f *icmpv6Filter) accept(typ ICMPType) {
+ f.X__icmp6_filt[typ>>5] |= 1 << (uint32(typ) & 31)
}
-func (f *sysICMPv6Filter) block(typ ICMPType) {
- // TODO(mikio): implement this
+func (f *icmpv6Filter) block(typ ICMPType) {
+ f.X__icmp6_filt[typ>>5] &^= 1 << (uint32(typ) & 31)
}
-func (f *sysICMPv6Filter) setAll(block bool) {
- // TODO(mikio): implement this
+func (f *icmpv6Filter) setAll(block bool) {
+ for i := range f.X__icmp6_filt {
+ if block {
+ f.X__icmp6_filt[i] = 0
+ } else {
+ f.X__icmp6_filt[i] = 1<<32 - 1
+ }
+ }
}
-func (f *sysICMPv6Filter) willBlock(typ ICMPType) bool {
- // TODO(mikio): implement this
- return false
+func (f *icmpv6Filter) willBlock(typ ICMPType) bool {
+ return f.X__icmp6_filt[typ>>5]&(1<<(uint32(typ)&31)) == 0
}
diff --git a/vendor/golang.org/x/net/ipv6/icmp_stub.go b/vendor/golang.org/x/net/ipv6/icmp_stub.go
index c1263ecac..3cd84e195 100644
--- a/vendor/golang.org/x/net/ipv6/icmp_stub.go
+++ b/vendor/golang.org/x/net/ipv6/icmp_stub.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -6,18 +6,18 @@
package ipv6
-type sysICMPv6Filter struct {
+type icmpv6Filter struct {
}
-func (f *sysICMPv6Filter) accept(typ ICMPType) {
+func (f *icmpv6Filter) accept(typ ICMPType) {
}
-func (f *sysICMPv6Filter) block(typ ICMPType) {
+func (f *icmpv6Filter) block(typ ICMPType) {
}
-func (f *sysICMPv6Filter) setAll(block bool) {
+func (f *icmpv6Filter) setAll(block bool) {
}
-func (f *sysICMPv6Filter) willBlock(typ ICMPType) bool {
+func (f *icmpv6Filter) willBlock(typ ICMPType) bool {
return false
}
diff --git a/vendor/golang.org/x/net/ipv6/icmp_test.go b/vendor/golang.org/x/net/ipv6/icmp_test.go
index e192d6d8c..d8e9675dc 100644
--- a/vendor/golang.org/x/net/ipv6/icmp_test.go
+++ b/vendor/golang.org/x/net/ipv6/icmp_test.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -34,7 +34,7 @@ func TestICMPString(t *testing.T) {
func TestICMPFilter(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
@@ -61,7 +61,7 @@ func TestICMPFilter(t *testing.T) {
func TestSetICMPFilter(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
diff --git a/vendor/golang.org/x/net/ipv6/icmp_windows.go b/vendor/golang.org/x/net/ipv6/icmp_windows.go
index f477a8c0d..443cd0736 100644
--- a/vendor/golang.org/x/net/ipv6/icmp_windows.go
+++ b/vendor/golang.org/x/net/ipv6/icmp_windows.go
@@ -1,22 +1,22 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package ipv6
-func (f *sysICMPv6Filter) accept(typ ICMPType) {
+func (f *icmpv6Filter) accept(typ ICMPType) {
// TODO(mikio): implement this
}
-func (f *sysICMPv6Filter) block(typ ICMPType) {
+func (f *icmpv6Filter) block(typ ICMPType) {
// TODO(mikio): implement this
}
-func (f *sysICMPv6Filter) setAll(block bool) {
+func (f *icmpv6Filter) setAll(block bool) {
// TODO(mikio): implement this
}
-func (f *sysICMPv6Filter) willBlock(typ ICMPType) bool {
+func (f *icmpv6Filter) willBlock(typ ICMPType) bool {
// TODO(mikio): implement this
return false
}
diff --git a/vendor/golang.org/x/net/ipv6/main_test.go b/vendor/golang.org/x/net/ipv6/main_test.go
deleted file mode 100644
index 6ae53bb10..000000000
--- a/vendor/golang.org/x/net/ipv6/main_test.go
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ipv6_test
-
-import (
- "flag"
- "fmt"
- "os"
- "os/exec"
- "runtime"
- "strings"
- "testing"
-)
-
-func TestMain(m *testing.M) {
- flag.Parse()
- if runtime.GOOS == "darwin" {
- vers, _ := exec.Command("sw_vers", "-productVersion").Output()
- if string(vers) == "10.8" || strings.HasPrefix(string(vers), "10.8.") {
- fmt.Fprintf(os.Stderr, "# skipping tests on OS X 10.8 to avoid kernel panics; golang.org/issue/17015\n")
- os.Exit(0)
- }
- }
- os.Exit(m.Run())
-}
diff --git a/vendor/golang.org/x/net/ipv6/mocktransponder_test.go b/vendor/golang.org/x/net/ipv6/mocktransponder_test.go
index d587922a1..6efe56c68 100644
--- a/vendor/golang.org/x/net/ipv6/mocktransponder_test.go
+++ b/vendor/golang.org/x/net/ipv6/mocktransponder_test.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/ipv6/multicast_test.go b/vendor/golang.org/x/net/ipv6/multicast_test.go
index a3a8979d2..69a21cd38 100644
--- a/vendor/golang.org/x/net/ipv6/multicast_test.go
+++ b/vendor/golang.org/x/net/ipv6/multicast_test.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -29,15 +29,15 @@ var packetConnReadWriteMulticastUDPTests = []struct {
func TestPacketConnReadWriteMulticastUDP(t *testing.T) {
switch runtime.GOOS {
- case "freebsd": // due to a bug on loopback marking
- // See http://www.freebsd.org/cgi/query-pr.cgi?pr=180065.
- t.Skipf("not supported on %s", runtime.GOOS)
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
t.Skip("ipv6 is not supported")
}
+ if !nettest.SupportsIPv6MulticastDeliveryOnLoopback() {
+ t.Skipf("multicast delivery doesn't work correctly on %s", runtime.GOOS)
+ }
ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
if ifi == nil {
t.Skipf("not available on %s", runtime.GOOS)
@@ -129,15 +129,15 @@ var packetConnReadWriteMulticastICMPTests = []struct {
func TestPacketConnReadWriteMulticastICMP(t *testing.T) {
switch runtime.GOOS {
- case "freebsd": // due to a bug on loopback marking
- // See http://www.freebsd.org/cgi/query-pr.cgi?pr=180065.
- t.Skipf("not supported on %s", runtime.GOOS)
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
t.Skip("ipv6 is not supported")
}
+ if !nettest.SupportsIPv6MulticastDeliveryOnLoopback() {
+ t.Skipf("multicast delivery doesn't work correctly on %s", runtime.GOOS)
+ }
if m, ok := nettest.SupportsRawIPSocket(); !ok {
t.Skip(m)
}
@@ -205,7 +205,11 @@ func TestPacketConnReadWriteMulticastICMP(t *testing.T) {
if toggle {
psh = nil
if err := p.SetChecksum(true, 2); err != nil {
- t.Fatal(err)
+ // Solaris never allows to
+ // modify ICMP properties.
+ if runtime.GOOS != "solaris" {
+ t.Fatal(err)
+ }
}
} else {
psh = pshicmp
diff --git a/vendor/golang.org/x/net/ipv6/multicastlistener_test.go b/vendor/golang.org/x/net/ipv6/multicastlistener_test.go
index 9711f7513..044db157b 100644
--- a/vendor/golang.org/x/net/ipv6/multicastlistener_test.go
+++ b/vendor/golang.org/x/net/ipv6/multicastlistener_test.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -22,7 +22,7 @@ var udpMultipleGroupListenerTests = []net.Addr{
func TestUDPSinglePacketConnWithMultipleGroupListeners(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
@@ -62,7 +62,7 @@ func TestUDPSinglePacketConnWithMultipleGroupListeners(t *testing.T) {
func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
@@ -114,7 +114,7 @@ func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) {
func TestUDPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
@@ -157,7 +157,7 @@ func TestUDPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) {
func TestIPSinglePacketConnWithSingleGroupListener(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
@@ -201,7 +201,7 @@ func TestIPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) {
switch runtime.GOOS {
case "darwin", "dragonfly", "openbsd": // platforms that return fe80::1%lo0: bind: can't assign requested address
t.Skipf("not supported on %s", runtime.GOOS)
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
diff --git a/vendor/golang.org/x/net/ipv6/multicastsockopt_test.go b/vendor/golang.org/x/net/ipv6/multicastsockopt_test.go
index fe0e6e1b1..9e6b902d7 100644
--- a/vendor/golang.org/x/net/ipv6/multicastsockopt_test.go
+++ b/vendor/golang.org/x/net/ipv6/multicastsockopt_test.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -26,7 +26,7 @@ var packetConnMulticastSocketOptionTests = []struct {
func TestPacketConnMulticastSocketOptions(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
diff --git a/vendor/golang.org/x/net/ipv6/payload.go b/vendor/golang.org/x/net/ipv6/payload.go
index 529b20bca..682ff22f2 100644
--- a/vendor/golang.org/x/net/ipv6/payload.go
+++ b/vendor/golang.org/x/net/ipv6/payload.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/ipv6/payload_cmsg.go b/vendor/golang.org/x/net/ipv6/payload_cmsg.go
index 8e90d324d..3a33585ef 100644
--- a/vendor/golang.org/x/net/ipv6/payload_cmsg.go
+++ b/vendor/golang.org/x/net/ipv6/payload_cmsg.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/ipv6/payload_nocmsg.go b/vendor/golang.org/x/net/ipv6/payload_nocmsg.go
index 499204d0c..9731cba43 100644
--- a/vendor/golang.org/x/net/ipv6/payload_nocmsg.go
+++ b/vendor/golang.org/x/net/ipv6/payload_nocmsg.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/ipv6/readwrite_test.go b/vendor/golang.org/x/net/ipv6/readwrite_test.go
index 8c8c6fde0..41f59be5a 100644
--- a/vendor/golang.org/x/net/ipv6/readwrite_test.go
+++ b/vendor/golang.org/x/net/ipv6/readwrite_test.go
@@ -102,7 +102,7 @@ func benchmarkReadWriteIPv6UDP(b *testing.B, p *ipv6.PacketConn, wb, rb []byte,
func TestPacketConnConcurrentReadWriteUnicastUDP(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
diff --git a/vendor/golang.org/x/net/ipv6/sockopt_asmreq_posix.go b/vendor/golang.org/x/net/ipv6/sockopt_asmreq_posix.go
index 092e39839..cd36739df 100644
--- a/vendor/golang.org/x/net/ipv6/sockopt_asmreq_posix.go
+++ b/vendor/golang.org/x/net/ipv6/sockopt_asmreq_posix.go
@@ -1,8 +1,8 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux netbsd openbsd windows
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
package ipv6
@@ -13,10 +13,10 @@ import (
)
func setsockoptIPMreq(s uintptr, opt *sockOpt, ifi *net.Interface, grp net.IP) error {
- var mreq sysIPv6Mreq
+ var mreq ipv6Mreq
copy(mreq.Multiaddr[:], grp)
if ifi != nil {
mreq.setIfindex(ifi.Index)
}
- return os.NewSyscallError("setsockopt", setsockopt(s, opt.level, opt.name, unsafe.Pointer(&mreq), sysSizeofIPv6Mreq))
+ return os.NewSyscallError("setsockopt", setsockopt(s, opt.level, opt.name, unsafe.Pointer(&mreq), sizeofIPv6Mreq))
}
diff --git a/vendor/golang.org/x/net/ipv6/sockopt_posix.go b/vendor/golang.org/x/net/ipv6/sockopt_posix.go
index 651aa9326..e0a3fa693 100644
--- a/vendor/golang.org/x/net/ipv6/sockopt_posix.go
+++ b/vendor/golang.org/x/net/ipv6/sockopt_posix.go
@@ -1,8 +1,8 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux netbsd openbsd windows
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
package ipv6
@@ -67,8 +67,8 @@ func getICMPFilter(s uintptr, opt *sockOpt) (*ICMPFilter, error) {
return nil, errOpNoSupport
}
var f ICMPFilter
- l := uint32(sysSizeofICMPv6Filter)
- if err := getsockopt(s, opt.level, opt.name, unsafe.Pointer(&f.sysICMPv6Filter), &l); err != nil {
+ l := uint32(sizeofICMPv6Filter)
+ if err := getsockopt(s, opt.level, opt.name, unsafe.Pointer(&f.icmpv6Filter), &l); err != nil {
return nil, os.NewSyscallError("getsockopt", err)
}
return &f, nil
@@ -78,15 +78,15 @@ func setICMPFilter(s uintptr, opt *sockOpt, f *ICMPFilter) error {
if opt.name < 1 || opt.typ != ssoTypeICMPFilter {
return errOpNoSupport
}
- return os.NewSyscallError("setsockopt", setsockopt(s, opt.level, opt.name, unsafe.Pointer(&f.sysICMPv6Filter), sysSizeofICMPv6Filter))
+ return os.NewSyscallError("setsockopt", setsockopt(s, opt.level, opt.name, unsafe.Pointer(&f.icmpv6Filter), sizeofICMPv6Filter))
}
func getMTUInfo(s uintptr, opt *sockOpt) (*net.Interface, int, error) {
if opt.name < 1 || opt.typ != ssoTypeMTUInfo {
return nil, 0, errOpNoSupport
}
- var mi sysIPv6Mtuinfo
- l := uint32(sysSizeofIPv6Mtuinfo)
+ var mi ipv6Mtuinfo
+ l := uint32(sizeofIPv6Mtuinfo)
if err := getsockopt(s, opt.level, opt.name, unsafe.Pointer(&mi), &l); err != nil {
return nil, 0, os.NewSyscallError("getsockopt", err)
}
diff --git a/vendor/golang.org/x/net/ipv6/sockopt_ssmreq_stub.go b/vendor/golang.org/x/net/ipv6/sockopt_ssmreq_stub.go
index a17723265..1a8829092 100644
--- a/vendor/golang.org/x/net/ipv6/sockopt_ssmreq_stub.go
+++ b/vendor/golang.org/x/net/ipv6/sockopt_ssmreq_stub.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build !darwin,!freebsd,!linux
+// +build !darwin,!freebsd,!linux,!solaris
package ipv6
diff --git a/vendor/golang.org/x/net/ipv6/sockopt_ssmreq_unix.go b/vendor/golang.org/x/net/ipv6/sockopt_ssmreq_unix.go
index 88f118ca2..f3668aefc 100644
--- a/vendor/golang.org/x/net/ipv6/sockopt_ssmreq_unix.go
+++ b/vendor/golang.org/x/net/ipv6/sockopt_ssmreq_unix.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin freebsd linux
+// +build darwin freebsd linux solaris
package ipv6
@@ -15,7 +15,7 @@ import (
var freebsd32o64 bool
func setsockoptGroupReq(s uintptr, opt *sockOpt, ifi *net.Interface, grp net.IP) error {
- var gr sysGroupReq
+ var gr groupReq
if ifi != nil {
gr.Interface = uint32(ifi.Index)
}
@@ -23,21 +23,21 @@ func setsockoptGroupReq(s uintptr, opt *sockOpt, ifi *net.Interface, grp net.IP)
var p unsafe.Pointer
var l uint32
if freebsd32o64 {
- var d [sysSizeofGroupReq + 4]byte
- s := (*[sysSizeofGroupReq]byte)(unsafe.Pointer(&gr))
+ var d [sizeofGroupReq + 4]byte
+ s := (*[sizeofGroupReq]byte)(unsafe.Pointer(&gr))
copy(d[:4], s[:4])
copy(d[8:], s[4:])
p = unsafe.Pointer(&d[0])
- l = sysSizeofGroupReq + 4
+ l = sizeofGroupReq + 4
} else {
p = unsafe.Pointer(&gr)
- l = sysSizeofGroupReq
+ l = sizeofGroupReq
}
return os.NewSyscallError("setsockopt", setsockopt(s, opt.level, opt.name, p, l))
}
func setsockoptGroupSourceReq(s uintptr, opt *sockOpt, ifi *net.Interface, grp, src net.IP) error {
- var gsr sysGroupSourceReq
+ var gsr groupSourceReq
if ifi != nil {
gsr.Interface = uint32(ifi.Index)
}
@@ -45,15 +45,15 @@ func setsockoptGroupSourceReq(s uintptr, opt *sockOpt, ifi *net.Interface, grp,
var p unsafe.Pointer
var l uint32
if freebsd32o64 {
- var d [sysSizeofGroupSourceReq + 4]byte
- s := (*[sysSizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr))
+ var d [sizeofGroupSourceReq + 4]byte
+ s := (*[sizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr))
copy(d[:4], s[:4])
copy(d[8:], s[4:])
p = unsafe.Pointer(&d[0])
- l = sysSizeofGroupSourceReq + 4
+ l = sizeofGroupSourceReq + 4
} else {
p = unsafe.Pointer(&gsr)
- l = sysSizeofGroupSourceReq
+ l = sizeofGroupSourceReq
}
return os.NewSyscallError("setsockopt", setsockopt(s, opt.level, opt.name, p, l))
}
diff --git a/vendor/golang.org/x/net/ipv6/sockopt_stub.go b/vendor/golang.org/x/net/ipv6/sockopt_stub.go
index b6b9c4b45..6d59a00c2 100644
--- a/vendor/golang.org/x/net/ipv6/sockopt_stub.go
+++ b/vendor/golang.org/x/net/ipv6/sockopt_stub.go
@@ -1,8 +1,8 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build nacl plan9 solaris
+// +build nacl plan9
package ipv6
diff --git a/vendor/golang.org/x/net/ipv6/sockopt_test.go b/vendor/golang.org/x/net/ipv6/sockopt_test.go
index 9c2190316..774338dbf 100644
--- a/vendor/golang.org/x/net/ipv6/sockopt_test.go
+++ b/vendor/golang.org/x/net/ipv6/sockopt_test.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -19,7 +19,7 @@ var supportsIPv6 bool = nettest.SupportsIPv6()
func TestConnInitiatorPathMTU(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
@@ -57,7 +57,7 @@ func TestConnInitiatorPathMTU(t *testing.T) {
func TestConnResponderPathMTU(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
@@ -95,7 +95,7 @@ func TestConnResponderPathMTU(t *testing.T) {
func TestPacketConnChecksum(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
diff --git a/vendor/golang.org/x/net/ipv6/sys_bsd.go b/vendor/golang.org/x/net/ipv6/sys_bsd.go
index 0ee43e6d2..c22f8ac63 100644
--- a/vendor/golang.org/x/net/ipv6/sys_bsd.go
+++ b/vendor/golang.org/x/net/ipv6/sys_bsd.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -17,9 +17,9 @@ var (
ctlOpts = [ctlMax]ctlOpt{
ctlTrafficClass: {sysIPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass},
ctlHopLimit: {sysIPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit},
- ctlPacketInfo: {sysIPV6_PKTINFO, sysSizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo},
- ctlNextHop: {sysIPV6_NEXTHOP, sysSizeofSockaddrInet6, marshalNextHop, parseNextHop},
- ctlPathMTU: {sysIPV6_PATHMTU, sysSizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU},
+ ctlPacketInfo: {sysIPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo},
+ ctlNextHop: {sysIPV6_NEXTHOP, sizeofSockaddrInet6, marshalNextHop, parseNextHop},
+ ctlPathMTU: {sysIPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU},
}
sockOpts = [ssoMax]sockOpt{
@@ -40,17 +40,17 @@ var (
}
)
-func (sa *sysSockaddrInet6) setSockaddr(ip net.IP, i int) {
- sa.Len = sysSizeofSockaddrInet6
+func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) {
+ sa.Len = sizeofSockaddrInet6
sa.Family = syscall.AF_INET6
copy(sa.Addr[:], ip)
sa.Scope_id = uint32(i)
}
-func (pi *sysInet6Pktinfo) setIfindex(i int) {
+func (pi *inet6Pktinfo) setIfindex(i int) {
pi.Ifindex = uint32(i)
}
-func (mreq *sysIPv6Mreq) setIfindex(i int) {
+func (mreq *ipv6Mreq) setIfindex(i int) {
mreq.Interface = uint32(i)
}
diff --git a/vendor/golang.org/x/net/ipv6/sys_darwin.go b/vendor/golang.org/x/net/ipv6/sys_darwin.go
index 1e1c4aefa..ffcc9d4c4 100644
--- a/vendor/golang.org/x/net/ipv6/sys_darwin.go
+++ b/vendor/golang.org/x/net/ipv6/sys_darwin.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -17,7 +17,7 @@ import (
var (
ctlOpts = [ctlMax]ctlOpt{
ctlHopLimit: {sysIPV6_2292HOPLIMIT, 4, marshal2292HopLimit, parseHopLimit},
- ctlPacketInfo: {sysIPV6_2292PKTINFO, sysSizeofInet6Pktinfo, marshal2292PacketInfo, parsePacketInfo},
+ ctlPacketInfo: {sysIPV6_2292PKTINFO, sizeofInet6Pktinfo, marshal2292PacketInfo, parsePacketInfo},
}
sockOpts = [ssoMax]sockOpt{
@@ -54,9 +54,9 @@ func init() {
}
ctlOpts[ctlTrafficClass] = ctlOpt{sysIPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass}
ctlOpts[ctlHopLimit] = ctlOpt{sysIPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit}
- ctlOpts[ctlPacketInfo] = ctlOpt{sysIPV6_PKTINFO, sysSizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo}
- ctlOpts[ctlNextHop] = ctlOpt{sysIPV6_NEXTHOP, sysSizeofSockaddrInet6, marshalNextHop, parseNextHop}
- ctlOpts[ctlPathMTU] = ctlOpt{sysIPV6_PATHMTU, sysSizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU}
+ ctlOpts[ctlPacketInfo] = ctlOpt{sysIPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo}
+ ctlOpts[ctlNextHop] = ctlOpt{sysIPV6_NEXTHOP, sizeofSockaddrInet6, marshalNextHop, parseNextHop}
+ ctlOpts[ctlPathMTU] = ctlOpt{sysIPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU}
sockOpts[ssoTrafficClass] = sockOpt{iana.ProtocolIPv6, sysIPV6_TCLASS, ssoTypeInt}
sockOpts[ssoReceiveTrafficClass] = sockOpt{iana.ProtocolIPv6, sysIPV6_RECVTCLASS, ssoTypeInt}
sockOpts[ssoReceiveHopLimit] = sockOpt{iana.ProtocolIPv6, sysIPV6_RECVHOPLIMIT, ssoTypeInt}
@@ -71,35 +71,35 @@ func init() {
sockOpts[ssoUnblockSourceGroup] = sockOpt{iana.ProtocolIPv6, sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq}
}
-func (sa *sysSockaddrInet6) setSockaddr(ip net.IP, i int) {
- sa.Len = sysSizeofSockaddrInet6
+func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) {
+ sa.Len = sizeofSockaddrInet6
sa.Family = syscall.AF_INET6
copy(sa.Addr[:], ip)
sa.Scope_id = uint32(i)
}
-func (pi *sysInet6Pktinfo) setIfindex(i int) {
+func (pi *inet6Pktinfo) setIfindex(i int) {
pi.Ifindex = uint32(i)
}
-func (mreq *sysIPv6Mreq) setIfindex(i int) {
+func (mreq *ipv6Mreq) setIfindex(i int) {
mreq.Interface = uint32(i)
}
-func (gr *sysGroupReq) setGroup(grp net.IP) {
- sa := (*sysSockaddrInet6)(unsafe.Pointer(&gr.Pad_cgo_0[0]))
- sa.Len = sysSizeofSockaddrInet6
+func (gr *groupReq) setGroup(grp net.IP) {
+ sa := (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gr)) + 4))
+ sa.Len = sizeofSockaddrInet6
sa.Family = syscall.AF_INET6
copy(sa.Addr[:], grp)
}
-func (gsr *sysGroupSourceReq) setSourceGroup(grp, src net.IP) {
- sa := (*sysSockaddrInet6)(unsafe.Pointer(&gsr.Pad_cgo_0[0]))
- sa.Len = sysSizeofSockaddrInet6
+func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) {
+ sa := (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 4))
+ sa.Len = sizeofSockaddrInet6
sa.Family = syscall.AF_INET6
copy(sa.Addr[:], grp)
- sa = (*sysSockaddrInet6)(unsafe.Pointer(&gsr.Pad_cgo_1[0]))
- sa.Len = sysSizeofSockaddrInet6
+ sa = (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 132))
+ sa.Len = sizeofSockaddrInet6
sa.Family = syscall.AF_INET6
copy(sa.Addr[:], src)
}
diff --git a/vendor/golang.org/x/net/ipv6/sys_freebsd.go b/vendor/golang.org/x/net/ipv6/sys_freebsd.go
index 5527001f1..fd5204beb 100644
--- a/vendor/golang.org/x/net/ipv6/sys_freebsd.go
+++ b/vendor/golang.org/x/net/ipv6/sys_freebsd.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -18,9 +18,9 @@ var (
ctlOpts = [ctlMax]ctlOpt{
ctlTrafficClass: {sysIPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass},
ctlHopLimit: {sysIPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit},
- ctlPacketInfo: {sysIPV6_PKTINFO, sysSizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo},
- ctlNextHop: {sysIPV6_NEXTHOP, sysSizeofSockaddrInet6, marshalNextHop, parseNextHop},
- ctlPathMTU: {sysIPV6_PATHMTU, sysSizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU},
+ ctlPacketInfo: {sysIPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo},
+ ctlNextHop: {sysIPV6_NEXTHOP, sizeofSockaddrInet6, marshalNextHop, parseNextHop},
+ ctlPathMTU: {sysIPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU},
}
sockOpts = [ssoMax]sockOpt{
@@ -57,35 +57,35 @@ func init() {
}
}
-func (sa *sysSockaddrInet6) setSockaddr(ip net.IP, i int) {
- sa.Len = sysSizeofSockaddrInet6
+func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) {
+ sa.Len = sizeofSockaddrInet6
sa.Family = syscall.AF_INET6
copy(sa.Addr[:], ip)
sa.Scope_id = uint32(i)
}
-func (pi *sysInet6Pktinfo) setIfindex(i int) {
+func (pi *inet6Pktinfo) setIfindex(i int) {
pi.Ifindex = uint32(i)
}
-func (mreq *sysIPv6Mreq) setIfindex(i int) {
+func (mreq *ipv6Mreq) setIfindex(i int) {
mreq.Interface = uint32(i)
}
-func (gr *sysGroupReq) setGroup(grp net.IP) {
- sa := (*sysSockaddrInet6)(unsafe.Pointer(&gr.Group))
- sa.Len = sysSizeofSockaddrInet6
+func (gr *groupReq) setGroup(grp net.IP) {
+ sa := (*sockaddrInet6)(unsafe.Pointer(&gr.Group))
+ sa.Len = sizeofSockaddrInet6
sa.Family = syscall.AF_INET6
copy(sa.Addr[:], grp)
}
-func (gsr *sysGroupSourceReq) setSourceGroup(grp, src net.IP) {
- sa := (*sysSockaddrInet6)(unsafe.Pointer(&gsr.Group))
- sa.Len = sysSizeofSockaddrInet6
+func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) {
+ sa := (*sockaddrInet6)(unsafe.Pointer(&gsr.Group))
+ sa.Len = sizeofSockaddrInet6
sa.Family = syscall.AF_INET6
copy(sa.Addr[:], grp)
- sa = (*sysSockaddrInet6)(unsafe.Pointer(&gsr.Source))
- sa.Len = sysSizeofSockaddrInet6
+ sa = (*sockaddrInet6)(unsafe.Pointer(&gsr.Source))
+ sa.Len = sizeofSockaddrInet6
sa.Family = syscall.AF_INET6
copy(sa.Addr[:], src)
}
diff --git a/vendor/golang.org/x/net/ipv6/sys_linux.go b/vendor/golang.org/x/net/ipv6/sys_linux.go
index fd7d5b188..42f5f7853 100644
--- a/vendor/golang.org/x/net/ipv6/sys_linux.go
+++ b/vendor/golang.org/x/net/ipv6/sys_linux.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -16,8 +16,8 @@ var (
ctlOpts = [ctlMax]ctlOpt{
ctlTrafficClass: {sysIPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass},
ctlHopLimit: {sysIPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit},
- ctlPacketInfo: {sysIPV6_PKTINFO, sysSizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo},
- ctlPathMTU: {sysIPV6_PATHMTU, sysSizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU},
+ ctlPacketInfo: {sysIPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo},
+ ctlPathMTU: {sysIPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU},
}
sockOpts = [ssoMax]sockOpt{
@@ -42,31 +42,31 @@ var (
}
)
-func (sa *sysSockaddrInet6) setSockaddr(ip net.IP, i int) {
+func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) {
sa.Family = syscall.AF_INET6
copy(sa.Addr[:], ip)
sa.Scope_id = uint32(i)
}
-func (pi *sysInet6Pktinfo) setIfindex(i int) {
+func (pi *inet6Pktinfo) setIfindex(i int) {
pi.Ifindex = int32(i)
}
-func (mreq *sysIPv6Mreq) setIfindex(i int) {
+func (mreq *ipv6Mreq) setIfindex(i int) {
mreq.Ifindex = int32(i)
}
-func (gr *sysGroupReq) setGroup(grp net.IP) {
- sa := (*sysSockaddrInet6)(unsafe.Pointer(&gr.Group))
+func (gr *groupReq) setGroup(grp net.IP) {
+ sa := (*sockaddrInet6)(unsafe.Pointer(&gr.Group))
sa.Family = syscall.AF_INET6
copy(sa.Addr[:], grp)
}
-func (gsr *sysGroupSourceReq) setSourceGroup(grp, src net.IP) {
- sa := (*sysSockaddrInet6)(unsafe.Pointer(&gsr.Group))
+func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) {
+ sa := (*sockaddrInet6)(unsafe.Pointer(&gsr.Group))
sa.Family = syscall.AF_INET6
copy(sa.Addr[:], grp)
- sa = (*sysSockaddrInet6)(unsafe.Pointer(&gsr.Source))
+ sa = (*sockaddrInet6)(unsafe.Pointer(&gsr.Source))
sa.Family = syscall.AF_INET6
copy(sa.Addr[:], src)
}
diff --git a/vendor/golang.org/x/net/ipv6/thunk_linux_386.s b/vendor/golang.org/x/net/ipv6/sys_linux_386.s
index daa78bc02..b85551a5c 100644
--- a/vendor/golang.org/x/net/ipv6/thunk_linux_386.s
+++ b/vendor/golang.org/x/net/ipv6/sys_linux_386.s
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build go1.2
+#include "textflag.h"
-TEXT ·socketcall(SB),4,$0-36
+TEXT ·socketcall(SB),NOSPLIT,$0-36
JMP syscall·socketcall(SB)
diff --git a/vendor/golang.org/x/net/ipv6/sys_solaris.go b/vendor/golang.org/x/net/ipv6/sys_solaris.go
new file mode 100644
index 000000000..9bd2d66fd
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv6/sys_solaris.go
@@ -0,0 +1,73 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package ipv6
+
+import (
+ "net"
+ "syscall"
+ "unsafe"
+
+ "golang.org/x/net/internal/iana"
+)
+
+var (
+ ctlOpts = [ctlMax]ctlOpt{
+ ctlTrafficClass: {sysIPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass},
+ ctlHopLimit: {sysIPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit},
+ ctlPacketInfo: {sysIPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo},
+ ctlNextHop: {sysIPV6_NEXTHOP, sizeofSockaddrInet6, marshalNextHop, parseNextHop},
+ ctlPathMTU: {sysIPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU},
+ }
+
+ sockOpts = [ssoMax]sockOpt{
+ ssoTrafficClass: {iana.ProtocolIPv6, sysIPV6_TCLASS, ssoTypeInt},
+ ssoHopLimit: {iana.ProtocolIPv6, sysIPV6_UNICAST_HOPS, ssoTypeInt},
+ ssoMulticastInterface: {iana.ProtocolIPv6, sysIPV6_MULTICAST_IF, ssoTypeInterface},
+ ssoMulticastHopLimit: {iana.ProtocolIPv6, sysIPV6_MULTICAST_HOPS, ssoTypeInt},
+ ssoMulticastLoopback: {iana.ProtocolIPv6, sysIPV6_MULTICAST_LOOP, ssoTypeInt},
+ ssoReceiveTrafficClass: {iana.ProtocolIPv6, sysIPV6_RECVTCLASS, ssoTypeInt},
+ ssoReceiveHopLimit: {iana.ProtocolIPv6, sysIPV6_RECVHOPLIMIT, ssoTypeInt},
+ ssoReceivePacketInfo: {iana.ProtocolIPv6, sysIPV6_RECVPKTINFO, ssoTypeInt},
+ ssoReceivePathMTU: {iana.ProtocolIPv6, sysIPV6_RECVPATHMTU, ssoTypeInt},
+ ssoPathMTU: {iana.ProtocolIPv6, sysIPV6_PATHMTU, ssoTypeMTUInfo},
+ ssoChecksum: {iana.ProtocolIPv6, sysIPV6_CHECKSUM, ssoTypeInt},
+ ssoICMPFilter: {iana.ProtocolIPv6ICMP, sysICMP6_FILTER, ssoTypeICMPFilter},
+ ssoJoinGroup: {iana.ProtocolIPv6, sysMCAST_JOIN_GROUP, ssoTypeGroupReq},
+ ssoLeaveGroup: {iana.ProtocolIPv6, sysMCAST_LEAVE_GROUP, ssoTypeGroupReq},
+ ssoJoinSourceGroup: {iana.ProtocolIPv6, sysMCAST_JOIN_SOURCE_GROUP, ssoTypeGroupSourceReq},
+ ssoLeaveSourceGroup: {iana.ProtocolIPv6, sysMCAST_LEAVE_SOURCE_GROUP, ssoTypeGroupSourceReq},
+ ssoBlockSourceGroup: {iana.ProtocolIPv6, sysMCAST_BLOCK_SOURCE, ssoTypeGroupSourceReq},
+ ssoUnblockSourceGroup: {iana.ProtocolIPv6, sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq},
+ }
+)
+
+func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) {
+ sa.Family = syscall.AF_INET6
+ copy(sa.Addr[:], ip)
+ sa.Scope_id = uint32(i)
+}
+
+func (pi *inet6Pktinfo) setIfindex(i int) {
+ pi.Ifindex = uint32(i)
+}
+
+func (mreq *ipv6Mreq) setIfindex(i int) {
+ mreq.Interface = uint32(i)
+}
+
+func (gr *groupReq) setGroup(grp net.IP) {
+ sa := (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gr)) + 4))
+ sa.Family = syscall.AF_INET6
+ copy(sa.Addr[:], grp)
+}
+
+func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) {
+ sa := (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 4))
+ sa.Family = syscall.AF_INET6
+ copy(sa.Addr[:], grp)
+ sa = (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 260))
+ sa.Family = syscall.AF_INET6
+ copy(sa.Addr[:], src)
+}
diff --git a/vendor/golang.org/x/net/ipv6/sys_solaris_amd64.s b/vendor/golang.org/x/net/ipv6/sys_solaris_amd64.s
new file mode 100644
index 000000000..39d76af79
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv6/sys_solaris_amd64.s
@@ -0,0 +1,8 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+#include "textflag.h"
+
+TEXT ·sysvicall6(SB),NOSPLIT,$0-88
+ JMP syscall·sysvicall6(SB)
diff --git a/vendor/golang.org/x/net/ipv6/sys_stub.go b/vendor/golang.org/x/net/ipv6/sys_stub.go
index ead0f4d11..7663bfc09 100644
--- a/vendor/golang.org/x/net/ipv6/sys_stub.go
+++ b/vendor/golang.org/x/net/ipv6/sys_stub.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build nacl plan9 solaris
+// +build nacl plan9
package ipv6
diff --git a/vendor/golang.org/x/net/ipv6/sys_windows.go b/vendor/golang.org/x/net/ipv6/sys_windows.go
index 405190684..003c507d5 100644
--- a/vendor/golang.org/x/net/ipv6/sys_windows.go
+++ b/vendor/golang.org/x/net/ipv6/sys_windows.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -21,14 +21,14 @@ const (
sysIPV6_LEAVE_GROUP = 0xd
sysIPV6_PKTINFO = 0x13
- sysSizeofSockaddrInet6 = 0x1c
+ sizeofSockaddrInet6 = 0x1c
- sysSizeofIPv6Mreq = 0x14
- sysSizeofIPv6Mtuinfo = 0x20
- sysSizeofICMPv6Filter = 0
+ sizeofIPv6Mreq = 0x14
+ sizeofIPv6Mtuinfo = 0x20
+ sizeofICMPv6Filter = 0
)
-type sysSockaddrInet6 struct {
+type sockaddrInet6 struct {
Family uint16
Port uint16
Flowinfo uint32
@@ -36,17 +36,17 @@ type sysSockaddrInet6 struct {
Scope_id uint32
}
-type sysIPv6Mreq struct {
+type ipv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Interface uint32
}
-type sysIPv6Mtuinfo struct {
- Addr sysSockaddrInet6
+type ipv6Mtuinfo struct {
+ Addr sockaddrInet6
Mtu uint32
}
-type sysICMPv6Filter struct {
+type icmpv6Filter struct {
// TODO(mikio): implement this
}
@@ -63,12 +63,12 @@ var (
}
)
-func (sa *sysSockaddrInet6) setSockaddr(ip net.IP, i int) {
+func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) {
sa.Family = syscall.AF_INET6
copy(sa.Addr[:], ip)
sa.Scope_id = uint32(i)
}
-func (mreq *sysIPv6Mreq) setIfindex(i int) {
+func (mreq *ipv6Mreq) setIfindex(i int) {
mreq.Interface = uint32(i)
}
diff --git a/vendor/golang.org/x/net/ipv6/syscall_solaris.go b/vendor/golang.org/x/net/ipv6/syscall_solaris.go
new file mode 100644
index 000000000..2a5c8ee47
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv6/syscall_solaris.go
@@ -0,0 +1,38 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package ipv6
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+//go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt "libsocket.so"
+//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so"
+
+//go:linkname procGetsockopt libc___xnet_getsockopt
+//go:linkname procSetsockopt libc_setsockopt
+
+var (
+ procGetsockopt uintptr
+ procSetsockopt uintptr
+)
+
+func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (uintptr, uintptr, syscall.Errno)
+
+func getsockopt(s uintptr, level, name int, v unsafe.Pointer, l *uint32) error {
+ _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procGetsockopt)), 5, s, uintptr(level), uintptr(name), uintptr(v), uintptr(unsafe.Pointer(l)), 0)
+ if errno != 0 {
+ return error(errno)
+ }
+ return nil
+}
+
+func setsockopt(s uintptr, level, name int, v unsafe.Pointer, l uint32) error {
+ if _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procSetsockopt)), 5, s, uintptr(level), uintptr(name), uintptr(v), uintptr(l), 0); errno != 0 {
+ return error(errno)
+ }
+ return nil
+}
diff --git a/vendor/golang.org/x/net/ipv6/syscall_unix.go b/vendor/golang.org/x/net/ipv6/syscall_unix.go
index 52eb9bd79..58a75b528 100644
--- a/vendor/golang.org/x/net/ipv6/syscall_unix.go
+++ b/vendor/golang.org/x/net/ipv6/syscall_unix.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/ipv6/unicast_test.go b/vendor/golang.org/x/net/ipv6/unicast_test.go
index db5b08a28..406d07128 100644
--- a/vendor/golang.org/x/net/ipv6/unicast_test.go
+++ b/vendor/golang.org/x/net/ipv6/unicast_test.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -20,7 +20,7 @@ import (
func TestPacketConnReadWriteUnicastUDP(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
@@ -81,7 +81,7 @@ func TestPacketConnReadWriteUnicastUDP(t *testing.T) {
func TestPacketConnReadWriteUnicastICMP(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
@@ -127,7 +127,11 @@ func TestPacketConnReadWriteUnicastICMP(t *testing.T) {
if toggle {
psh = nil
if err := p.SetChecksum(true, 2); err != nil {
- t.Fatal(err)
+ // Solaris never allows to modify
+ // ICMP properties.
+ if runtime.GOOS != "solaris" {
+ t.Fatal(err)
+ }
}
} else {
psh = pshicmp
diff --git a/vendor/golang.org/x/net/ipv6/unicastsockopt_test.go b/vendor/golang.org/x/net/ipv6/unicastsockopt_test.go
index 7bb2e440a..1c52b3d30 100644
--- a/vendor/golang.org/x/net/ipv6/unicastsockopt_test.go
+++ b/vendor/golang.org/x/net/ipv6/unicastsockopt_test.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -16,7 +16,7 @@ import (
func TestConnUnicastSocketOptions(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
@@ -52,7 +52,7 @@ var packetConnUnicastSocketOptionTests = []struct {
func TestPacketConnUnicastSocketOptions(t *testing.T) {
switch runtime.GOOS {
- case "nacl", "plan9", "solaris", "windows":
+ case "nacl", "plan9", "windows":
t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
diff --git a/vendor/golang.org/x/net/ipv6/zsys_darwin.go b/vendor/golang.org/x/net/ipv6/zsys_darwin.go
index cb044b033..6aab1dfab 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_darwin.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_darwin.go
@@ -71,19 +71,19 @@ const (
sysIPV6_PORTRANGE_HIGH = 0x1
sysIPV6_PORTRANGE_LOW = 0x2
- sysSizeofSockaddrStorage = 0x80
- sysSizeofSockaddrInet6 = 0x1c
- sysSizeofInet6Pktinfo = 0x14
- sysSizeofIPv6Mtuinfo = 0x20
+ sizeofSockaddrStorage = 0x80
+ sizeofSockaddrInet6 = 0x1c
+ sizeofInet6Pktinfo = 0x14
+ sizeofIPv6Mtuinfo = 0x20
- sysSizeofIPv6Mreq = 0x14
- sysSizeofGroupReq = 0x84
- sysSizeofGroupSourceReq = 0x104
+ sizeofIPv6Mreq = 0x14
+ sizeofGroupReq = 0x84
+ sizeofGroupSourceReq = 0x104
- sysSizeofICMPv6Filter = 0x20
+ sizeofICMPv6Filter = 0x20
)
-type sysSockaddrStorage struct {
+type sockaddrStorage struct {
Len uint8
Family uint8
X__ss_pad1 [6]int8
@@ -91,7 +91,7 @@ type sysSockaddrStorage struct {
X__ss_pad2 [112]int8
}
-type sysSockaddrInet6 struct {
+type sockaddrInet6 struct {
Len uint8
Family uint8
Port uint16
@@ -100,31 +100,31 @@ type sysSockaddrInet6 struct {
Scope_id uint32
}
-type sysInet6Pktinfo struct {
+type inet6Pktinfo struct {
Addr [16]byte /* in6_addr */
Ifindex uint32
}
-type sysIPv6Mtuinfo struct {
- Addr sysSockaddrInet6
+type ipv6Mtuinfo struct {
+ Addr sockaddrInet6
Mtu uint32
}
-type sysIPv6Mreq struct {
+type ipv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Interface uint32
}
-type sysICMPv6Filter struct {
+type icmpv6Filter struct {
Filt [8]uint32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
Pad_cgo_0 [128]byte
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
Pad_cgo_0 [128]byte
Pad_cgo_1 [128]byte
diff --git a/vendor/golang.org/x/net/ipv6/zsys_dragonfly.go b/vendor/golang.org/x/net/ipv6/zsys_dragonfly.go
index 5a03ab734..d2de804d8 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_dragonfly.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_dragonfly.go
@@ -1,8 +1,6 @@
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs defs_dragonfly.go
-// +build dragonfly
-
package ipv6
const (
@@ -52,16 +50,16 @@ const (
sysIPV6_PORTRANGE_HIGH = 0x1
sysIPV6_PORTRANGE_LOW = 0x2
- sysSizeofSockaddrInet6 = 0x1c
- sysSizeofInet6Pktinfo = 0x14
- sysSizeofIPv6Mtuinfo = 0x20
+ sizeofSockaddrInet6 = 0x1c
+ sizeofInet6Pktinfo = 0x14
+ sizeofIPv6Mtuinfo = 0x20
- sysSizeofIPv6Mreq = 0x14
+ sizeofIPv6Mreq = 0x14
- sysSizeofICMPv6Filter = 0x20
+ sizeofICMPv6Filter = 0x20
)
-type sysSockaddrInet6 struct {
+type sockaddrInet6 struct {
Len uint8
Family uint8
Port uint16
@@ -70,21 +68,21 @@ type sysSockaddrInet6 struct {
Scope_id uint32
}
-type sysInet6Pktinfo struct {
+type inet6Pktinfo struct {
Addr [16]byte /* in6_addr */
Ifindex uint32
}
-type sysIPv6Mtuinfo struct {
- Addr sysSockaddrInet6
+type ipv6Mtuinfo struct {
+ Addr sockaddrInet6
Mtu uint32
}
-type sysIPv6Mreq struct {
+type ipv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Interface uint32
}
-type sysICMPv6Filter struct {
+type icmpv6Filter struct {
Filt [8]uint32
}
diff --git a/vendor/golang.org/x/net/ipv6/zsys_freebsd_386.go b/vendor/golang.org/x/net/ipv6/zsys_freebsd_386.go
index 4ace96f0c..919e572d4 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_freebsd_386.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_freebsd_386.go
@@ -62,19 +62,19 @@ const (
sysIPV6_PORTRANGE_HIGH = 0x1
sysIPV6_PORTRANGE_LOW = 0x2
- sysSizeofSockaddrStorage = 0x80
- sysSizeofSockaddrInet6 = 0x1c
- sysSizeofInet6Pktinfo = 0x14
- sysSizeofIPv6Mtuinfo = 0x20
+ sizeofSockaddrStorage = 0x80
+ sizeofSockaddrInet6 = 0x1c
+ sizeofInet6Pktinfo = 0x14
+ sizeofIPv6Mtuinfo = 0x20
- sysSizeofIPv6Mreq = 0x14
- sysSizeofGroupReq = 0x84
- sysSizeofGroupSourceReq = 0x104
+ sizeofIPv6Mreq = 0x14
+ sizeofGroupReq = 0x84
+ sizeofGroupSourceReq = 0x104
- sysSizeofICMPv6Filter = 0x20
+ sizeofICMPv6Filter = 0x20
)
-type sysSockaddrStorage struct {
+type sockaddrStorage struct {
Len uint8
Family uint8
X__ss_pad1 [6]int8
@@ -82,7 +82,7 @@ type sysSockaddrStorage struct {
X__ss_pad2 [112]int8
}
-type sysSockaddrInet6 struct {
+type sockaddrInet6 struct {
Len uint8
Family uint8
Port uint16
@@ -91,32 +91,32 @@ type sysSockaddrInet6 struct {
Scope_id uint32
}
-type sysInet6Pktinfo struct {
+type inet6Pktinfo struct {
Addr [16]byte /* in6_addr */
Ifindex uint32
}
-type sysIPv6Mtuinfo struct {
- Addr sysSockaddrInet6
+type ipv6Mtuinfo struct {
+ Addr sockaddrInet6
Mtu uint32
}
-type sysIPv6Mreq struct {
+type ipv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Interface uint32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
- Group sysSockaddrStorage
+ Group sockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
- Group sysSockaddrStorage
- Source sysSockaddrStorage
+ Group sockaddrStorage
+ Source sockaddrStorage
}
-type sysICMPv6Filter struct {
+type icmpv6Filter struct {
Filt [8]uint32
}
diff --git a/vendor/golang.org/x/net/ipv6/zsys_freebsd_amd64.go b/vendor/golang.org/x/net/ipv6/zsys_freebsd_amd64.go
index 4a62c2d5c..cb8141f9c 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_freebsd_amd64.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_freebsd_amd64.go
@@ -62,19 +62,19 @@ const (
sysIPV6_PORTRANGE_HIGH = 0x1
sysIPV6_PORTRANGE_LOW = 0x2
- sysSizeofSockaddrStorage = 0x80
- sysSizeofSockaddrInet6 = 0x1c
- sysSizeofInet6Pktinfo = 0x14
- sysSizeofIPv6Mtuinfo = 0x20
+ sizeofSockaddrStorage = 0x80
+ sizeofSockaddrInet6 = 0x1c
+ sizeofInet6Pktinfo = 0x14
+ sizeofIPv6Mtuinfo = 0x20
- sysSizeofIPv6Mreq = 0x14
- sysSizeofGroupReq = 0x88
- sysSizeofGroupSourceReq = 0x108
+ sizeofIPv6Mreq = 0x14
+ sizeofGroupReq = 0x88
+ sizeofGroupSourceReq = 0x108
- sysSizeofICMPv6Filter = 0x20
+ sizeofICMPv6Filter = 0x20
)
-type sysSockaddrStorage struct {
+type sockaddrStorage struct {
Len uint8
Family uint8
X__ss_pad1 [6]int8
@@ -82,7 +82,7 @@ type sysSockaddrStorage struct {
X__ss_pad2 [112]int8
}
-type sysSockaddrInet6 struct {
+type sockaddrInet6 struct {
Len uint8
Family uint8
Port uint16
@@ -91,34 +91,34 @@ type sysSockaddrInet6 struct {
Scope_id uint32
}
-type sysInet6Pktinfo struct {
+type inet6Pktinfo struct {
Addr [16]byte /* in6_addr */
Ifindex uint32
}
-type sysIPv6Mtuinfo struct {
- Addr sysSockaddrInet6
+type ipv6Mtuinfo struct {
+ Addr sockaddrInet6
Mtu uint32
}
-type sysIPv6Mreq struct {
+type ipv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Interface uint32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysSockaddrStorage
+ Group sockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysSockaddrStorage
- Source sysSockaddrStorage
+ Group sockaddrStorage
+ Source sockaddrStorage
}
-type sysICMPv6Filter struct {
+type icmpv6Filter struct {
Filt [8]uint32
}
diff --git a/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm.go b/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm.go
index 4a62c2d5c..cb8141f9c 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm.go
@@ -62,19 +62,19 @@ const (
sysIPV6_PORTRANGE_HIGH = 0x1
sysIPV6_PORTRANGE_LOW = 0x2
- sysSizeofSockaddrStorage = 0x80
- sysSizeofSockaddrInet6 = 0x1c
- sysSizeofInet6Pktinfo = 0x14
- sysSizeofIPv6Mtuinfo = 0x20
+ sizeofSockaddrStorage = 0x80
+ sizeofSockaddrInet6 = 0x1c
+ sizeofInet6Pktinfo = 0x14
+ sizeofIPv6Mtuinfo = 0x20
- sysSizeofIPv6Mreq = 0x14
- sysSizeofGroupReq = 0x88
- sysSizeofGroupSourceReq = 0x108
+ sizeofIPv6Mreq = 0x14
+ sizeofGroupReq = 0x88
+ sizeofGroupSourceReq = 0x108
- sysSizeofICMPv6Filter = 0x20
+ sizeofICMPv6Filter = 0x20
)
-type sysSockaddrStorage struct {
+type sockaddrStorage struct {
Len uint8
Family uint8
X__ss_pad1 [6]int8
@@ -82,7 +82,7 @@ type sysSockaddrStorage struct {
X__ss_pad2 [112]int8
}
-type sysSockaddrInet6 struct {
+type sockaddrInet6 struct {
Len uint8
Family uint8
Port uint16
@@ -91,34 +91,34 @@ type sysSockaddrInet6 struct {
Scope_id uint32
}
-type sysInet6Pktinfo struct {
+type inet6Pktinfo struct {
Addr [16]byte /* in6_addr */
Ifindex uint32
}
-type sysIPv6Mtuinfo struct {
- Addr sysSockaddrInet6
+type ipv6Mtuinfo struct {
+ Addr sockaddrInet6
Mtu uint32
}
-type sysIPv6Mreq struct {
+type ipv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Interface uint32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysSockaddrStorage
+ Group sockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysSockaddrStorage
- Source sysSockaddrStorage
+ Group sockaddrStorage
+ Source sockaddrStorage
}
-type sysICMPv6Filter struct {
+type icmpv6Filter struct {
Filt [8]uint32
}
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_386.go b/vendor/golang.org/x/net/ipv6/zsys_linux_386.go
index 36fccbb62..f5a410945 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_386.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_386.go
@@ -87,25 +87,25 @@ const (
sysSOL_SOCKET = 0x1
sysSO_ATTACH_FILTER = 0x1a
- sysSizeofKernelSockaddrStorage = 0x80
- sysSizeofSockaddrInet6 = 0x1c
- sysSizeofInet6Pktinfo = 0x14
- sysSizeofIPv6Mtuinfo = 0x20
- sysSizeofIPv6FlowlabelReq = 0x20
+ sizeofKernelSockaddrStorage = 0x80
+ sizeofSockaddrInet6 = 0x1c
+ sizeofInet6Pktinfo = 0x14
+ sizeofIPv6Mtuinfo = 0x20
+ sizeofIPv6FlowlabelReq = 0x20
- sysSizeofIPv6Mreq = 0x14
- sysSizeofGroupReq = 0x84
- sysSizeofGroupSourceReq = 0x104
+ sizeofIPv6Mreq = 0x14
+ sizeofGroupReq = 0x84
+ sizeofGroupSourceReq = 0x104
- sysSizeofICMPv6Filter = 0x20
+ sizeofICMPv6Filter = 0x20
)
-type sysKernelSockaddrStorage struct {
+type kernelSockaddrStorage struct {
Family uint16
X__data [126]int8
}
-type sysSockaddrInet6 struct {
+type sockaddrInet6 struct {
Family uint16
Port uint16
Flowinfo uint32
@@ -113,17 +113,17 @@ type sysSockaddrInet6 struct {
Scope_id uint32
}
-type sysInet6Pktinfo struct {
+type inet6Pktinfo struct {
Addr [16]byte /* in6_addr */
Ifindex int32
}
-type sysIPv6Mtuinfo struct {
- Addr sysSockaddrInet6
+type ipv6Mtuinfo struct {
+ Addr sockaddrInet6
Mtu uint32
}
-type sysIPv6FlowlabelReq struct {
+type ipv6FlowlabelReq struct {
Dst [16]byte /* in6_addr */
Label uint32
Action uint8
@@ -134,33 +134,33 @@ type sysIPv6FlowlabelReq struct {
X__flr_pad uint32
}
-type sysIPv6Mreq struct {
+type ipv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Ifindex int32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
- Group sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
- Group sysKernelSockaddrStorage
- Source sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
+ Source kernelSockaddrStorage
}
-type sysICMPv6Filter struct {
+type icmpv6Filter struct {
Data [8]uint32
}
-type sysSockFProg struct {
+type sockFProg struct {
Len uint16
Pad_cgo_0 [2]byte
- Filter *sysSockFilter
+ Filter *sockFilter
}
-type sysSockFilter struct {
+type sockFilter struct {
Code uint16
Jt uint8
Jf uint8
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go
index 7461e7e03..f9376b65c 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go
@@ -87,25 +87,25 @@ const (
sysSOL_SOCKET = 0x1
sysSO_ATTACH_FILTER = 0x1a
- sysSizeofKernelSockaddrStorage = 0x80
- sysSizeofSockaddrInet6 = 0x1c
- sysSizeofInet6Pktinfo = 0x14
- sysSizeofIPv6Mtuinfo = 0x20
- sysSizeofIPv6FlowlabelReq = 0x20
+ sizeofKernelSockaddrStorage = 0x80
+ sizeofSockaddrInet6 = 0x1c
+ sizeofInet6Pktinfo = 0x14
+ sizeofIPv6Mtuinfo = 0x20
+ sizeofIPv6FlowlabelReq = 0x20
- sysSizeofIPv6Mreq = 0x14
- sysSizeofGroupReq = 0x88
- sysSizeofGroupSourceReq = 0x108
+ sizeofIPv6Mreq = 0x14
+ sizeofGroupReq = 0x88
+ sizeofGroupSourceReq = 0x108
- sysSizeofICMPv6Filter = 0x20
+ sizeofICMPv6Filter = 0x20
)
-type sysKernelSockaddrStorage struct {
+type kernelSockaddrStorage struct {
Family uint16
X__data [126]int8
}
-type sysSockaddrInet6 struct {
+type sockaddrInet6 struct {
Family uint16
Port uint16
Flowinfo uint32
@@ -113,17 +113,17 @@ type sysSockaddrInet6 struct {
Scope_id uint32
}
-type sysInet6Pktinfo struct {
+type inet6Pktinfo struct {
Addr [16]byte /* in6_addr */
Ifindex int32
}
-type sysIPv6Mtuinfo struct {
- Addr sysSockaddrInet6
+type ipv6Mtuinfo struct {
+ Addr sockaddrInet6
Mtu uint32
}
-type sysIPv6FlowlabelReq struct {
+type ipv6FlowlabelReq struct {
Dst [16]byte /* in6_addr */
Label uint32
Action uint8
@@ -134,35 +134,35 @@ type sysIPv6FlowlabelReq struct {
X__flr_pad uint32
}
-type sysIPv6Mreq struct {
+type ipv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Ifindex int32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
- Source sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
+ Source kernelSockaddrStorage
}
-type sysICMPv6Filter struct {
+type icmpv6Filter struct {
Data [8]uint32
}
-type sysSockFProg struct {
+type sockFProg struct {
Len uint16
Pad_cgo_0 [6]byte
- Filter *sysSockFilter
+ Filter *sockFilter
}
-type sysSockFilter struct {
+type sockFilter struct {
Code uint16
Jt uint8
Jf uint8
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go b/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go
index 36fccbb62..f5a410945 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go
@@ -87,25 +87,25 @@ const (
sysSOL_SOCKET = 0x1
sysSO_ATTACH_FILTER = 0x1a
- sysSizeofKernelSockaddrStorage = 0x80
- sysSizeofSockaddrInet6 = 0x1c
- sysSizeofInet6Pktinfo = 0x14
- sysSizeofIPv6Mtuinfo = 0x20
- sysSizeofIPv6FlowlabelReq = 0x20
+ sizeofKernelSockaddrStorage = 0x80
+ sizeofSockaddrInet6 = 0x1c
+ sizeofInet6Pktinfo = 0x14
+ sizeofIPv6Mtuinfo = 0x20
+ sizeofIPv6FlowlabelReq = 0x20
- sysSizeofIPv6Mreq = 0x14
- sysSizeofGroupReq = 0x84
- sysSizeofGroupSourceReq = 0x104
+ sizeofIPv6Mreq = 0x14
+ sizeofGroupReq = 0x84
+ sizeofGroupSourceReq = 0x104
- sysSizeofICMPv6Filter = 0x20
+ sizeofICMPv6Filter = 0x20
)
-type sysKernelSockaddrStorage struct {
+type kernelSockaddrStorage struct {
Family uint16
X__data [126]int8
}
-type sysSockaddrInet6 struct {
+type sockaddrInet6 struct {
Family uint16
Port uint16
Flowinfo uint32
@@ -113,17 +113,17 @@ type sysSockaddrInet6 struct {
Scope_id uint32
}
-type sysInet6Pktinfo struct {
+type inet6Pktinfo struct {
Addr [16]byte /* in6_addr */
Ifindex int32
}
-type sysIPv6Mtuinfo struct {
- Addr sysSockaddrInet6
+type ipv6Mtuinfo struct {
+ Addr sockaddrInet6
Mtu uint32
}
-type sysIPv6FlowlabelReq struct {
+type ipv6FlowlabelReq struct {
Dst [16]byte /* in6_addr */
Label uint32
Action uint8
@@ -134,33 +134,33 @@ type sysIPv6FlowlabelReq struct {
X__flr_pad uint32
}
-type sysIPv6Mreq struct {
+type ipv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Ifindex int32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
- Group sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
- Group sysKernelSockaddrStorage
- Source sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
+ Source kernelSockaddrStorage
}
-type sysICMPv6Filter struct {
+type icmpv6Filter struct {
Data [8]uint32
}
-type sysSockFProg struct {
+type sockFProg struct {
Len uint16
Pad_cgo_0 [2]byte
- Filter *sysSockFilter
+ Filter *sockFilter
}
-type sysSockFilter struct {
+type sockFilter struct {
Code uint16
Jt uint8
Jf uint8
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go
index ed35f6039..f9376b65c 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go
@@ -1,8 +1,6 @@
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs defs_linux.go
-// +build linux,arm64
-
package ipv6
const (
@@ -89,25 +87,25 @@ const (
sysSOL_SOCKET = 0x1
sysSO_ATTACH_FILTER = 0x1a
- sysSizeofKernelSockaddrStorage = 0x80
- sysSizeofSockaddrInet6 = 0x1c
- sysSizeofInet6Pktinfo = 0x14
- sysSizeofIPv6Mtuinfo = 0x20
- sysSizeofIPv6FlowlabelReq = 0x20
+ sizeofKernelSockaddrStorage = 0x80
+ sizeofSockaddrInet6 = 0x1c
+ sizeofInet6Pktinfo = 0x14
+ sizeofIPv6Mtuinfo = 0x20
+ sizeofIPv6FlowlabelReq = 0x20
- sysSizeofIPv6Mreq = 0x14
- sysSizeofGroupReq = 0x88
- sysSizeofGroupSourceReq = 0x108
+ sizeofIPv6Mreq = 0x14
+ sizeofGroupReq = 0x88
+ sizeofGroupSourceReq = 0x108
- sysSizeofICMPv6Filter = 0x20
+ sizeofICMPv6Filter = 0x20
)
-type sysKernelSockaddrStorage struct {
+type kernelSockaddrStorage struct {
Family uint16
X__data [126]int8
}
-type sysSockaddrInet6 struct {
+type sockaddrInet6 struct {
Family uint16
Port uint16
Flowinfo uint32
@@ -115,17 +113,17 @@ type sysSockaddrInet6 struct {
Scope_id uint32
}
-type sysInet6Pktinfo struct {
+type inet6Pktinfo struct {
Addr [16]byte /* in6_addr */
Ifindex int32
}
-type sysIPv6Mtuinfo struct {
- Addr sysSockaddrInet6
+type ipv6Mtuinfo struct {
+ Addr sockaddrInet6
Mtu uint32
}
-type sysIPv6FlowlabelReq struct {
+type ipv6FlowlabelReq struct {
Dst [16]byte /* in6_addr */
Label uint32
Action uint8
@@ -136,35 +134,35 @@ type sysIPv6FlowlabelReq struct {
X__flr_pad uint32
}
-type sysIPv6Mreq struct {
+type ipv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Ifindex int32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
- Source sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
+ Source kernelSockaddrStorage
}
-type sysICMPv6Filter struct {
+type icmpv6Filter struct {
Data [8]uint32
}
-type sysSockFProg struct {
+type sockFProg struct {
Len uint16
Pad_cgo_0 [6]byte
- Filter *sysSockFilter
+ Filter *sockFilter
}
-type sysSockFilter struct {
+type sockFilter struct {
Code uint16
Jt uint8
Jf uint8
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go
index 141c86977..f9376b65c 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go
@@ -1,8 +1,6 @@
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs defs_linux.go
-// +build linux,mips64
-
package ipv6
const (
@@ -89,25 +87,25 @@ const (
sysSOL_SOCKET = 0x1
sysSO_ATTACH_FILTER = 0x1a
- sysSizeofKernelSockaddrStorage = 0x80
- sysSizeofSockaddrInet6 = 0x1c
- sysSizeofInet6Pktinfo = 0x14
- sysSizeofIPv6Mtuinfo = 0x20
- sysSizeofIPv6FlowlabelReq = 0x20
+ sizeofKernelSockaddrStorage = 0x80
+ sizeofSockaddrInet6 = 0x1c
+ sizeofInet6Pktinfo = 0x14
+ sizeofIPv6Mtuinfo = 0x20
+ sizeofIPv6FlowlabelReq = 0x20
- sysSizeofIPv6Mreq = 0x14
- sysSizeofGroupReq = 0x88
- sysSizeofGroupSourceReq = 0x108
+ sizeofIPv6Mreq = 0x14
+ sizeofGroupReq = 0x88
+ sizeofGroupSourceReq = 0x108
- sysSizeofICMPv6Filter = 0x20
+ sizeofICMPv6Filter = 0x20
)
-type sysKernelSockaddrStorage struct {
+type kernelSockaddrStorage struct {
Family uint16
X__data [126]int8
}
-type sysSockaddrInet6 struct {
+type sockaddrInet6 struct {
Family uint16
Port uint16
Flowinfo uint32
@@ -115,17 +113,17 @@ type sysSockaddrInet6 struct {
Scope_id uint32
}
-type sysInet6Pktinfo struct {
+type inet6Pktinfo struct {
Addr [16]byte /* in6_addr */
Ifindex int32
}
-type sysIPv6Mtuinfo struct {
- Addr sysSockaddrInet6
+type ipv6Mtuinfo struct {
+ Addr sockaddrInet6
Mtu uint32
}
-type sysIPv6FlowlabelReq struct {
+type ipv6FlowlabelReq struct {
Dst [16]byte /* in6_addr */
Label uint32
Action uint8
@@ -136,35 +134,35 @@ type sysIPv6FlowlabelReq struct {
X__flr_pad uint32
}
-type sysIPv6Mreq struct {
+type ipv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Ifindex int32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
- Source sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
+ Source kernelSockaddrStorage
}
-type sysICMPv6Filter struct {
+type icmpv6Filter struct {
Data [8]uint32
}
-type sysSockFProg struct {
+type sockFProg struct {
Len uint16
Pad_cgo_0 [6]byte
- Filter *sysSockFilter
+ Filter *sockFilter
}
-type sysSockFilter struct {
+type sockFilter struct {
Code uint16
Jt uint8
Jf uint8
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go b/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go
index d50eb633e..f9376b65c 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go
@@ -1,8 +1,6 @@
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs defs_linux.go
-// +build linux,mips64le
-
package ipv6
const (
@@ -89,25 +87,25 @@ const (
sysSOL_SOCKET = 0x1
sysSO_ATTACH_FILTER = 0x1a
- sysSizeofKernelSockaddrStorage = 0x80
- sysSizeofSockaddrInet6 = 0x1c
- sysSizeofInet6Pktinfo = 0x14
- sysSizeofIPv6Mtuinfo = 0x20
- sysSizeofIPv6FlowlabelReq = 0x20
+ sizeofKernelSockaddrStorage = 0x80
+ sizeofSockaddrInet6 = 0x1c
+ sizeofInet6Pktinfo = 0x14
+ sizeofIPv6Mtuinfo = 0x20
+ sizeofIPv6FlowlabelReq = 0x20
- sysSizeofIPv6Mreq = 0x14
- sysSizeofGroupReq = 0x88
- sysSizeofGroupSourceReq = 0x108
+ sizeofIPv6Mreq = 0x14
+ sizeofGroupReq = 0x88
+ sizeofGroupSourceReq = 0x108
- sysSizeofICMPv6Filter = 0x20
+ sizeofICMPv6Filter = 0x20
)
-type sysKernelSockaddrStorage struct {
+type kernelSockaddrStorage struct {
Family uint16
X__data [126]int8
}
-type sysSockaddrInet6 struct {
+type sockaddrInet6 struct {
Family uint16
Port uint16
Flowinfo uint32
@@ -115,17 +113,17 @@ type sysSockaddrInet6 struct {
Scope_id uint32
}
-type sysInet6Pktinfo struct {
+type inet6Pktinfo struct {
Addr [16]byte /* in6_addr */
Ifindex int32
}
-type sysIPv6Mtuinfo struct {
- Addr sysSockaddrInet6
+type ipv6Mtuinfo struct {
+ Addr sockaddrInet6
Mtu uint32
}
-type sysIPv6FlowlabelReq struct {
+type ipv6FlowlabelReq struct {
Dst [16]byte /* in6_addr */
Label uint32
Action uint8
@@ -136,35 +134,35 @@ type sysIPv6FlowlabelReq struct {
X__flr_pad uint32
}
-type sysIPv6Mreq struct {
+type ipv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Ifindex int32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
- Source sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
+ Source kernelSockaddrStorage
}
-type sysICMPv6Filter struct {
+type icmpv6Filter struct {
Data [8]uint32
}
-type sysSockFProg struct {
+type sockFProg struct {
Len uint16
Pad_cgo_0 [6]byte
- Filter *sysSockFilter
+ Filter *sockFilter
}
-type sysSockFilter struct {
+type sockFilter struct {
Code uint16
Jt uint8
Jf uint8
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go
index 4c58ea67d..be2dbd666 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go
@@ -1,8 +1,6 @@
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs defs_linux.go
-// +build linux,ppc
-
package ipv6
const (
@@ -89,25 +87,25 @@ const (
sysSOL_SOCKET = 0x1
sysSO_ATTACH_FILTER = 0x1a
- sysSizeofKernelSockaddrStorage = 0x80
- sysSizeofSockaddrInet6 = 0x1c
- sysSizeofInet6Pktinfo = 0x14
- sysSizeofIPv6Mtuinfo = 0x20
- sysSizeofIPv6FlowlabelReq = 0x20
+ sizeofKernelSockaddrStorage = 0x80
+ sizeofSockaddrInet6 = 0x1c
+ sizeofInet6Pktinfo = 0x14
+ sizeofIPv6Mtuinfo = 0x20
+ sizeofIPv6FlowlabelReq = 0x20
- sysSizeofIPv6Mreq = 0x14
- sysSizeofGroupReq = 0x84
- sysSizeofGroupSourceReq = 0x104
+ sizeofIPv6Mreq = 0x14
+ sizeofGroupReq = 0x84
+ sizeofGroupSourceReq = 0x104
- sysSizeofICMPv6Filter = 0x20
+ sizeofICMPv6Filter = 0x20
)
-type sysKernelSockaddrStorage struct {
+type kernelSockaddrStorage struct {
Family uint16
X__data [126]uint8
}
-type sysSockaddrInet6 struct {
+type sockaddrInet6 struct {
Family uint16
Port uint16
Flowinfo uint32
@@ -115,17 +113,17 @@ type sysSockaddrInet6 struct {
Scope_id uint32
}
-type sysInet6Pktinfo struct {
+type inet6Pktinfo struct {
Addr [16]byte /* in6_addr */
Ifindex int32
}
-type sysIPv6Mtuinfo struct {
- Addr sysSockaddrInet6
+type ipv6Mtuinfo struct {
+ Addr sockaddrInet6
Mtu uint32
}
-type sysIPv6FlowlabelReq struct {
+type ipv6FlowlabelReq struct {
Dst [16]byte /* in6_addr */
Label uint32
Action uint8
@@ -136,33 +134,33 @@ type sysIPv6FlowlabelReq struct {
X__flr_pad uint32
}
-type sysIPv6Mreq struct {
+type ipv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Ifindex int32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
- Group sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
- Group sysKernelSockaddrStorage
- Source sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
+ Source kernelSockaddrStorage
}
-type sysICMPv6Filter struct {
+type icmpv6Filter struct {
Data [8]uint32
}
-type sysSockFProg struct {
+type sockFProg struct {
Len uint16
Pad_cgo_0 [2]byte
- Filter *sysSockFilter
+ Filter *sockFilter
}
-type sysSockFilter struct {
+type sockFilter struct {
Code uint16
Jt uint8
Jf uint8
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go
index c1d775f77..f9376b65c 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go
@@ -1,8 +1,6 @@
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs defs_linux.go
-// +build linux,ppc64
-
package ipv6
const (
@@ -89,25 +87,25 @@ const (
sysSOL_SOCKET = 0x1
sysSO_ATTACH_FILTER = 0x1a
- sysSizeofKernelSockaddrStorage = 0x80
- sysSizeofSockaddrInet6 = 0x1c
- sysSizeofInet6Pktinfo = 0x14
- sysSizeofIPv6Mtuinfo = 0x20
- sysSizeofIPv6FlowlabelReq = 0x20
+ sizeofKernelSockaddrStorage = 0x80
+ sizeofSockaddrInet6 = 0x1c
+ sizeofInet6Pktinfo = 0x14
+ sizeofIPv6Mtuinfo = 0x20
+ sizeofIPv6FlowlabelReq = 0x20
- sysSizeofIPv6Mreq = 0x14
- sysSizeofGroupReq = 0x88
- sysSizeofGroupSourceReq = 0x108
+ sizeofIPv6Mreq = 0x14
+ sizeofGroupReq = 0x88
+ sizeofGroupSourceReq = 0x108
- sysSizeofICMPv6Filter = 0x20
+ sizeofICMPv6Filter = 0x20
)
-type sysKernelSockaddrStorage struct {
+type kernelSockaddrStorage struct {
Family uint16
X__data [126]int8
}
-type sysSockaddrInet6 struct {
+type sockaddrInet6 struct {
Family uint16
Port uint16
Flowinfo uint32
@@ -115,17 +113,17 @@ type sysSockaddrInet6 struct {
Scope_id uint32
}
-type sysInet6Pktinfo struct {
+type inet6Pktinfo struct {
Addr [16]byte /* in6_addr */
Ifindex int32
}
-type sysIPv6Mtuinfo struct {
- Addr sysSockaddrInet6
+type ipv6Mtuinfo struct {
+ Addr sockaddrInet6
Mtu uint32
}
-type sysIPv6FlowlabelReq struct {
+type ipv6FlowlabelReq struct {
Dst [16]byte /* in6_addr */
Label uint32
Action uint8
@@ -136,35 +134,35 @@ type sysIPv6FlowlabelReq struct {
X__flr_pad uint32
}
-type sysIPv6Mreq struct {
+type ipv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Ifindex int32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
- Source sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
+ Source kernelSockaddrStorage
}
-type sysICMPv6Filter struct {
+type icmpv6Filter struct {
Data [8]uint32
}
-type sysSockFProg struct {
+type sockFProg struct {
Len uint16
Pad_cgo_0 [6]byte
- Filter *sysSockFilter
+ Filter *sockFilter
}
-type sysSockFilter struct {
+type sockFilter struct {
Code uint16
Jt uint8
Jf uint8
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go
index e385fb7aa..f9376b65c 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go
@@ -1,8 +1,6 @@
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs defs_linux.go
-// +build linux,ppc64le
-
package ipv6
const (
@@ -89,25 +87,25 @@ const (
sysSOL_SOCKET = 0x1
sysSO_ATTACH_FILTER = 0x1a
- sysSizeofKernelSockaddrStorage = 0x80
- sysSizeofSockaddrInet6 = 0x1c
- sysSizeofInet6Pktinfo = 0x14
- sysSizeofIPv6Mtuinfo = 0x20
- sysSizeofIPv6FlowlabelReq = 0x20
+ sizeofKernelSockaddrStorage = 0x80
+ sizeofSockaddrInet6 = 0x1c
+ sizeofInet6Pktinfo = 0x14
+ sizeofIPv6Mtuinfo = 0x20
+ sizeofIPv6FlowlabelReq = 0x20
- sysSizeofIPv6Mreq = 0x14
- sysSizeofGroupReq = 0x88
- sysSizeofGroupSourceReq = 0x108
+ sizeofIPv6Mreq = 0x14
+ sizeofGroupReq = 0x88
+ sizeofGroupSourceReq = 0x108
- sysSizeofICMPv6Filter = 0x20
+ sizeofICMPv6Filter = 0x20
)
-type sysKernelSockaddrStorage struct {
+type kernelSockaddrStorage struct {
Family uint16
X__data [126]int8
}
-type sysSockaddrInet6 struct {
+type sockaddrInet6 struct {
Family uint16
Port uint16
Flowinfo uint32
@@ -115,17 +113,17 @@ type sysSockaddrInet6 struct {
Scope_id uint32
}
-type sysInet6Pktinfo struct {
+type inet6Pktinfo struct {
Addr [16]byte /* in6_addr */
Ifindex int32
}
-type sysIPv6Mtuinfo struct {
- Addr sysSockaddrInet6
+type ipv6Mtuinfo struct {
+ Addr sockaddrInet6
Mtu uint32
}
-type sysIPv6FlowlabelReq struct {
+type ipv6FlowlabelReq struct {
Dst [16]byte /* in6_addr */
Label uint32
Action uint8
@@ -136,35 +134,35 @@ type sysIPv6FlowlabelReq struct {
X__flr_pad uint32
}
-type sysIPv6Mreq struct {
+type ipv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Ifindex int32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
- Source sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
+ Source kernelSockaddrStorage
}
-type sysICMPv6Filter struct {
+type icmpv6Filter struct {
Data [8]uint32
}
-type sysSockFProg struct {
+type sockFProg struct {
Len uint16
Pad_cgo_0 [6]byte
- Filter *sysSockFilter
+ Filter *sockFilter
}
-type sysSockFilter struct {
+type sockFilter struct {
Code uint16
Jt uint8
Jf uint8
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go b/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go
index 28d69b1b0..f9376b65c 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go
@@ -1,8 +1,6 @@
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs defs_linux.go
-// +build linux,s390x
-
package ipv6
const (
@@ -89,25 +87,25 @@ const (
sysSOL_SOCKET = 0x1
sysSO_ATTACH_FILTER = 0x1a
- sysSizeofKernelSockaddrStorage = 0x80
- sysSizeofSockaddrInet6 = 0x1c
- sysSizeofInet6Pktinfo = 0x14
- sysSizeofIPv6Mtuinfo = 0x20
- sysSizeofIPv6FlowlabelReq = 0x20
+ sizeofKernelSockaddrStorage = 0x80
+ sizeofSockaddrInet6 = 0x1c
+ sizeofInet6Pktinfo = 0x14
+ sizeofIPv6Mtuinfo = 0x20
+ sizeofIPv6FlowlabelReq = 0x20
- sysSizeofIPv6Mreq = 0x14
- sysSizeofGroupReq = 0x88
- sysSizeofGroupSourceReq = 0x108
+ sizeofIPv6Mreq = 0x14
+ sizeofGroupReq = 0x88
+ sizeofGroupSourceReq = 0x108
- sysSizeofICMPv6Filter = 0x20
+ sizeofICMPv6Filter = 0x20
)
-type sysKernelSockaddrStorage struct {
+type kernelSockaddrStorage struct {
Family uint16
X__data [126]int8
}
-type sysSockaddrInet6 struct {
+type sockaddrInet6 struct {
Family uint16
Port uint16
Flowinfo uint32
@@ -115,17 +113,17 @@ type sysSockaddrInet6 struct {
Scope_id uint32
}
-type sysInet6Pktinfo struct {
+type inet6Pktinfo struct {
Addr [16]byte /* in6_addr */
Ifindex int32
}
-type sysIPv6Mtuinfo struct {
- Addr sysSockaddrInet6
+type ipv6Mtuinfo struct {
+ Addr sockaddrInet6
Mtu uint32
}
-type sysIPv6FlowlabelReq struct {
+type ipv6FlowlabelReq struct {
Dst [16]byte /* in6_addr */
Label uint32
Action uint8
@@ -136,35 +134,35 @@ type sysIPv6FlowlabelReq struct {
X__flr_pad uint32
}
-type sysIPv6Mreq struct {
+type ipv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Ifindex int32
}
-type sysGroupReq struct {
+type groupReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
}
-type sysGroupSourceReq struct {
+type groupSourceReq struct {
Interface uint32
Pad_cgo_0 [4]byte
- Group sysKernelSockaddrStorage
- Source sysKernelSockaddrStorage
+ Group kernelSockaddrStorage
+ Source kernelSockaddrStorage
}
-type sysICMPv6Filter struct {
+type icmpv6Filter struct {
Data [8]uint32
}
-type sysSockFProg struct {
+type sockFProg struct {
Len uint16
Pad_cgo_0 [6]byte
- Filter *sysSockFilter
+ Filter *sockFilter
}
-type sysSockFilter struct {
+type sockFilter struct {
Code uint16
Jt uint8
Jf uint8
diff --git a/vendor/golang.org/x/net/ipv6/zsys_netbsd.go b/vendor/golang.org/x/net/ipv6/zsys_netbsd.go
index d6ec88e39..bcada13b7 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_netbsd.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_netbsd.go
@@ -46,16 +46,16 @@ const (
sysIPV6_PORTRANGE_HIGH = 0x1
sysIPV6_PORTRANGE_LOW = 0x2
- sysSizeofSockaddrInet6 = 0x1c
- sysSizeofInet6Pktinfo = 0x14
- sysSizeofIPv6Mtuinfo = 0x20
+ sizeofSockaddrInet6 = 0x1c
+ sizeofInet6Pktinfo = 0x14
+ sizeofIPv6Mtuinfo = 0x20
- sysSizeofIPv6Mreq = 0x14
+ sizeofIPv6Mreq = 0x14
- sysSizeofICMPv6Filter = 0x20
+ sizeofICMPv6Filter = 0x20
)
-type sysSockaddrInet6 struct {
+type sockaddrInet6 struct {
Len uint8
Family uint8
Port uint16
@@ -64,21 +64,21 @@ type sysSockaddrInet6 struct {
Scope_id uint32
}
-type sysInet6Pktinfo struct {
+type inet6Pktinfo struct {
Addr [16]byte /* in6_addr */
Ifindex uint32
}
-type sysIPv6Mtuinfo struct {
- Addr sysSockaddrInet6
+type ipv6Mtuinfo struct {
+ Addr sockaddrInet6
Mtu uint32
}
-type sysIPv6Mreq struct {
+type ipv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Interface uint32
}
-type sysICMPv6Filter struct {
+type icmpv6Filter struct {
Filt [8]uint32
}
diff --git a/vendor/golang.org/x/net/ipv6/zsys_openbsd.go b/vendor/golang.org/x/net/ipv6/zsys_openbsd.go
index 3e080b78a..86cf3c637 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_openbsd.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_openbsd.go
@@ -55,16 +55,16 @@ const (
sysIPV6_PORTRANGE_HIGH = 0x1
sysIPV6_PORTRANGE_LOW = 0x2
- sysSizeofSockaddrInet6 = 0x1c
- sysSizeofInet6Pktinfo = 0x14
- sysSizeofIPv6Mtuinfo = 0x20
+ sizeofSockaddrInet6 = 0x1c
+ sizeofInet6Pktinfo = 0x14
+ sizeofIPv6Mtuinfo = 0x20
- sysSizeofIPv6Mreq = 0x14
+ sizeofIPv6Mreq = 0x14
- sysSizeofICMPv6Filter = 0x20
+ sizeofICMPv6Filter = 0x20
)
-type sysSockaddrInet6 struct {
+type sockaddrInet6 struct {
Len uint8
Family uint8
Port uint16
@@ -73,21 +73,21 @@ type sysSockaddrInet6 struct {
Scope_id uint32
}
-type sysInet6Pktinfo struct {
+type inet6Pktinfo struct {
Addr [16]byte /* in6_addr */
Ifindex uint32
}
-type sysIPv6Mtuinfo struct {
- Addr sysSockaddrInet6
+type ipv6Mtuinfo struct {
+ Addr sockaddrInet6
Mtu uint32
}
-type sysIPv6Mreq struct {
+type ipv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Interface uint32
}
-type sysICMPv6Filter struct {
+type icmpv6Filter struct {
Filt [8]uint32
}
diff --git a/vendor/golang.org/x/net/ipv6/zsys_solaris.go b/vendor/golang.org/x/net/ipv6/zsys_solaris.go
index cdf00c25d..cf1837dd2 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_solaris.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_solaris.go
@@ -1,8 +1,6 @@
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs defs_solaris.go
-// +build solaris
-
package ipv6
const (
@@ -44,6 +42,13 @@ const (
sysIPV6_RECVDSTOPTS = 0x28
+ sysMCAST_JOIN_GROUP = 0x29
+ sysMCAST_LEAVE_GROUP = 0x2a
+ sysMCAST_BLOCK_SOURCE = 0x2b
+ sysMCAST_UNBLOCK_SOURCE = 0x2c
+ sysMCAST_JOIN_SOURCE_GROUP = 0x2d
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x2e
+
sysIPV6_PREFER_SRC_HOME = 0x1
sysIPV6_PREFER_SRC_COA = 0x2
sysIPV6_PREFER_SRC_PUBLIC = 0x4
@@ -67,16 +72,26 @@ const (
sysICMP6_FILTER = 0x1
- sysSizeofSockaddrInet6 = 0x20
- sysSizeofInet6Pktinfo = 0x14
- sysSizeofIPv6Mtuinfo = 0x24
+ sizeofSockaddrStorage = 0x100
+ sizeofSockaddrInet6 = 0x20
+ sizeofInet6Pktinfo = 0x14
+ sizeofIPv6Mtuinfo = 0x24
- sysSizeofIPv6Mreq = 0x14
+ sizeofIPv6Mreq = 0x14
+ sizeofGroupReq = 0x104
+ sizeofGroupSourceReq = 0x204
- sysSizeofICMPv6Filter = 0x20
+ sizeofICMPv6Filter = 0x20
)
-type sysSockaddrInet6 struct {
+type sockaddrStorage struct {
+ Family uint16
+ X_ss_pad1 [6]int8
+ X_ss_align float64
+ X_ss_pad2 [240]int8
+}
+
+type sockaddrInet6 struct {
Family uint16
Port uint16
Flowinfo uint32
@@ -85,21 +100,32 @@ type sysSockaddrInet6 struct {
X__sin6_src_id uint32
}
-type sysInet6Pktinfo struct {
+type inet6Pktinfo struct {
Addr [16]byte /* in6_addr */
Ifindex uint32
}
-type sysIPv6Mtuinfo struct {
- Addr sysSockaddrInet6
+type ipv6Mtuinfo struct {
+ Addr sockaddrInet6
Mtu uint32
}
-type sysIPv6Mreq struct {
+type ipv6Mreq struct {
Multiaddr [16]byte /* in6_addr */
Interface uint32
}
-type sysICMPv6Filter struct {
+type groupReq struct {
+ Interface uint32
+ Pad_cgo_0 [256]byte
+}
+
+type groupSourceReq struct {
+ Interface uint32
+ Pad_cgo_0 [256]byte
+ Pad_cgo_1 [256]byte
+}
+
+type icmpv6Filter struct {
X__icmp6_filt [8]uint32
}
diff --git a/vendor/golang.org/x/net/lif/address.go b/vendor/golang.org/x/net/lif/address.go
new file mode 100644
index 000000000..f9b34aed0
--- /dev/null
+++ b/vendor/golang.org/x/net/lif/address.go
@@ -0,0 +1,105 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build solaris
+
+package lif
+
+import (
+ "errors"
+ "unsafe"
+)
+
+// An Addr represents an address associated with packet routing.
+type Addr interface {
+ // Family returns an address family.
+ Family() int
+}
+
+// An Inet4Addr represents an internet address for IPv4.
+type Inet4Addr struct {
+ IP [4]byte // IP address
+ PrefixLen int // address prefix length
+}
+
+// Family implements the Family method of Addr interface.
+func (a *Inet4Addr) Family() int { return sysAF_INET }
+
+// An Inet6Addr represents an internet address for IPv6.
+type Inet6Addr struct {
+ IP [16]byte // IP address
+ PrefixLen int // address prefix length
+ ZoneID int // zone identifier
+}
+
+// Family implements the Family method of Addr interface.
+func (a *Inet6Addr) Family() int { return sysAF_INET6 }
+
+// Addrs returns a list of interface addresses.
+//
+// The provided af must be an address family and name must be a data
+// link name. The zero value of af or name means a wildcard.
+func Addrs(af int, name string) ([]Addr, error) {
+ eps, err := newEndpoints(af)
+ if len(eps) == 0 {
+ return nil, err
+ }
+ defer func() {
+ for _, ep := range eps {
+ ep.close()
+ }
+ }()
+ lls, err := links(eps, name)
+ if len(lls) == 0 {
+ return nil, err
+ }
+ var as []Addr
+ for _, ll := range lls {
+ var lifr lifreq
+ for i := 0; i < len(ll.Name); i++ {
+ lifr.Name[i] = int8(ll.Name[i])
+ }
+ for _, ep := range eps {
+ ioc := int64(sysSIOCGLIFADDR)
+ err := ioctl(ep.s, uintptr(ioc), unsafe.Pointer(&lifr))
+ if err != nil {
+ continue
+ }
+ sa := (*sockaddrStorage)(unsafe.Pointer(&lifr.Lifru[0]))
+ l := int(littleEndian.Uint32(lifr.Lifru1[:4]))
+ if l == 0 {
+ continue
+ }
+ switch sa.Family {
+ case sysAF_INET:
+ a := &Inet4Addr{PrefixLen: l}
+ copy(a.IP[:], lifr.Lifru[4:8])
+ as = append(as, a)
+ case sysAF_INET6:
+ a := &Inet6Addr{PrefixLen: l, ZoneID: int(littleEndian.Uint32(lifr.Lifru[24:28]))}
+ copy(a.IP[:], lifr.Lifru[8:24])
+ as = append(as, a)
+ }
+ }
+ }
+ return as, nil
+}
+
+func parseLinkAddr(b []byte) ([]byte, error) {
+ nlen, alen, slen := int(b[1]), int(b[2]), int(b[3])
+ l := 4 + nlen + alen + slen
+ if len(b) < l {
+ return nil, errors.New("invalid address")
+ }
+ b = b[4:]
+ var addr []byte
+ if nlen > 0 {
+ b = b[nlen:]
+ }
+ if alen > 0 {
+ addr = make([]byte, alen)
+ copy(addr, b[:alen])
+ }
+ return addr, nil
+}
diff --git a/vendor/golang.org/x/net/lif/address_test.go b/vendor/golang.org/x/net/lif/address_test.go
new file mode 100644
index 000000000..f62ed9347
--- /dev/null
+++ b/vendor/golang.org/x/net/lif/address_test.go
@@ -0,0 +1,121 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build solaris
+
+package lif
+
+import (
+ "fmt"
+ "testing"
+)
+
+type addrFamily int
+
+func (af addrFamily) String() string {
+ switch af {
+ case sysAF_UNSPEC:
+ return "unspec"
+ case sysAF_INET:
+ return "inet4"
+ case sysAF_INET6:
+ return "inet6"
+ default:
+ return fmt.Sprintf("%d", af)
+ }
+}
+
+const hexDigit = "0123456789abcdef"
+
+type llAddr []byte
+
+func (a llAddr) String() string {
+ if len(a) == 0 {
+ return ""
+ }
+ buf := make([]byte, 0, len(a)*3-1)
+ for i, b := range a {
+ if i > 0 {
+ buf = append(buf, ':')
+ }
+ buf = append(buf, hexDigit[b>>4])
+ buf = append(buf, hexDigit[b&0xF])
+ }
+ return string(buf)
+}
+
+type ipAddr []byte
+
+func (a ipAddr) String() string {
+ if len(a) == 0 {
+ return "<nil>"
+ }
+ if len(a) == 4 {
+ return fmt.Sprintf("%d.%d.%d.%d", a[0], a[1], a[2], a[3])
+ }
+ if len(a) == 16 {
+ return fmt.Sprintf("%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15])
+ }
+ s := make([]byte, len(a)*2)
+ for i, tn := range a {
+ s[i*2], s[i*2+1] = hexDigit[tn>>4], hexDigit[tn&0xf]
+ }
+ return string(s)
+}
+
+func (a *Inet4Addr) String() string {
+ return fmt.Sprintf("(%s %s %d)", addrFamily(a.Family()), ipAddr(a.IP[:]), a.PrefixLen)
+}
+
+func (a *Inet6Addr) String() string {
+ return fmt.Sprintf("(%s %s %d %d)", addrFamily(a.Family()), ipAddr(a.IP[:]), a.PrefixLen, a.ZoneID)
+}
+
+type addrPack struct {
+ af int
+ as []Addr
+}
+
+func addrPacks() ([]addrPack, error) {
+ var aps []addrPack
+ for _, af := range [...]int{sysAF_UNSPEC, sysAF_INET, sysAF_INET6} {
+ as, err := Addrs(af, "")
+ if err != nil {
+ return nil, err
+ }
+ aps = append(aps, addrPack{af: af, as: as})
+ }
+ return aps, nil
+}
+
+func TestAddrs(t *testing.T) {
+ aps, err := addrPacks()
+ if len(aps) == 0 && err != nil {
+ t.Fatal(err)
+ }
+ lps, err := linkPacks()
+ if len(lps) == 0 && err != nil {
+ t.Fatal(err)
+ }
+ for _, lp := range lps {
+ n := 0
+ for _, ll := range lp.lls {
+ as, err := Addrs(lp.af, ll.Name)
+ if err != nil {
+ t.Fatal(lp.af, ll.Name, err)
+ }
+ t.Logf("af=%s name=%s %v", addrFamily(lp.af), ll.Name, as)
+ n += len(as)
+ }
+ for _, ap := range aps {
+ if ap.af != lp.af {
+ continue
+ }
+ if n != len(ap.as) {
+ t.Errorf("af=%s got %d; want %d", addrFamily(lp.af), n, len(ap.as))
+ continue
+ }
+ }
+ }
+}
diff --git a/vendor/golang.org/x/net/lif/binary.go b/vendor/golang.org/x/net/lif/binary.go
new file mode 100644
index 000000000..aade9eafa
--- /dev/null
+++ b/vendor/golang.org/x/net/lif/binary.go
@@ -0,0 +1,68 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build solaris
+
+package lif
+
+// This file contains duplicates of encoding/binary package.
+//
+// This package is supposed to be used by the net package of standard
+// library. Therefore the package set used in the package must be the
+// same as net package.
+
+var littleEndian binaryLittleEndian
+
+type binaryByteOrder interface {
+ Uint16([]byte) uint16
+ Uint32([]byte) uint32
+ Uint64([]byte) uint64
+ PutUint16([]byte, uint16)
+ PutUint32([]byte, uint32)
+ PutUint64([]byte, uint64)
+}
+
+type binaryLittleEndian struct{}
+
+func (binaryLittleEndian) Uint16(b []byte) uint16 {
+ _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808
+ return uint16(b[0]) | uint16(b[1])<<8
+}
+
+func (binaryLittleEndian) PutUint16(b []byte, v uint16) {
+ _ = b[1] // early bounds check to guarantee safety of writes below
+ b[0] = byte(v)
+ b[1] = byte(v >> 8)
+}
+
+func (binaryLittleEndian) Uint32(b []byte) uint32 {
+ _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
+ return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
+}
+
+func (binaryLittleEndian) PutUint32(b []byte, v uint32) {
+ _ = b[3] // early bounds check to guarantee safety of writes below
+ b[0] = byte(v)
+ b[1] = byte(v >> 8)
+ b[2] = byte(v >> 16)
+ b[3] = byte(v >> 24)
+}
+
+func (binaryLittleEndian) Uint64(b []byte) uint64 {
+ _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
+ return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |
+ uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
+}
+
+func (binaryLittleEndian) PutUint64(b []byte, v uint64) {
+ _ = b[7] // early bounds check to guarantee safety of writes below
+ b[0] = byte(v)
+ b[1] = byte(v >> 8)
+ b[2] = byte(v >> 16)
+ b[3] = byte(v >> 24)
+ b[4] = byte(v >> 32)
+ b[5] = byte(v >> 40)
+ b[6] = byte(v >> 48)
+ b[7] = byte(v >> 56)
+}
diff --git a/vendor/golang.org/x/net/lif/defs_solaris.go b/vendor/golang.org/x/net/lif/defs_solaris.go
new file mode 100644
index 000000000..8b84ba5e3
--- /dev/null
+++ b/vendor/golang.org/x/net/lif/defs_solaris.go
@@ -0,0 +1,90 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build ignore
+
+// +godefs map struct_in_addr [4]byte /* in_addr */
+// +godefs map struct_in6_addr [16]byte /* in6_addr */
+
+package lif
+
+/*
+#include <sys/socket.h>
+#include <sys/sockio.h>
+
+#include <net/if.h>
+#include <net/if_types.h>
+*/
+import "C"
+
+const (
+ sysAF_UNSPEC = C.AF_UNSPEC
+ sysAF_INET = C.AF_INET
+ sysAF_INET6 = C.AF_INET6
+
+ sysSOCK_DGRAM = C.SOCK_DGRAM
+)
+
+type sockaddrStorage C.struct_sockaddr_storage
+
+const (
+ sysLIFC_NOXMIT = C.LIFC_NOXMIT
+ sysLIFC_EXTERNAL_SOURCE = C.LIFC_EXTERNAL_SOURCE
+ sysLIFC_TEMPORARY = C.LIFC_TEMPORARY
+ sysLIFC_ALLZONES = C.LIFC_ALLZONES
+ sysLIFC_UNDER_IPMP = C.LIFC_UNDER_IPMP
+ sysLIFC_ENABLED = C.LIFC_ENABLED
+
+ sysSIOCGLIFADDR = C.SIOCGLIFADDR
+ sysSIOCGLIFDSTADDR = C.SIOCGLIFDSTADDR
+ sysSIOCGLIFFLAGS = C.SIOCGLIFFLAGS
+ sysSIOCGLIFMTU = C.SIOCGLIFMTU
+ sysSIOCGLIFNETMASK = C.SIOCGLIFNETMASK
+ sysSIOCGLIFMETRIC = C.SIOCGLIFMETRIC
+ sysSIOCGLIFNUM = C.SIOCGLIFNUM
+ sysSIOCGLIFINDEX = C.SIOCGLIFINDEX
+ sysSIOCGLIFSUBNET = C.SIOCGLIFSUBNET
+ sysSIOCGLIFLNKINFO = C.SIOCGLIFLNKINFO
+ sysSIOCGLIFCONF = C.SIOCGLIFCONF
+ sysSIOCGLIFHWADDR = C.SIOCGLIFHWADDR
+)
+
+const (
+ sysIFF_UP = C.IFF_UP
+ sysIFF_BROADCAST = C.IFF_BROADCAST
+ sysIFF_DEBUG = C.IFF_DEBUG
+ sysIFF_LOOPBACK = C.IFF_LOOPBACK
+ sysIFF_POINTOPOINT = C.IFF_POINTOPOINT
+ sysIFF_NOTRAILERS = C.IFF_NOTRAILERS
+ sysIFF_RUNNING = C.IFF_RUNNING
+ sysIFF_NOARP = C.IFF_NOARP
+ sysIFF_PROMISC = C.IFF_PROMISC
+ sysIFF_ALLMULTI = C.IFF_ALLMULTI
+ sysIFF_INTELLIGENT = C.IFF_INTELLIGENT
+ sysIFF_MULTICAST = C.IFF_MULTICAST
+ sysIFF_MULTI_BCAST = C.IFF_MULTI_BCAST
+ sysIFF_UNNUMBERED = C.IFF_UNNUMBERED
+ sysIFF_PRIVATE = C.IFF_PRIVATE
+)
+
+const (
+ sizeofLifnum = C.sizeof_struct_lifnum
+ sizeofLifreq = C.sizeof_struct_lifreq
+ sizeofLifconf = C.sizeof_struct_lifconf
+ sizeofLifIfinfoReq = C.sizeof_struct_lif_ifinfo_req
+)
+
+type sysLifnum C.struct_lifnum
+
+type lifreq C.struct_lifreq
+
+type lifconf C.struct_lifconf
+
+type lifIfinfoReq C.struct_lif_ifinfo_req
+
+const (
+ sysIFT_IPV4 = C.IFT_IPV4
+ sysIFT_IPV6 = C.IFT_IPV6
+ sysIFT_6TO4 = C.IFT_6TO4
+)
diff --git a/vendor/golang.org/x/net/lif/lif.go b/vendor/golang.org/x/net/lif/lif.go
new file mode 100644
index 000000000..6e81f81f1
--- /dev/null
+++ b/vendor/golang.org/x/net/lif/lif.go
@@ -0,0 +1,43 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build solaris
+
+// Package lif provides basic functions for the manipulation of
+// logical network interfaces and interface addresses on Solaris.
+//
+// The package supports Solaris 11 or above.
+package lif
+
+import "syscall"
+
+type endpoint struct {
+ af int
+ s uintptr
+}
+
+func (ep *endpoint) close() error {
+ return syscall.Close(int(ep.s))
+}
+
+func newEndpoints(af int) ([]endpoint, error) {
+ var lastErr error
+ var eps []endpoint
+ afs := []int{sysAF_INET, sysAF_INET6}
+ if af != sysAF_UNSPEC {
+ afs = []int{af}
+ }
+ for _, af := range afs {
+ s, err := syscall.Socket(af, sysSOCK_DGRAM, 0)
+ if err != nil {
+ lastErr = err
+ continue
+ }
+ eps = append(eps, endpoint{af: af, s: uintptr(s)})
+ }
+ if len(eps) == 0 {
+ return nil, lastErr
+ }
+ return eps, nil
+}
diff --git a/vendor/golang.org/x/net/lif/link.go b/vendor/golang.org/x/net/lif/link.go
new file mode 100644
index 000000000..76fa6c687
--- /dev/null
+++ b/vendor/golang.org/x/net/lif/link.go
@@ -0,0 +1,122 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build solaris
+
+package lif
+
+import "unsafe"
+
+// A Link represents logical data link information.
+//
+// It also represents base information for logical network interface.
+// On Solaris, each logical network interface represents network layer
+// adjacency information and the interface has a only single network
+// address or address pair for tunneling. It's usual that multiple
+// logical network interfaces share the same logical data link.
+type Link struct {
+ Name string // name, equivalent to IP interface name
+ Index int // index, equivalent to IP interface index
+ Type int // type
+ Flags int // flags
+ MTU int // maximum transmission unit, basically link MTU but may differ between IP address families
+ Addr []byte // address
+}
+
+func (ll *Link) fetch(s uintptr) {
+ var lifr lifreq
+ for i := 0; i < len(ll.Name); i++ {
+ lifr.Name[i] = int8(ll.Name[i])
+ }
+ ioc := int64(sysSIOCGLIFINDEX)
+ if err := ioctl(s, uintptr(ioc), unsafe.Pointer(&lifr)); err == nil {
+ ll.Index = int(littleEndian.Uint32(lifr.Lifru[:4]))
+ }
+ ioc = int64(sysSIOCGLIFFLAGS)
+ if err := ioctl(s, uintptr(ioc), unsafe.Pointer(&lifr)); err == nil {
+ ll.Flags = int(littleEndian.Uint64(lifr.Lifru[:8]))
+ }
+ ioc = int64(sysSIOCGLIFMTU)
+ if err := ioctl(s, uintptr(ioc), unsafe.Pointer(&lifr)); err == nil {
+ ll.MTU = int(littleEndian.Uint32(lifr.Lifru[:4]))
+ }
+ switch ll.Type {
+ case sysIFT_IPV4, sysIFT_IPV6, sysIFT_6TO4:
+ default:
+ ioc = int64(sysSIOCGLIFHWADDR)
+ if err := ioctl(s, uintptr(ioc), unsafe.Pointer(&lifr)); err == nil {
+ ll.Addr, _ = parseLinkAddr(lifr.Lifru[4:])
+ }
+ }
+}
+
+// Links returns a list of logical data links.
+//
+// The provided af must be an address family and name must be a data
+// link name. The zero value of af or name means a wildcard.
+func Links(af int, name string) ([]Link, error) {
+ eps, err := newEndpoints(af)
+ if len(eps) == 0 {
+ return nil, err
+ }
+ defer func() {
+ for _, ep := range eps {
+ ep.close()
+ }
+ }()
+ return links(eps, name)
+}
+
+func links(eps []endpoint, name string) ([]Link, error) {
+ var lls []Link
+ lifn := sysLifnum{Flags: sysLIFC_NOXMIT | sysLIFC_TEMPORARY | sysLIFC_ALLZONES | sysLIFC_UNDER_IPMP}
+ lifc := lifconf{Flags: sysLIFC_NOXMIT | sysLIFC_TEMPORARY | sysLIFC_ALLZONES | sysLIFC_UNDER_IPMP}
+ for _, ep := range eps {
+ lifn.Family = uint16(ep.af)
+ ioc := int64(sysSIOCGLIFNUM)
+ if err := ioctl(ep.s, uintptr(ioc), unsafe.Pointer(&lifn)); err != nil {
+ continue
+ }
+ if lifn.Count == 0 {
+ continue
+ }
+ b := make([]byte, lifn.Count*sizeofLifreq)
+ lifc.Family = uint16(ep.af)
+ lifc.Len = lifn.Count * sizeofLifreq
+ littleEndian.PutUint64(lifc.Lifcu[:], uint64(uintptr(unsafe.Pointer(&b[0]))))
+ ioc = int64(sysSIOCGLIFCONF)
+ if err := ioctl(ep.s, uintptr(ioc), unsafe.Pointer(&lifc)); err != nil {
+ continue
+ }
+ nb := make([]byte, 32) // see LIFNAMSIZ in net/if.h
+ for i := 0; i < int(lifn.Count); i++ {
+ lifr := (*lifreq)(unsafe.Pointer(&b[i*sizeofLifreq]))
+ for i := 0; i < 32; i++ {
+ if lifr.Name[i] == 0 {
+ nb = nb[:i]
+ break
+ }
+ nb[i] = byte(lifr.Name[i])
+ }
+ llname := string(nb)
+ nb = nb[:32]
+ if isDupLink(lls, llname) || name != "" && name != llname {
+ continue
+ }
+ ll := Link{Name: llname, Type: int(lifr.Type)}
+ ll.fetch(ep.s)
+ lls = append(lls, ll)
+ }
+ }
+ return lls, nil
+}
+
+func isDupLink(lls []Link, name string) bool {
+ for _, ll := range lls {
+ if ll.Name == name {
+ return true
+ }
+ }
+ return false
+}
diff --git a/vendor/golang.org/x/net/lif/link_test.go b/vendor/golang.org/x/net/lif/link_test.go
new file mode 100644
index 000000000..8fb2bf6f3
--- /dev/null
+++ b/vendor/golang.org/x/net/lif/link_test.go
@@ -0,0 +1,61 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build solaris
+
+package lif
+
+import (
+ "fmt"
+ "testing"
+)
+
+func (ll *Link) String() string {
+ return fmt.Sprintf("name=%s index=%d type=%d flags=%#x mtu=%d addr=%v", ll.Name, ll.Index, ll.Type, ll.Flags, ll.MTU, llAddr(ll.Addr))
+}
+
+type linkPack struct {
+ af int
+ lls []Link
+}
+
+func linkPacks() ([]linkPack, error) {
+ var lps []linkPack
+ for _, af := range [...]int{sysAF_UNSPEC, sysAF_INET, sysAF_INET6} {
+ lls, err := Links(af, "")
+ if err != nil {
+ return nil, err
+ }
+ lps = append(lps, linkPack{af: af, lls: lls})
+ }
+ return lps, nil
+}
+
+func TestLinks(t *testing.T) {
+ lps, err := linkPacks()
+ if len(lps) == 0 && err != nil {
+ t.Fatal(err)
+ }
+ for _, lp := range lps {
+ n := 0
+ for _, sll := range lp.lls {
+ lls, err := Links(lp.af, sll.Name)
+ if err != nil {
+ t.Fatal(lp.af, sll.Name, err)
+ }
+ for _, ll := range lls {
+ if ll.Name != sll.Name || ll.Index != sll.Index {
+ t.Errorf("af=%s got %v; want %v", addrFamily(lp.af), &ll, &sll)
+ continue
+ }
+ t.Logf("af=%s name=%s %v", addrFamily(lp.af), sll.Name, &ll)
+ n++
+ }
+ }
+ if n != len(lp.lls) {
+ t.Errorf("af=%s got %d; want %d", addrFamily(lp.af), n, len(lp.lls))
+ continue
+ }
+ }
+}
diff --git a/vendor/golang.org/x/net/lif/sys_solaris_amd64.s b/vendor/golang.org/x/net/lif/sys_solaris_amd64.s
new file mode 100644
index 000000000..1ebca3739
--- /dev/null
+++ b/vendor/golang.org/x/net/lif/sys_solaris_amd64.s
@@ -0,0 +1,11 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+#include "textflag.h"
+
+TEXT ·sysvicall6(SB),NOSPLIT,$0-88
+ JMP syscall·sysvicall6(SB)
+
+TEXT ·keepAlive(SB),NOSPLIT,$0
+ RET
diff --git a/vendor/golang.org/x/net/lif/syscall.go b/vendor/golang.org/x/net/lif/syscall.go
new file mode 100644
index 000000000..5fe073620
--- /dev/null
+++ b/vendor/golang.org/x/net/lif/syscall.go
@@ -0,0 +1,33 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build solaris
+
+package lif
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+//go:cgo_import_dynamic libc_ioctl ioctl "libc.so"
+
+//go:linkname procIoctl libc_ioctl
+
+var procIoctl uintptr
+
+func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (uintptr, uintptr, syscall.Errno)
+
+// TODO: replace with runtime.KeepAlive when available
+//go:noescape
+func keepAlive(p unsafe.Pointer)
+
+func ioctl(s, ioc uintptr, arg unsafe.Pointer) error {
+ _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procIoctl)), 3, s, ioc, uintptr(arg), 0, 0, 0)
+ keepAlive(arg)
+ if errno != 0 {
+ return error(errno)
+ }
+ return nil
+}
diff --git a/vendor/golang.org/x/net/lif/zsys_solaris_amd64.go b/vendor/golang.org/x/net/lif/zsys_solaris_amd64.go
new file mode 100644
index 000000000..94231c49c
--- /dev/null
+++ b/vendor/golang.org/x/net/lif/zsys_solaris_amd64.go
@@ -0,0 +1,103 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_solaris.go
+
+package lif
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0x1a
+
+ sysSOCK_DGRAM = 0x1
+)
+
+type sockaddrStorage struct {
+ Family uint16
+ X_ss_pad1 [6]int8
+ X_ss_align float64
+ X_ss_pad2 [240]int8
+}
+
+const (
+ sysLIFC_NOXMIT = 0x1
+ sysLIFC_EXTERNAL_SOURCE = 0x2
+ sysLIFC_TEMPORARY = 0x4
+ sysLIFC_ALLZONES = 0x8
+ sysLIFC_UNDER_IPMP = 0x10
+ sysLIFC_ENABLED = 0x20
+
+ sysSIOCGLIFADDR = -0x3f87968f
+ sysSIOCGLIFDSTADDR = -0x3f87968d
+ sysSIOCGLIFFLAGS = -0x3f87968b
+ sysSIOCGLIFMTU = -0x3f879686
+ sysSIOCGLIFNETMASK = -0x3f879683
+ sysSIOCGLIFMETRIC = -0x3f879681
+ sysSIOCGLIFNUM = -0x3ff3967e
+ sysSIOCGLIFINDEX = -0x3f87967b
+ sysSIOCGLIFSUBNET = -0x3f879676
+ sysSIOCGLIFLNKINFO = -0x3f879674
+ sysSIOCGLIFCONF = -0x3fef965b
+ sysSIOCGLIFHWADDR = -0x3f879640
+)
+
+const (
+ sysIFF_UP = 0x1
+ sysIFF_BROADCAST = 0x2
+ sysIFF_DEBUG = 0x4
+ sysIFF_LOOPBACK = 0x8
+ sysIFF_POINTOPOINT = 0x10
+ sysIFF_NOTRAILERS = 0x20
+ sysIFF_RUNNING = 0x40
+ sysIFF_NOARP = 0x80
+ sysIFF_PROMISC = 0x100
+ sysIFF_ALLMULTI = 0x200
+ sysIFF_INTELLIGENT = 0x400
+ sysIFF_MULTICAST = 0x800
+ sysIFF_MULTI_BCAST = 0x1000
+ sysIFF_UNNUMBERED = 0x2000
+ sysIFF_PRIVATE = 0x8000
+)
+
+const (
+ sizeofLifnum = 0xc
+ sizeofLifreq = 0x178
+ sizeofLifconf = 0x18
+ sizeofLifIfinfoReq = 0x10
+)
+
+type sysLifnum struct {
+ Family uint16
+ Pad_cgo_0 [2]byte
+ Flags int32
+ Count int32
+}
+
+type lifreq struct {
+ Name [32]int8
+ Lifru1 [4]byte
+ Type uint32
+ Lifru [336]byte
+}
+
+type lifconf struct {
+ Family uint16
+ Pad_cgo_0 [2]byte
+ Flags int32
+ Len int32
+ Pad_cgo_1 [4]byte
+ Lifcu [8]byte
+}
+
+type lifIfinfoReq struct {
+ Maxhops uint8
+ Pad_cgo_0 [3]byte
+ Reachtime uint32
+ Reachretrans uint32
+ Maxmtu uint32
+}
+
+const (
+ sysIFT_IPV4 = 0xc8
+ sysIFT_IPV6 = 0xc9
+ sysIFT_6TO4 = 0xca
+)
diff --git a/vendor/golang.org/x/net/netutil/listen.go b/vendor/golang.org/x/net/netutil/listen.go
index b317ba2e6..56f43bf65 100644
--- a/vendor/golang.org/x/net/netutil/listen.go
+++ b/vendor/golang.org/x/net/netutil/listen.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/netutil/listen_test.go b/vendor/golang.org/x/net/netutil/listen_test.go
index c1a3d5527..5e07d7bea 100644
--- a/vendor/golang.org/x/net/netutil/listen_test.go
+++ b/vendor/golang.org/x/net/netutil/listen_test.go
@@ -1,4 +1,4 @@
-// Copyright 2013 The Go Authors. All rights reserved.
+// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/publicsuffix/table.go b/vendor/golang.org/x/net/publicsuffix/table.go
index dfe67ebe6..bf20c036b 100644
--- a/vendor/golang.org/x/net/publicsuffix/table.go
+++ b/vendor/golang.org/x/net/publicsuffix/table.go
@@ -2,7 +2,7 @@
package publicsuffix
-const version = "publicsuffix.org's public_suffix_list.dat, git revision 533b016049473e520193e70156e4b54dc1f19568 (2016-08-05T11:21:15Z)"
+const version = "publicsuffix.org's public_suffix_list.dat, git revision 915565885d0fbd25caf7d8b339cd3478f558da94 (2016-10-19T08:16:09Z)"
const (
nodesBitsChildren = 9
@@ -23,445 +23,446 @@ const (
)
// numTLD is the number of top level domains.
-const numTLD = 1552
+const numTLD = 1553
// Text is the combined text of all labels.
-const text = "biellaakesvuemieleccebieszczadygeyachimataipeigersundnpaleomutas" +
- "hinainfolldalottebievatmallorcafederationinohekinannestadrangeda" +
- "lottokonamegatakatorintuitateshinanomachintaijinuyamanouchikuhok" +
- "uryugasakitashiobarabifukagawalmartateyamabihorologyusuisserveex" +
- "changebikedagestangebilbaogakievenesandvikcoromantovalle-d-aosta" +
- "thellexusdecorativeartsanfranciscofreakunemurorangeiseiyoichirop" +
- "racticaseihichisobetsuitairabillustrationinomiyakonojoshkar-olaw" +
- "abiobirdartcenterprisesakikonaircraftraeumtgeradealstahaugesundr" +
- "ivelandrobaknoluoktainaikawachinaganoharamcoalaheadjudaicable-mo" +
- "dembetsukuinvestmentsangobirkenesoddtangenovarabirthplacebjarkoy" +
- "uulsandoyuzawabjerkreimdbalatinorddalimitediscountysnes3-sa-east" +
- "-1bjugnieznordlandrudmurtiablockbusternidunloppacificasertaishin" +
- "omakikuchikuseikarugausdalouvreitatsunobloombergbauernrtattoolsz" +
- "tynsettlersanjotaxihuanirasakis-a-candidatebloxcmsannanishiazais" +
- "-a-catererbluedaplierneuesannohelplfinancialowiczest-le-patrondh" +
- "eimperiabmoattachmentsanokasuyakutiabmsantabarbarabmweirbnpparib" +
- "aselburgloppenzaogashimadachicagoboatsantacruzsantafedextraspace" +
- "-to-rentalstomakomaibarabomloanswatch-and-clockerbondunsanukis-a" +
- "-celticsfanishigotsukisofukushimaritimodenakanotoddenishiharabon" +
- "nishiizunazukis-a-chefarmsteadupontariobookingmbhartiffanyuzhno-" +
- "sakhalinskaszubybootsaotomeloyalistjordalshalsenishikatakazakis-" +
- "a-conservativefsncfdurbanamexhibitionishikatsuragithubuserconten" +
- "tgoryboschaefflerdalucaniabostikatowicebostonakijinsekikogenting" +
- "minakamichiharabotanicalgardenishikawazukanazawabotanicgardenish" +
- "imerabotanybouncemerckatsushikabeeldengeluidurhamburgmodellingmx" +
- "finitybounty-fullensakerrypropertiesapodhalewismillerboutiquebec" +
- "ngrimstadvrcambridgestonewspaperbozentsujiiebradescorporationish" +
- "inomiyashironobrandywinevalleybrasiliabresciabrindisibenikebrist" +
- "olgapartmentsapporobritishcolumbialowiezaganishinoomotegotvallea" +
- "ostatoiluccapitalonewhollandvrdnsfor-better-thandabroadcastlecle" +
- "rcasinore-og-uvdalucernebroadwaybroke-itjeldsundwgripebrokerbron" +
- "noysundyndns-ipalermomasvuotnakatombetsupplybrothermesaverdeatnu" +
- "orogersvpalmspringsakerbrowsersafetymarketsaratovalled-aostavang" +
- "erbrumunddalukowfarsundyndns-mailuroybrunelblagdenesnaaseralinge" +
- "nkainanaejrietisalatinabenoboribetsucksardegnamsosnowiecateringe" +
- "budejjuedischesapeakebayernurembergriwataraidyndns-office-on-the" +
- "-webcampobassociatesardiniabrusselsarlutskatsuyamaseratis-a-cpad" +
- "oval-daostavalleybruxellesarpsborgrondarbryanskleppamperedchefas" +
- "hionishinoshimatta-varjjatjmaxxxjaworznobryneustarhubalestrandab" +
- "ergamoarekemreviewskrakoweddingladelmenhorstackspacekitagatajimi" +
- "crolightinglassassinationalheritagematsubarakawagoeu-1buskerudin" +
- "ewhampshirebungoonordreisa-geekaufenishiokoppegardyndns-picsaruf" +
- "utsunomiyawakasaikaitakoenigrongabuzenishitosashimizunaminamiash" +
- "igarabuzzgorzeleccolognewmexicoldwarmiamiastalowa-wolahppiacenza" +
- "kopanerairguardyndns-remotegildeskalmykiabwhalingrossetouchijiwa" +
- "deloittevadsoccertificationishiwakis-a-cubicle-slavellinowruzhgo" +
- "rodoybzhitomirkutskodjeepostfoldnavyatkakegawalterconferencecons" +
- "tructionconsuladoharuhrconsultanthropologyconsultingvollcontacto" +
- "yookanzakiwiencontemporaryarteducationalchikugojomedio-campidano" +
- "-mediocampidanomediocontractorskenconventureshinodesashibetsuiki" +
- "mobetsuliguriacookingchannelveruminamibosogndalcoolkuszgradcoope" +
- "raunitemasekfhappoumuenchencopenhagencyclopedichernihivanovosibi" +
- "rskypescaravantaacorsicahcesuolocalhistorybnikahokutoeiheijis-a-" +
- "doctoraycorvettenrightathomegoodsbschokoladencosenzamamibuilders" +
- "cholarshipschoolcostumedizinhistorischeschulezajskhabarovskhakas" +
- "siacouchpotatofrieschwarzgwangjuifminamidaitomangotembaixadacoun" +
- "cilcouponschweizippodlasiellakasamatsudovre-eikercoursesciencece" +
- "ntersciencehistorycq-acranbrookuwanalyticscientistockholmestrand" +
- "creditcardcreditunioncremonashorokanaiecrewiiheyaizuwakamatsubus" +
- "hikusakadogawacricketrzyncrimeacrotonewportlligatewaycrownprovid" +
- "ercrscjohnsoncruisescotlandcryptonomichigangwoncuisinellajollame" +
- "ricanexpressexyzjcbnlculturalcentertainmentoyosatoyokawacuneocup" +
- "cakecxn--1ctwolominamatamayukis-a-financialadvisor-aurdalcymruov" +
- "atoyotaris-a-geekgalaxycyonabarussiacyouthdfcbankzlguovdageaidnu" +
- "lvikharkivgucciprianiigataiwanairforcertmgretachikawakuyabukicks" +
- "-assedichernivtsiciliafieldfiguerestaurantoyotomiyazakis-a-green" +
- "filateliafilminamiechizenfinalfinancefineartserveftparaglidingzp" +
- "arisor-fronfinlandfinnoyfirebaseapparliamentoyotsukaidownloadfir" +
- "enzefirestonextdirectoyourafirmdaleirfjordfishingolffanservegame" +
- "-serverisignfitjarqhachiojiyahikobeatservehalflifestylefitnesset" +
- "tlementoystre-slidrettozawafjalerflesbergflickragerotikamakuraza" +
- "kiraflightservehttparmaflirumannortonsbergflogintogurafloraflore" +
- "ncefloridafloristanohatakahashimamakirkeneservehumourfloromskogu" +
- "chikuzenflowerserveirchernovtsykkylvenetogakushimotoganewjerseyf" +
- "lsmidthruheredstonexus-east-1flynnhubalsfjordiscoveryokamikawane" +
- "honbetsurutaharaurskog-holandroverhalla-speziaetnagaivuotnagaoka" +
- "kyotambabydgoszczecinemailavagiske164fndfoodnetworkshoppingfor-o" +
- "urfor-someetozsdefor-theaterforexrothachirogatakanabeautydalforg" +
- "otdnserveminecraftranbyforli-cesena-forlicesenaforlikescandyndns" +
- "-at-workinggrouparocherkasyzrankoshigayaltaikis-a-guruslivinghis" +
- "toryforsaleirvikhersonforsandasuoloftrani-andria-barletta-trani-" +
- "andriafortmissoulan-udefenseljordfortworthadanotaireservemp3util" +
- "itiesquarezzoologicalvinklein-addrammenuernbergdyniabogadocscbgg" +
- "fareastcoastaldefence-burgjemnes3-ap-northeast-1kappleaseating-o" +
- "rganicbcg12000emmafanconagawakayamadridvagsoyericsson-aptibleang" +
- "aviikadenaamesjevuemielno-ip6foruminamifuranofosneservep2parserv" +
- "epicservequakefotaruis-a-hard-workerfoxfordegreefreeboxostrowiec" +
- "hiryukyuragifudaigodoesntexistanbullensvanguardyndns-servercelli" +
- "kes-piedmontblancomeeresasayamafreemasonryfreiburgfreightcmwildl" +
- "ifedjejuegoshikiminokamoenairlinedre-eikerfreseniuscountryestate" +
- "ofdelawaredumbrellanbibaidarfribourgfriuli-v-giuliafriuli-ve-giu" +
- "liafriuli-vegiuliafriuli-venezia-giuliafriuli-veneziagiuliafriul" +
- "i-vgiuliafriuliv-giuliafriulive-giuliafriulivegiuliafriulivenezi" +
- "a-giuliafriuliveneziagiuliafriulivgiuliafrlfroganservesarcasmata" +
- "rtanddesignfrognfrolandfrom-akrehamnfrom-alfrom-arfrom-azwilliam" +
- "hillfrom-capetownnews-stagingfrom-collectionfrom-ctraniandriabar" +
- "lettatraniandriafrom-dchitachinakagawatchandclockautokeinofrom-d" +
- "ell-ogliastrakhanawawinbaltimore-og-romsdalindasiaustevollaziobi" +
- "ragroks-thisamitsukembuchikumagayagawakkanaibetsubamericanfamily" +
- "dscloudcontrolledekafjorddnskingjerdrumckinseyekaterinburgjersta" +
- "dotsuruokamchatkameokameyamashinatsukigatakamoriokamikitayamatot" +
- "akadabruzzoologyeongbuk-uralsk12from-flanderservicesettsurfastly" +
- "from-gafrom-higashiagatsumagoirminamiiselectranoyfrom-iafrom-idf" +
- "rom-ilfrom-incheonfrom-ksevastopolefrom-kyotobetsumidatlantichit" +
- "osetogitsuldaluxembourgrpanamafrom-lancashireggio-calabriafrom-m" +
- "ansionsevenassisicilyfrom-mdfrom-megurorostrowwlkpmgfrom-microso" +
- "ftbankhmelnitskiyamasfjordenfrom-mnfrom-mochizukirovogradoyfrom-" +
- "msewindmillfrom-mtnfrom-nchloefrom-ndfrom-nefrom-nhktransportrap" +
- "aniimimatakatsukis-a-hunterfrom-njcpartis-a-knightravelchannelfr" +
- "om-nminamiizukamitondabayashiogamagoriziafrom-nvallee-aosteroyfr" +
- "om-nyfrom-ohkurafrom-oketohmanxn--1qqw23afrom-orfrom-paderbornfr" +
- "om-pratohnoshoooshikamaishimofusartsfranziskanerdpolicefrom-rivn" +
- "efrom-schoenbrunnfrom-sdnipropetrovskhmelnytskyivalleeaosteigenf" +
+const text = "biellaakesvuemieleccebieszczadygeyachimatainaircraftraeumtgerade" +
+ "alstahaugesunderseaportsinfolldalaskanittedallasalleasinglesango" +
+ "ppdalinzaintuitateshinanomachintaifun-dnsaliaskimitsubatamicable" +
+ "-modembetsukuinuyamanouchikuhokuryugasakitaurayasudabievatmallor" +
+ "cadaquesanjotateyamabifukagawalmartatsunobihorologyuzhno-sakhali" +
+ "nskaszubybikedagestangebilbaogakievenesannaninomiyakonojoshkar-o" +
+ "lawabillustrationirasakinvestmentsannohelplfinancialipetskatowic" +
+ "ebiobirdartcenterprisesakikuchikuseikarugapartmentsanokatsushika" +
+ "beeldengeluidunloppacificasinore-og-uvdalivornobirkenesoddtangen" +
+ "ovarabirthplacebjarkoybjerkreimdbalatinorddalillyonagoyastronomy" +
+ "asustor-elvdalwaysdatabaseballangenoamishirasatochigiessenebakke" +
+ "shibechambagriculturennebudapest-a-la-masionativeamericanantique" +
+ "s3-ap-northeast-2bjugnieznordlandunsantabarbarablockbusternidupo" +
+ "ntariobloombergbauernrtattoolsztynsettlersantacruzsantafedextras" +
+ "pace-to-rentalstomakomaibarabloxcmsanukis-a-candidatebluedaplier" +
+ "neustarhubalestrandabergamoarekeymachineues3-us-west-1bmoattachm" +
+ "entsaotomeloyalistjordalshalsenishiazais-a-catererbmsapodhalewis" +
+ "millerbmweirbnpparibaselburgloppenzaogashimadachicagoboatsapporo" +
+ "bnrwfarmsteadurbanamexhibitionishigotsukisosakitagawabomloanswat" +
+ "ch-and-clockerbondurhamburgmbhartiffanybonnishiharabookingminaka" +
+ "michiharabootsaratovalleaostatoilomzaporizhzheguris-a-celticsfan" +
+ "ishiizunazukis-a-chefarsundvrcambridgestonewyorkshirecreationish" +
+ "ikatakayamatsuzakis-a-conservativefsncfdvrdnsiskinkyotobetsumida" +
+ "tlanticateringebudejjuedischesapeakebayernurembergmodenakanotodd" +
+ "enishikatsuragithubusercontentaxihuanishikawazukanazawaboschaeff" +
+ "lerdalorenskogmxfinitybostikatsuyamaseratis-a-cpadoval-daostaval" +
+ "leybostonakijinsekikogentingrimstadwgripebotanicalgardenishimera" +
+ "botanicgardenishinomiyashironobotanybouncemerckmsdnipropetrovskl" +
+ "eppalmspringsakerbounty-fullensakerrypropertiesardegnamsosnowiec" +
+ "atholicheltenham-radio-openair-traffic-controlleyboutiquebecngri" +
+ "wataraidyndns-ipamperedchefashionishinoomotegovtgorybozentsujiie" +
+ "bradescorporationishinoshimatta-varjjatjeldsundyndns-mailotenkaw" +
+ "abrandywinevalleybrasiliabresciabrindisibenikebristolgaulardalot" +
+ "tebritishcolumbialowiezaganquannefrankfurtjmaxxxjaworznowtvalled" +
+ "-aostavangerbroadcastleclerchelyabinskypescaravantaabroadwaybrok" +
+ "e-itjometlifeinsurancebrokerbronnoysundyndns-office-on-the-webca" +
+ "mpobassociatesardiniabrothermesaverdeatnuorockartuzybrowsersafet" +
+ "ymarketsarlottokorozawabrumunddalouvreitjxn--0trq7p7nnishiokoppe" +
+ "gardyndns-picsarpsborgroks-thisayamanashiibaghdadultkmaxxn--11b4" +
+ "c3dyndns-remotegildeskalmykiabrunelblagdenesnaaseralingenkainana" +
+ "ejrietisalatinabenoboribetsucksarufutsunomiyawakasaikaitakoelnis" +
+ "hitosashimizunaminamiashigarabrusselsasayamabruxellesaseboknowsi" +
+ "tallowiczest-le-patrondheimperiabryanskodjeepostfoldnavyatkakami" +
+ "gaharabrynewhampshirebungoonordreisa-geekaufenishiwakis-a-cubicl" +
+ "e-slavellinotteroybuskerudinewhollandyndns-servercellikes-piedmo" +
+ "ntblancomeeresaskatchewanggouvicenzabuzenissandnessjoenissayokos" +
+ "hibahikariwanumatakazakis-a-democratmpanamabuzzgradyndns-weberli" +
+ "ncolnissedalucaniabwhalingrondarbzhitomirkutskydivingrongacomput" +
+ "erhistoryofscience-fictioncomsecuritytacticschulezajskddielddanu" +
+ "orrikuzentakatajirissagamiharacondoshichinohealth-carereformitak" +
+ "eharaconferenceconstructionconsuladoharuhrconsultanthropologycon" +
+ "sultingvollutskfhappoumuenchencontactoyotomiyazakis-a-geekgalaxy" +
+ "contemporaryarteducationalchikugojomedio-campidano-mediocampidan" +
+ "omediocontractorskenconventureshinodesashibetsuikinderoycookingc" +
+ "hannelveruminamibosogndaluxembourgujolstercoolkuszippodlasiellak" +
+ "asamatsudovre-eikercoopencraftoyotsukaidownloadcopenhagencyclope" +
+ "dichernovtsykkylvenetogakushimotoganewmexicoldwarmiamiastalowa-w" +
+ "oladbrokesassaris-a-designerimarumorimachidacorsicagliaridagawal" +
+ "tercorvettenrightathomegoodschwarzgwangjuifminamidaitomangotemba" +
+ "ixadacosenzamamibuilderschmidtre-gauldaluxurycostumedizinhistori" +
+ "scheschweizjcbnluzerncouchpotatofriesciencecentersciencehistoryc" +
+ "ouncilvivano-frankivskhabarovskhakassiacouponscientistockholmest" +
+ "randcoursescjohnsoncq-acranbrookuwanalyticscotlandcreditcardcred" +
+ "itunioncremonashorokanaiecrewiiheyaizuwakamatsubushikusakadogawa" +
+ "cricketrzyncrimeacrotonewspapercrownprovidercrsvparaglidingulenc" +
+ "ruisescrapper-sitecryptonomichigangwoncuisinellajollamericanexpr" +
+ "essexyculturalcentertainmentoyouracuneocupcakecxn--1ctwolominama" +
+ "takkofuefukihabororostrowwlkpmgunmarnardalcymruovatoystre-slidre" +
+ "ttozawacyonabarussiacyouthdfcbankzlguovdageaidnufcfanfieldfiguer" +
+ "estaurantozsdefilateliafilminamiechizenfinalfinancefineartservef" +
+ "tparisor-fronfinlandfinnoyfirebaseapparliamentranbyfirenzefirest" +
+ "onexus-east-1firmdaleirfjordfishingolffanservegame-serverisignfi" +
+ "tjarqhachiojiyahikobeatservehalflifestylefitnessettlementrani-an" +
+ "dria-barletta-trani-andriafjalerflesbergflickragerotikamakurazak" +
+ "irkeneservehttparmaflightservehumourflirumansionserveirchiryukyu" +
+ "ragifuchukotkakegawassamukawataricohdavvenjargausdaluccapitalone" +
+ "wjerseyflogintogurafloraflorencefloridafloristanohatakaharulvikh" +
+ "arkovalledaostavernflorokunohealthcareerserveminecraftraniandria" +
+ "barlettatraniandriaflowerservemp3utilitiesquarezzoologicalvinkle" +
+ "in-addrammenuernbergdyniabogadocscbggfareastcoastaldefence-burgj" +
+ "emnes3-ap-northeast-1kappleaseating-organicbcg12000emmafanconaga" +
+ "wakayamadridvagsoyericsson-aptibleangaviikadenaamesjevuemielno-i" +
+ "p6flynnhubalsfjordiscountysnes3-us-west-2fndfoodnetworkshoppingf" +
+ "or-ourfor-someetnedalfor-theaterforexrothruheredstoneforgotdnser" +
+ "vep2parocherkasyzrankoshigayaltaijis-a-greenforli-cesena-forlice" +
+ "senaforlikescandyndns-at-workinggrouparservepicservequakeforsale" +
+ "irvikhersonforsandasuoloftranoyfortmissoulan-udefenseljordfortwo" +
+ "rthachirogatakamoriokamikitayamatotakadaforuminamifuranofosneser" +
+ "vesarcasmatartanddesignfotaruis-a-gurunzenfoxfordegreefreeboxost" +
+ "rowiechitachinakagawatchandclockazimierz-dolnyfreemasonryfreibur" +
+ "gfreightcmwildlifedjejuegoshikiminokamoenairlinedre-eikerfreseni" +
+ "uscountryestateofdelawaredumbrellanbibaidarfribourgfriuli-v-giul" +
+ "iafriuli-ve-giuliafriuli-vegiuliafriuli-venezia-giuliafriuli-ven" +
+ "eziagiuliafriuli-vgiuliafriuliv-giuliafriulive-giuliafriulivegiu" +
+ "liafriulivenezia-giuliafriuliveneziagiuliafriulivgiuliafrlfrogan" +
+ "servicesettsurgeonshalloffamemergencyberlevagangaviikanonjis-a-h" +
+ "ard-workerfrognfrolandfrom-akrehamnfrom-alfrom-arfrom-azpartis-a" +
+ "-hunterfrom-capebretonamiasakuchinotsuchiurakawarszawashingtondc" +
+ "lkhmelnitskiyamasfjordenfrom-collectionfrom-ctransportransurlfro" +
+ "m-dchitosetogitsuldalucernefrom-dell-ogliastrakhanawafrom-flande" +
+ "rsevastopolefrom-gafrom-higashiagatsumagoirminamiiselectrapaniim" +
+ "imatakatoris-a-knightpointtokamachippubetsubetsugaruslivinghisto" +
+ "ryfrom-iafrom-idfrom-ilfrom-incheonfrom-ksevenassisicilyfrom-kyo" +
+ "wariasahikawafrom-lancashireggio-calabriafrom-manxn--1qqw23afrom" +
+ "-mdfrom-meguromskoguchikuzenfrom-microsoftbankhmelnytskyivallee-" +
+ "aosteroyfrom-mnfrom-mochizukirovogradoyfrom-msewilliamhillfrom-m" +
+ "tnfrom-nchloefrom-ndfrom-nefrom-nhktravelchannelfrom-njcpartners" +
+ "franziskanerdpolicefrom-nminamiizukamitondabayashiogamagoriziafr" +
+ "om-nvalleeaosteigenfrom-nyfrom-ohkurafrom-oketohmaorivnefrom-orf" +
+ "rom-paderbornfrom-pratohnoshoooshikamaishimofusartshangrilangeva" +
+ "grarboretumbriafrom-ris-a-landscaperugiafrom-schoenbrunnfrom-sdf" +
"rom-tnfrom-txn--2m4a15efrom-utazuerichardlillehammerfest-mon-blo" +
"gueurovisionfrom-vaksdalfrom-vtravelersinsurancefrom-wafrom-wiel" +
- "unnerfrom-wvanylvenicefrom-wyfrosinonefrostalbanshangrilangevagr" +
- "arboretumbriamallamagentositelefonicaaarborteaches-yogasawaracin" +
- "groks-theatreefroyahabaghdadultrdfstavropolitiendafujiiderafujik" +
- "awaguchikonefujiminohtawaramotoineppugliafujinomiyadafujiokayama" +
- "oris-a-landscaperugiafujisatoshonairportland-4-salernogatagajobo" +
- "jis-a-lawyerfujisawafujishiroishidakabiratoridellogliastraderfuj" +
- "itsurugashimamateramodalenfujixeroxn--30rr7yfujiyoshidafukayabea" +
- "rdubaiduckdnsdojoburgfukuchiyamadafukudominichocolatelevisioniss" +
- "andnessjoenissayokoshibahikariwanumataketomisatomobellevuelosang" +
- "elesjaguarchitecturealtychyattorneyagawalbrzycharternopilawalesu" +
- "ndyndns-weberlincolnissedaluxuryfukuis-a-liberalfukumitsubishiga" +
- "kiryuohadselfipartnersharis-a-libertarianfukuokazakisarazurewebs" +
- "iteshikagamiishibukawafukuroishikarikaturindalfukusakishiwadafuk" +
- "uyamagatakahatakaishimoichinosekigaharafunabashiriuchinadafunaga" +
- "takamatsukawafunahashikamiamakusatsumasendaisennangonohejis-a-li" +
- "nux-useranishiaritabashikaoizumizakitaurayasudafundaciofuoiskuju" +
- "kuriyamarburgfuosskoczowindowsharpartshawaiijimarumorimachidafur" +
- "nitureggio-emilia-romagnakanojohanamakinoharafurubiraquarellebes" +
- "byglandfurudonostiafurukawairtelecityeatshellaspeziafusodegauraf" +
- "ussaintlouis-a-anarchistoireggiocalabriafutabayamaguchinomigawaf" +
- "utboldlygoingnowhere-for-moregontrailroadfuttsurugiminamimakis-a" +
- "-llamarylhurstcgroupartyfvgfyis-a-musicianfylkesbiblackfridayfyr" +
- "esdalhannovareserveblogspotrentino-a-adigehanyuzenhapmirhareidsb" +
- "ergenharstadharvestcelebrationhasamarahasaminami-alpssells-itren" +
- "tino-aadigehashbanghasudahasura-appasadenaklodzkodairahasviklabu" +
- "dhabikinokawabarthagakhanamigawahatogayahoohatoyamazakitahatakan" +
- "ezawahatsukaichikaiseis-a-painteractivegarsheis-a-patsfanhattfje" +
- "lldalhayashimamotobuildinghazuminobusellsyourhomeipassagenshimon" +
- "itayanagitlaborhboehringerikehelsinkitahiroshimarriottrentino-al" +
- "to-adigehembygdsforbundhemneshimonosekikawahemsedalhepforgeherok" +
- "ussldheroyhgtvarggatrentino-altoadigehigashichichibungotakadatin" +
- "ghigashihiroshimanehigashiizumozakitakamiizumisanofidelitysvardo" +
- "llshimosuwalkis-a-personaltrainerhigashikagawahigashikagurasoeda" +
- "higashikawakitaaikitakatakaokamikoaniikappulawyhigashikurumeiwam" +
- "arshallstatebankmpspbamblebtimnetz-2higashimatsushimarinehigashi" +
- "matsuyamakitaakitadaitoigawahigashimurayamalatvuopmidoris-a-phot" +
- "ographerokuappassenger-associationhigashinarusembokukitakyushuai" +
- "ahigashinehigashiomihachimanchesterhigashiosakasayamamotorcycles" +
- "himotsukehigashishirakawamatakarazukamiminershimotsumahigashisum" +
- "iyoshikawaminamiaikitamidsundhigashitsunotteroyhigashiurausukita" +
- "motosumitakaginankokubunjis-a-playerhigashiyamatokoriyamanakakog" +
- "awahigashiyodogawahigashiyoshinogaris-a-republicancerresearchaeo" +
- "logicaliforniahiraizumisatohobby-sitehirakatashinagawahiranairtr" +
- "affichonanbugattipschmidtre-gauldalvivano-frankivskazimierz-doln" +
- "yhirarahiratsukagawahirayaitakasagooglecodespotrentino-s-tirolla" +
- "grigentomologyhistorichouseshinichinanhitachiomiyaginowaniihamat" +
- "amakawajimarcheapaviancarbonia-iglesias-carboniaiglesiascarbonia" +
- "hitachiotagopocznosegawahitoyoshimifunehitradinghjartdalhjelmela" +
- "ndholeckobierzyceholidayhomelinuxn--32vp30hagebostadhomesecurity" +
- "maceratakasakitanakagusukumoduminamiogunicomcastresistancehomese" +
- "curitypccwinnershinjournalismailillesandefjordhomesenseminehomeu" +
- "nixn--3bst00minamisanrikubetsupplieshinjukumanohondahonefosshink" +
- "amigotoyohashimototalhoneywellhongorgehonjyoitakashimarugame-hos" +
- "tinghornindalhorseoulminamitanehortendofinternetrentino-stirolho" +
- "teleshinshinotsurgeonshalloffamemergencyberlevagangaviikanonjis-" +
- "a-rockstarachowicehotmailhoyangerhoylandetroitskmshinshirohumani" +
- "tieshintokushimahurdalhurumajis-a-socialistmeindianapolis-a-blog" +
- "gerhyllestadhyogoris-a-soxfanhyugawarahyundaiwafunehzchoseiroute" +
- "rjgorajlchoyodobashichikashukujitawarajlljmpgfoggiajnjelenia-gor" +
- "ajoyokaichibahcavuotnagaraumakeupowiathletajimabariakepnord-fron" +
- "tierjpmorganjpnchristmasakikugawatchesaskatchewanggouvicenzajprs" +
- "hirahamatonbetsurgeryjuniperjurkristiansundkrodsheradkrokstadelv" +
- "aldaostarnbergkryminamiyamashirokawanabelgorodeokumatorinokumeji" +
- "massa-carrara-massacarraramassabunkyonanaoshimageandsoundandvisi" +
- "onkumenanyokkaichirurgiens-dentistes-en-francekunisakis-an-anarc" +
- "historicalsocietyumenkunitachiarailwaykunitomigusukumamotoyamaso" +
- "ykunneppupharmacyshiraois-an-artisteinkjerusalembroiderykunstsam" +
- "mlungkunstunddesignkuokgrouphiladelphiaareadmyblogsitekureisenku" +
- "rgankurobelaudibleborkdalvdalaskanittedallasalleasingleshiraokan" +
- "makiwakunigamihamadakurogimilitarykuroisoftwarendalenugkuromatsu" +
- "nais-an-engineeringkurotakikawasakis-an-entertainerkurskomitamam" +
- "urakushirogawakustanais-bykusupersportrentino-suedtirolkutchanel" +
- "kutnokuzbassnillfjordkuzumakis-certifiedogawarabikomaezakirunort" +
- "hwesternmutualkvafjordkvalsundkvamfamberkeleykvanangenkvinesdalk" +
- "vinnheradkviteseidskogkvitsoykwpspjelkavikommunalforbundkyowaria" +
- "sahikawamitourismolanciamitoyoakemiuramiyazumiyotamanomjondalenm" +
- "lbfanmonmouthaibarakisosakitagawamonstermonticellombardiamondshi" +
- "ratakahagivestbytomaritimekeepingmontrealestatefarmequipmentrent" +
- "inoa-adigemonza-brianzaporizhzheguris-into-animelbournemonza-e-d" +
- "ella-brianzaporizhzhiamonzabrianzapposhishikuis-into-carshiojiri" +
- "shirifujiedamonzaebrianzaptokuyamatsunomonzaedellabrianzaramopar" +
- "achutingmordoviajessheiminanomoriyamatsusakahoginozawaonsenmoriy" +
- "oshiokamitsuemormoneymoroyamatsushigemortgagemoscowioshisognemos" +
- "eushistorymosjoenmoskeneshisuifuettertdasnetzmosshitaramamosviko" +
- "monomoviemovistargardmtpchromedicaltanissettaitogliattiresassari" +
- "s-a-democratjxn--0trq7p7nniyodogawamtranakatsugawamuenstermugith" +
- "ubcloudusercontentrentinoaadigemuikamogawamukochikushinonsenergy" +
- "mulhouservebeermultichoicemunakatanemuncieszynmuosattemuphilatel" +
- "ymurmanskomorotsukamisunagawamurotorcraftrentinoalto-adigemusash" +
- "imurayamatsuuramusashinoharamuseetrentinoaltoadigemuseumverenigi" +
- "ngmutsuzawamutuellevangermydissentrentinos-tirolmydrobofagemydsh" +
- "izukuishimogosenmyeffectrentinostirolmyfritzmyftphilipsymykolaiv" +
- "aroymymediapchryslermyokohamamatsudamypepsonyoursidedyn-o-saurec" +
- "ipesaro-urbino-pesarourbinopesaromalvikomvuxn--3ds443gmypetshizu" +
- "okannamiharumyphotoshibahccavuotnagareyamalopolskanlandmypsxn--3" +
- "e0b707emysecuritycamerakermyshopblockshoujis-into-cartoonshioyam" +
- "emorialmytis-a-bookkeepermincommbankommunemyvnchungbukazopicture" +
- "showapiemontepilotshowtimeteorapphotographysiopimientakinouepink" +
- "ongsbergpioneerpippupiszpittsburghofauskedsmokorsetagayasells-fo" +
- "r-unzenpiwatepizzapkongsvingerplanetariuminnesotaketakayamatsuma" +
- "ebashimodateplantationplantshriramlidlugolekagoshimaintenancepla" +
- "tformintelligenceplaystationplazaplchungnamdalseidfjordyndns-wik" +
- "inderoyplombardyndns-blogdnsiskinkyknethnologyplumbingovtrentino" +
- "sudtirolplusterpmnpodzonepohlpointtomskoninjamisonpoivronpokerpo" +
- "krovskonskowolayangroupharmacienshirakofuelpolkowicepoltavalle-a" +
- "ostarostwodzislawitdkonsulatrobeepilepsydneypomorzeszowithgoogle" +
- "apisa-hockeynutrentinosued-tirolpordenonepornporsangerporsanguid" +
- "eltajirikuzentakatakahamamurogawaporsgrunnanpoznanpraxis-a-bruin" +
- "sfanprdpreservationpresidioprgmrprimelhusgardenprincipeprivatize" +
- "healthinsuranceprochowiceproductionsienaplesigdalprofbsbxn--1lqs" +
- "03nprogressivegaskimitsubatamicadaquesilkonyvelolprojectrentinos" +
- "uedtirolpromombetsupportrentoyonakagyokutoyakokamishihoronobeoka" +
- "minoyamatsuris-into-gamessinashikitchenpropertyprotectionprudent" +
- "ialpruszkowithyoutubeneventodayprzeworskogptzpvtrevisohughesimbi" +
- "rskooris-a-therapistoiapwchurchaseljeffersonrwhoswhokksundyndns-" +
- "workisboringruepzqldqponqslgbtroandinosaurlandesimple-urlquicksy" +
- "tesirdalqvchuvashiasrlsrtromsakatakkoelnsrvbarcelonagasukeu-2sto" +
- "ragestordalstorenburgstorfjordstpetersburgstreamsterdamnserverba" +
- "niastudiostudyndns-homeftpaccesslupskopervikomatsushimashikestuf" +
- "f-4-salestufftoread-booksnesmolenskoryolasitestuttgartromsojaval" +
- "d-aostaplesnoasaitoshimasurnadalsurreysusakis-lostre-toteneis-a-" +
- "teacherkassymantechnologysusonosuzakanrasuzukanumazurysuzukis-no" +
- "t-certifieducatorahimeshimakanegasakindleikangersvalbardudinkaku" +
- "damatsuesveiosvelvikosakaerodromegalsacechirealminamiuonumasudas" +
- "vizzeraswedenswidnicargodaddyndns-at-homednshomebuiltrusteeswieb" +
- "odzindianmarketingswiftcoveronaritakurashikis-savedunetbankokono" +
- "eswinoujscienceandhistoryswisshikis-slickolobrzegersundtuxfamily" +
- "vestnesolognevestre-slidreamhostersolundbeckosaigawavestre-toten" +
- "nishiawakuravestvagoyvevelstadvibo-valentiavibovalentiavideovill" +
- "askoyabearalvahkihokumakogengerdalipayufuchukotkagaminogiesseneb" +
- "akkeshibechambagriculturennebudapest-a-la-masionthewifiat-band-c" +
- "ampaniavinnicarriervinnytsiavipsinaappiagetmyiphoenixn--3oq18vl8" +
- "pn36avirginiavirtualvirtueeldomeindustriesteambulancevirtuelvisa" +
- "kegawavistaprinternationalfirearmsolutionslingviterboltrvdonskos" +
- "eis-an-accountantshintomikasaharavivoldavladikavkazanvladimirvla" +
- "divostokaizukarasuyamazoevlogoipictetrentinosud-tirolvolkenkunde" +
- "rseaportrysiljan-mayenvolkswagentsomavologdanskoshimizumakiyosum" +
- "ycdn77-securechtrainingvolvolgogradvolyngdalvoronezhytomyrvossev" +
- "angenvotevotingvotoyonezawavrnworse-thangglidingwowiwatsukiyonow" +
- "tvenneslaskerrylogisticsokndalwritesthisblogsytewroclawloclaweko" +
- "shunantokigawawtcircus-2wtfbx-oslodingenwuozuwwworldwzmiuwajimax" +
- "n--4gq48lf9jeonnamerikawauexn--4it168dxn--4it797kosugexn--4pvxso" +
- "mnarashinoxn--54b7fta0ccivilaviationxn--55qw42gxn--55qx5dxn--5js" +
- "045dxn--5rtp49civilisationxn--5rtq34kotohiradomainsurehabmerxn--" +
- "5su34j936bgsgxn--5tzm5gxn--6btw5axn--6frz82gxn--6orx2rxn--6qq986" +
- "b3xlxn--7t0a264civilizationxn--80adxhksooxn--80ao21axn--80aqecdr" +
- "1axn--80asehdbarclaycardstvedestrandishakotankarumaifarmerseinew" +
- "yorkshirecreationatuurwetenschappenaumburgliwicevents3-us-west-1" +
- "xn--80aswgxn--80audnedalnxn--8ltr62kotouraxn--8pvr4uxn--8y0a063a" +
- "xn--90a3academyactivedirectoryazannakadomari-elasticbeanstalkouh" +
- "okutamakizunokunimilanoxn--90aishobaraomoriguchiharahkkeravjudyg" +
- "arlandxn--90azhair-surveillancexn--9dbhblg6dietcimmobilienxn--9d" +
- "bq2axn--9et52uxn--9krt00axn--andy-iraxn--aroport-byanagawaxn--as" +
- "ky-iraxn--aurskog-hland-jnbarclays3-us-west-2xn--avery-yuasakuho" +
- "kkaidontexisteingeekounosunndalxn--b-5gaxn--b4w605ferdxn--bck1b9" +
- "a5dre4civilwarmanagementkmaxxn--1ck2e1balsanagochihayaakasakawah" +
- "aravennagasakijobserverdalimoliserniaukraanghkebinorilskariyakum" +
- "oldev-myqnapcloudcontrolappagefrontappagespeedmobilizerobihirosa" +
- "kikamijimatteledatabaseballooningjesdalavangenativeamericanantiq" +
- "ues3-eu-central-1xn--bdddj-mrabdxn--bearalvhki-y4axn--berlevg-jx" +
- "axn--bhcavuotna-s4axn--bhccavuotna-k7axn--bidr-5nachikatsuuraxn-" +
- "-bievt-0qa2xn--bjarky-fyanaizuxn--bjddar-ptamboversaillesolarsso" +
- "nxn--blt-elabourxn--bmlo-graingerxn--bod-2naroyxn--brnny-wuaccid" +
- "ent-investigationjukudoyamagadancebetsukubabia-goracleaningatlan" +
- "tabusebastopologyeonggiehtavuoatnadexeterimo-i-ranagahamaroygard" +
- "endoftheinternetflixilovecollegefantasyleaguernseyxn--brnnysund-" +
- "m8accident-preventionlineat-urlxn--brum-voagatulansnzxn--btsfjor" +
- "d-9zaxn--c1avgxn--c2br7gxn--c3s14misasaguris-gonexn--cck2b3baref" +
- "ootballangenoamishirasatochigiftsakuraibestadiskstationaustdalin" +
- "desnesakyotanabellunordkappgafanpachigasakidsmynasperschlesische" +
- "salangenaval-d-aosta-valleyonagoyaustinnaturalhistorymuseumcente" +
- "repbodyndns-freebox-oskolegokasells-for-less3-eu-west-1xn--cg4bk" +
- "is-uberleetrentino-sudtirolxn--ciqpnxn--clchc0ea0b2g2a9gcdn77-ss" +
- "lattumisawaxn--comunicaes-v6a2oxn--correios-e-telecomunicaes-ghc" +
- "29axn--czr694bargainstitutelekommunikationavigationavuotnakayama" +
- "tsuzakibigawaustraliaisondriodejaneirochestereportargets-itargiv" +
- "ingjovikarlsoyokosukareliancebizenakamuratakaharuconnectarnobrze" +
- "gyptianaturalsciencesnaturelles3-external-1xn--czrs0tunesokanoya" +
- "kagexn--czru2dxn--czrw28barreauctionayoroceanographicsalondonets" +
- "kasaokamisatokamachippubetsubetsugarufcfanflfanfshostrodawaraust" +
- "rheimatunduhrennesoyokotehimeji234xn--d1acj3barrel-of-knowledgeo" +
- "logyonaguniversityoriikashibatakasugaibmditchyouripalaceverbanka" +
- "shiharauthordalandroidigitalillyokozemersongdalenviknakaniikawat" +
- "anaguramusementarantours3-ap-northeast-2xn--d1alfaromeoxn--d1atu" +
- "nkosherbrookegawaxn--d5qv7z876claimsauheradynv6xn--davvenjrga-y4" +
- "axn--djrs72d6uyxn--djty4kouyamashikis-an-actorxn--dnna-grajewolt" +
- "erskluwerxn--drbak-wuaxn--dyry-iraxn--e1a4clickddielddanuorrissa" +
- "gamiharaxn--eckvdtc9dxn--efvn9sopotrogstadxn--efvy88hakatanotoga" +
- "waxn--ehqz56nxn--elqq16hakodatexn--estv75gxn--eveni-0qa01gaxn--f" +
- "6qx53axn--fct429kouzushimashikokuchuoxn--fhbeiarnxn--finny-yuaxn" +
- "--fiq228c5hsor-odalxn--fiq64barrell-of-knowledgeometre-experts-c" +
- "omptablesaltdalinkashiwarautomotivecodynaliascoli-picenoipiranga" +
- "mvikarmoyomitanobninskarpaczeladz-1xn--fiqs8sor-varangerxn--fiqz" +
- "9sorfoldxn--fjord-lraxn--fjq720axn--fl-ziaxn--flor-jraxn--flw351" +
- "exn--fpcrj9c3dxn--frde-grandrapidsorreisahayakawakamiichikawamis" +
- "atottoris-leetrentino-sud-tirolxn--frna-woaraisaijosoyrovigorlic" +
- "exn--frya-hraxn--fzc2c9e2clinichelyabinskydivingroundhandlingroz" +
- "nyxn--fzys8d69uvgmailxn--g2xx48cliniquenoharaxn--gckr3f0fbxostro" +
- "lekaluganskharkovalledaostavernxn--gecrj9clintonoshoesavannahgax" +
- "n--ggaviika-8ya47hakonexn--gildeskl-g0axn--givuotna-8yandexn--3p" +
- "xu8kostromahachijorpelandxn--gjvik-wuaxn--gk3at1exn--gls-elacaix" +
- "axn--gmq050is-very-badaddjamalborkangerxn--gmqw5axn--h-2failxn--" +
- "h1aeghakubankhvaolbia-tempio-olbiatempioolbialystokkemerovodkaka" +
- "migaharagusaarlandxn--h2brj9clothingujolsterxn--hbmer-xqaxn--hce" +
- "suolo-7ya35bashkiriautoscanadaejeonbukaruizawasnesoddenmarkhange" +
- "lskjervoyagemologicallyngenglandds3-ap-southeast-1xn--hery-iraxn" +
- "--hgebostad-g3axn--hmmrfeasta-s4accturystykarasjohkamiokaminokaw" +
- "anishiaizubangexn--hnefoss-q1axn--hobl-iraxn--holtlen-hxaxn--hpm" +
- "ir-xqaxn--hxt814exn--hyanger-q1axn--hylandet-54axn--i1b6b1a6a2ex" +
- "n--imr513nxn--indery-fyaotsurgutsiracusakakinokiaxn--io0a7is-ver" +
- "y-evillagexn--j1aefermobilyxn--j1amhakuis-a-nascarfanxn--j6w193g" +
- "xn--jlq61u9w7basilicataniaveroykeniwaizumiotsukumiyamazonawsabae" +
- "robaticketsaritsynologyeongnamegawakeisenbahnaturbruksgymnaturhi" +
- "storisches3-external-2xn--jlster-byaroslavlaanderenxn--jrpeland-" +
- "54axn--jvr189misconfusedxn--k7yn95exn--karmy-yuaxn--kbrq7oxn--kc" +
- "rx77d1x4axn--kfjord-iuaxn--klbu-woaxn--klt787dxn--kltp7dxn--kltx" +
- "9axn--klty5xn--42c2d9axn--koluokta-7ya57hakusandiegoodyearthaeba" +
- "ruminamiminowaxn--kprw13dxn--kpry57dxn--kpu716ferraraxn--kput3is" +
- "-very-goodhandsonxn--krager-gyasakaiminatoyonoxn--kranghke-b0axn" +
- "--krdsherad-m8axn--krehamn-dxaxn--krjohka-hwab49jetztrentino-sue" +
- "d-tirolxn--ksnes-uuaxn--kvfjord-nxaxn--kvitsy-fyasugis-very-nice" +
- "xn--kvnangen-k0axn--l-1fairwindsortlandxn--l1accentureklamborghi" +
- "niizaxn--laheadju-7yasuokaratexn--langevg-jxaxn--lcvr32dxn--ldin" +
- "gen-q1axn--leagaviika-52basketballfinanzgoravocatanzarowebhoppda" +
- "limanowarudastronomyasustor-elvdalpha-myqnapcloudappspotagerepai" +
- "rbusantiquest-a-la-maisondre-landebusinessebyklefrakkestadgcanon" +
- "oichinomiyakebinagisochildrensgardenasushiobaraeroportalabamagas" +
- "akishimabarackmaze12xn--lesund-huaxn--lgbbat1ad8jevnakershuscult" +
- "ureggioemiliaromagnakasatsunais-a-techietis-a-studentalxn--lgrd-" +
- "poacoachampionshiphoptobamagazinebraskaunjargallupinbatochiokino" +
- "shimalselvendrellinzaiinetarumizusawavoues3-fips-us-gov-west-1xn" +
- "--lhppi-xqaxn--linds-pramericanartuscanyxn--lns-qlanxessorumisak" +
- "is-foundationxn--loabt-0qaxn--lrdal-sraxn--lrenskog-54axn--lt-li" +
- "acntmpanasonichernigovernmentjometlifeinsurancexn--lten-granexn-" +
- "-lury-iraxn--mely-iraxn--merker-kuaxn--mgb2ddesouthcarolinazawax" +
- "n--mgb9awbferrarittogoldpoint2thisayamanashiibadajozoraholtalenv" +
- "ironmentalconservationxn--mgba3a3ejtushuissier-justicexn--mgba3a" +
- "4f16axn--mgba3a4franamizuholdingsmileksvikozagawaxn--mgba7c0bbn0" +
- "axn--mgbaakc7dvferreroticapebretonamiasakuchinotsuchiurakawassam" +
- "ukawataricohdatsunanjoetsuwanouchikujogaszkoladbrokescrapper-sit" +
- "exn--mgbaam7a8haldenxn--mgbab2bdxn--mgbai9a5eva00batsfjordivtasv" +
- "uodnaharimaniwakuratexascolipicenord-aurdalcesalvadordalibabaika" +
- "liszczytnord-odalipetskashiwazakiyokawaraxaugustowadaegubs3-ap-s" +
- "outheast-2xn--mgbai9azgqp6jewelryxn--mgbayh7gpaduaxn--mgbb9fbpob" +
- "anazawaxn--mgbbh1a71exn--mgbc0a9azcgxn--mgbca7dzdoxn--mgberp4a5d" +
- "4a87gxn--mgberp4a5d4arxn--mgbi4ecexposedxn--mgbpl2fhskozakis-an-" +
- "actresshinyoshitomiokaneyamaxunusualpersonxn--mgbqly7c0a67fbcolo" +
- "nialwilliamsburgulenxn--mgbqly7cvafredrikstadtvsouthwestfalenxn-" +
- "-mgbt3dhdxn--mgbtf8flatangerxn--mgbtx2bauhausposts-and-telecommu" +
- "nicationsnasadodgeorgeorgiaxn--mgbx4cd0abbottuvalle-daostaticirc" +
- "legnicagliaridagawarszawashingtondclkazunoxn--mix082fetsundxn--m" +
- "ix891fgushikamifuranoshiroomuraxn--mjndalen-64axn--mk0axinfiniti" +
- "s-very-sweetpepperxn--mk1bu44coloradoplateaudioxn--mkru45is-with" +
- "-thebandoomdnsaliasdaburyatiaarpfizerxn--mlatvuopmi-s4axn--mli-t" +
- "lapyatigorskpnxn--mlselv-iuaxn--moreke-juaxn--mori-qsakuragawaxn" +
- "--mosjen-eyatominamiawajikisleofmandalxn--mot-tlaquilancasterxn-" +
- "-mre-og-romsdal-qqbbcartoonartdecoffeedbackplaneappalanakhodkana" +
- "gawaxn--msy-ula0halsaitamatsukuris-a-nurservebbshimokawaxn--mtta" +
- "-vrjjat-k7afamilycompanycolumbusheyxn--muost-0qaxn--mxtq1mishima" +
- "tsumotofukexn--ngbc5azdxn--ngbe9e0axn--ngbrxn--45brj9citadeliver" +
- "yggeelvinckchristiansburguitarsatxn--11b4c3dynnsaudaxn--nit225kp" +
- "pspiegelxn--nmesjevuemie-tcbajddarchaeologyxn--nnx388axn--nodexn" +
- "--nqv7fs00emaxn--nry-yla5gxn--ntso0iqx3axn--ntsq17gxn--nttery-by" +
- "aeservecounterstrikexn--nvuotna-hwaxn--nyqy26axn--o1achattanooga" +
- "norfolkebiblegallocus-1xn--o3cw4hammarfeastafricamagichofunatori" +
- "entexpressaseboknowsitalluzernisshingugexn--od0algxn--od0aq3bbta" +
- "tamotorsalzburglobalashovhachinohedmarkasukabedzin-the-bandaioir" +
- "aseeklogesuranceoceanographiquevje-og-hornnesamegawaxn--ogbpf8fl" +
- "ekkefjordxn--oppegrd-ixaxn--ostery-fyatsukaratsuginamikatagamiho" +
- "boleslawiecommunitysfjordyroyrvikingunmarnardalxn--osyro-wuaxn--" +
- "p1acfhvalerxn--p1aissmarterthanyoustkarasjokomaganexn--pbt977com" +
- "obaraxn--pgbs0dhlxn--porsgu-sta26fidonnakamagayachtscrappingxn--" +
- "1lqs71dxn--pssu33lxn--pssy2uxn--q9jyb4comparemarkerryhotelsaves-" +
- "the-whalessandria-trani-barletta-andriatranibarlettaandriaxn--qc" +
- "ka1pmcdonaldsowaxn--qqqt11missilelxn--qxamurskiptveterinairealto" +
- "rlandxn--rady-iraxn--rdal-poaxn--rde-ularvikrasnodarxn--rdy-0nab" +
- "ariwchoshibuyachiyodavvesiidazaifuefukihaborokunohealth-carerefo" +
- "rmitakeharaxn--rennesy-v1axn--rhkkervju-01aflakstadaokagakibichu" +
- "oxn--rholt-mragowoodsidexn--rhqv96gxn--rht27zxn--rht3dxn--rht61e" +
- "xn--risa-5narusawaxn--risr-iraxn--rland-uuaxn--rlingen-mxaxn--rm" +
- "skog-byatsushiroxn--rny31hamurakamigoriginshimokitayamaxn--rovu8" +
- "8bbvacationsupdatelemarkasumigaurawa-mazowszexboxenapponazure-mo" +
- "bilexn--rros-granvindafjordxn--rskog-uuaxn--rst-0narutokyotangot" +
- "pantheonsitextileitungsenxn--rsta-francaiseharaxn--ryken-vuaxn--" +
- "ryrvik-byawaraxn--s-1faitheguardianxn--s9brj9compute-1xn--sandne" +
- "ssjen-ogbizhevskrasnoyarskomforbananarepublicartierhcloudfunctio" +
- "ns3-us-gov-west-1xn--sandy-yuaxn--seral-lraxn--ses554gxn--sgne-g" +
- "ratangenxn--skierv-utazaskvolloabathsbcomputerhistoryofscience-f" +
- "ictionxn--skjervy-v1axn--skjk-soaxn--sknit-yqaxn--sknland-fxaxn-" +
- "-slat-5narviikananporovnoxn--slt-elabbvieeexn--smla-hraxn--smna-" +
- "gratis-a-bulls-fanxn--snase-nraxn--sndre-land-0cbremangerxn--sne" +
- "s-poaxn--snsa-roaxn--sr-aurdal-l8axn--sr-fron-q1axn--sr-odal-q1a" +
- "xn--sr-varanger-ggbentleyukuhashimojiitatebayashijonawatexn--srf" +
- "old-byawatahamaxn--srreisa-q1axn--srum-grazxn--stfold-9xaxn--stj" +
- "rdal-s1axn--stjrdalshalsen-sqbeppubolognagatorockartuzyurihonjou" +
- "rnalistjohnhlfanhsamnangerxn--stre-toten-zcbspreadbettingxn--t60" +
- "b56axn--tckweatherchannelxn--tiq49xqyjewishartgalleryxn--tjme-hr" +
- "axn--tn0agrinet-freakspydebergxn--tnsberg-q1axn--tor131oxn--tran" +
- "y-yuaxn--trgstad-r1axn--trna-woaxn--troms-zuaxn--tysvr-vraxn--uc" +
- "0atversicherungxn--uc0ay4axn--uist22hangoutsystemscloudfrontdoor" +
- "xn--uisz3gxn--unjrga-rtaobaokinawashirosatobishimaizurubtsovskja" +
- "kdnepropetrovskiervaapsteiermarkredirectmeldalxn--unup4yxn--uuwu" +
- "58axn--vads-jraxn--vard-jraxn--vegrshei-c0axn--vermgensberater-c" +
- "tberndivttasvuotnakaiwamizawaxn--vermgensberatung-pwbeskidynatho" +
- "medepotenzachpomorskienikiiyamanobeauxartsandcraftsamsclubindali" +
- "vornoddaxn--vestvgy-ixa6oxn--vg-yiabcn-north-1xn--vgan-qoaxn--vg" +
- "sy-qoa0jfkomakiyosatokashikiyosemitexn--vgu402comsecuritytactics" +
- "avonamsskoganeis-a-designerimarylandxn--vhquvestfoldxn--vler-qoa" +
- "xn--vre-eiker-k8axn--vrggt-xqadxn--vry-yla5gxn--vuq861bestbuysho" +
- "usesamsunglobodoes-itverranzanquannefrankfurtatarstanikkoebenhav" +
- "nikolaevennodessaikinkobayashikshacknetnedalomzansimagicasadelam" +
- "onedavvenjargaulardalorenskoglogowegroweibolzanordre-landiyusuha" +
- "raxn--w4r85el8fhu5dnraxn--w4rs40lxn--wcvs22dxn--wgbh1condoshichi" +
- "nohealthcareersaxoxn--wgbl6axn--xhq521betainaboxfusejnynysagaero" +
- "clubmedecincinnationwidealerxn--xkc2al3hye2axn--xkc2dl3a5ee0hann" +
- "anmokuizumodernxn--y9a3aquariumisugitokorozawaxn--yer-znarvikris" +
- "tiansandcatshiranukaniepcexn--yfro4i67oxn--ygarden-p1axn--ygbi2a" +
- "mmxn--45q11citicatholicheltenham-radio-openair-traffic-controlle" +
- "yxn--ystre-slidre-ujbieidsvollotenkawaxn--zbx025dxn--zf0ao64axn-" +
- "-zf0avxn--4gbriminingxn--zfr164bielawallonieruchomoscienceandind" +
- "ustrynikonantanangerxperiaxz"
+ "unnerfrom-wvanylvenicefrom-wyfrosinonefrostalbansharis-a-lawyerf" +
+ "royahabadajozoraholtalenvironmentalconservationfstavropolitienda" +
+ "fujiiderafujikawaguchikonefujiminohtawaramotoineppubolognakaniik" +
+ "awatanagurafujinomiyadafujiokayamapartsharpartyfujisatoshonairpo" +
+ "rtland-4-salernogatagajobojis-a-liberalfujisawafujishiroishidaka" +
+ "biratoridellogliastraderfujitsurugashimamateramodalenfujixeroxn-" +
+ "-30rr7yfujiyoshidafukayabeardubaiduckdnshomebuiltrdfukuchiyamada" +
+ "fukudominichocolatemasekazofukuis-a-libertarianfukumitsubishigak" +
+ "iryuohadanoshiroomurafukuokazakisarazurewebsiteshikagamiishibuka" +
+ "wafukuroishikarikaturindalfukusakishiwadafukuyamagatakahashimama" +
+ "kisofukushimarburgfunabashiriuchinadafunagatakahatakaishimoichin" +
+ "osekigaharafunahashikamiamakusatsumasendaisennangonohejis-a-linu" +
+ "x-useranishiaritabashikaoizumizakitchenfundaciofuoiskujukuriyama" +
+ "rcheapasadenaklodzkodairafuosskoczowinbaltimore-og-romsdalimited" +
+ "iscoveryonaguniversityoriikashibatakashimarylhurstjohnaval-d-aos" +
+ "ta-valleyukibestadishakotankashiharaukraanghkepnord-frontierepai" +
+ "rbusantiquest-a-la-maisondre-landebusinessebyklefrakkestadds3-ap" +
+ "-southeast-2furnitureggio-emilia-romagnakanojohanamakinoharafuru" +
+ "biraquarellebesbyglandfurudonostiafurukawairtelecityeatshawaiiji" +
+ "marugame-hostingfusodegaurafussaintlouis-a-anarchistoireggiocala" +
+ "briafutabayamaguchinomigawafutboldlygoingnowhere-for-moregontrai" +
+ "lroadfuttsurugiminamimakis-a-llamarylandfuturemailingfvgfyis-a-m" +
+ "usicianfylkesbiblackfridayfyresdalhannanmokuizumodernhannovarese" +
+ "rveblogspotrentino-a-adigehanyuzenhapmirhareidsbergenharstadharv" +
+ "estcelebrationhasamarahasaminami-alpssells-itrentino-aadigehashb" +
+ "anghasudahasura-appassenger-associationhasviklabudhabikinokawaba" +
+ "rthaebaruminamiminowahatogayahoohatoyamazakitahiroshimarriottren" +
+ "tino-alto-adigehatsukaichikaiseis-a-painteractivegarsheis-a-pats" +
+ "fanhattfjelldalhayashimamotobuildinghazuminobusellsyourhomeipavi" +
+ "ancargodaddyndns-at-homednshimonosekikawahboehringerikehelsinkit" +
+ "akamiizumisanofidelitysvardollshimosuwalkis-a-personaltrainerhem" +
+ "bygdsforbundhemneshimotsukehemsedalhepforgeherokussldheroyhgtvsh" +
+ "imotsumahigashichichibungotakadatinghigashihiroshimanehigashiizu" +
+ "mozakitakatakanezawahigashikagawahigashikagurasoedahigashikawaki" +
+ "taaikitakyushuaiahigashikurumeiwamarshallstatebankmpspbamblebtim" +
+ "netz-2higashimatsushimarinehigashimatsuyamakitaakitadaitoigawahi" +
+ "gashimurayamalatvuopmidoris-a-photographerokuappfizerhigashinaru" +
+ "sembokukitamidsundhigashinehigashiomihachimanchesterhigashiosaka" +
+ "sayamamotorcycleshinichinanhigashishirakawamatakaokamikoaniikapp" +
+ "ugliahigashisumiyoshikawaminamiaikitamotosumitakaginankokubunjis" +
+ "-a-playerhigashitsunotogawahigashiurausukitanakagusukumoduminami" +
+ "ogunicomcastresistancehigashiyamatokoriyamanakakogawahigashiyodo" +
+ "gawahigashiyoshinogaris-a-republicancerresearchaeologicalifornia" +
+ "hiraizumisatohobby-sitehirakatashinagawahiranairtraffichofunator" +
+ "ientexpressatxn--1ck2e1balsanagochihayaakasakawaharavennagasakik" +
+ "onaikawachinaganoharamcoalaheadjudaicaaarborteaches-yogasawaraci" +
+ "ngroks-theatreemersongdalenviknakamuratakahamannortonsbergladelm" +
+ "enhorstackspacekitagataiwanairguardigitalimanowarudaugustowadaeg" +
+ "ubs3-ap-southeast-1hirarahiratsukagawahirayaitakarazukamiminersh" +
+ "injournalismailillesandefjordhistorichouseshinjukumanohitachiomi" +
+ "yaginowaniihamatamakawajimaritimodellinghitachiotagooglecodespot" +
+ "rentino-altoadigehitoyoshimifunehitradinghjartdalhjelmelandholec" +
+ "kobierzyceholidayhomelinuxn--32vp30hagakhanamigawahomesecurityma" +
+ "ceratakasagoperaunitextileitungsenhomesecuritypccwindmillhomesen" +
+ "seminehomeunixn--3bst00minamisanrikubetsupplyhondahoneywellbeing" +
+ "zonehongorgehonjyoitakasakitashiobarahornindalhorseoulminamitane" +
+ "hortendofinternetrentino-s-tirollagrigentomologyhoteleshinkamigo" +
+ "toyohashimototalhotmailhoyangerhoylandetroitskokonoehumanitieshi" +
+ "nshinotsurgeryhurdalhurumajis-a-rockstarachowicehyllestadhyogori" +
+ "s-a-socialistmeindianapolis-a-bloggerhyugawarahyundaiwafunehzcho" +
+ "nanbugattipschlesischesaudajgorajlchoshibuyachiyodavvesiidazaifu" +
+ "daigodoesntexistanbullensvanguardyndns-wikindleikangerjlljmpharm" +
+ "acienshiojirishirifujiedajnjelenia-gorajoyentrentino-sued-tirolj" +
+ "oyokaichibahcavuotnagaraumalselvendrelljpmorganjpnchoyodobashich" +
+ "ikashukujitawarajprshioyamemorialjuniperjurkristiansundkrodshera" +
+ "dkrokstadelvaldaostarnbergkryminamiyamashirokawanabelgorodeokuma" +
+ "torinokumejimassa-carrara-massacarraramassabunkyonanaoshimageand" +
+ "soundandvisionkumenanyokkaichirurgiens-dentistes-en-francekunisa" +
+ "kis-an-artistcgroupgfoggiakunitachiarailwaykunitomigusukumamotoy" +
+ "amasoykunneppulawykunstsammlungkunstunddesignkuokgrouphdkureisen" +
+ "kurgankurobelaudibleborkdalkurogimilitarykuroisoftwarendalenugku" +
+ "romatsunais-an-engineeringkurotakikawasakis-an-entertainerkursko" +
+ "mmunalforbundkushirogawakustanais-bykusupplieshiranukaniepcekutc" +
+ "hanelkutnokuzbassnillfjordkuzumakis-certifiedogawarabikomaezakir" +
+ "unorthwesternmutualkvafjordkvalsundkvamfamberkeleykvanangenkvine" +
+ "sdalkvinnheradkviteseidskogkvitsoykwpspjelkavikommunemitourismol" +
+ "anciamitoyoakemiuramiyazumiyotamanomjondalenmlbfanmonmouthagebos" +
+ "tadmonstermonticellombardiamondshiraois-into-carshintomikasahara" +
+ "montrealestatefarmequipmentrentino-suedtirolmonza-brianzaporizhz" +
+ "hiamonza-e-della-brianzapposhiraokanmakiyokawaramonzabrianzaptok" +
+ "yotangotpantheonsitemonzaebrianzaramonzaedellabrianzamoparachuti" +
+ "ngmordoviajessheiminanomoriyamatsunomoriyoshiokamitsuemormoneymo" +
+ "royamatsusakahoginozawaonsenmortgagemoscowindowshiratakahagivest" +
+ "bytomaritimekeepingmoseushistorymosjoenmoskeneshishikuis-into-ca" +
+ "rtoonshinyoshitomiokaneyamaxunusualpersonmosshisognemosvikomorot" +
+ "sukamisunagawamoviemovistargardmtpchristmasakikugawatchesauherad" +
+ "yndns-workisboringrossetouchijiwadeloittevadsoccertificationissh" +
+ "ingugemtranakatsugawamuenstermugithubcloudusercontentrentinoa-ad" +
+ "igemuikamogawamukochikushinonsenergymulhouservebeermunakatanemun" +
+ "cieszynmuosattemuphiladelphiaareadmyblogsitemurmanskomvuxn--3ds4" +
+ "43gmurotorcraftrentinoaadigemusashimurayamatsushigemusashinohara" +
+ "museetrentinoalto-adigemuseumverenigingmutsuzawamutuellevangermy" +
+ "dissentrentinoaltoadigemydrobofagemydshisuifuelmyeffectrentinos-" +
+ "tirolmyfritzwinnershitaramamyftphilatelymykolaivarggatrentinosti" +
+ "rolmymediapchromedicaltanissettaishinomakimobetsuliguriamyokoham" +
+ "amatsudamypepsonyoursidedyn-o-saurecipesaro-urbino-pesarourbinop" +
+ "esaromamurogawawioshizukuishimogosenmypetshizuokannamiharumyphot" +
+ "oshibahccavuotnagareyamalvikongsbergmypsxn--3e0b707emysecurityca" +
+ "merakermyshopblockshoujis-into-gamessinashikiwakunigamihamadamyt" +
+ "is-a-bookkeepermincommbankomonomyvnchryslerpictetrentinosud-tiro" +
+ "lpictureshowtimeteorapphoenixn--3oq18vl8pn36apiemontepilotshrira" +
+ "mlidlugolekagaminogiftsienaplesigdalpimientaketomisatomskongsvin" +
+ "gerpinkoninjamisonpioneerpippuphonefosshowapiszpittsburghofastly" +
+ "piwatepizzapkonskowolayangroupharmacyshirahamatonbetsurgutsiracu" +
+ "saitoshimaplanetariuminnesotaketakatsukis-foundationplantationpl" +
+ "antsilkonsulatrobeepilepsydneyplatformintelligenceplaystationpla" +
+ "zaplchungbukazunoplombardyndns-blogdnsimbirskonyvelolplumbingopm" +
+ "npodzonepohlpoivronpokerpokrovskooris-a-techietis-a-soxfanpolkow" +
+ "icepoltavalle-aostarostwodzislawitdkopervikomforbananarepublicar" +
+ "toonartdecoffeedbackplaneappalacemreviewskrakoweddinglassassinat" +
+ "ionalheritagematsubarakawagoeu-1pomorzeszowithgoogleapisa-hockey" +
+ "nutrentinosudtirolpordenonepornporsangerporsanguideltajimicrolig" +
+ "htingporsgrunnanpoznanpraxis-a-bruinsfanprdpreservationpresidiop" +
+ "rgmrprimelhusgardenprincipeprivatizehealthinsuranceprochowicepro" +
+ "ductionsimple-urlprofauskedsmokorsetagayasells-for-ulsandoyprogr" +
+ "essivegasiaprojectrentinosued-tirolpromombetsurfbsbxn--1lqs03npr" +
+ "opertyprotectionprotonetrentinosuedtirolprudentialpruszkowithyou" +
+ "tubeneventoeidsvollprzeworskogptplusterptzpvtrentoyonakagyokutoy" +
+ "akokamishihoronobeokaminoyamatsuris-leetrentino-stirolpwchungnam" +
+ "dalseidfjordynnsavannahgapzqldqponqslgbtrevisohughesirdalquicksy" +
+ "teslingqvchurchaseljeffersoniyodogawastoragestordalstorenburgsto" +
+ "rfjordstpetersburgstreamsterdamnserverbaniastudiostudyndns-homef" +
+ "tpaccessnoasakakinokiastuff-4-salestufftoread-booksnesnzstuttgar" +
+ "trogstadsurreysusakis-not-certifieducatorahimeshimakanegasakinko" +
+ "bayashikshacknethnologysusonosuzakanrasuzukanumazurysuzukis-save" +
+ "dunetbankolobrzegersundsvalbardudinkakudamatsuesveiosvelvikoseis" +
+ "-a-therapistoiasvizzeraswedenswidnicarrierswiebodzindianmarketin" +
+ "gswiftcoveronaritakurashikis-slickomaganeswinoujscienceandhistor" +
+ "yswisshikis-uberleetrentino-sud-tirolturystykarasjohkamiokaminok" +
+ "awanishiaizubangetuscanytushuissier-justicetuvalle-daostatichuva" +
+ "shiatuxfamilyversicherungvestfoldvestnesolutionslupskoryolasitev" +
+ "estre-slidreamhostersomavestre-totennishiawakuravestvagoyvevelst" +
+ "advibo-valentiavibovalentiavideovillaskoyabearalvahkijobserverda" +
+ "lvdalcesomnarashinovinnicartiervinnytsiavipsinaapphotographysiov" +
+ "irginiavirtualvirtueeldomeindustriesteambulancevirtuelvisakegawa" +
+ "vistaprinternationalfirearmsooviterboltromsakatakinouevivoldavla" +
+ "dikavkazanvladimirvladivostokaizukarasuyamazoevlogoipiagetmyiphi" +
+ "lipsyvolkenkundenvolkswagentsopotritonvologdanskoshunantokonameg" +
+ "atakasugais-an-accountantshinshirovolvolgogradvolyngdalvoronezhy" +
+ "tomyrvossevangenvotevotingvotoyonezawavrnworldworse-thanggliding" +
+ "wowiwatsukiyonowruzhgorodoywritesthisblogsytewroclawloclawekostr" +
+ "omahachijorpelandwtcirclegnicafederationwtfbx-oslodingenwuozuwww" +
+ "mflabsor-odalwzmiuwajimaxn--4gq48lf9jeonnamerikawauexn--4it168dx" +
+ "n--4it797kotohiradomainsurehabmerxn--4pvxsor-varangerxn--54b7fta" +
+ "0ccitichernigovernmentoyookanzakiyosatokigawaxn--55qw42gxn--55qx" +
+ "5dxn--5js045dxn--5rtp49civilaviationxn--5rtq34kotouraxn--5su34j9" +
+ "36bgsgxn--5tzm5gxn--6btw5axn--6frz82gxn--6orx2rxn--6qq986b3xlxn-" +
+ "-7t0a264civilisationxn--80adxhksorfoldxn--80ao21axn--80aqecdr1ax" +
+ "n--80asehdbarclaycardsakuraibigawaurskog-holandroverhalla-spezia" +
+ "grocerybnikahokutobishimaizurubtsovskiervaapsteiermarkariyakumol" +
+ "dev-myqnapcloudcontrolappagefrontappagespeedmobilizerobiraeropor" +
+ "talabamagasakishimabarackmaze12xn--80aswgxn--80audnedalnxn--8ltr" +
+ "62kouhokutamakis-an-actorxn--8pvr4uxn--8y0a063axn--90a3academyac" +
+ "tivedirectoryazannakadomari-elasticbeanstalkounosunndalxn--90ais" +
+ "hobaraomoriguchiharahkkeravjudygarlandxn--90azhaibarakitahatakan" +
+ "abeautydalxn--9dbhblg6dietcimmobilienxn--9dbq2axn--9et52uxn--9kr" +
+ "t00axn--andy-iraxn--aroport-byanagawaxn--asky-iraxn--aurskog-hla" +
+ "nd-jnbarclaysakyotanabellunordkappgafanpachigasakidsmynasushioba" +
+ "ragusaarlandiskstationavigationavuotnakayamatsuuraustevollavagis" +
+ "kebinagisochildrensgardenaturalhistorymuseumcenterepbodyndns-fre" +
+ "ebox-oskolegokasells-for-less3-eu-central-1xn--avery-yuasakuhokk" +
+ "aidontexisteingeekouyamashikis-an-actresshintokushimaxn--b-5gaxn" +
+ "--b4w605ferdxn--bck1b9a5dre4civilizationxn--bdddj-mrabdxn--beara" +
+ "lvhki-y4axn--berlevg-jxaxn--bhcavuotna-s4axn--bhccavuotna-k7axn-" +
+ "-bidr-5nachikatsuuraxn--bievt-0qa2xn--bjarky-fyanaizuxn--bjddar-" +
+ "ptamayufuettertdasnetzxn--blt-elabourxn--bmlo-graingerxn--bod-2n" +
+ "aroyxn--brnny-wuaccident-investigationjukudoyamagadancebetsukuba" +
+ "bia-goracleaningatlantabusebastopologyeonggiehtavuoatnadexeterim" +
+ "o-i-ranagahamaroygardendoftheinternetflixilovecollegefantasyleag" +
+ "uernseyxn--brnnysund-m8accident-preventionlineat-urlxn--brum-voa" +
+ "gatromsojavald-aostaplesokanoyakagexn--btsfjord-9zaxn--c1avgxn--" +
+ "c2br7gxn--c3s14misasaguris-into-animelbournexn--cck2b3barefootba" +
+ "llooningliwiceventsalangenayoroddaustinnaturalsciencesnaturelles" +
+ "3-eu-west-1xn--cg4bkis-very-badaddjamalborkangerxn--ciqpnxn--clc" +
+ "hc0ea0b2g2a9gcdn77-sslattumisawaxn--comunicaes-v6a2oxn--correios" +
+ "-e-telecomunicaes-ghc29axn--czr694bargainstitutelemarkashiwaraus" +
+ "traliaisondriodejaneirochestereportarantours3-external-1xn--czrs" +
+ "0trusteexn--czru2dxn--czrw28barreauctionflfanfshostrodawaraustrh" +
+ "eimatunduhrennesoyokotebinorilskarlsoyokozebizenakamagayachts3-e" +
+ "xternal-2xn--d1acj3barrel-of-knowledgeologyukuhashimojibmditchyo" +
+ "uripalanakhodkanagawauthordalandroidgcahcesuolocalhistoryggeelvi" +
+ "nckarmoyomitanobninskarpaczeladz-1xn--d1alfaromeoxn--d1atrvbarce" +
+ "lonagasukeu-2xn--d5qv7z876civilwarmanagementoyosatoyokawaxn--dav" +
+ "venjrga-y4axn--djrs72d6uyxn--djty4kouzushimashikokuchuoxn--dnna-" +
+ "grajewolterskluwerxn--drbak-wuaxn--dyry-iraxn--e1a4claimsaves-th" +
+ "e-whalessandria-trani-barletta-andriatranibarlettaandriaxn--eckv" +
+ "dtc9dxn--efvn9sorreisahayakawakamiichikawamisatottoris-lostre-to" +
+ "teneis-a-studentalxn--efvy88hair-surveillancexn--ehqz56nxn--elqq" +
+ "16hakatanotaireshimokawaxn--estv75gxn--eveni-0qa01gaxn--f6qx53ax" +
+ "n--fct429kozagawaxn--fhbeiarnxn--finny-yuaxn--fiq228c5hsortlandx" +
+ "n--fiq64barrell-of-knowledgeometre-experts-comptablesalondonetsk" +
+ "ashiwazakiyosemiteverbankasukabedzin-the-bandaioiraseeklogesuran" +
+ "certmgretachikawakkanaibetsubamericanfamilydscloudcontrolledekaf" +
+ "jordivtasvuodnagatorogersaltdalimoliserniautomotivecodynaliascol" +
+ "i-picenoipirangamvikaruizawamusementaobaokinawashirosatochiokino" +
+ "shimakeupowiathletajimabariakembuchikumagayagawakuyabukihokumako" +
+ "gengerdalipayekaterinburgjerdrumckinseyokosukareliance164xn--fiq" +
+ "s8sorumisakis-gonexn--fiqz9southcarolinazawaxn--fjord-lraxn--fjq" +
+ "720axn--fl-ziaxn--flor-jraxn--flw351exn--fpcrj9c3dxn--frde-grand" +
+ "rapidsouthwestfalenxn--frna-woaraisaijosoyrovigorlicexn--frya-hr" +
+ "axn--fzc2c9e2clickchristiansburgroundhandlingroznyxn--fzys8d69uv" +
+ "gmailxn--g2xx48clinichernihivanovosibirskautokeinoxn--gckr3f0fbx" +
+ "ostrolekaluganskharkivgucciprianiigataitogliattirescrappingushik" +
+ "amifuranosegawaxn--gecrj9cliniquenoharaxn--ggaviika-8ya47hakodat" +
+ "exn--gildeskl-g0axn--givuotna-8yandexn--3pxu8kosugexn--gjvik-wua" +
+ "xn--gk3at1exn--gls-elacaixaxn--gmq050is-very-evillagexn--gmqw5ax" +
+ "n--h-2failxn--h1aeghakonexn--h2brj9clintonoshoesavonamsskoganeis" +
+ "-a-doctorayxn--hbmer-xqaxn--hcesuolo-7ya35bashkiriautoscanadaeje" +
+ "onbukarumaifarmerseinextdirectargets-itargivingjesdalavangenatur" +
+ "bruksgymnaturhistorisches3-fips-us-gov-west-1xn--hery-iraxn--hge" +
+ "bostad-g3axn--hmmrfeasta-s4acctrysiljan-mayenxn--hnefoss-q1axn--" +
+ "hobl-iraxn--holtlen-hxaxn--hpmir-xqaxn--hxt814exn--hyanger-q1axn" +
+ "--hylandet-54axn--i1b6b1a6a2exn--imr513nxn--indery-fyaotsurnadal" +
+ "xn--io0a7is-very-goodhandsonxn--j1aefermobilyxn--j1amhakubankhva" +
+ "olbia-tempio-olbiatempioolbialystokkemerovodkagoshimalopolskanla" +
+ "ndxn--j6w193gxn--jlq61u9w7basilicataniaveroykeniwaizumiotsukumiy" +
+ "amazonawsabaerobaticketsaritsynologyeongnamegawakeisenbahnatuurw" +
+ "etenschappenaumburgjovikasaokamisatokashikiwienaustdalazioceanog" +
+ "raphics3-sa-east-1xn--jlster-byaroslavlaanderenxn--jrpeland-54ax" +
+ "n--jvr189misconfusedxn--k7yn95exn--karmy-yuaxn--kbrq7oxn--kcrx77" +
+ "d1x4axn--kfjord-iuaxn--klbu-woaxn--klt787dxn--kltp7dxn--kltx9axn" +
+ "--klty5xn--42c2d9axn--koluokta-7ya57hakuis-a-nascarfanxn--kprw13" +
+ "dxn--kpry57dxn--kpu716ferraraxn--kput3is-very-nicexn--krager-gya" +
+ "sakaiminatoyonoxn--kranghke-b0axn--krdsherad-m8axn--krehamn-dxax" +
+ "n--krjohka-hwab49jetztrentino-sudtirolxn--ksnes-uuaxn--kvfjord-n" +
+ "xaxn--kvitsy-fyasugis-very-sweetpepperxn--kvnangen-k0axn--l-1fai" +
+ "rwindsowaxn--l1accentureklamborghiniizaxn--laheadju-7yasuokarate" +
+ "xn--langevg-jxaxn--lcvr32dxn--ldingen-q1axn--leagaviika-52basket" +
+ "ballfinanzgoravocatanzarowebhopocznoceanographiquehimeji234xn--l" +
+ "esund-huaxn--lgbbat1ad8jevnakershuscultureggioemiliaromagnakasat" +
+ "sunais-a-teacherkassymantechnologyxn--lgrd-poacoachampionshiphop" +
+ "tobamagazinebraskaunjargallupinbatodayurihonjournalisteinkjerusa" +
+ "lembroideryusuharavoues3-us-gov-west-1xn--lhppi-xqaxn--linds-pra" +
+ "mericanartulansokndalxn--lns-qlanxesspreadbettingxn--loabt-0qaxn" +
+ "--lrdal-sraxn--lrenskog-54axn--lt-liaclothingrpanasonichernivtsi" +
+ "ciliaxn--lten-granexn--lury-iraxn--mely-iraxn--merker-kuaxn--mgb" +
+ "2ddespydebergxn--mgb9awbferrarittogoldpoint2thisamitsukexn--mgba" +
+ "3a3ejtunesolarssonxn--mgba3a4f16axn--mgba3a4franamizuholdingsmil" +
+ "eksvikozakis-an-anarchistoricalsocietyumenxn--mgba7c0bbn0axn--mg" +
+ "baakc7dvferreroticanonoichinomiyakexn--mgbaam7a8hakusandiegoodye" +
+ "arthadselfipassagenshellaspeziaxn--mgbab2bdxn--mgbai9a5eva00bats" +
+ "fjordivttasvuotnaharimaniwakuratexascolipicenord-aurdalpha-myqna" +
+ "pcloudappspotagerhcloudfunctionsalvadordalibabaikaliszczytnord-o" +
+ "dalindasdaburyatiaarpaleomutashinaiinetarnobrzegyptianhlfanhsalz" +
+ "burglobalashovhachinohedmarkasumigaurawa-mazowszexboxenapponazur" +
+ "e-mobilevje-og-hornnesamegawaxasnesoddenmarkhangelskjervoyagemol" +
+ "ogicallyngenglanddnskingjerstadotsuruokamchatkameokameyamashinat" +
+ "sukigatakamatsukawaetnagaivuotnagaokakyotambabydgoszczecinemagen" +
+ "tositelekommunikationthewifiat-band-campaniamallamaintenanceobih" +
+ "irosakikamijimattelefonicarbonia-iglesias-carboniaiglesiascarbon" +
+ "iabruzzoologyeongbuk-uralsk12xn--mgbai9azgqp6jewelryxn--mgbayh7g" +
+ "paduaxn--mgbb9fbpobanazawaxn--mgbbh1a71exn--mgbc0a9azcgxn--mgbca" +
+ "7dzdoxn--mgberp4a5d4a87gxn--mgberp4a5d4arxn--mgbi4ecexposedxn--m" +
+ "gbpl2fhskpnxn--mgbqly7c0a67fbcloudnsdojoetsuwanouchikujogaszkola" +
+ "hppiacenzakopanerairforcexn--mgbqly7cvafredrikstadtverranzanxn--" +
+ "mgbt3dhdxn--mgbtf8flatangerxn--mgbtx2bauhausposts-and-telecommun" +
+ "icationsnasadodgeorgeorgiaxn--mgbx4cd0abbottunkosherbrookegawaxn" +
+ "--mix082fetsundxn--mix891fgxn--1lqs71dxn--mjndalen-64axn--mk0axi" +
+ "nfinitis-with-thebandoomdnsfor-better-thandaxn--mk1bu44cnsaxoxn-" +
+ "-mkru45isleofmandalxn--mlatvuopmi-s4axn--mli-tlapyatigorskppspie" +
+ "gelxn--mlselv-iuaxn--moreke-juaxn--mori-qsakuragawaxn--mosjen-ey" +
+ "atominamiawajikissmarterthanyoustkarasjokomakiyosumycdn77-secure" +
+ "chtrainingxn--mot-tlaquilancasterxn--mre-og-romsdal-qqbbcasadela" +
+ "monedatsunanjoburglobodoes-itvedestrandiyusuisserveexchangexn--m" +
+ "sy-ula0haldenxn--mtta-vrjjat-k7afamilycompanycntoyotaris-a-finan" +
+ "cialadvisor-aurdalukowhoswhokksundynv6xn--muost-0qaxn--mxtq1mish" +
+ "imatsumaebashimodatexn--ngbc5azdxn--ngbe9e0axn--ngbrxn--45brj9ci" +
+ "rcus-2xn--nit225krasnodarxn--nmesjevuemie-tcbajddarchaeologyxn--" +
+ "nnx388axn--nodexn--nqv7fs00emaxn--nry-yla5gxn--ntso0iqx3axn--nts" +
+ "q17gxn--nttery-byaeservecounterstrikexn--nvuotna-hwaxn--nyqy26ax" +
+ "n--o1achattanooganorfolkebiblegallocus-1xn--o3cw4halsaitamatsuku" +
+ "ris-a-nurservebbshimokitayamaxn--od0algxn--od0aq3bbtarumizusawax" +
+ "n--ogbpf8flekkefjordxn--oppegrd-ixaxn--ostery-fyatsukaratsuginam" +
+ "ikatagamihoboleslawiecolonialwilliamsburgruexn--osyro-wuaxn--p1a" +
+ "cfhvalerxn--p1aiwchoseirouterxn--pbt977coloradoplateaudioxn--pgb" +
+ "s0dhlxn--porsgu-sta26fidonnakaiwamizawaxn--pssu33lxn--pssy2uxn--" +
+ "q9jyb4columbusheyxn--qcka1pmcdonaldsrlxn--qqqt11missilelxn--qxam" +
+ "urskjakdnepropetrovskiptveterinairealtorlandxn--rady-iraxn--rdal" +
+ "-poaxn--rde-ularvikrasnoyarskomitamamuraxn--rdy-0nabarixn--renne" +
+ "sy-v1axn--rhkkervju-01aflakstadaokagakibichuoxn--rholt-mragowood" +
+ "sidexn--rhqv96gxn--rht27zxn--rht3dxn--rht61exn--risa-5narusawaxn" +
+ "--risr-iraxn--rland-uuaxn--rlingen-mxaxn--rmskog-byatsushiroxn--" +
+ "rny31hammarfeastafricapetownnews-stagingxn--rovu88bbvacationsupd" +
+ "atelevisionikiitatebayashijonawatexn--rros-granvindafjordxn--rsk" +
+ "og-uuaxn--rst-0narutomobellevuelosangelesjaguarchitecturealtychy" +
+ "attorneyagawalbrzycharternopilawalesundxn--rsta-francaiseharaxn-" +
+ "-ryken-vuaxn--ryrvik-byawaraxn--s-1faitheguardianxn--s9brj9commu" +
+ "nitysfjordyroyrvikinguitarsbschokoladenxn--sandnessjen-ogbizhevs" +
+ "kredirectmeldalxn--sandy-yuaxn--seral-lraxn--ses554gxn--sgne-gra" +
+ "tangenxn--skierv-utazaskvolloabathsbcomobaraxn--skjervy-v1axn--s" +
+ "kjk-soaxn--sknit-yqaxn--sknland-fxaxn--slat-5narviikananporovnox" +
+ "n--slt-elabbvieeexn--smla-hraxn--smna-gratis-a-bulls-fanxn--snas" +
+ "e-nraxn--sndre-land-0cbremangerxn--snes-poaxn--snsa-roaxn--sr-au" +
+ "rdal-l8axn--sr-fron-q1axn--sr-odal-q1axn--sr-varanger-ggbentleyu" +
+ "uconnectatamotorsamnangerxn--srfold-byawatahamaxn--srreisa-q1axn" +
+ "--srum-grazxn--stfold-9xaxn--stjrdal-s1axn--stjrdalshalsen-sqbep" +
+ "publishproxyzgorzeleccolognewportlligatewayuzawaxn--stre-toten-z" +
+ "cbsrtroandinosaurlandesmolenskosaigawaxn--t60b56axn--tckweatherc" +
+ "hannelxn--tiq49xqyjewishartgalleryxn--tjme-hraxn--tn0agrinet-fre" +
+ "aksrvaroyxn--tnsberg-q1axn--tor131oxn--trany-yuaxn--trgstad-r1ax" +
+ "n--trna-woaxn--troms-zuaxn--tysvr-vraxn--uc0atvdonskoshimizumaki" +
+ "zunokunimilanoxn--uc0ay4axn--uist22hamurakamigoriginshimonitayan" +
+ "agitlaborxn--uisz3gxn--unjrga-rtambovenneslaskerrylogisticsologn" +
+ "exn--unup4yxn--uuwu58axn--vads-jraxn--vard-jraxn--vegrshei-c0axn" +
+ "--vermgensberater-ctberndnpalermomasvuotnakatombetsupportatarsta" +
+ "nikkoebenhavnikolaevennodessaikiraxn--vermgensberatung-pwbeskidy" +
+ "nathomedepotenzachpomorskienikonantanangerxn--vestvgy-ixa6oxn--v" +
+ "g-yiabcn-north-1xn--vgan-qoaxn--vgsy-qoa0jfkomatsushimashikexn--" +
+ "vgu402comparemarkerryhotelscholarshipschooluroyxn--vhquversaille" +
+ "solundbeckosakaerodromegalsacechirealminamiuonumasudaxn--vler-qo" +
+ "axn--vre-eiker-k8axn--vrggt-xqadxn--vry-yla5gxn--vuq861bestbuysh" +
+ "ousesamsclubindalindesnesamsunglogowegroweibolzanordre-landrange" +
+ "dalinkasuyakutiaxn--w4r85el8fhu5dnraxn--w4rs40lxn--wcvs22dxn--wg" +
+ "bh1compute-1xn--wgbl6axn--xhq521betainaboxfusejnynysagaeroclubme" +
+ "decincinnationwidealerxn--xkc2al3hye2axn--xkc2dl3a5ee0hangoutsys" +
+ "temscloudfrontdoorxn--y9a3aquariumisugitokuyamatsumotofukexn--ye" +
+ "r-znarvikristiansandcatshirakoenigxn--yfro4i67oxn--ygarden-p1axn" +
+ "--ygbi2ammxn--45q11citadeliveryokamikawanehonbetsurutaharaxn--ys" +
+ "tre-slidre-ujbieigersundrivelandrobaknoluoktaikicks-assedicaseih" +
+ "ichisobetsuitaipeiheijiiyamanobeauxartsandcraftsandvikcoromantov" +
+ "alle-d-aostathellexusdecorativeartsanfranciscofreakunemurorangei" +
+ "seiyoichiropracticasertairaxn--zbx025dxn--zf0ao64axn--zf0avxn--4" +
+ "gbriminingxn--zfr164bielawallonieruchomoscienceandindustryninohe" +
+ "kinannestadrudmurtiaxperiaxz"
// nodes is the list of nodes. Each node is represented as a uint32, which
// encodes the node's children, wildcard bit and node type (as an index into
@@ -481,8068 +482,8141 @@ const text = "biellaakesvuemieleccebieszczadygeyachimataipeigersundnpaleomutas"
// [15 bits] text index
// [ 6 bits] text length
var nodes = [...]uint32{
- 0x274903,
- 0x370704,
- 0x28c306,
- 0x36c9c3,
- 0x36c9c6,
- 0x3948c6,
- 0x3a4883,
- 0x208e44,
- 0x252cc7,
- 0x28bf48,
+ 0x29e943,
+ 0x364444,
+ 0x28af46,
+ 0x371983,
+ 0x371986,
+ 0x394246,
+ 0x3a4103,
+ 0x202f04,
+ 0x24f607,
+ 0x28ab88,
0x1a00882,
- 0x308207,
- 0x350b49,
- 0x2f91ca,
- 0x2f91cb,
- 0x232343,
- 0x28d846,
- 0x231645,
+ 0x309dc7,
+ 0x3533c9,
+ 0x2fb3ca,
+ 0x2fb3cb,
+ 0x22fe43,
+ 0x28cac6,
+ 0x2352c5,
0x1e00702,
- 0x2105c4,
- 0x22d243,
- 0x275685,
- 0x2207982,
- 0x33d083,
- 0x26ee604,
- 0x24bb45,
- 0x2a01782,
- 0x37528e,
- 0x2470c3,
- 0x37bac6,
- 0x37bacb,
- 0x2e03642,
- 0x28c487,
- 0x233846,
+ 0x211ac4,
+ 0x2c7a83,
+ 0x226bc5,
+ 0x2200d42,
+ 0x2a0f43,
+ 0x2707e44,
+ 0x368485,
+ 0x2a00c42,
+ 0x3797ce,
+ 0x24a483,
+ 0x38b406,
+ 0x2e04642,
+ 0x2a5907,
+ 0x237d46,
0x3200a42,
- 0x2573c3,
- 0x2573c4,
- 0x353f86,
- 0x240788,
- 0x285686,
- 0x39ffc4,
- 0x3600dc2,
- 0x32ab89,
- 0x364d87,
- 0x2f4806,
- 0x3527c9,
- 0x295108,
- 0x3404c4,
- 0x2ee886,
- 0x211206,
- 0x3a02202,
- 0x23cf4f,
- 0x262c8e,
- 0x215644,
- 0x2bc805,
- 0x2e16c5,
- 0x2e8b89,
- 0x239849,
- 0x3293c7,
- 0x3a8706,
- 0x230103,
- 0x3e04602,
- 0x33d3c3,
- 0x21c0ca,
- 0x21c343,
- 0x253c45,
- 0x284d02,
- 0x284d09,
- 0x4203442,
- 0x203444,
- 0x208986,
- 0x27c205,
- 0x349a04,
- 0x4a837c4,
- 0x203803,
- 0x230684,
- 0x4e00f82,
- 0x370444,
- 0x261b84,
- 0x22428a,
- 0x52009c2,
- 0x2ae907,
- 0x27c6c8,
- 0x5a07dc2,
+ 0x2ae043,
+ 0x2ae044,
+ 0x280f86,
+ 0x36f448,
+ 0x283a46,
+ 0x386144,
+ 0x3601002,
+ 0x326a09,
+ 0x363a07,
+ 0x3351c6,
+ 0x355049,
+ 0x293988,
+ 0x367104,
+ 0x3a6606,
+ 0x20e306,
+ 0x3a02e02,
+ 0x241d0f,
+ 0x33174e,
+ 0x212484,
+ 0x2bb945,
+ 0x202e05,
+ 0x2ea589,
+ 0x23e889,
0x325747,
- 0x2b72c4,
- 0x2b72c7,
- 0x36fa85,
- 0x36ba87,
- 0x329186,
- 0x260c44,
- 0x33f4c5,
- 0x2a1447,
- 0x6a036c2,
- 0x346e43,
- 0x20d402,
- 0x365a03,
- 0x6e0dec2,
- 0x27edc5,
- 0x7203402,
- 0x24c184,
- 0x27a0c5,
- 0x215587,
- 0x3907ce,
- 0x2f5e84,
- 0x23fb44,
- 0x203403,
- 0x2e7ac9,
- 0x30534b,
- 0x30c688,
- 0x31aec8,
- 0x321348,
- 0x3114c8,
- 0x35260a,
- 0x36b987,
- 0x223546,
- 0x769d742,
- 0x373483,
- 0x37cf03,
- 0x38c044,
- 0x254183,
- 0x3a48c3,
- 0x1712542,
- 0x7a06442,
- 0x245845,
- 0x24dcc6,
- 0x2ca2c4,
- 0x397487,
- 0x27d286,
- 0x31b9c4,
- 0x3a7d87,
- 0x206443,
- 0x7ebf042,
- 0x8252f42,
- 0x8613bc2,
- 0x213bc6,
- 0x8a00002,
- 0x37b205,
- 0x313a83,
- 0x204184,
- 0x2d9c84,
- 0x2d9c85,
+ 0x221646,
+ 0x26b083,
+ 0x3e056c2,
+ 0x346fc3,
+ 0x207a4a,
+ 0x211e83,
+ 0x250585,
+ 0x2040c2,
+ 0x2830c9,
+ 0x4204802,
+ 0x209084,
+ 0x29e486,
+ 0x284b45,
+ 0x34c904,
+ 0x4a74a04,
+ 0x204803,
+ 0x234304,
+ 0x4e01842,
+ 0x364184,
+ 0x52e41c4,
+ 0x22410a,
+ 0x56009c2,
+ 0x334307,
+ 0x38e008,
+ 0x6201182,
+ 0x322847,
+ 0x2b7344,
+ 0x2b7347,
+ 0x383d05,
+ 0x370a47,
+ 0x325506,
+ 0x332a44,
+ 0x340c85,
+ 0x28df47,
+ 0x72046c2,
+ 0x349183,
+ 0x218782,
+ 0x366703,
+ 0x76108c2,
+ 0x2798c5,
+ 0x7a02d42,
+ 0x368ac4,
+ 0x277785,
+ 0x2123c7,
+ 0x2ddc0e,
+ 0x330a44,
+ 0x244744,
+ 0x20ca03,
+ 0x326ec9,
+ 0x30528b,
+ 0x30e148,
+ 0x31cd88,
+ 0x320888,
+ 0x20a588,
+ 0x354e8a,
+ 0x370947,
+ 0x217906,
+ 0x7e9c3c2,
+ 0x377d83,
+ 0x380c43,
+ 0x38bc84,
+ 0x250ac3,
+ 0x3a4143,
+ 0x1713b02,
+ 0x8203182,
+ 0x2484c5,
+ 0x30c046,
+ 0x2c9bc4,
+ 0x396e07,
+ 0x22eec6,
+ 0x280304,
+ 0x3a7dc7,
+ 0x203183,
+ 0x86bdb82,
+ 0x8a4f882,
+ 0x8e13702,
+ 0x213706,
+ 0x9200002,
+ 0x37f645,
+ 0x315043,
+ 0x205244,
+ 0x2dbe44,
+ 0x2dbe45,
0x207043,
- 0x8f23743,
- 0x9209e42,
- 0x288c85,
- 0x288c8b,
- 0x258306,
- 0x20b6cb,
- 0x271f44,
- 0x20c9c9,
- 0x20e284,
- 0x960f202,
- 0x20f903,
- 0x20fc83,
- 0x160fe02,
- 0x23d483,
- 0x20fe0a,
- 0x9a10842,
- 0x210845,
- 0x28f40a,
- 0x2cdd44,
- 0x211603,
- 0x211c44,
- 0x2139c3,
- 0x2139c4,
- 0x2139c7,
- 0x214405,
- 0x216145,
- 0x216686,
- 0x2169c6,
- 0x2173c3,
- 0x219d48,
- 0x256d03,
- 0x9e1a382,
- 0x21ab08,
- 0x21a38b,
- 0x21e608,
- 0x21ed86,
- 0x21fb07,
- 0x2246c8,
- 0xa635842,
- 0xaa95682,
- 0x2f5708,
- 0x29e287,
- 0x235e05,
- 0x235e08,
- 0x354888,
- 0x387283,
- 0x22b144,
- 0x38c082,
- 0xae2ca42,
- 0xb214382,
- 0xba2e142,
- 0x22e143,
- 0xbe01742,
- 0x208e03,
- 0x201744,
- 0x217543,
- 0x340484,
- 0x25248b,
- 0x21a2c3,
- 0x2d2446,
- 0x224104,
- 0x29cbce,
- 0x354ec5,
- 0x25f248,
- 0x21d287,
- 0x21d28a,
- 0x2341c3,
- 0x2341c7,
- 0x305505,
- 0x387e04,
- 0x3ac206,
- 0x3ac207,
- 0x2c2d44,
- 0x390b07,
- 0x3a9dc4,
- 0x206144,
- 0x206146,
- 0x268984,
- 0x21e046,
- 0x20e0c3,
- 0x222dc8,
- 0x3b03c8,
- 0x23fb03,
- 0x23d443,
- 0x395bc4,
- 0x39aa83,
- 0xc200482,
- 0xc6fc042,
+ 0x9723ac3,
+ 0x9a093c2,
+ 0x2873c5,
+ 0x2873cb,
+ 0x22d086,
+ 0x20cbcb,
+ 0x26ff44,
+ 0x20d189,
+ 0x20ed44,
+ 0x9e0fd82,
+ 0x210c83,
+ 0x211183,
+ 0x1611302,
+ 0x23c343,
+ 0x21130a,
+ 0xa211d42,
+ 0x211d45,
+ 0x28ea8a,
+ 0x2cd704,
+ 0x212d43,
+ 0x213384,
+ 0x213cc3,
+ 0x213cc4,
+ 0x213cc7,
+ 0x214245,
+ 0x218dc5,
+ 0x219586,
+ 0x21a0c6,
+ 0x21aa43,
+ 0x21dc48,
+ 0x258e83,
+ 0xa615802,
+ 0x21f008,
+ 0x21580b,
+ 0x222d08,
+ 0x223586,
+ 0x224547,
+ 0x229748,
+ 0xb279a82,
+ 0xb693f02,
+ 0x20b608,
+ 0x2ad0c7,
+ 0x23b405,
+ 0x23b408,
+ 0x281888,
+ 0x2ada03,
+ 0x22eac4,
+ 0x38bcc2,
+ 0xba2f482,
+ 0xbe051c2,
+ 0xc62f802,
+ 0x22f803,
+ 0xca02ec2,
+ 0x202ec3,
+ 0x2fe704,
+ 0x21abc3,
+ 0x3670c4,
+ 0x24edcb,
+ 0x215743,
+ 0x2d2f86,
+ 0x223f84,
+ 0x29b84e,
+ 0x360445,
+ 0x38b508,
+ 0x24bd87,
+ 0x24bd8a,
+ 0x222a83,
+ 0x222a87,
+ 0x305445,
+ 0x231c84,
+ 0x24d886,
+ 0x24d887,
+ 0x2beb44,
+ 0x2f6607,
+ 0x377e04,
+ 0x3afe84,
+ 0x3afe86,
+ 0x267544,
+ 0x208606,
+ 0x210ac3,
+ 0x217188,
+ 0x21cfc8,
+ 0x244703,
+ 0x23c303,
+ 0x395544,
+ 0x39a003,
+ 0xce00482,
+ 0xd304e82,
0x2004c3,
0x2072c6,
- 0x37e383,
- 0x21e4c4,
- 0xca15442,
- 0x326983,
- 0x215443,
- 0x217d82,
- 0xce008c2,
- 0x2bae86,
- 0x232547,
- 0x2e5745,
- 0x2642c4,
- 0x2a1305,
- 0x202987,
- 0x26b645,
- 0x2af3c9,
- 0x2c7606,
- 0x2cf308,
- 0x2e5646,
- 0xd205742,
- 0x240348,
- 0x36cf06,
- 0x205745,
- 0x376d47,
- 0x3b02c4,
- 0x3b02c5,
- 0x285844,
- 0x285848,
- 0xd60b782,
- 0xda11a82,
- 0x32b786,
- 0x316cc8,
- 0x32da85,
- 0x337646,
- 0x3387c8,
- 0x33e708,
- 0xde63085,
- 0x3a3d84,
- 0x3ad007,
- 0xe20dbc2,
- 0xe619fc2,
- 0xfa04a82,
- 0x3580c5,
- 0x29f9c5,
- 0x373806,
- 0x318647,
- 0x22b447,
- 0x10258403,
- 0x2a4a47,
- 0x2d3708,
- 0x380289,
- 0x375447,
- 0x383987,
- 0x392988,
- 0x3a5b86,
- 0x3abd46,
- 0x22ef0c,
- 0x22fa8a,
- 0x22fe07,
- 0x23150b,
- 0x232387,
- 0x23238e,
- 0x232bc4,
- 0x232ec4,
- 0x234447,
- 0x259cc7,
- 0x2380c6,
- 0x2380c7,
- 0x238c47,
- 0x13207802,
- 0x23a006,
- 0x23a00a,
- 0x23a28b,
- 0x23b387,
- 0x23bd45,
- 0x23c083,
- 0x23c346,
- 0x23c347,
- 0x239a03,
- 0x1362d9c2,
- 0x23cbca,
- 0x13b51c82,
- 0x13ea5202,
- 0x1423e102,
- 0x14633942,
- 0x23ee45,
- 0x23f904,
- 0x14e00682,
- 0x3704c5,
- 0x275643,
- 0x316745,
- 0x20d9c4,
- 0x291ec6,
- 0x362306,
- 0x288e83,
- 0x36d844,
- 0x3407c3,
- 0x15201842,
- 0x207bc4,
- 0x3ad586,
- 0x207bc5,
- 0x256a86,
- 0x376e48,
- 0x218dc4,
- 0x22d008,
- 0x2ddfc5,
- 0x2c8108,
- 0x357c46,
- 0x2b36c7,
- 0x25e144,
- 0x25e146,
- 0x310083,
- 0x382383,
- 0x2bfd88,
- 0x30aac4,
- 0x329547,
- 0x2443c6,
- 0x308549,
- 0x20aa88,
- 0x24ab08,
- 0x3058c4,
- 0x3aae03,
- 0x208c82,
- 0x156b0a82,
- 0x15a0b502,
- 0x200d03,
- 0x15e0a182,
- 0x252e04,
- 0x36c345,
- 0x23b203,
- 0x22f3c4,
- 0x302b07,
- 0x264003,
- 0x243d48,
- 0x207f85,
- 0x3055c4,
- 0x36ab03,
- 0x27a045,
- 0x27a184,
- 0x20ba06,
- 0x211d04,
- 0x213746,
- 0x2154c6,
- 0x254984,
- 0x21ebc3,
- 0x1628bb42,
- 0x34bdc5,
- 0x21fec3,
- 0x16600442,
- 0x2633c5,
- 0x230743,
- 0x230749,
- 0x16a03f42,
- 0x17202282,
- 0x24c545,
- 0x218406,
- 0x329907,
- 0x2c9e86,
- 0x2b9208,
- 0x2b920b,
+ 0x369e83,
+ 0x263584,
+ 0xd616942,
+ 0x244c43,
+ 0x216943,
+ 0x21b182,
+ 0xda008c2,
+ 0x2b9fc6,
+ 0x235fc7,
+ 0x2e9345,
+ 0x367a44,
+ 0x27e045,
+ 0x2026c7,
+ 0x26a205,
+ 0x2c6889,
+ 0x2cf2c6,
+ 0x2d48c8,
+ 0x2e9246,
+ 0xde06c02,
+ 0x33b648,
+ 0x2fe4c6,
+ 0x3b1a45,
+ 0x3ae4c7,
+ 0x301084,
+ 0x301085,
+ 0x283c04,
+ 0x283c08,
+ 0xe20cc82,
+ 0xe6131c2,
+ 0x329cc6,
+ 0x318208,
+ 0x339345,
+ 0x33a3c6,
+ 0x33c648,
+ 0x35b948,
+ 0xeac8945,
+ 0xefa8204,
+ 0x3aae87,
+ 0xf20e802,
+ 0xf61dec2,
+ 0x10a16582,
+ 0x357b85,
+ 0x2a3e05,
+ 0x2de246,
+ 0x319b87,
+ 0x399547,
+ 0x1122d183,
+ 0x29a147,
+ 0x2d4488,
+ 0x38fec9,
+ 0x379987,
+ 0x3a5187,
+ 0x22fe88,
+ 0x230686,
+ 0x231786,
+ 0x2323cc,
+ 0x232f4a,
+ 0x233787,
+ 0x23518b,
+ 0x235e07,
+ 0x235e0e,
+ 0x236a84,
+ 0x2374c4,
+ 0x239b07,
+ 0x25b087,
+ 0x23d9c6,
+ 0x23d9c7,
+ 0x23e107,
+ 0x14600bc2,
+ 0x23ec86,
+ 0x23ec8a,
+ 0x23ef0b,
+ 0x240007,
+ 0x2407c5,
+ 0x240b03,
+ 0x240fc6,
+ 0x240fc7,
+ 0x230a83,
+ 0x14a0b382,
+ 0x24198a,
+ 0x14f54502,
+ 0x152a6c02,
+ 0x15642b82,
+ 0x15a37e42,
+ 0x243a85,
+ 0x244504,
+ 0x16200682,
+ 0x364205,
+ 0x226b83,
+ 0x317c85,
+ 0x20a484,
+ 0x20ec44,
+ 0x291786,
+ 0x378106,
+ 0x2875c3,
+ 0x261f84,
+ 0x281e43,
+ 0x16600f82,
+ 0x200f84,
+ 0x3ab406,
+ 0x200f85,
+ 0x258c06,
+ 0x3ae5c8,
+ 0x263804,
+ 0x2c7848,
+ 0x2e0c45,
+ 0x22e708,
+ 0x32c306,
+ 0x2b49c7,
+ 0x239504,
+ 0x239506,
+ 0x307003,
+ 0x384083,
+ 0x2be608,
+ 0x30c584,
+ 0x2a0887,
+ 0x30a106,
+ 0x30a109,
+ 0x252448,
+ 0x27efc8,
+ 0x280444,
+ 0x378983,
+ 0x22aa02,
+ 0x16ab1d82,
+ 0x16e2cf42,
+ 0x3a1603,
+ 0x17219c42,
+ 0x24f744,
+ 0x3400c6,
+ 0x371305,
+ 0x23fe83,
+ 0x232884,
+ 0x300447,
+ 0x367783,
+ 0x2379c8,
+ 0x3af5c5,
+ 0x36fc43,
+ 0x277705,
+ 0x277844,
+ 0x208306,
+ 0x20c804,
+ 0x20cf06,
+ 0x212306,
+ 0x2512c4,
+ 0x215683,
+ 0x21a883,
+ 0x1767e402,
+ 0x360fc5,
+ 0x215dc3,
+ 0x17a00442,
+ 0x232383,
+ 0x331e85,
+ 0x2343c3,
+ 0x2343c9,
+ 0x17e08042,
+ 0x18614b42,
+ 0x286b45,
+ 0x21ba46,
+ 0x29f387,
+ 0x2c9786,
+ 0x2b83c8,
+ 0x2b83cb,
0x20730b,
- 0x22e5c5,
- 0x2cf9c5,
- 0x2c0cc9,
- 0x1600bc2,
- 0x254b48,
- 0x20b904,
- 0x17a00202,
- 0x2520c3,
- 0x18259e86,
- 0x37e208,
- 0x18606482,
- 0x222308,
- 0x18a079c2,
- 0x27208a,
- 0x226b03,
- 0x306bc6,
- 0x328dc8,
- 0x203f88,
- 0x331dc6,
- 0x368847,
- 0x23d147,
- 0x210d8a,
- 0x2cddc4,
- 0x33ce04,
- 0x3505c9,
- 0x38f545,
- 0x262e86,
- 0x212203,
- 0x244d04,
- 0x213544,
- 0x305d07,
- 0x225f47,
- 0x265e84,
- 0x210cc5,
- 0x3738c8,
- 0x35e287,
- 0x3613c7,
- 0x18e0bc82,
+ 0x22aac5,
+ 0x2d02c5,
+ 0x2bf489,
+ 0x1600ec2,
+ 0x251488,
+ 0x20ce04,
+ 0x18e00202,
+ 0x24ea03,
+ 0x1965b246,
+ 0x330e88,
+ 0x19a031c2,
+ 0x228108,
+ 0x19e00d82,
+ 0x27008a,
+ 0x20f043,
+ 0x31d346,
+ 0x330448,
+ 0x378cc8,
+ 0x32f8c6,
+ 0x36dd07,
+ 0x241f07,
+ 0x20de8a,
+ 0x2cd784,
+ 0x33f184,
+ 0x352f49,
+ 0x38f8c5,
+ 0x2f31c6,
+ 0x2138c3,
+ 0x247984,
+ 0x212104,
+ 0x3412c7,
+ 0x21e687,
+ 0x2d7e84,
+ 0x20ddc5,
+ 0x2de308,
+ 0x35d607,
+ 0x360207,
+ 0x1a206ac2,
+ 0x369684,
+ 0x28f388,
+ 0x384544,
+ 0x2455c4,
+ 0x2459c5,
+ 0x245b07,
+ 0x206ac9,
+ 0x246684,
+ 0x246e89,
+ 0x247348,
+ 0x247704,
+ 0x247707,
+ 0x1a647f83,
+ 0x248a47,
+ 0x16475c2,
+ 0x17a4a82,
+ 0x249a06,
+ 0x24a4c7,
+ 0x24a904,
+ 0x24c9c7,
+ 0x24e4c7,
+ 0x252083,
+ 0x23aa82,
+ 0x201682,
+ 0x252b03,
+ 0x252b04,
+ 0x252b0b,
+ 0x31ce88,
+ 0x258b44,
+ 0x253805,
+ 0x255e47,
+ 0x257a05,
+ 0x2d9a8a,
+ 0x258a83,
+ 0x1aa21842,
+ 0x258d84,
+ 0x25ae49,
+ 0x25edc3,
+ 0x25ee87,
+ 0x3ac249,
+ 0x280d08,
+ 0x200c83,
+ 0x276607,
+ 0x276d49,
+ 0x202883,
+ 0x27d9c4,
+ 0x282309,
+ 0x2856c6,
+ 0x286e03,
+ 0x2038c2,
+ 0x233e83,
+ 0x39b6c7,
+ 0x37f785,
+ 0x3585c6,
+ 0x247b84,
+ 0x2d37c5,
+ 0x207a03,
+ 0x21ac86,
+ 0x20d382,
+ 0x390e04,
+ 0x227982,
+ 0x2db883,
+ 0x1ae007c2,
+ 0x244a43,
+ 0x21a544,
+ 0x21a547,
+ 0x3713c6,
+ 0x2499c2,
+ 0x1b22d642,
+ 0x325e44,
+ 0x1b626b02,
+ 0x1ba0acc2,
+ 0x2d6484,
+ 0x2d6485,
+ 0x2c3e85,
+ 0x341a46,
+ 0x1be01e02,
+ 0x29fe45,
+ 0x2ded05,
+ 0x201e03,
+ 0x3650c6,
+ 0x378445,
+ 0x213682,
+ 0x33a005,
+ 0x213684,
+ 0x217c43,
+ 0x219343,
+ 0x1c20c502,
+ 0x28e147,
+ 0x35d884,
+ 0x35d889,
+ 0x247884,
+ 0x22b603,
+ 0x346449,
+ 0x360e88,
+ 0x2a3c84,
+ 0x2a3c86,
+ 0x201f83,
+ 0x212883,
+ 0x21eb03,
+ 0x1c6e1102,
+ 0x2e9182,
+ 0x1ca0b2c2,
+ 0x316b88,
+ 0x34afc8,
+ 0x394986,
+ 0x2549c5,
+ 0x21a905,
+ 0x306007,
+ 0x255805,
+ 0x21c2c2,
+ 0x1ce61e82,
+ 0x1614b82,
+ 0x38fa48,
+ 0x33b585,
+ 0x2c8084,
+ 0x2e0b85,
+ 0x390507,
+ 0x258884,
+ 0x23a882,
+ 0x1d204c42,
+ 0x32c704,
+ 0x213507,
+ 0x3abd87,
+ 0x370a04,
+ 0x28ea43,
+ 0x244644,
+ 0x244648,
+ 0x231ac6,
+ 0x24d70a,
+ 0x206984,
+ 0x28edc8,
+ 0x253ac4,
+ 0x224646,
+ 0x290e84,
+ 0x357e86,
+ 0x35db49,
+ 0x259187,
+ 0x33a683,
+ 0x1d605e82,
+ 0x26a843,
+ 0x20ff82,
+ 0x1da04d42,
+ 0x2dfe86,
+ 0x35ed48,
+ 0x2a5287,
+ 0x3a30c9,
+ 0x23a4c9,
+ 0x2a5c85,
+ 0x2a6e49,
+ 0x2a7b45,
+ 0x2a7c89,
+ 0x2a8b85,
+ 0x284244,
+ 0x1de84247,
+ 0x2957c3,
+ 0x2a9c07,
+ 0x3a5546,
+ 0x2aa407,
+ 0x2a2945,
+ 0x2aba83,
+ 0x1e232a02,
+ 0x392844,
+ 0x1e63a3c2,
+ 0x25a183,
+ 0x1ea0f1c2,
+ 0x2e8b86,
+ 0x38df85,
+ 0x2acb87,
+ 0x324d83,
+ 0x250a44,
+ 0x206f83,
+ 0x20b343,
+ 0x1ee082c2,
+ 0x1f600042,
+ 0x394344,
+ 0x23aa43,
+ 0x364885,
+ 0x25fcc5,
+ 0x1fa05602,
+ 0x20200942,
+ 0x276946,
+ 0x209744,
+ 0x30c6c4,
+ 0x30c6ca,
+ 0x20a00a82,
+ 0x2f768a,
+ 0x372fc8,
+ 0x20e01604,
+ 0x201d83,
+ 0x216c03,
+ 0x3209c9,
+ 0x223349,
+ 0x300546,
+ 0x21202243,
+ 0x2da985,
+ 0x2f81cd,
+ 0x202246,
+ 0x2065cb,
+ 0x21606382,
+ 0x333208,
+ 0x21a0bf02,
+ 0x21e00b42,
+ 0x2af285,
+ 0x222074c2,
+ 0x264c47,
+ 0x2a2247,
+ 0x2103c3,
+ 0x2ae348,
+ 0x22601982,
+ 0x203a04,
+ 0x3786c3,
+ 0x332c05,
+ 0x3833c3,
+ 0x38da46,
+ 0x31b204,
+ 0x23c2c3,
+ 0x26ad83,
+ 0x22a095c2,
+ 0x22aa44,
+ 0x351445,
+ 0x36bb47,
+ 0x274643,
+ 0x2ad803,
+ 0x2aed83,
+ 0x1621a82,
+ 0x2aee43,
+ 0x2af643,
+ 0x22e04282,
0x2f5d44,
- 0x292c88,
- 0x382844,
- 0x242244,
- 0x242645,
- 0x242787,
- 0x20e8c9,
- 0x243604,
- 0x244109,
- 0x2446c8,
- 0x244a84,
- 0x244a87,
- 0x245303,
- 0x245dc7,
- 0x1644942,
- 0x17a5202,
- 0x246a46,
- 0x247107,
- 0x2475c4,
- 0x248287,
- 0x249207,
- 0x249fc8,
- 0x24a743,
- 0x237842,
- 0x201182,
- 0x24ca03,
- 0x24ca04,
- 0x24ca0b,
- 0x31afc8,
- 0x2569c4,
- 0x24d705,
- 0x250107,
- 0x255745,
- 0x35b0ca,
- 0x256903,
- 0x19205642,
- 0x256c04,
- 0x259a89,
- 0x25da03,
- 0x25dac7,
- 0x39edc9,
- 0x2aef08,
- 0x2078c3,
- 0x278f47,
- 0x279689,
- 0x2809c3,
- 0x282bc4,
- 0x283f49,
- 0x286fc6,
- 0x2886c3,
- 0x2022c2,
- 0x23f443,
- 0x39bb87,
- 0x37b345,
- 0x358b06,
- 0x244f04,
- 0x2e3505,
- 0x21c083,
- 0x217606,
- 0x20cbc2,
- 0x3901c4,
- 0x221b82,
- 0x2d9603,
- 0x196007c2,
- 0x23fe43,
- 0x216e44,
- 0x216e47,
- 0x36c406,
- 0x246a02,
- 0x19a4f282,
- 0x377044,
- 0x19e28142,
- 0x1a215c02,
- 0x31b704,
- 0x31b705,
- 0x2c0205,
- 0x322f46,
- 0x1a6101c2,
- 0x227785,
- 0x228285,
- 0x29f903,
- 0x37d386,
- 0x3a8245,
- 0x213b42,
- 0x338405,
- 0x213b44,
- 0x218d03,
- 0x218f43,
- 0x1aa0b142,
- 0x2ef587,
- 0x35e504,
- 0x35e509,
- 0x244c04,
- 0x229383,
- 0x34d189,
- 0x34bc88,
- 0x29f844,
- 0x29f846,
- 0x2a2283,
- 0x2123c3,
- 0x21cdc4,
- 0x2d9d43,
- 0x1aed51c2,
- 0x300102,
- 0x1b21a042,
- 0x315648,
- 0x325b88,
- 0x395006,
- 0x241ec5,
- 0x21ec45,
- 0x24f2c5,
- 0x220442,
- 0x1b6912c2,
- 0x162c282,
- 0x38f6c8,
- 0x240285,
- 0x37c904,
- 0x2ddf05,
- 0x377607,
- 0x24fc84,
- 0x237642,
- 0x1ba03c82,
- 0x30a384,
- 0x218b87,
- 0x39e907,
- 0x36ba44,
- 0x28f3c3,
- 0x23fa44,
- 0x23fa48,
- 0x2e0006,
- 0x3ac08a,
- 0x20e784,
- 0x28f748,
- 0x24a244,
- 0x21fc06,
- 0x291284,
- 0x3583c6,
- 0x262249,
- 0x2605c7,
- 0x233d03,
- 0x1be06dc2,
- 0x26bc83,
- 0x20f402,
- 0x1c213f02,
- 0x2dd186,
- 0x360648,
- 0x2a3447,
- 0x3a2f89,
- 0x235609,
- 0x2a3d05,
- 0x2a5b89,
- 0x2a6bc5,
- 0x2a7549,
- 0x2a8345,
- 0x2a7f44,
- 0x2a7f47,
- 0x296f43,
- 0x2a8f87,
- 0x383d46,
- 0x2aa487,
- 0x2a0585,
- 0x2aa303,
- 0x1c62f542,
- 0x3928c4,
- 0x1ca28182,
- 0x258dc3,
- 0x1ce0d4c2,
- 0x2e4d86,
- 0x27c645,
- 0x2ac987,
- 0x328943,
- 0x254104,
- 0x216903,
- 0x2f5443,
- 0x1d20b9c2,
- 0x1da00042,
- 0x3949c4,
- 0x237803,
- 0x359545,
- 0x2a9d85,
- 0x1de04542,
- 0x1e600942,
- 0x279286,
- 0x20a544,
- 0x30ac04,
- 0x30ac0a,
- 0x1ee01042,
- 0x2f780a,
- 0x36ee08,
- 0x1f201104,
- 0x213ac3,
- 0x252583,
- 0x321489,
- 0x2729c9,
- 0x302c06,
- 0x1f602503,
- 0x2d8145,
- 0x2f834d,
- 0x202506,
- 0x20928b,
- 0x1fa01982,
- 0x332e08,
- 0x1fe19e42,
- 0x20205f02,
- 0x2c2f45,
- 0x20603dc2,
- 0x266947,
- 0x2a5687,
- 0x214803,
- 0x2576c8,
- 0x20a02602,
- 0x2828c4,
- 0x3a84c3,
- 0x332805,
- 0x387083,
- 0x27c106,
- 0x2eaec4,
- 0x23d403,
- 0x26c843,
- 0x20e0a3c2,
- 0x22e544,
- 0x34ec05,
- 0x366687,
- 0x276dc3,
- 0x2ad183,
- 0x2ad983,
- 0x1626682,
- 0x2ada43,
- 0x2adcc3,
- 0x21206d02,
- 0x30f384,
- 0x27a3c6,
- 0x20d343,
- 0x2ae043,
- 0x216af102,
- 0x2af108,
- 0x2aff04,
- 0x259186,
- 0x2b0547,
- 0x229786,
- 0x32db84,
- 0x2f2001c2,
- 0x383c0b,
- 0x2fe28e,
- 0x21954f,
- 0x2332c3,
- 0x2fa3f402,
- 0x1614082,
- 0x2fe01b82,
- 0x22c983,
- 0x231f83,
- 0x2d8fc6,
- 0x2ed8c6,
- 0x2e3807,
- 0x230204,
- 0x302953c2,
- 0x306082c2,
- 0x2e78c5,
- 0x2e9ac7,
- 0x32b046,
- 0x30a69c02,
- 0x269c04,
- 0x3712c3,
- 0x30e0a482,
- 0x34e083,
- 0x3a07c4,
- 0x2b64c9,
- 0x16bd742,
- 0x31234082,
- 0x2d9846,
- 0x267a05,
- 0x3163fc02,
- 0x31a00102,
- 0x33be87,
- 0x362b09,
- 0x350dcb,
- 0x23cf05,
- 0x372d09,
- 0x2be486,
- 0x258347,
- 0x31e080c4,
- 0x24b649,
- 0x35ac47,
- 0x2b7a47,
- 0x20a683,
- 0x20a686,
- 0x2dc647,
- 0x206f43,
- 0x278186,
- 0x32604582,
- 0x32a2fdc2,
- 0x21ea83,
- 0x253d05,
- 0x21dec7,
- 0x354b86,
- 0x37b2c5,
- 0x31e604,
- 0x205105,
- 0x2e6684,
- 0x32e0a902,
- 0x322487,
- 0x2d7884,
- 0x245b84,
- 0x35c88d,
- 0x245b89,
- 0x2280c8,
- 0x24ec84,
- 0x3296c5,
- 0x20a907,
- 0x30f644,
- 0x27d347,
- 0x31bf45,
- 0x33332384,
- 0x2cecc5,
- 0x25c6c4,
- 0x24fdc6,
- 0x318445,
- 0x33632c82,
- 0x2116c4,
- 0x2116c5,
- 0x211ac6,
- 0x37b405,
- 0x250844,
- 0x2e1b83,
- 0x325dc6,
- 0x201305,
- 0x202005,
- 0x318544,
- 0x20e803,
- 0x20e80c,
- 0x33a87902,
- 0x33e07c82,
- 0x342120c2,
- 0x332283,
- 0x332284,
- 0x346067c2,
- 0x2f2908,
- 0x358bc5,
- 0x268344,
- 0x27d686,
- 0x34a326c2,
- 0x34e1fa82,
- 0x35200982,
- 0x2b5345,
- 0x254846,
- 0x305c44,
- 0x3544c6,
- 0x2ae6c6,
- 0x202cc3,
- 0x3570e38a,
- 0x237b45,
- 0x220906,
- 0x2f0249,
- 0x220907,
- 0x28fb88,
- 0x294fc9,
- 0x224c08,
- 0x311206,
- 0x237d03,
- 0x35a08a42,
- 0x385103,
- 0x385109,
- 0x263988,
- 0x35e0a582,
- 0x36202242,
- 0x230c43,
- 0x2cf185,
- 0x24d204,
- 0x2c1b89,
- 0x2a9784,
- 0x2d2fc8,
- 0x209403,
- 0x252904,
- 0x264443,
- 0x35c7c7,
- 0x36640a02,
- 0x25efc2,
- 0x22b905,
- 0x269e49,
- 0x219bc3,
- 0x27aa04,
- 0x2d8104,
- 0x20a983,
- 0x27dd0a,
- 0x36b6ecc2,
- 0x36e11682,
- 0x2befc3,
- 0x371483,
- 0x16528c2,
- 0x2543c3,
- 0x37253702,
- 0x295744,
- 0x37608f82,
- 0x37b0ac84,
- 0x345546,
- 0x2794c4,
- 0x259583,
- 0x280543,
- 0x21f4c3,
- 0x23a606,
- 0x2c5405,
- 0x2bf847,
- 0x258209,
- 0x2c3ec5,
- 0x2c5346,
- 0x2c5948,
- 0x2c5b46,
- 0x249c04,
- 0x298d4b,
- 0x2c7103,
- 0x2c7105,
- 0x2c7248,
- 0x20f082,
- 0x33c182,
- 0x37e272c2,
- 0x3820dc02,
- 0x261983,
- 0x38607a42,
- 0x26b403,
- 0x2c7544,
- 0x2c88c3,
- 0x38e00ec2,
- 0x2ca3cb,
- 0x392ccc86,
- 0x2bc206,
- 0x2cd2c8,
- 0x396ccdc2,
- 0x39a0fcc2,
- 0x39e18f82,
- 0x3a22c902,
- 0x3a7a9b42,
- 0x3a9b4b,
- 0x3aa01082,
- 0x222543,
- 0x317805,
- 0x31d706,
- 0x3ae021c4,
- 0x31cbc7,
- 0x3ad38a,
- 0x31d9c6,
- 0x22e804,
- 0x261583,
- 0x3ba05702,
- 0x201cc2,
- 0x24e2c3,
- 0x3be49943,
- 0x2f0d07,
- 0x318347,
- 0x3d24cb07,
- 0x226ac7,
- 0x21a5c3,
- 0x21d48a,
- 0x21a5c4,
- 0x2442c4,
- 0x2442ca,
- 0x24a445,
- 0x3d601142,
- 0x2491c3,
- 0x3da01ec2,
- 0x209583,
- 0x26bc43,
- 0x3e201a02,
- 0x2a49c4,
- 0x21bdc4,
- 0x3b3145,
- 0x2daa05,
- 0x27af06,
- 0x27b286,
- 0x3e60ba82,
- 0x3ea01a82,
- 0x344b05,
- 0x2bbf12,
- 0x2477c6,
- 0x222c83,
- 0x22ddc6,
- 0x2fdf45,
- 0x1600d42,
- 0x46e0cd42,
- 0x2ec943,
- 0x2e5ac3,
- 0x2da803,
- 0x47202bc2,
- 0x375583,
- 0x47610342,
- 0x2070c3,
- 0x30f3c8,
- 0x223cc3,
- 0x223cc6,
- 0x39f6c7,
- 0x2db306,
- 0x2db30b,
- 0x22e747,
- 0x3926c4,
- 0x47e00e82,
- 0x2ee785,
- 0x21a583,
- 0x22a743,
- 0x3194c3,
- 0x3194c6,
- 0x2cfa8a,
- 0x26f343,
- 0x233704,
- 0x316c06,
- 0x205b46,
- 0x482257c3,
- 0x253fc7,
- 0x37bf4d,
- 0x38b907,
- 0x298a85,
- 0x243b86,
- 0x201343,
- 0x49b7d5c3,
- 0x49e00d82,
- 0x310684,
- 0x225c8c,
- 0x35c149,
- 0x22c087,
- 0x242fc5,
- 0x255e44,
- 0x27e388,
- 0x283845,
- 0x2884c5,
- 0x28ec89,
- 0x2f48c3,
- 0x2f48c4,
- 0x2a5184,
- 0x4a200ac2,
- 0x25f2c3,
- 0x4a690d42,
- 0x3707c6,
- 0x16adac2,
- 0x4aa96f02,
- 0x2b5248,
- 0x2cec07,
- 0x296f05,
- 0x2d480b,
- 0x2d1386,
- 0x2d4a06,
- 0x2f6946,
- 0x229e04,
- 0x2fa7c6,
- 0x2d3e48,
- 0x230e83,
- 0x24cdc3,
- 0x24cdc4,
- 0x2d4f04,
- 0x2d5207,
- 0x2d6345,
- 0x4aed6482,
- 0x4b209d02,
- 0x209d05,
- 0x29b784,
- 0x2d844b,
- 0x2d9b88,
- 0x2da204,
- 0x269c42,
- 0x4baaed82,
- 0x2af343,
- 0x2da644,
- 0x2dae45,
- 0x275a07,
- 0x2dda44,
- 0x22e604,
- 0x4be05fc2,
- 0x35a549,
- 0x2dec85,
- 0x23d1c5,
- 0x2df805,
- 0x4c219683,
- 0x2e0644,
- 0x2e064b,
- 0x2e0c44,
- 0x2e10cb,
- 0x2e2205,
- 0x21968a,
- 0x2e39c8,
- 0x2e3bca,
- 0x2e3e43,
- 0x2e3e4a,
- 0x4c625702,
- 0x4ca3c782,
- 0x29ca83,
- 0x4cee55c2,
- 0x2e55c3,
- 0x4d371082,
- 0x4d714202,
- 0x2e6504,
- 0x219e86,
- 0x354205,
- 0x2e7203,
- 0x274ec6,
- 0x223a44,
- 0x4da058c2,
- 0x2b6a04,
- 0x2c094a,
- 0x385e87,
- 0x27c486,
- 0x2cff47,
- 0x225dc3,
- 0x24a2c8,
- 0x25a20b,
- 0x302d05,
- 0x2b6e05,
- 0x2b6e06,
- 0x20c744,
- 0x323548,
- 0x211103,
- 0x211104,
- 0x211107,
- 0x353ec6,
- 0x322b06,
- 0x29ca0a,
- 0x241804,
- 0x24180a,
- 0x227306,
- 0x227307,
- 0x24d787,
- 0x271884,
- 0x271889,
- 0x3621c5,
- 0x23544b,
- 0x273d43,
- 0x213903,
- 0x21ec83,
- 0x388004,
- 0x4de03b82,
- 0x24f446,
- 0x2aa085,
- 0x2b1ac5,
- 0x220046,
- 0x36e604,
- 0x4e200c02,
- 0x220144,
- 0x4e60b482,
- 0x22f4c4,
- 0x221983,
- 0x4eae5b02,
- 0x306543,
- 0x257086,
- 0x4ee03182,
- 0x33e288,
- 0x220784,
- 0x220786,
- 0x31b806,
- 0x2501c4,
- 0x325d45,
- 0x3a3c88,
- 0x3a80c7,
- 0x2048c7,
- 0x2048cf,
- 0x292b86,
- 0x2198c3,
- 0x2198c4,
- 0x224884,
- 0x228383,
- 0x21fd44,
- 0x3ac384,
- 0x4f225742,
- 0x288bc3,
- 0x235803,
- 0x4f6057c2,
- 0x234183,
+ 0x378306,
+ 0x204283,
+ 0x2af9c3,
+ 0x232b09c2,
+ 0x2b09c8,
+ 0x2b1404,
+ 0x25a546,
+ 0x2b1847,
+ 0x22ba06,
+ 0x230d44,
+ 0x30e001c2,
+ 0x3a540b,
+ 0x39fb4e,
+ 0x21c80f,
+ 0x233383,
+ 0x31633e42,
+ 0x1604ec2,
+ 0x31a02b82,
+ 0x227683,
+ 0x202b83,
+ 0x235c06,
+ 0x2aea46,
+ 0x27d807,
+ 0x34aa44,
+ 0x31e1bb82,
+ 0x32229e82,
+ 0x228e45,
+ 0x3a4ac7,
+ 0x371b86,
+ 0x326436c2,
+ 0x2436c4,
+ 0x36e203,
+ 0x32a09682,
+ 0x32f508c3,
+ 0x391004,
+ 0x2b6b49,
+ 0x16bc882,
+ 0x33216c82,
+ 0x216c85,
+ 0x33644802,
+ 0x33a00102,
+ 0x33e507,
+ 0x239049,
+ 0x35364b,
+ 0x241cc5,
+ 0x377609,
+ 0x2bcfc6,
+ 0x22d0c7,
+ 0x33e0c744,
+ 0x305ac9,
+ 0x35a787,
+ 0x201b47,
+ 0x209883,
+ 0x209886,
+ 0x2da2c7,
+ 0x206003,
+ 0x271e46,
+ 0x34605642,
+ 0x34a34642,
+ 0x21fa43,
+ 0x250645,
+ 0x222547,
+ 0x281b86,
+ 0x37f705,
+ 0x311244,
+ 0x3b1405,
+ 0x2e8904,
+ 0x34e02102,
+ 0x3210c7,
+ 0x2d6044,
+ 0x223244,
+ 0x22324d,
+ 0x248809,
+ 0x2e0f48,
+ 0x22cd04,
+ 0x209b05,
+ 0x27ee47,
+ 0x332784,
+ 0x22ef87,
+ 0x3a8405,
+ 0x353a9084,
+ 0x2fa005,
+ 0x25da84,
+ 0x265d46,
+ 0x319985,
+ 0x35636b42,
+ 0x212e04,
+ 0x212e05,
+ 0x213206,
+ 0x37f845,
+ 0x256584,
+ 0x2dbc83,
+ 0x32fd86,
+ 0x220f45,
+ 0x225285,
+ 0x319a84,
+ 0x206a03,
+ 0x206a0c,
+ 0x35a86002,
+ 0x35e01042,
+ 0x3620b402,
+ 0x332683,
+ 0x332684,
+ 0x366061c2,
+ 0x3a6088,
+ 0x358685,
+ 0x236604,
+ 0x23b9c6,
+ 0x36a0a242,
+ 0x36e09bc2,
+ 0x37200982,
+ 0x2d8845,
+ 0x251186,
+ 0x341204,
+ 0x2814c6,
+ 0x3340c6,
+ 0x203483,
+ 0x3772788a,
+ 0x23ad85,
+ 0x274803,
+ 0x225046,
+ 0x2efe09,
+ 0x225047,
+ 0x28bd48,
+ 0x293849,
+ 0x219888,
+ 0x36a346,
+ 0x20b203,
+ 0x37a9a1c2,
+ 0x3856c3,
+ 0x3856c9,
+ 0x3357c8,
+ 0x37e09782,
+ 0x38206742,
+ 0x2348c3,
+ 0x2cf145,
+ 0x253304,
+ 0x31c8c9,
+ 0x25f6c4,
+ 0x2b1648,
+ 0x206743,
+ 0x24f244,
+ 0x326b83,
+ 0x21ba88,
+ 0x223187,
+ 0x38643742,
+ 0x269d42,
+ 0x238c45,
+ 0x268849,
+ 0x211003,
+ 0x278184,
+ 0x2da944,
+ 0x202c03,
+ 0x278cca,
+ 0x38b72e82,
+ 0x38e12dc2,
+ 0x2bdb03,
+ 0x3751c3,
+ 0x164f202,
+ 0x250d03,
+ 0x39250042,
+ 0x39603042,
+ 0x39b07b04,
+ 0x366086,
+ 0x3469c6,
+ 0x276b84,
+ 0x25a943,
+ 0x27be43,
+ 0x2e4983,
+ 0x23f286,
+ 0x2c2e45,
+ 0x2be0c7,
+ 0x22cf89,
+ 0x2c1d45,
+ 0x2c2d86,
+ 0x2c3708,
+ 0x2c3906,
+ 0x238744,
+ 0x29718b,
+ 0x2c6383,
+ 0x2c6385,
+ 0x2c64c8,
+ 0x21e442,
+ 0x33e802,
+ 0x39e43b02,
+ 0x3a20e842,
+ 0x21bbc3,
+ 0x3a600e02,
+ 0x269fc3,
+ 0x2c67c4,
+ 0x2c8183,
+ 0x3ae25682,
+ 0x3b2cc5c6,
+ 0x2bb346,
+ 0x2ccc08,
+ 0x3b6cad42,
+ 0x3ba111c2,
+ 0x3be19382,
+ 0x3c209f82,
+ 0x3c614882,
+ 0x3ca00ac2,
+ 0x228343,
+ 0x318d45,
+ 0x209c86,
+ 0x3ce12444,
+ 0x3ab20a,
+ 0x310606,
+ 0x22ad04,
+ 0x27e943,
+ 0x3da06bc2,
+ 0x205902,
+ 0x24dbc3,
+ 0x3de38483,
+ 0x2ee087,
+ 0x319887,
+ 0x3f252c07,
+ 0x20f007,
+ 0x215a43,
+ 0x22c6ca,
+ 0x240584,
+ 0x341504,
+ 0x34150a,
+ 0x247045,
+ 0x3f601642,
+ 0x24d483,
+ 0x3fa01dc2,
+ 0x201f43,
+ 0x26a803,
+ 0x40201942,
+ 0x29a0c4,
+ 0x220a84,
+ 0x3a36c5,
+ 0x2d7205,
+ 0x22da06,
+ 0x22dd86,
+ 0x40608382,
+ 0x40a025c2,
+ 0x2eb445,
+ 0x2bb052,
+ 0x29fbc6,
+ 0x21ce83,
+ 0x2fd346,
+ 0x221d85,
+ 0x1611342,
+ 0x48e0d502,
+ 0x2ed8c3,
+ 0x212043,
+ 0x265603,
+ 0x49203382,
+ 0x379ac3,
+ 0x49602182,
+ 0x204a03,
+ 0x2f5d88,
+ 0x223b43,
+ 0x223b46,
+ 0x333a07,
+ 0x2d84c6,
+ 0x2d84cb,
+ 0x22ac47,
+ 0x392644,
+ 0x49e02602,
+ 0x3a6505,
+ 0x215a03,
+ 0x22fd83,
+ 0x31aa03,
+ 0x31aa06,
+ 0x2d038a,
+ 0x26d703,
+ 0x21d5c4,
+ 0x318146,
+ 0x3b1e46,
+ 0x4a2264c3,
+ 0x250907,
+ 0x29cf8d,
+ 0x39eb87,
+ 0x296ec5,
+ 0x237806,
+ 0x220f83,
+ 0x4bb65303,
+ 0x4be07a82,
+ 0x307604,
+ 0x21e3cc,
+ 0x35bb89,
+ 0x36f307,
+ 0x246045,
+ 0x255904,
+ 0x26ae08,
+ 0x274885,
+ 0x274a85,
+ 0x3612c9,
+ 0x335283,
+ 0x2a6b84,
+ 0x4c206d42,
+ 0x206d43,
+ 0x4c690942,
+ 0x295bc6,
+ 0x16b5482,
+ 0x4ca95782,
+ 0x2d8748,
+ 0x2b6d43,
+ 0x2f9f47,
+ 0x2d7785,
+ 0x295785,
+ 0x2f6c4b,
+ 0x2d1f06,
+ 0x2f6e46,
+ 0x2f9d06,
+ 0x226284,
+ 0x2d4ac6,
+ 0x2d5048,
+ 0x234b03,
0x252ec3,
- 0x2161ca,
- 0x29e487,
- 0x235fcc,
- 0x236286,
- 0x2369c6,
- 0x237487,
- 0x238dc7,
- 0x23c109,
- 0x21ac44,
- 0x23c4c4,
- 0x4fa05202,
- 0x4fe03e42,
- 0x253dc4,
- 0x2fc1c6,
- 0x2a3e08,
- 0x37e044,
- 0x266986,
- 0x2c9e45,
- 0x265b08,
+ 0x252ec4,
+ 0x2d70c4,
+ 0x2d7487,
+ 0x2d8185,
+ 0x4ced82c2,
+ 0x4d206a42,
+ 0x209285,
+ 0x2990c4,
+ 0x2dac8b,
+ 0x2dbd48,
+ 0x2e6804,
+ 0x243702,
+ 0x4da80b82,
+ 0x2b0c03,
+ 0x2dc204,
+ 0x2dc4c5,
+ 0x272d87,
+ 0x2e06c4,
+ 0x22ab04,
+ 0x4de07442,
+ 0x359f49,
+ 0x2e1585,
+ 0x241f85,
+ 0x2e2105,
+ 0x4e21bd03,
+ 0x2e2f44,
+ 0x2e2f4b,
+ 0x2e3444,
+ 0x2e3ecb,
+ 0x2e48c5,
+ 0x21c94a,
+ 0x2e4f88,
+ 0x2e518a,
+ 0x2e5a03,
+ 0x2e5a0a,
+ 0x4e626402,
+ 0x4ea41542,
+ 0x265903,
+ 0x4eee7d82,
+ 0x2e7d83,
+ 0x4f35d142,
+ 0x4f7157c2,
+ 0x2e8784,
+ 0x21dd86,
+ 0x281205,
+ 0x2e91c3,
+ 0x29ef06,
+ 0x21d445,
+ 0x21e104,
+ 0x4fa08782,
+ 0x2ca784,
+ 0x2bf10a,
+ 0x386847,
+ 0x38ddc6,
+ 0x2d0847,
+ 0x21e503,
+ 0x253b48,
+ 0x25b5cb,
+ 0x300645,
+ 0x2b6e85,
+ 0x2b6e86,
+ 0x225904,
+ 0x335b88,
+ 0x20b4c3,
+ 0x20e204,
+ 0x20e207,
+ 0x280ec6,
+ 0x321746,
+ 0x29b68a,
+ 0x244fc4,
+ 0x244fca,
+ 0x2de886,
+ 0x2de887,
+ 0x253887,
+ 0x26f884,
+ 0x26f889,
+ 0x24b7c5,
+ 0x23a30b,
+ 0x26ddc3,
+ 0x20d0c3,
+ 0x21a943,
+ 0x231e84,
+ 0x4fe04b42,
+ 0x254186,
+ 0x2ab805,
+ 0x2b2dc5,
+ 0x3324c6,
+ 0x279384,
+ 0x502013c2,
+ 0x240b44,
+ 0x50607982,
+ 0x232984,
+ 0x227783,
+ 0x50a12082,
+ 0x349f83,
+ 0x24ae86,
+ 0x50e01bc2,
+ 0x30f108,
+ 0x224ec4,
+ 0x224ec6,
+ 0x305546,
+ 0x255f04,
+ 0x32fd05,
+ 0x3a8108,
+ 0x3a8607,
+ 0x3b0bc7,
+ 0x3b0bcf,
+ 0x28f286,
+ 0x210d03,
+ 0x210d04,
+ 0x2251c4,
+ 0x229103,
+ 0x224784,
+ 0x373e44,
+ 0x51226442,
+ 0x287303,
+ 0x390683,
+ 0x51617642,
+ 0x222a43,
+ 0x24f803,
+ 0x218e4a,
+ 0x23b5c7,
+ 0x3a568c,
+ 0x3a5946,
+ 0x230ac6,
+ 0x23a6c7,
+ 0x2302c7,
+ 0x23e289,
+ 0x21f144,
+ 0x23ea84,
+ 0x51a0a442,
+ 0x51e01402,
+ 0x29ba46,
+ 0x250704,
+ 0x376e86,
+ 0x230748,
+ 0x330cc4,
+ 0x264c86,
+ 0x2c9745,
+ 0x25f008,
0x207503,
- 0x269185,
- 0x26b043,
- 0x23d2c3,
- 0x23d2c4,
- 0x26f8c3,
- 0x502de902,
- 0x50600fc2,
- 0x273c09,
- 0x283745,
- 0x283944,
- 0x285a05,
- 0x20de04,
- 0x3a96c7,
- 0x339c45,
- 0x24ccc4,
- 0x24ccc8,
- 0x2d2946,
- 0x2d4004,
- 0x2d4488,
- 0x2d76c7,
- 0x50a1b842,
- 0x2e1944,
- 0x228444,
- 0x2b7c47,
- 0x50e74644,
- 0x255342,
- 0x51214202,
- 0x2636c3,
- 0x2636c4,
- 0x234043,
- 0x234045,
- 0x5162dbc2,
- 0x2f8a45,
- 0x219b82,
- 0x381505,
- 0x360805,
- 0x51a0acc2,
- 0x2153c4,
- 0x51e063c2,
- 0x22d2c6,
- 0x2ab886,
- 0x269f88,
- 0x2b89c8,
- 0x2e4d04,
- 0x314e05,
- 0x2f8849,
- 0x329a04,
- 0x2cfa44,
- 0x254a83,
- 0x52210ec5,
- 0x378047,
- 0x2895c4,
- 0x39ab0d,
- 0x2e74c2,
- 0x2e74c3,
- 0x2e7583,
- 0x52601d42,
- 0x388bc5,
- 0x2eb107,
- 0x226b84,
- 0x226b87,
- 0x2951c9,
- 0x2c0a89,
- 0x21d047,
- 0x253143,
- 0x288308,
- 0x239c09,
- 0x2e7f47,
- 0x2e82c5,
- 0x2e8a86,
- 0x2e90c6,
- 0x2e9245,
- 0x245c85,
- 0x52a00c42,
- 0x222885,
- 0x2ba70a,
- 0x2a6708,
- 0x21f986,
- 0x2e2447,
- 0x265dc4,
- 0x2b0387,
- 0x2ecd86,
- 0x52e00242,
- 0x2117c6,
- 0x2f048a,
- 0x2f1645,
- 0x532d1e82,
- 0x53649742,
- 0x2dc986,
- 0x2ec288,
- 0x39eac7,
- 0x53a00602,
- 0x20fa43,
- 0x200a06,
- 0x308e44,
- 0x39f586,
- 0x322c46,
- 0x37cf8a,
- 0x3a8b05,
- 0x20cdc6,
- 0x20d3c3,
- 0x20d3c4,
+ 0x266a45,
+ 0x269b43,
+ 0x242083,
+ 0x242084,
+ 0x26afc3,
+ 0x522e1202,
+ 0x52602482,
+ 0x26dc89,
+ 0x274985,
+ 0x283dc4,
+ 0x3614c5,
+ 0x210804,
+ 0x2ed107,
+ 0x33fac5,
+ 0x252dc4,
+ 0x252dc8,
+ 0x2d3486,
+ 0x2d5204,
+ 0x2d5208,
+ 0x2d5e87,
+ 0x52a015c2,
+ 0x2da0c4,
+ 0x2d3904,
+ 0x201d47,
+ 0x52e41384,
+ 0x22dc82,
+ 0x53201882,
+ 0x202b43,
+ 0x216b84,
+ 0x222903,
+ 0x222905,
+ 0x5362c082,
+ 0x2e9085,
+ 0x210fc2,
+ 0x376445,
+ 0x35ef05,
+ 0x53a168c2,
+ 0x2168c4,
+ 0x53e08d82,
+ 0x2c7b06,
+ 0x2ac106,
+ 0x268988,
+ 0x2b7b88,
+ 0x2e8b04,
+ 0x35e245,
+ 0x2f39c9,
+ 0x29f484,
+ 0x2d0344,
+ 0x2513c3,
+ 0x5420dfc5,
+ 0x374f07,
+ 0x2881c4,
+ 0x35a90d,
+ 0x35b202,
+ 0x3858c3,
+ 0x39a083,
+ 0x54601082,
+ 0x3886c5,
+ 0x31b447,
+ 0x20f0c4,
+ 0x20f0c7,
+ 0x293a49,
+ 0x2bf249,
+ 0x214687,
+ 0x24fa83,
+ 0x2b52c8,
+ 0x23dd09,
+ 0x2e9947,
+ 0x2e9cc5,
+ 0x2ea486,
+ 0x2eaac6,
+ 0x2eac45,
+ 0x248905,
+ 0x54a01282,
+ 0x228685,
+ 0x2b9988,
+ 0x2a79c6,
+ 0x3a1c87,
+ 0x2e4b04,
+ 0x2ab1c7,
+ 0x2edd06,
+ 0x54e00242,
+ 0x212f06,
+ 0x2f004a,
+ 0x2f1045,
+ 0x552d29c2,
+ 0x55638282,
+ 0x2da606,
+ 0x3574c8,
+ 0x55babf47,
+ 0x55e00602,
+ 0x20a503,
+ 0x3b0306,
+ 0x30aa04,
+ 0x3338c6,
+ 0x341746,
+ 0x3971ca,
+ 0x3a1e05,
+ 0x20d586,
+ 0x218743,
+ 0x218744,
0x207282,
- 0x2ff3c3,
- 0x53e44382,
- 0x2dc483,
- 0x2f7a84,
- 0x2ec3c4,
- 0x2ec3ca,
- 0x242103,
- 0x285748,
- 0x2746ca,
- 0x233147,
- 0x2f2f46,
- 0x22d184,
- 0x22e6c2,
- 0x207a82,
- 0x54205002,
- 0x23fa03,
- 0x24d547,
- 0x275187,
- 0x38f60b,
- 0x370684,
- 0x347107,
- 0x275b06,
- 0x213cc7,
- 0x29e3c4,
- 0x2c7d45,
- 0x29fe45,
- 0x54614882,
- 0x226646,
- 0x2c82c3,
- 0x22e942,
- 0x30e5c6,
- 0x54a0d182,
- 0x54e01582,
- 0x201585,
- 0x5521f6c2,
- 0x556020c2,
- 0x2e4685,
- 0x38dd45,
- 0x20ce85,
- 0x267743,
- 0x2350c5,
- 0x2d1447,
- 0x2a7405,
- 0x32a4c5,
- 0x25f344,
- 0x23f046,
- 0x246184,
- 0x55a06882,
- 0x278dc5,
- 0x2a2a47,
- 0x2fc3c8,
- 0x26cc46,
- 0x26cc4d,
- 0x272789,
- 0x272792,
- 0x2efd05,
- 0x2f8d83,
- 0x56601382,
- 0x2e4444,
- 0x202583,
- 0x324d05,
- 0x35f8c5,
- 0x56a1ce42,
- 0x36ab43,
- 0x56e3e2c2,
- 0x57295802,
- 0x5760d502,
- 0x33d205,
- 0x365dc3,
- 0x323c08,
- 0x57a030c2,
- 0x57e035c2,
- 0x2a4986,
- 0x32820a,
- 0x20c903,
- 0x234703,
- 0x2e9843,
- 0x58a03d02,
- 0x66e02c02,
- 0x6760a242,
- 0x201502,
- 0x38c0c9,
- 0x2bcb84,
- 0x2579c8,
- 0x67ae7242,
- 0x67e03f02,
- 0x2e1305,
- 0x231948,
- 0x245108,
- 0x39e0cc,
- 0x2352c3,
- 0x240242,
- 0x682049c2,
- 0x2c4346,
- 0x2f3dc5,
- 0x321ac3,
- 0x380786,
- 0x2f3f06,
- 0x24fe43,
- 0x2f6703,
- 0x2f7146,
- 0x2f7f04,
- 0x272186,
- 0x2c72c5,
- 0x2f818a,
- 0x29e8c4,
- 0x2f9844,
- 0x348a4a,
- 0x6866ff82,
- 0x33de45,
- 0x2fb58a,
- 0x2fc5c5,
- 0x2fd144,
- 0x2fd246,
- 0x2fd3c4,
- 0x340186,
- 0x68a00282,
- 0x27bdc6,
- 0x27ce85,
- 0x203707,
- 0x22eb06,
- 0x237684,
- 0x2afb87,
- 0x30e2c6,
- 0x211805,
- 0x2af7c7,
- 0x39b2c7,
- 0x39b2ce,
- 0x224046,
- 0x27d205,
- 0x27ef07,
- 0x227603,
- 0x227607,
- 0x3aa985,
- 0x20fd04,
- 0x2213c2,
- 0x2e5b47,
- 0x230284,
- 0x2d8f44,
- 0x25ee4b,
- 0x21b503,
- 0x2835c7,
- 0x21b504,
- 0x2a5247,
- 0x22b603,
- 0x32cf0d,
- 0x389408,
- 0x24cbc4,
- 0x24cbc5,
- 0x2ffbc5,
- 0x2fdc03,
- 0x68e1a642,
- 0x2ff383,
- 0x2ff603,
- 0x38cb44,
- 0x279785,
- 0x218fc7,
- 0x20d446,
- 0x36edc3,
- 0x37784b,
- 0x30e70b,
- 0x26e78b,
- 0x27988a,
- 0x2a608b,
- 0x2d0acb,
- 0x2d1ecc,
- 0x2f6d11,
- 0x33ae8a,
- 0x34b2cb,
- 0x376acb,
- 0x3b008a,
- 0x3b218a,
- 0x2fffcd,
- 0x30128e,
- 0x30190b,
- 0x301bca,
- 0x302f11,
- 0x30334a,
- 0x30384b,
- 0x303d8e,
- 0x3046cc,
- 0x304a4b,
- 0x304d0e,
- 0x30508c,
- 0x30700a,
- 0x307d0c,
- 0x6930800a,
- 0x3095c9,
- 0x30ae8a,
- 0x30b10a,
- 0x30b38b,
- 0x30da0e,
- 0x30dd91,
- 0x31a149,
- 0x31a38a,
- 0x31ac4b,
- 0x31edca,
- 0x31f916,
- 0x3210cb,
- 0x324aca,
- 0x32510a,
- 0x32788b,
- 0x32aa09,
- 0x32d889,
- 0x32e20d,
- 0x32ea8b,
- 0x32f7cb,
- 0x33018b,
- 0x330949,
- 0x330f8e,
- 0x3314ca,
- 0x3338ca,
- 0x333e0a,
- 0x33454b,
- 0x334d8b,
- 0x33504d,
- 0x33734d,
- 0x338090,
- 0x33854b,
- 0x338b4c,
- 0x3397cb,
- 0x33b98b,
- 0x33e48b,
- 0x34318b,
- 0x343c0f,
- 0x343fcb,
- 0x344c4a,
- 0x345289,
- 0x3456c9,
- 0x345d4b,
- 0x34600e,
- 0x3490cb,
- 0x349e8f,
- 0x34c38b,
- 0x34c64b,
- 0x34c90b,
- 0x34cd4a,
- 0x3509c9,
- 0x35688f,
- 0x35d8cc,
- 0x35dfcc,
- 0x35f58e,
- 0x35fd8f,
- 0x36014e,
- 0x360c50,
- 0x36104f,
- 0x36304e,
- 0x36350c,
- 0x363812,
- 0x366291,
- 0x36684e,
- 0x366c8e,
- 0x3671ce,
- 0x36754f,
- 0x36790e,
- 0x367c93,
- 0x368151,
- 0x36858e,
- 0x368a0c,
- 0x369a93,
- 0x36a510,
- 0x36af4c,
- 0x36b24c,
- 0x36b70b,
- 0x36c6ce,
- 0x36da8b,
- 0x36decb,
- 0x36f48c,
- 0x375c0a,
- 0x3762cc,
- 0x3765cc,
- 0x3768c9,
- 0x378acb,
- 0x378d88,
- 0x378f89,
- 0x378f8f,
- 0x37a8cb,
- 0x37b5ca,
- 0x37ed0c,
- 0x380f09,
- 0x3812c8,
- 0x381ccb,
- 0x38214b,
- 0x38348a,
- 0x38370b,
- 0x384e8c,
- 0x385888,
- 0x38960b,
- 0x38bdcb,
- 0x38f8cb,
- 0x391acb,
- 0x39ae4b,
- 0x39b109,
- 0x39b64d,
- 0x3a0b8a,
- 0x3a1ad7,
- 0x3a2758,
- 0x3a6909,
- 0x3a7b0b,
- 0x3ab094,
- 0x3ab58b,
- 0x3abb0a,
+ 0x2fe483,
+ 0x56253e82,
+ 0x2dd843,
+ 0x2f7904,
+ 0x2dca04,
+ 0x35760a,
+ 0x245483,
+ 0x283b08,
+ 0x36a40a,
+ 0x278447,
+ 0x2f4846,
+ 0x2c79c4,
+ 0x22abc2,
+ 0x200e42,
+ 0x56609202,
+ 0x244603,
+ 0x253647,
+ 0x29f1c7,
+ 0x38f98b,
+ 0x3643c4,
+ 0x349447,
+ 0x272e86,
+ 0x213807,
+ 0x2ad204,
+ 0x33bb85,
+ 0x2a96c5,
+ 0x56a10442,
+ 0x221a46,
+ 0x2259c3,
+ 0x226cc2,
+ 0x226cc6,
+ 0x56e0d942,
+ 0x57203e42,
+ 0x203e45,
+ 0x57624982,
+ 0x57a06ec2,
+ 0x358845,
+ 0x2c0f45,
+ 0x20d645,
+ 0x264183,
+ 0x340185,
+ 0x2d1fc7,
+ 0x2aa2c5,
+ 0x3219c5,
+ 0x38b604,
+ 0x379bc6,
+ 0x243c84,
+ 0x57e00cc2,
+ 0x276485,
+ 0x2a4887,
+ 0x377088,
+ 0x26a8c6,
+ 0x26a8cd,
+ 0x270789,
+ 0x270792,
+ 0x322045,
+ 0x326e03,
+ 0x58a019c2,
+ 0x2e6004,
+ 0x2022c3,
+ 0x35e145,
+ 0x2f2605,
+ 0x58e21e42,
+ 0x290f03,
+ 0x59242d42,
+ 0x59694082,
+ 0x59a18882,
+ 0x346e05,
+ 0x2a1003,
+ 0x397008,
+ 0x59e011c2,
+ 0x5a203282,
+ 0x29a086,
+ 0x27f30a,
+ 0x204983,
+ 0x256503,
+ 0x2f3c43,
+ 0x5ae06202,
+ 0x692033c2,
+ 0x69a04cc2,
+ 0x203dc2,
+ 0x38bd09,
+ 0x2bbcc4,
+ 0x2ae648,
+ 0x69ee9202,
+ 0x6a205882,
+ 0x2e4105,
+ 0x2355c8,
+ 0x247d88,
+ 0x2f334c,
+ 0x23a183,
+ 0x25d442,
+ 0x6a62d742,
+ 0x2c21c6,
+ 0x2f56c5,
+ 0x30f5c3,
+ 0x3903c6,
+ 0x2f5806,
+ 0x22fc43,
+ 0x2f6a03,
+ 0x2f6fc6,
+ 0x2f7d84,
+ 0x270186,
+ 0x2c6545,
+ 0x2f800a,
+ 0x23d184,
+ 0x2f8d84,
+ 0x34b94a,
+ 0x6aa6cd42,
+ 0x347a45,
+ 0x2fa44a,
+ 0x2fb885,
+ 0x2fc404,
+ 0x2fc506,
+ 0x2fc684,
+ 0x366dc6,
+ 0x6ae00282,
+ 0x38d706,
+ 0x38e7c5,
+ 0x204707,
+ 0x239f46,
+ 0x22d584,
+ 0x22d587,
+ 0x3277c6,
+ 0x212f45,
+ 0x2c6c87,
+ 0x39ae07,
+ 0x39ae0e,
+ 0x223ec6,
+ 0x22ee45,
+ 0x279a07,
+ 0x2deb83,
+ 0x2deb87,
+ 0x3a8a05,
+ 0x211204,
+ 0x2120c2,
+ 0x37a547,
+ 0x34aac4,
+ 0x2ae9c4,
+ 0x269bcb,
+ 0x2201c3,
+ 0x2c3a47,
+ 0x2201c4,
+ 0x2ce307,
+ 0x238943,
+ 0x32914d,
+ 0x388f08,
+ 0x252cc4,
+ 0x252cc5,
+ 0x2fca45,
+ 0x2fd003,
+ 0x6b224dc2,
+ 0x2fe443,
+ 0x2fea03,
+ 0x365c44,
+ 0x276e45,
+ 0x2193c7,
+ 0x2187c6,
+ 0x372f83,
+ 0x226e0b,
+ 0x29d34b,
+ 0x267c4b,
+ 0x276f4a,
+ 0x2a734b,
+ 0x2cae0b,
+ 0x2d2a0c,
+ 0x2d5711,
+ 0x33d90a,
+ 0x34e1cb,
+ 0x37bd0b,
+ 0x3ae28a,
+ 0x3b2eca,
+ 0x2ff60d,
+ 0x300d4e,
+ 0x301b4b,
+ 0x301e0a,
+ 0x302d51,
+ 0x30318a,
+ 0x30368b,
+ 0x303bce,
+ 0x30450c,
+ 0x30498b,
+ 0x304c4e,
+ 0x304fcc,
+ 0x3087ca,
+ 0x3098cc,
+ 0x6b709bca,
+ 0x30adc9,
+ 0x30c94a,
+ 0x30cbca,
+ 0x30ce4b,
+ 0x312f8e,
+ 0x313311,
+ 0x31bcc9,
+ 0x31bf0a,
+ 0x31cb0b,
+ 0x31e2ca,
+ 0x31ee56,
+ 0x32060b,
+ 0x321e0a,
+ 0x32220a,
+ 0x32424b,
+ 0x326889,
+ 0x329ac9,
+ 0x32ae0d,
+ 0x32c48b,
+ 0x32d60b,
+ 0x32dfcb,
+ 0x32e449,
+ 0x32ea8e,
+ 0x32efca,
+ 0x335e4a,
+ 0x33648a,
+ 0x336e4b,
+ 0x33768b,
+ 0x33794d,
+ 0x33904d,
+ 0x339c90,
+ 0x33a14b,
+ 0x33ac8c,
+ 0x33c3cb,
+ 0x33e00b,
+ 0x33f64b,
+ 0x34490b,
+ 0x34538f,
+ 0x34574b,
+ 0x34600a,
+ 0x346709,
+ 0x346b49,
+ 0x34808b,
+ 0x34834e,
+ 0x34bfcb,
+ 0x34cd8f,
+ 0x34ed8b,
+ 0x34f04b,
+ 0x34f30b,
+ 0x34f74a,
+ 0x353249,
+ 0x35624f,
+ 0x35ce4c,
+ 0x35d34c,
+ 0x35de0e,
+ 0x35e48f,
+ 0x35e84e,
+ 0x35fa90,
+ 0x35fe8f,
+ 0x3608ce,
+ 0x3617cc,
+ 0x361ad2,
+ 0x36b751,
+ 0x36bd0e,
+ 0x36c14e,
+ 0x36c68e,
+ 0x36ca0f,
+ 0x36cdce,
+ 0x36d153,
+ 0x36d611,
+ 0x36da4e,
+ 0x36decc,
+ 0x36e2d3,
+ 0x36f650,
+ 0x36ff0c,
+ 0x37020c,
+ 0x3706cb,
+ 0x37168e,
+ 0x371f8b,
+ 0x3723cb,
+ 0x373b0c,
+ 0x37acca,
+ 0x37b50c,
+ 0x37b80c,
+ 0x37bb09,
+ 0x37cf0b,
+ 0x37d1c8,
+ 0x37d3c9,
+ 0x37d3cf,
+ 0x37ed0b,
+ 0x37fa0a,
+ 0x380fcc,
+ 0x382e49,
+ 0x383208,
+ 0x38374b,
+ 0x383e4b,
+ 0x384c8a,
+ 0x384f0b,
+ 0x38544c,
+ 0x385e08,
+ 0x38910b,
+ 0x38ba0b,
+ 0x38fc4b,
+ 0x391a4b,
+ 0x39a98b,
+ 0x39ac49,
+ 0x39b18d,
+ 0x3a004a,
+ 0x3a0f97,
+ 0x3a2898,
+ 0x3a5bc9,
+ 0x3a7b4b,
+ 0x3a9414,
+ 0x3a990b,
+ 0x3a9e8a,
+ 0x3aa30a,
+ 0x3aa58b,
+ 0x3ab590,
+ 0x3ab991,
0x3ac48a,
- 0x3ac70b,
- 0x3ad710,
- 0x3adb11,
- 0x3ae3ca,
- 0x3af68d,
- 0x3afd8d,
- 0x3b254b,
- 0x3b3506,
- 0x226743,
- 0x6963d343,
- 0x382b86,
- 0x28c985,
- 0x369607,
- 0x33ad46,
- 0x16235c2,
- 0x2ad2c9,
- 0x274cc4,
- 0x2cf548,
- 0x23f943,
- 0x2e4387,
- 0x239942,
- 0x2ac9c3,
- 0x69a006c2,
- 0x2c2806,
- 0x2c3dc4,
- 0x310d04,
- 0x2383c3,
- 0x2383c5,
- 0x6a2c6b02,
- 0x2da544,
- 0x2717c7,
- 0x165ee02,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x202883,
+ 0x3ad88d,
+ 0x3adf8d,
+ 0x3b328b,
+ 0x3b4506,
+ 0x221b43,
+ 0x6bb99283,
+ 0x323dc6,
+ 0x28b6c5,
+ 0x2c55c7,
+ 0x33d7c6,
+ 0x1617982,
+ 0x2b0d49,
+ 0x29ed04,
+ 0x2cfe48,
+ 0x242743,
+ 0x2e5f47,
+ 0x230902,
+ 0x2acbc3,
+ 0x6be006c2,
+ 0x2c0586,
+ 0x2c17c4,
+ 0x307c84,
+ 0x236c43,
+ 0x236c45,
+ 0x6c6ff382,
+ 0x6caa8004,
+ 0x26f7c7,
+ 0x16ce2c2,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x2025c3,
0x200882,
- 0x894c8,
- 0x204a82,
- 0x2d9d43,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x2161c3,
- 0x315ed6,
- 0x319093,
- 0x346f89,
- 0x3acf08,
- 0x2ee609,
- 0x2fb706,
- 0x30a3d0,
- 0x3b0ad3,
- 0x207748,
- 0x259687,
- 0x277847,
- 0x29deca,
- 0x2f7b09,
- 0x32a189,
- 0x2975cb,
- 0x329186,
- 0x3115ca,
- 0x21ed86,
- 0x2748c3,
- 0x2ef4c5,
- 0x222dc8,
- 0x22d38d,
- 0x35818c,
- 0x27cb47,
- 0x3015cd,
- 0x3a3d84,
- 0x22ec8a,
- 0x22f5ca,
- 0x22fa8a,
- 0x2631c7,
- 0x237f07,
- 0x23a9c4,
- 0x25e146,
- 0x354e44,
- 0x2ed248,
- 0x2a97c9,
- 0x2b9206,
- 0x2b9208,
- 0x23d78d,
- 0x2c0cc9,
- 0x203f88,
- 0x23d147,
- 0x2017ca,
- 0x247106,
- 0x258c87,
- 0x2db9c4,
- 0x242dc7,
- 0x35c4ca,
- 0x337bce,
- 0x24f2c5,
- 0x2fd94b,
- 0x2efb09,
- 0x2729c9,
- 0x2a54c7,
- 0x399f4a,
- 0x2b7b87,
- 0x2fe3c9,
- 0x358648,
- 0x2d7c8b,
- 0x2cf185,
- 0x227f8a,
- 0x218d49,
- 0x321a4a,
- 0x2c3f4b,
- 0x242ccb,
- 0x297355,
- 0x2d4345,
- 0x23d1c5,
- 0x2e064a,
- 0x3061ca,
- 0x31e007,
- 0x21b9c3,
- 0x29cd48,
- 0x2cb7ca,
- 0x220786,
- 0x239a49,
- 0x265b08,
- 0x2d4004,
- 0x3379c9,
- 0x2b89c8,
- 0x357b87,
- 0x278dc6,
- 0x2a2a47,
- 0x293687,
- 0x23a405,
- 0x24f10c,
- 0x24cbc5,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x204a82,
- 0x258403,
- 0x249943,
- 0x202883,
- 0x2257c3,
- 0x258403,
- 0x249943,
- 0x223cc3,
- 0x2257c3,
- 0x894c8,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x894c8,
- 0x204a82,
- 0x201802,
- 0x22fcc2,
- 0x202602,
- 0x203c42,
- 0x2954c2,
- 0x4658403,
- 0x230743,
- 0x2095c3,
- 0x2d9d43,
- 0x202503,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x231a03,
- 0x894c8,
- 0x24c844,
- 0x2526c7,
- 0x255683,
- 0x2c2f44,
- 0x232283,
- 0x283f83,
- 0x2d9d43,
+ 0x880c8,
+ 0x216582,
+ 0x21eb03,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x217643,
+ 0x317416,
+ 0x31a5d3,
+ 0x3492c9,
+ 0x3aad88,
+ 0x3a6389,
+ 0x2fa5c6,
+ 0x32c750,
+ 0x21d6d3,
+ 0x200b08,
+ 0x25aa47,
+ 0x274ec7,
+ 0x29cb4a,
+ 0x2f7989,
+ 0x3336c9,
+ 0x28a70b,
+ 0x325506,
+ 0x31cf8a,
+ 0x223586,
+ 0x29e903,
+ 0x28e085,
+ 0x217188,
+ 0x2c7bcd,
+ 0x357c4c,
+ 0x38e487,
+ 0x3025cd,
+ 0x3a8204,
+ 0x23214a,
+ 0x232a8a,
+ 0x232f4a,
+ 0x21d9c7,
+ 0x23cfc7,
+ 0x23f644,
+ 0x239506,
+ 0x3258c4,
+ 0x2ec848,
+ 0x25f709,
+ 0x2b83c6,
+ 0x2b83c8,
+ 0x2423cd,
+ 0x2bf489,
+ 0x378cc8,
+ 0x241f07,
+ 0x2fe78a,
+ 0x24a4c6,
+ 0x25a047,
+ 0x2cdac4,
+ 0x240d07,
+ 0x30130a,
+ 0x3397ce,
+ 0x255805,
+ 0x2fcd4b,
+ 0x277a09,
+ 0x223349,
+ 0x2a2087,
+ 0x358b0a,
+ 0x201c87,
+ 0x39fc89,
+ 0x358108,
+ 0x369c4b,
+ 0x2cf145,
+ 0x2e0e0a,
+ 0x2a37c9,
+ 0x30f54a,
+ 0x2c1dcb,
+ 0x240c0b,
+ 0x28a495,
+ 0x2d5d45,
+ 0x241f85,
+ 0x2e2f4a,
+ 0x215cca,
+ 0x310c47,
+ 0x220683,
+ 0x29b9c8,
+ 0x2cb14a,
+ 0x224ec6,
+ 0x23db49,
+ 0x25f008,
+ 0x2d5204,
+ 0x22fb09,
+ 0x2b7b88,
+ 0x32c247,
+ 0x276486,
+ 0x2a4887,
+ 0x28fd87,
+ 0x23f085,
+ 0x25564c,
+ 0x252cc5,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x216582,
+ 0x22d183,
+ 0x238483,
+ 0x2025c3,
+ 0x2264c3,
+ 0x22d183,
+ 0x238483,
+ 0x223b43,
+ 0x2264c3,
+ 0x880c8,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x880c8,
+ 0x216582,
+ 0x201a42,
+ 0x233182,
+ 0x201982,
+ 0x204c02,
+ 0x293d42,
+ 0x462d183,
+ 0x2343c3,
+ 0x211cc3,
+ 0x21eb03,
+ 0x202243,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x20b443,
+ 0x880c8,
+ 0x335d44,
+ 0x24f007,
+ 0x251fc3,
+ 0x231404,
+ 0x214bc3,
+ 0x282343,
+ 0x21eb03,
+ 0x16e747,
0x200882,
- 0x123743,
- 0x5604a82,
- 0x22fcc2,
- 0x1104,
- 0x2016c2,
- 0xdfdc4,
- 0x894c8,
- 0x206043,
- 0x2c69c3,
- 0x5e58403,
- 0x22ec84,
- 0x6230743,
- 0x66d9d43,
- 0x20b9c2,
- 0x201104,
- 0x249943,
- 0x211783,
- 0x202542,
- 0x2257c3,
- 0x21a842,
- 0x2e6443,
- 0x203182,
- 0x200f43,
- 0x265bc3,
- 0x203702,
- 0x894c8,
- 0x206043,
- 0x211783,
- 0x202542,
- 0x2e6443,
- 0x203182,
- 0x200f43,
- 0x265bc3,
- 0x203702,
- 0x2e6443,
- 0x203182,
- 0x200f43,
- 0x265bc3,
- 0x203702,
- 0x258403,
- 0x323743,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x201104,
- 0x202503,
- 0x219bc3,
- 0x2021c4,
- 0x249943,
- 0x2257c3,
- 0x20bb42,
- 0x219683,
- 0x894c8,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x323743,
- 0x204a82,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x201104,
- 0x249943,
- 0x2257c3,
- 0x2e82c5,
- 0x21ce42,
+ 0x123ac3,
+ 0x5a16582,
+ 0x86a0d,
+ 0x233182,
+ 0x1604,
+ 0x201502,
+ 0x5e01508,
+ 0xe26c4,
+ 0x880c8,
+ 0x140de82,
+ 0x14fa2c6,
+ 0x230983,
+ 0x316403,
+ 0x662d183,
+ 0x232144,
+ 0x6a343c3,
+ 0x6e1eb03,
+ 0x2082c2,
+ 0x201604,
+ 0x238483,
+ 0x212ec3,
+ 0x202282,
+ 0x2264c3,
+ 0x21ed42,
+ 0x2e86c3,
+ 0x201bc2,
+ 0x29c743,
+ 0x22d743,
+ 0x204702,
+ 0x880c8,
+ 0x230983,
+ 0x212ec3,
+ 0x202282,
+ 0x2e86c3,
+ 0x201bc2,
+ 0x29c743,
+ 0x22d743,
+ 0x204702,
+ 0x2e86c3,
+ 0x201bc2,
+ 0x29c743,
+ 0x22d743,
+ 0x204702,
+ 0x22d183,
+ 0x323ac3,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x201604,
+ 0x202243,
+ 0x211003,
+ 0x212444,
+ 0x238483,
+ 0x2264c3,
+ 0x202002,
+ 0x21bd03,
+ 0x880c8,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x323ac3,
+ 0x216582,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x201604,
+ 0x238483,
+ 0x2264c3,
+ 0x2e9cc5,
+ 0x221e42,
0x200882,
- 0x894c8,
- 0x2d9d43,
- 0x2542c1,
- 0x20b041,
- 0x254281,
- 0x20adc1,
- 0x24c901,
- 0x271541,
- 0x24c8c1,
- 0x279a81,
- 0x2f6f01,
- 0x300281,
+ 0x880c8,
+ 0x1462d48,
+ 0x21eb03,
+ 0x225b41,
+ 0x20fd41,
+ 0x20c401,
+ 0x20c041,
+ 0x226fc1,
+ 0x26f541,
+ 0x252041,
+ 0x225c41,
+ 0x2d5901,
+ 0x2ff8c1,
0x200141,
0x200001,
- 0x894c8,
+ 0x880c8,
0x200481,
0x200741,
0x200081,
- 0x201181,
+ 0x200c81,
0x2007c1,
0x200901,
0x200041,
- 0x202b41,
+ 0x204281,
0x2001c1,
0x2000c1,
0x200341,
- 0x200cc1,
- 0x200e81,
0x200ac1,
- 0x219e81,
- 0x200c01,
+ 0x201501,
+ 0x2014c1,
+ 0x204101,
+ 0x200b81,
0x200241,
0x200a01,
0x2002c1,
0x200281,
- 0x203701,
- 0x203fc1,
+ 0x204701,
+ 0x20dec1,
0x200781,
0x200641,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x204a82,
- 0x258403,
- 0x230743,
- 0x2016c2,
- 0x2257c3,
- 0x63007,
- 0x1f186,
- 0x1d84a,
- 0x87548,
- 0x4d088,
- 0x4d447,
- 0x543c6,
- 0xceb05,
- 0x555c5,
- 0x7e246,
- 0x152dc6,
- 0x224284,
- 0x325607,
- 0x894c8,
- 0x2afc84,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x258403,
- 0x230743,
- 0x2095c3,
- 0x2d9d43,
- 0x202503,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x21ce42,
- 0x2b6a83,
- 0x21a1c3,
- 0x262043,
- 0x202202,
- 0x245403,
- 0x203803,
- 0x202403,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x216582,
+ 0x22d183,
+ 0x2343c3,
+ 0x201502,
+ 0x2264c3,
+ 0x16e747,
+ 0x131ac7,
+ 0x1e1c6,
+ 0x1736ca,
+ 0x85c48,
+ 0x53188,
+ 0x53547,
+ 0x50d06,
+ 0xce6c5,
+ 0x51f05,
+ 0x161186,
+ 0x155646,
+ 0x224104,
+ 0x322707,
+ 0x880c8,
+ 0x22d684,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x22d183,
+ 0x2343c3,
+ 0x211cc3,
+ 0x21eb03,
+ 0x202243,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x221e42,
+ 0x2be043,
+ 0x2f5003,
+ 0x20b283,
+ 0x202e02,
+ 0x248083,
+ 0x204803,
+ 0x206e83,
0x200001,
0x207043,
- 0x271f44,
- 0x328983,
- 0x30abc3,
- 0x219fc3,
- 0x35c043,
- 0xa258403,
- 0x232ec4,
- 0x219f83,
- 0x205283,
- 0x230743,
- 0x230483,
- 0x218903,
- 0x29fa83,
- 0x30ab43,
- 0x222303,
- 0x213543,
- 0x247a84,
- 0x237842,
- 0x24c943,
- 0x256383,
- 0x275843,
- 0x254203,
- 0x252f83,
- 0x2d9d43,
- 0x2e4f03,
- 0x21bbc3,
- 0x201103,
- 0x2148c3,
- 0x35fbc3,
- 0x318703,
- 0x3857c3,
+ 0x26ff44,
+ 0x324dc3,
+ 0x30c683,
+ 0x21dec3,
+ 0x379b43,
+ 0xaa2d183,
+ 0x2374c4,
+ 0x21de83,
+ 0x232383,
+ 0x2343c3,
+ 0x234103,
+ 0x208143,
+ 0x2a3ec3,
+ 0x30c603,
+ 0x228103,
+ 0x212103,
+ 0x24c1c4,
+ 0x23aa82,
+ 0x252a43,
+ 0x2585c3,
+ 0x272bc3,
+ 0x250b43,
+ 0x24f8c3,
+ 0x21eb03,
+ 0x2db983,
+ 0x220883,
+ 0x201603,
+ 0x210483,
+ 0x2f2903,
+ 0xaefe5c3,
+ 0x385d43,
0x200983,
- 0x230c43,
- 0x219bc3,
- 0x20f082,
- 0x288883,
- 0x249943,
- 0x1602883,
- 0x212b43,
- 0x231583,
- 0x22e043,
- 0x2257c3,
- 0x31c643,
- 0x219683,
- 0x236243,
- 0x2f6783,
- 0x2e6603,
- 0x3b0845,
- 0x244443,
- 0x2e6643,
- 0x2e7a03,
- 0x20d3c4,
- 0x259f83,
- 0x35c0c3,
- 0x275783,
- 0x231a03,
- 0x21ce42,
- 0x2352c3,
- 0x2fa644,
- 0x2d8f44,
- 0x23fc43,
- 0x894c8,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x204a82,
- 0x2257c3,
- 0xb658403,
- 0x2d9d43,
- 0x219bc3,
- 0x205842,
- 0x894c8,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
+ 0x2348c3,
+ 0x211003,
+ 0x21e442,
+ 0x286fc3,
+ 0x238483,
+ 0x16025c3,
+ 0x217e83,
+ 0x21da43,
+ 0x29af43,
+ 0x2264c3,
+ 0x30e803,
+ 0x21bd03,
+ 0x2ad283,
+ 0x2f6a83,
+ 0x2e8883,
+ 0x21d445,
+ 0x215cc3,
+ 0x2e88c3,
+ 0x39c083,
+ 0x218744,
+ 0x25b343,
+ 0x22e8c3,
+ 0x277c03,
+ 0x20b443,
+ 0x221e42,
+ 0x23a183,
+ 0x2f9b84,
+ 0x2ae9c4,
+ 0x244843,
+ 0x880c8,
+ 0x882,
+ 0x1002,
+ 0x2e02,
+ 0x1482,
+ 0x2d42,
+ 0x4c2,
+ 0x44682,
+ 0x202,
+ 0x1f82,
+ 0x982,
+ 0x43742,
+ 0xe842,
+ 0xe02,
+ 0x7a82,
+ 0x93d42,
+ 0x6d42,
+ 0x26282,
+ 0x7442,
+ 0x1f882,
+ 0x8b02,
+ 0x4b42,
+ 0x1c882,
+ 0x13c2,
+ 0x17642,
+ 0x1402,
+ 0xdfc2,
+ 0x6ec2,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x216582,
+ 0x2264c3,
+ 0xc22d183,
+ 0x21eb03,
+ 0x211003,
+ 0x223b42,
+ 0x880c8,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
0x6c2,
- 0x2034c2,
- 0x2240c2,
- 0x894c8,
- 0x4a82,
- 0x232502,
- 0x209082,
- 0x239642,
- 0x201142,
- 0x20ba82,
- 0x555c5,
- 0x20d082,
- 0x202542,
- 0x202bc2,
- 0x2019c2,
- 0x200ac2,
- 0x384f82,
- 0x214202,
- 0x22c942,
- 0x11880d,
- 0xe95c9,
- 0x44f0b,
- 0xd1308,
- 0x182cc9,
- 0x2d9d43,
- 0x894c8,
- 0x894c8,
- 0x4dfc6,
+ 0x202f02,
+ 0x223f42,
+ 0x880c8,
+ 0x16582,
+ 0x235f82,
+ 0x203142,
+ 0x23e682,
+ 0x201642,
+ 0x208382,
+ 0x51f05,
+ 0x2029c2,
+ 0x202282,
+ 0x203382,
+ 0x205d02,
+ 0x206d42,
+ 0x385542,
+ 0x201882,
+ 0x227642,
+ 0x16e747,
+ 0x119d4d,
+ 0xeafc9,
+ 0x47b8b,
+ 0xd1e88,
+ 0x13bc89,
+ 0x21eb03,
+ 0x880c8,
+ 0x880c8,
+ 0x53e06,
0x200882,
- 0x224284,
- 0x204a82,
- 0x258403,
- 0x201802,
- 0x230743,
- 0x2095c2,
- 0x2afc84,
- 0x202503,
- 0x20a582,
- 0x249943,
- 0x2016c2,
- 0x2257c3,
- 0x23d1c6,
- 0x30b94f,
- 0x6ffb43,
- 0x894c8,
- 0x204a82,
- 0x2095c3,
- 0x2d9d43,
- 0x219bc3,
- 0x147448b,
- 0x204a82,
- 0x258403,
- 0x2d9d43,
- 0x249943,
+ 0x224104,
+ 0x216582,
+ 0x22d183,
+ 0x201a42,
+ 0x2343c3,
+ 0x201f82,
+ 0x22d684,
+ 0x202243,
+ 0x209782,
+ 0x238483,
+ 0x201502,
+ 0x2264c3,
+ 0x241f86,
+ 0x30d40f,
+ 0x6fef43,
+ 0x880c8,
+ 0x216582,
+ 0x211cc3,
+ 0x21eb03,
+ 0x211003,
+ 0x1568ecb,
+ 0x16e747,
+ 0x216582,
+ 0x22d183,
+ 0x21eb03,
+ 0x238483,
0x200882,
- 0x207d42,
- 0x209e42,
- 0xea58403,
- 0x239482,
- 0x230743,
- 0x244942,
- 0x221b82,
- 0x2d9d43,
- 0x220442,
- 0x301b82,
- 0x242f42,
- 0x204042,
- 0x28b382,
- 0x201b02,
+ 0x201102,
+ 0x2093c2,
+ 0xfa2d183,
+ 0x23e4c2,
+ 0x2343c3,
+ 0x2475c2,
+ 0x227982,
+ 0x21eb03,
+ 0x21c2c2,
+ 0x301dc2,
+ 0x2a7fc2,
+ 0x201142,
+ 0x289f82,
+ 0x206982,
0x200902,
- 0x206dc2,
- 0x26b682,
- 0x213f02,
- 0x2ad182,
- 0x236bc2,
- 0x2c8302,
- 0x255582,
- 0x219bc3,
- 0x208f82,
- 0x249943,
- 0x23d982,
- 0x26e742,
- 0x2257c3,
- 0x245482,
- 0x2057c2,
- 0x205202,
- 0x200fc2,
- 0x20acc2,
- 0x2d1e82,
- 0x214882,
- 0x23e2c2,
- 0x2267c2,
- 0x301bca,
- 0x344c4a,
- 0x37ca0a,
- 0x3b3682,
- 0x20d042,
- 0x23d3c2,
- 0xef46cc9,
- 0xf3a490a,
- 0xf58fb47,
- 0xad82,
- 0x1a490a,
- 0x2054c4,
- 0xfe58403,
- 0x230743,
- 0x2446c4,
- 0x2d9d43,
- 0x201104,
- 0x202503,
- 0x219bc3,
- 0x249943,
- 0x202883,
- 0x2257c3,
- 0x244443,
- 0x224043,
- 0x894c8,
- 0x1454344,
- 0x53bc5,
- 0x51eca,
- 0x107c82,
- 0x17bac6,
- 0x153811,
- 0x10746cc9,
- 0x153c47,
- 0x3442,
- 0x1ac98a,
- 0xd9547,
- 0x894c8,
- 0xfea08,
- 0xdac7,
- 0x1181918b,
- 0x1a382,
- 0xee987,
- 0x574a,
- 0x11030f,
- 0x6308f,
- 0x19fc2,
- 0x4a82,
- 0x9f9c8,
- 0xe8d0a,
- 0x63608,
- 0x1842,
- 0x11008f,
- 0x128a0b,
- 0x1702c8,
- 0x7a287,
- 0xd964a,
- 0x574cb,
- 0x10d109,
- 0x1701c7,
- 0xf25cc,
- 0x11cac7,
- 0xcfd0a,
- 0x132948,
- 0xef6ce,
- 0x4ee8e,
- 0xd938b,
- 0x11e14b,
- 0xe930b,
- 0x1f189,
- 0x2158b,
- 0x23b0d,
- 0x29c4b,
- 0x2c38d,
- 0x57b8d,
- 0x7d04a,
- 0xd8d8b,
- 0xe5e4b,
- 0x177ac5,
- 0x108b50,
- 0x15428f,
- 0xf584f,
- 0xec4d,
- 0x71d50,
- 0x79c2,
- 0x11fa9188,
- 0x62e88,
- 0x122e0d05,
- 0x4360b,
- 0x4a748,
- 0x11e30a,
- 0x56c09,
- 0x5e5c7,
- 0x5e907,
- 0x5eac7,
- 0x5f107,
- 0x5fb07,
- 0x60407,
- 0x60e87,
- 0x65807,
- 0x66007,
- 0x661c7,
- 0x66c47,
+ 0x205e82,
+ 0x26a242,
+ 0x204d42,
+ 0x2ad802,
+ 0x230cc2,
+ 0x225a02,
+ 0x228f02,
+ 0x211003,
+ 0x203042,
+ 0x238483,
+ 0x2425c2,
+ 0x267c02,
+ 0x2264c3,
+ 0x248102,
+ 0x217642,
+ 0x20a442,
+ 0x202482,
+ 0x2168c2,
+ 0x2d29c2,
+ 0x210442,
+ 0x242d42,
+ 0x221bc2,
+ 0x301e0a,
+ 0x34600a,
+ 0x38074a,
+ 0x3b4682,
+ 0x20d802,
+ 0x23c282,
+ 0xff49009,
+ 0x103a418a,
+ 0x1042fe87,
+ 0xc002,
+ 0x1a418a,
+ 0x245dc4,
+ 0x10e2d183,
+ 0x2343c3,
+ 0x247344,
+ 0x21eb03,
+ 0x201604,
+ 0x202243,
+ 0x211003,
+ 0x238483,
+ 0x2025c3,
+ 0x2264c3,
+ 0x215cc3,
+ 0x223ec3,
+ 0x880c8,
+ 0x1450c84,
+ 0x50505,
+ 0x4e80a,
+ 0x109842,
+ 0x18b406,
+ 0x162d51,
+ 0x11749009,
+ 0x163187,
+ 0x4802,
+ 0x1aa80a,
+ 0xdb7c7,
+ 0x880c8,
+ 0xfd948,
+ 0xe707,
+ 0x1281c44b,
+ 0x15802,
+ 0x1a6707,
+ 0x1b1a4a,
+ 0x10728f,
+ 0x131b4f,
+ 0x1dec2,
+ 0x16582,
+ 0xa3e08,
+ 0xea70a,
+ 0x167408,
+ 0xf82,
+ 0x10700f,
+ 0x124e4b,
+ 0x2988,
+ 0x16e847,
+ 0x16a8a,
+ 0xae14b,
+ 0x112089,
+ 0x173507,
+ 0xf424c,
+ 0x10ec87,
+ 0xd060a,
+ 0x132d48,
+ 0x8e28e,
+ 0x553ce,
+ 0xdb60b,
+ 0x110d8b,
+ 0xead0b,
+ 0x1e1c9,
+ 0x1fb8b,
+ 0x2398d,
+ 0x260cb,
+ 0x2708d,
+ 0x2c90d,
+ 0x2ec8a,
+ 0xae80b,
+ 0xc6fcb,
+ 0xe82c5,
+ 0x10a710,
+ 0x8128f,
+ 0xb74f,
+ 0x2a24d,
+ 0x6fd50,
+ 0xd82,
+ 0x12fa2488,
+ 0x131948,
+ 0x132e4bc5,
+ 0x4668b,
+ 0x52088,
+ 0x110f4a,
+ 0x58d89,
+ 0x60587,
+ 0x608c7,
+ 0x60a87,
+ 0x611c7,
+ 0x629c7,
+ 0x62f47,
+ 0x636c7,
+ 0x63d47,
+ 0x64307,
+ 0x644c7,
+ 0x66087,
+ 0x66247,
+ 0x66407,
+ 0x665c7,
+ 0x668c7,
0x66e07,
- 0x66fc7,
- 0x67187,
- 0x67487,
- 0x678c7,
- 0x68e87,
- 0x69547,
- 0x69d07,
- 0x6a707,
- 0x6a8c7,
- 0x6aec7,
- 0x6b2c7,
+ 0x67a47,
+ 0x67f07,
+ 0x68707,
+ 0x69207,
+ 0x693c7,
+ 0x699c7,
+ 0x69e87,
+ 0x6a087,
+ 0x6a347,
+ 0x6a507,
+ 0x6a6c7,
+ 0x6ac07,
0x6b4c7,
- 0x6b787,
- 0x6b947,
- 0x6bb07,
- 0x6c6c7,
- 0x6cf87,
- 0x6da47,
- 0x6e147,
- 0x6e407,
- 0x6ea47,
- 0x6ec07,
- 0x6ef87,
- 0x6fdc7,
- 0x70047,
- 0x70447,
- 0x70fc7,
- 0x71187,
- 0x715c7,
- 0x72307,
- 0x72607,
- 0x72c07,
- 0x72dc7,
- 0x73147,
- 0x73587,
- 0xcbc2,
- 0x3f34a,
- 0xf6a07,
- 0x124c8f0b,
- 0x14c8f16,
- 0x15c11,
- 0xdce8a,
- 0x9f84a,
- 0x4dfc6,
- 0x18df4b,
- 0x1a042,
- 0x187c51,
- 0x97149,
- 0x90ec9,
- 0x6dc2,
- 0x9d6ca,
- 0xa3609,
- 0xa3d0f,
- 0xa4e8e,
- 0xa5ec8,
- 0xd4c2,
- 0x742c9,
- 0x8628e,
- 0xabdcc,
- 0xd328f,
- 0x19510e,
- 0xdf8c,
- 0x13349,
- 0x14f51,
- 0x24dc8,
- 0x2d892,
- 0xc7fcd,
- 0x1a638d,
- 0x34ecb,
- 0x3e755,
- 0x3f209,
- 0x41d8a,
- 0x4fb49,
- 0x56510,
- 0x6c40b,
- 0x7708f,
- 0x7804b,
- 0x7d90c,
- 0x7e650,
- 0x87f0a,
- 0x8874d,
- 0x1459ce,
- 0x17480a,
- 0x8d54c,
- 0x93354,
- 0x96dd1,
- 0x9b64b,
- 0x9c8cf,
- 0xa9f4d,
- 0xab74e,
- 0x157a4c,
- 0xebecc,
- 0x15774b,
- 0xe518e,
- 0xf9050,
- 0x12c8cb,
- 0x168e8d,
- 0xb3d4f,
- 0xb55cc,
- 0xb908e,
- 0xb9891,
- 0xbb70c,
- 0x11aa87,
- 0xc18cd,
- 0xc2b4c,
- 0xd2a90,
- 0xe330d,
- 0x1361c7,
- 0xeced0,
- 0xf1848,
- 0x11f00b,
- 0x16fe4f,
- 0x295c8,
- 0xdd08d,
- 0x181490,
- 0xaf303,
- 0xa482,
- 0x57f89,
- 0x4ec8a,
- 0xfa686,
- 0x128d4609,
- 0x15683,
- 0x108351,
- 0x153489,
- 0xcdc07,
- 0x11018b,
- 0xd21d0,
- 0xd268c,
- 0xd3a85,
- 0x1195c8,
- 0x19c30a,
- 0x126b87,
- 0x1a82,
- 0x54cca,
- 0xf5b89,
- 0x32f4a,
- 0x19ea0f,
- 0x3bdcb,
- 0x11068c,
- 0x110952,
- 0xadac5,
- 0x15e60a,
- 0x12edf6c5,
- 0x114203,
- 0x184f82,
- 0xe6e4a,
- 0x156288,
- 0x190c87,
- 0x3b82,
- 0xb482,
- 0x3182,
- 0x183e90,
- 0x3e42,
- 0x1a5c4f,
- 0x7e246,
- 0x11e78e,
- 0xd5e0b,
- 0x174a08,
- 0xca189,
- 0x17a092,
- 0x3e4d,
- 0x42b08,
- 0x44dc9,
- 0x4594d,
- 0x47289,
- 0x48a8b,
- 0x49388,
- 0x51d08,
- 0x55c88,
- 0x55f09,
- 0x5610a,
- 0x5dc4c,
- 0xe6bca,
- 0xf67c7,
- 0x10ecd,
- 0xea20b,
- 0x74acc,
- 0x5f350,
- 0x35c2,
- 0x16974d,
- 0x3d02,
- 0x2c02,
- 0xf670a,
- 0xdcd8a,
- 0xe428b,
- 0xe600c,
- 0xfe78e,
- 0x18cc0d,
- 0xea948,
+ 0x6bf87,
+ 0x6c687,
+ 0x6c947,
+ 0x6ce07,
+ 0x6cfc7,
+ 0x6d347,
+ 0x6e3c7,
+ 0x6ea07,
+ 0x6ee07,
+ 0x6efc7,
+ 0x6f187,
+ 0x6f5c7,
+ 0x70307,
+ 0x70607,
+ 0x70c07,
+ 0x70dc7,
+ 0x71147,
+ 0x71587,
+ 0xd382,
+ 0x33d8a,
+ 0xf9dc7,
+ 0x134c87cb,
+ 0x14c87d6,
+ 0x18351,
+ 0xdfb8a,
+ 0xa3c8a,
+ 0x53e06,
+ 0xc114b,
+ 0xb2c2,
+ 0x31ad1,
+ 0x959c9,
+ 0x90ac9,
+ 0x5e82,
+ 0x9c34a,
+ 0xa5449,
+ 0xa5c8f,
+ 0xa688e,
+ 0xa7188,
+ 0xf1c2,
+ 0x169a89,
+ 0x8498e,
+ 0xac64c,
+ 0xd400f,
+ 0x194a8e,
+ 0x1098c,
+ 0x15309,
+ 0x16451,
+ 0x19a48,
+ 0x2bd52,
+ 0x2e5cd,
+ 0x393cd,
+ 0x13ff8b,
+ 0x179d95,
+ 0x33c49,
+ 0x5488a,
+ 0x58749,
+ 0x5fe90,
+ 0x60f0b,
+ 0x6e54f,
+ 0x71d0b,
+ 0x756cc,
+ 0x787d0,
+ 0x8660a,
+ 0x86e8d,
+ 0x14ea0e,
+ 0x18004a,
+ 0x8c7cc,
+ 0x8fa54,
+ 0x95651,
+ 0x98f8b,
+ 0x9b54f,
+ 0xab6cd,
+ 0xabfce,
+ 0x12c10c,
+ 0x15710c,
+ 0xdc8cb,
+ 0xeef8e,
+ 0xfb250,
+ 0x10938b,
+ 0x11270d,
+ 0x15f28f,
+ 0xb504c,
+ 0xb824e,
+ 0xb8a51,
+ 0xba84c,
+ 0x1362c7,
+ 0x11c60d,
+ 0xbe94c,
+ 0xc4d90,
+ 0xd35cd,
+ 0xe7847,
+ 0xec4d0,
+ 0xf0688,
+ 0xf124b,
+ 0x17318f,
+ 0x2b848,
+ 0xdfd8d,
+ 0x1763d0,
+ 0x13aaf9c6,
+ 0xb0bc3,
+ 0x9682,
+ 0x2cd09,
+ 0x551ca,
+ 0xf9bc6,
+ 0x13cd5389,
+ 0x124c3,
+ 0x109f11,
+ 0x9f89,
+ 0xcd5c7,
+ 0x10710b,
+ 0xd2d10,
+ 0xd31cc,
+ 0xd47c5,
+ 0x11ab08,
+ 0x19be4a,
+ 0x122b07,
+ 0x25c2,
+ 0x5160a,
+ 0x1694c9,
+ 0xa62ca,
+ 0x1abe8f,
+ 0x4084b,
+ 0x10760c,
+ 0x1078d2,
+ 0xb5485,
+ 0x15d98a,
+ 0x142e1fc5,
+ 0x19900c,
+ 0x1157c3,
+ 0x185542,
+ 0xe8e4a,
+ 0x108548,
+ 0x163407,
+ 0x4b42,
+ 0x7982,
+ 0x1bc2,
+ 0x129e10,
+ 0x1402,
+ 0x3074f,
+ 0x161186,
+ 0x1113ce,
+ 0xe3a4b,
+ 0x180248,
+ 0xc9a89,
+ 0x17e4d2,
+ 0x178b8d,
+ 0x45e88,
+ 0x47a49,
+ 0x485cd,
+ 0x4a189,
+ 0x4a64b,
+ 0x4ac08,
+ 0x4e648,
+ 0x53f48,
+ 0x559c9,
+ 0x55bca,
+ 0x57f4c,
+ 0xe31ca,
+ 0xf6ac7,
+ 0xdfcd,
+ 0xeb88b,
+ 0x9eb0c,
+ 0x18b610,
+ 0x3282,
+ 0xc570d,
+ 0x6202,
+ 0x33c2,
+ 0xf6a0a,
+ 0xdfa8a,
+ 0xe5e4b,
+ 0xc718c,
+ 0xfd6ce,
+ 0x165d0d,
+ 0xf3dc8,
0x6c2,
- 0x10b2a68e,
- 0x10d8fb47,
- 0x1118fb49,
- 0x10083,
- 0x1171214c,
- 0xad82,
- 0x537d1,
- 0x12a5d1,
- 0x140851,
- 0x165e51,
- 0x11208f,
- 0x11eacc,
- 0x12478d,
- 0x14824d,
- 0x159a55,
- 0xad8c,
- 0x191050,
- 0x106d0c,
- 0x10c84c,
- 0x4a509,
- 0xad82,
- 0x5388e,
- 0x12a68e,
- 0x14090e,
- 0x165f0e,
- 0x11214c,
- 0x11eb89,
- 0xae49,
- 0x159c4d,
- 0x106dc9,
- 0x10c909,
- 0x133803,
- 0x95843,
- 0xad82,
- 0x153805,
- 0x1ac984,
- 0x28c84,
- 0xe7e44,
- 0x17b4c4,
- 0xff504,
- 0x153c44,
- 0x141d2c3,
- 0x1410d83,
- 0xfe444,
- 0x79c2,
- 0x18cc03,
+ 0x11a0c0ce,
+ 0x11c2fe87,
+ 0x121aa0c9,
+ 0x11583,
+ 0x127117cc,
+ 0xc002,
+ 0x50111,
+ 0xc011,
+ 0xa1091,
+ 0x81ed1,
+ 0x11170f,
+ 0x11dfcc,
+ 0x121acd,
+ 0x123f0d,
+ 0x142615,
+ 0x14b18c,
+ 0x159590,
+ 0xfa8c,
+ 0x5274c,
+ 0x47109,
+ 0xc002,
+ 0x501ce,
+ 0xc0ce,
+ 0xa114e,
+ 0x81f8e,
+ 0x1117cc,
+ 0x11e089,
+ 0x14b249,
+ 0x14280d,
+ 0xfb49,
+ 0x52809,
+ 0x1267c3,
+ 0x940c3,
+ 0xc002,
+ 0x162d45,
+ 0x1aa804,
+ 0xdf704,
+ 0x127244,
+ 0x17f904,
+ 0x17c084,
+ 0x163184,
+ 0x144bdc3,
+ 0x140de83,
+ 0x19fd04,
+ 0x1573dc3,
+ 0xd82,
+ 0x165d03,
0x200882,
- 0x204a82,
- 0x201802,
- 0x20bc82,
- 0x2095c2,
- 0x2016c2,
- 0x203182,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x201103,
- 0x249943,
- 0x2257c3,
- 0x894c8,
- 0x258403,
- 0x230743,
- 0x249943,
- 0x2257c3,
- 0x4fc3,
- 0x2d9d43,
+ 0x216582,
+ 0x201a42,
+ 0x206ac2,
+ 0x201f82,
+ 0x201502,
+ 0x201bc2,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x201603,
+ 0x238483,
+ 0x2264c3,
+ 0x880c8,
+ 0x22d183,
+ 0x2343c3,
+ 0x238483,
+ 0x2264c3,
+ 0x1d003,
+ 0x21eb03,
0x200882,
- 0x323743,
- 0x14a58403,
- 0x37e0c7,
- 0x2d9d43,
- 0x332283,
- 0x2021c4,
- 0x249943,
- 0x2257c3,
- 0x24388a,
- 0x23d1c5,
- 0x219683,
- 0x201582,
- 0x894c8,
- 0x894c8,
- 0x4a82,
- 0x10e102,
- 0xeeac5,
- 0x894c8,
- 0x58403,
- 0xefa47,
- 0xc678f,
- 0xfa704,
- 0x10d28a,
- 0xaba07,
- 0x9560a,
- 0x18e3ca,
- 0xfa686,
- 0x790d,
- 0x123743,
- 0x894c8,
- 0x4a82,
- 0x446c4,
- 0x68ac3,
- 0xe82c5,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x203803,
- 0x258403,
- 0x230743,
- 0x2095c3,
- 0x2d9d43,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x291083,
- 0x224043,
- 0x203803,
- 0x224284,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x22f903,
- 0x258403,
- 0x230743,
- 0x20e8c3,
- 0x2095c3,
- 0x2d9d43,
- 0x201104,
- 0x265743,
- 0x230c43,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x219683,
- 0x200a43,
- 0x16e58403,
- 0x230743,
- 0x241583,
- 0x2d9d43,
- 0x27da43,
- 0x230c43,
- 0x2257c3,
+ 0x323ac3,
+ 0x15e2d183,
+ 0x330d47,
+ 0x21eb03,
+ 0x332683,
+ 0x212444,
+ 0x238483,
+ 0x2264c3,
+ 0x24690a,
+ 0x241f85,
+ 0x21bd03,
+ 0x203e42,
+ 0x880c8,
+ 0x880c8,
+ 0x16582,
+ 0x113682,
+ 0x1a6845,
+ 0x880c8,
+ 0x2d183,
+ 0x77947,
+ 0x1161cf,
+ 0xf9c44,
+ 0x11220a,
+ 0xac287,
+ 0xf78a,
+ 0x93e8a,
+ 0xa660a,
+ 0xf9bc6,
+ 0x27ca,
+ 0xccd,
+ 0x123ac3,
+ 0x880c8,
+ 0x16582,
+ 0x47344,
+ 0x67683,
+ 0xe9cc5,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x204803,
+ 0x22d183,
+ 0x2343c3,
+ 0x211cc3,
+ 0x21eb03,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x290c83,
+ 0x223ec3,
+ 0x204803,
+ 0x224104,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x232dc3,
+ 0x22d183,
+ 0x2343c3,
+ 0x206ac3,
+ 0x211cc3,
+ 0x21eb03,
+ 0x201604,
+ 0x36b683,
+ 0x2348c3,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x21bd03,
+ 0x3b0343,
+ 0x1822d183,
+ 0x2343c3,
+ 0x244d43,
+ 0x21eb03,
+ 0x275803,
+ 0x2348c3,
+ 0x2264c3,
0x207443,
- 0x3284c4,
- 0x894c8,
- 0x17658403,
- 0x230743,
- 0x2a5f83,
- 0x2d9d43,
- 0x219bc3,
- 0x2021c4,
- 0x249943,
- 0x2257c3,
- 0x21ba43,
- 0x894c8,
- 0x17e58403,
- 0x230743,
- 0x2095c3,
- 0x202883,
- 0x2257c3,
- 0x894c8,
- 0x158fb47,
- 0x323743,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x201104,
- 0x2021c4,
- 0x249943,
- 0x2257c3,
- 0xfbfc4,
- 0x329345,
- 0x894c8,
+ 0x27f5c4,
+ 0x880c8,
+ 0x18a2d183,
+ 0x2343c3,
+ 0x2a7243,
+ 0x21eb03,
+ 0x211003,
+ 0x212444,
+ 0x238483,
+ 0x2264c3,
+ 0x220703,
+ 0x880c8,
+ 0x1922d183,
+ 0x2343c3,
+ 0x211cc3,
+ 0x2025c3,
+ 0x2264c3,
+ 0x880c8,
+ 0x142fe87,
+ 0x323ac3,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x201604,
+ 0x212444,
+ 0x238483,
+ 0x2264c3,
+ 0x16e747,
+ 0x176c84,
+ 0x1462d48,
+ 0xa7dcd,
+ 0x3256c5,
+ 0x880c8,
0x742,
- 0x31f43,
- 0x355b88,
- 0x241047,
- 0x224284,
- 0x352ac6,
- 0x359906,
- 0x894c8,
- 0x240303,
- 0x2f5249,
- 0x2b33d5,
- 0xb33df,
- 0x258403,
- 0x331dd2,
- 0xff686,
- 0x138e05,
- 0x11e30a,
- 0x56c09,
- 0x331b8f,
- 0x2afc84,
- 0x240a45,
- 0x35f990,
- 0x3ad107,
- 0x202883,
- 0x251b48,
- 0x2db58a,
- 0x23b9c4,
- 0x2df103,
- 0x23d1c6,
- 0x201582,
- 0x385c4b,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x2e4b43,
- 0x204a82,
- 0x249943,
- 0x2257c3,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x219bc3,
- 0x2257c3,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x332283,
- 0x208f83,
- 0x2257c3,
- 0x204a82,
- 0x258403,
- 0x230743,
- 0x249943,
- 0x2257c3,
+ 0x35bc3,
+ 0xe6786,
+ 0x307e48,
+ 0x3afd07,
+ 0x224104,
+ 0x355346,
+ 0x359446,
+ 0x880c8,
+ 0x301043,
+ 0x20b149,
+ 0x2b46d5,
+ 0xb46df,
+ 0x22d183,
+ 0x32f8d2,
+ 0xfea86,
+ 0x13af45,
+ 0x110f4a,
+ 0x58d89,
+ 0x32f68f,
+ 0x22d684,
+ 0x331145,
+ 0x2f26d0,
+ 0x3aaf87,
+ 0x2025c3,
+ 0x32d208,
+ 0x2aeeca,
+ 0x2014c4,
+ 0x2e1a03,
+ 0x241f86,
+ 0x203e42,
+ 0x38660b,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x2e6a83,
+ 0x216582,
+ 0x238483,
+ 0x2264c3,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x211003,
+ 0x2264c3,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x332683,
+ 0x203043,
+ 0x2264c3,
+ 0x216582,
+ 0x22d183,
+ 0x2343c3,
+ 0x238483,
+ 0x2264c3,
0x200882,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x224284,
- 0x258403,
- 0x230743,
- 0x30ac84,
- 0x249943,
- 0x2257c3,
- 0x894c8,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x258403,
- 0x230743,
- 0x2095c3,
- 0x21bbc3,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x204a82,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x894c8,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x254943,
- 0x672c3,
- 0x132283,
- 0x249943,
- 0x2257c3,
- 0x301bca,
- 0x31f6c9,
- 0x33c04b,
- 0x33c9ca,
- 0x344c4a,
- 0x351b4b,
- 0x36ebca,
- 0x375c0a,
- 0x37ca0a,
- 0x37cc8b,
- 0x39c049,
- 0x39de8a,
- 0x39e3cb,
- 0x3ab84b,
- 0x3b1f4a,
- 0x258403,
- 0x230743,
- 0x2095c3,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x894c8,
- 0x258403,
- 0x25e5c4,
- 0x213142,
- 0x2021c4,
- 0x275685,
- 0x203803,
- 0x224284,
- 0x258403,
- 0x232ec4,
- 0x230743,
- 0x2446c4,
- 0x2afc84,
- 0x201104,
- 0x230c43,
- 0x249943,
- 0x2257c3,
- 0x293485,
- 0x22f903,
- 0x219683,
- 0x25a383,
- 0x24ccc4,
- 0x254284,
- 0x273f45,
- 0x894c8,
- 0x2f8cc4,
- 0x21e046,
- 0x285844,
- 0x204a82,
- 0x3614c7,
- 0x246c47,
- 0x242244,
- 0x255745,
- 0x2e3505,
- 0x2a8f85,
- 0x201104,
- 0x316e08,
- 0x362906,
- 0x2e1a08,
- 0x2386c5,
- 0x2cf185,
- 0x21a5c4,
- 0x2257c3,
- 0x2dfdc4,
- 0x350d06,
- 0x23d2c3,
- 0x24ccc4,
- 0x26be05,
- 0x232144,
- 0x38ca84,
- 0x201582,
- 0x24d2c6,
- 0x3924c6,
- 0x2f3dc5,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x224104,
+ 0x22d183,
+ 0x2343c3,
+ 0x307b04,
+ 0x238483,
+ 0x2264c3,
+ 0x880c8,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x22d183,
+ 0x2343c3,
+ 0x211cc3,
+ 0x220883,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x216582,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x880c8,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x251283,
+ 0x2efc3,
+ 0x132683,
+ 0x238483,
+ 0x2264c3,
+ 0x301e0a,
+ 0x31ec09,
+ 0x33e6cb,
+ 0x33ed4a,
+ 0x34600a,
+ 0x3543cb,
+ 0x372d8a,
+ 0x37acca,
+ 0x38074a,
+ 0x3809cb,
+ 0x39bb89,
+ 0x39d94a,
+ 0x39e38b,
+ 0x3a9bcb,
+ 0x3b2c8a,
+ 0x22d183,
+ 0x2343c3,
+ 0x211cc3,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x37549,
+ 0x880c8,
+ 0x22d183,
+ 0x260584,
+ 0x214a02,
+ 0x212444,
+ 0x226bc5,
+ 0x204803,
+ 0x224104,
+ 0x22d183,
+ 0x2374c4,
+ 0x2343c3,
+ 0x247344,
+ 0x22d684,
+ 0x201604,
+ 0x2348c3,
+ 0x238483,
+ 0x2264c3,
+ 0x28fb85,
+ 0x232dc3,
+ 0x21bd03,
+ 0x25b743,
+ 0x252dc4,
+ 0x250bc4,
+ 0x26dfc5,
+ 0x880c8,
+ 0x2f88c4,
+ 0x208606,
+ 0x283c04,
+ 0x216582,
+ 0x360307,
+ 0x249c07,
+ 0x2455c4,
+ 0x257a05,
+ 0x2d37c5,
+ 0x2a9c05,
+ 0x201604,
+ 0x318348,
+ 0x36ed86,
+ 0x2dbb08,
+ 0x236f45,
+ 0x2cf145,
+ 0x240584,
+ 0x2264c3,
+ 0x2e26c4,
+ 0x353586,
+ 0x242083,
+ 0x252dc4,
+ 0x262c45,
+ 0x2cfbc4,
+ 0x365b84,
+ 0x203e42,
+ 0x245206,
+ 0x392446,
+ 0x2f56c5,
0x200882,
- 0x323743,
- 0x1d604a82,
- 0x231c44,
- 0x2095c2,
- 0x219bc3,
- 0x22c902,
- 0x249943,
- 0x2016c2,
- 0x2161c3,
- 0x224043,
- 0x894c8,
- 0x894c8,
- 0x2d9d43,
+ 0x323ac3,
+ 0x1f216582,
+ 0x2358c4,
+ 0x201f82,
+ 0x211003,
+ 0x209f82,
+ 0x238483,
+ 0x201502,
+ 0x217643,
+ 0x223ec3,
+ 0x880c8,
+ 0x880c8,
+ 0x21eb03,
0x200882,
- 0x1e204a82,
- 0x2d9d43,
- 0x266f43,
- 0x265743,
- 0x320444,
- 0x249943,
- 0x2257c3,
- 0x894c8,
+ 0x1fe16582,
+ 0x21eb03,
+ 0x266383,
+ 0x36b683,
+ 0x31f984,
+ 0x238483,
+ 0x2264c3,
+ 0x880c8,
0x200882,
- 0x1ea04a82,
- 0x258403,
- 0x249943,
- 0x2257c3,
- 0x201382,
- 0x21ce42,
- 0x332283,
- 0x2d8843,
+ 0x20616582,
+ 0x22d183,
+ 0x238483,
+ 0x2264c3,
+ 0x4b42,
+ 0x2019c2,
+ 0x221e42,
+ 0x332683,
+ 0x2db083,
0x200882,
- 0x894c8,
- 0x204a82,
- 0x230743,
- 0x2446c4,
- 0x2099c3,
- 0x2d9d43,
- 0x21bbc3,
- 0x219bc3,
- 0x249943,
- 0x2174c3,
- 0x2257c3,
- 0x21b9c3,
- 0x127b13,
- 0x131714,
- 0x1a206,
- 0x1f186,
- 0x4cec7,
- 0x75009,
- 0x6208a,
- 0x8740d,
- 0x11850c,
- 0x17c3ca,
- 0x555c5,
- 0x18c288,
- 0x7e246,
- 0x152dc6,
- 0x2079c2,
- 0x1739cc,
- 0x1acb47,
- 0x205d1,
- 0x258403,
- 0xcfc85,
- 0xb444,
- 0x15c06,
- 0x8f1c6,
- 0x8b64a,
- 0xaccc3,
- 0x74fc5,
- 0xb983,
- 0x18e00c,
- 0x1af108,
- 0x27bc8,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
+ 0x880c8,
+ 0x16e747,
+ 0x216582,
+ 0x2343c3,
+ 0x247344,
+ 0x208f43,
+ 0x21eb03,
+ 0x220883,
+ 0x211003,
+ 0x238483,
+ 0x21ab43,
+ 0x2264c3,
+ 0x220683,
+ 0x1244d3,
+ 0x12f214,
+ 0x16e747,
+ 0x15686,
+ 0x1e1c6,
+ 0x52fc7,
+ 0x9f049,
+ 0x2654a,
+ 0x85b0d,
+ 0x119a4c,
+ 0x29e8a,
+ 0x51f05,
+ 0x18bec8,
+ 0x161186,
+ 0x155646,
+ 0x200d82,
+ 0xde40c,
+ 0x1aa9c7,
+ 0x24d11,
+ 0x22d183,
+ 0xd0585,
+ 0x1b4284,
+ 0x18346,
+ 0x19f046,
+ 0x8a24a,
+ 0xacec3,
+ 0x9f005,
+ 0xce83,
+ 0xc120c,
+ 0xe5408,
+ 0x1ad408,
+ 0xa0288,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
0x200882,
- 0x204a82,
- 0x2d9d43,
- 0x20b9c2,
- 0x249943,
- 0x2257c3,
- 0x2161c3,
- 0x35fd8f,
- 0x36014e,
- 0x894c8,
- 0x258403,
- 0x3df47,
- 0x230743,
- 0x2d9d43,
- 0x202503,
- 0x249943,
- 0x2257c3,
- 0x21b943,
- 0x265107,
- 0x203642,
- 0x29ffc9,
- 0x200dc2,
- 0x38418b,
- 0x28ff8a,
- 0x291709,
- 0x201c42,
- 0x2544c6,
- 0x250a95,
- 0x3842d5,
- 0x25fdd3,
- 0x384853,
- 0x204602,
- 0x204ec5,
- 0x31d3cc,
- 0x22518b,
- 0x26dd85,
- 0x20e3c2,
- 0x284d02,
- 0x372c06,
- 0x203442,
- 0x2521c6,
- 0x332acd,
- 0x36458c,
- 0x308bc4,
+ 0x216582,
+ 0x21eb03,
+ 0x2082c2,
+ 0x238483,
+ 0x2264c3,
+ 0x217643,
+ 0x35e48f,
+ 0x35e84e,
+ 0x880c8,
+ 0x22d183,
+ 0x429c7,
+ 0x2343c3,
+ 0x21eb03,
+ 0x202243,
+ 0x238483,
+ 0x2264c3,
+ 0x220003,
+ 0x36b047,
+ 0x204642,
+ 0x2a9849,
+ 0x201002,
+ 0x32a10b,
+ 0x28c14a,
+ 0x2a4209,
+ 0x201902,
+ 0x250e06,
+ 0x248f95,
+ 0x32a255,
+ 0x24de93,
+ 0x32a7d3,
+ 0x2056c2,
+ 0x214605,
+ 0x27ff4c,
+ 0x219e0b,
+ 0x269005,
+ 0x201482,
+ 0x2040c2,
+ 0x377506,
+ 0x204802,
+ 0x24eb06,
+ 0x332ecd,
+ 0x36288c,
+ 0x30a784,
0x2009c2,
- 0x21fd82,
- 0x22dc48,
- 0x203402,
- 0x30e986,
- 0x2aebc4,
- 0x250c55,
- 0x25ff53,
- 0x20ffc3,
- 0x34634a,
- 0x31c387,
- 0x2e44c9,
- 0x226fc7,
- 0x252f42,
+ 0x219f02,
+ 0x22c108,
+ 0x202d42,
+ 0x29d5c6,
+ 0x3345c4,
+ 0x249155,
+ 0x24e013,
+ 0x20a583,
+ 0x34868a,
+ 0x30e547,
+ 0x2e6089,
+ 0x20f507,
+ 0x24f882,
0x200002,
0x200006,
- 0x208e82,
- 0x894c8,
- 0x20fe02,
- 0x210842,
- 0x399887,
- 0x3aaa47,
- 0x21a805,
- 0x21a382,
- 0x21b987,
- 0x21bb48,
- 0x235842,
- 0x295682,
- 0x22e142,
- 0x201742,
- 0x36d148,
- 0x217543,
- 0x268c88,
- 0x2c780d,
- 0x21a2c3,
- 0x2f5fc8,
- 0x230dcf,
- 0x23118e,
- 0x22410a,
- 0x2a1591,
- 0x2a1a10,
- 0x2b218d,
- 0x2b24cc,
- 0x20bd07,
- 0x3464c7,
- 0x352b89,
- 0x23d442,
+ 0x202f42,
+ 0x880c8,
+ 0x211302,
+ 0x211d42,
+ 0x273cc7,
+ 0x3a8ac7,
+ 0x21ed05,
+ 0x215802,
+ 0x220647,
+ 0x220808,
+ 0x279a82,
+ 0x293f02,
+ 0x22f802,
+ 0x202ec2,
+ 0x239c48,
+ 0x21abc3,
+ 0x267848,
+ 0x2cf4cd,
+ 0x215743,
+ 0x369908,
+ 0x234a4f,
+ 0x234e0e,
+ 0x223f8a,
+ 0x36a611,
+ 0x36aa90,
+ 0x2b348d,
+ 0x2b37cc,
+ 0x3b2447,
+ 0x348807,
+ 0x355409,
+ 0x23c302,
0x2004c2,
- 0x24e74c,
- 0x24ea4b,
+ 0x254c8c,
+ 0x254f8b,
0x2008c2,
- 0x357906,
- 0x205742,
- 0x211a82,
- 0x219fc2,
- 0x204a82,
- 0x381f44,
- 0x235b47,
- 0x207802,
- 0x23a547,
- 0x23b7c7,
- 0x212182,
- 0x206082,
- 0x23de05,
+ 0x2dca86,
+ 0x206c02,
+ 0x2131c2,
+ 0x21dec2,
+ 0x216582,
+ 0x392904,
+ 0x23b147,
+ 0x200bc2,
+ 0x23f1c7,
+ 0x240447,
+ 0x214ec2,
+ 0x230542,
+ 0x242885,
0x200682,
- 0x260fce,
- 0x278b4d,
- 0x230743,
- 0x2842ce,
- 0x3571cd,
- 0x227283,
- 0x204802,
- 0x281b44,
- 0x23fac2,
- 0x2017c2,
- 0x345485,
- 0x34cb87,
- 0x36e142,
- 0x20bc82,
- 0x243f47,
- 0x247ec8,
- 0x237842,
- 0x2adb46,
- 0x24e5cc,
- 0x24e90b,
- 0x205642,
- 0x25a90f,
- 0x25acd0,
- 0x25b0cf,
- 0x25b495,
- 0x25b9d4,
- 0x25bece,
- 0x25c24e,
- 0x25c5cf,
- 0x25c98e,
- 0x25cd14,
- 0x25d213,
- 0x25d6cd,
- 0x273749,
- 0x288603,
+ 0x26380e,
+ 0x27620d,
+ 0x2343c3,
+ 0x28268e,
+ 0x356b8d,
+ 0x2de803,
+ 0x2058c2,
+ 0x27cac4,
+ 0x2446c2,
+ 0x20ddc2,
+ 0x346905,
+ 0x34f587,
+ 0x372642,
+ 0x206ac2,
+ 0x246cc7,
+ 0x24c608,
+ 0x23aa82,
+ 0x2b5506,
+ 0x254b0c,
+ 0x254e4b,
+ 0x221842,
+ 0x25bccf,
+ 0x25c090,
+ 0x25c48f,
+ 0x25c855,
+ 0x25cd94,
+ 0x25d28e,
+ 0x25d60e,
+ 0x25d98f,
+ 0x25dd4e,
+ 0x25e0d4,
+ 0x25e5d3,
+ 0x25ea8d,
+ 0x271749,
+ 0x286d43,
0x2007c2,
- 0x31b245,
- 0x2099c6,
- 0x2095c2,
- 0x26d887,
- 0x2d9d43,
- 0x21a042,
- 0x22cc08,
- 0x2a17d1,
- 0x2a1c10,
+ 0x20a805,
+ 0x208f46,
+ 0x201f82,
+ 0x26bdc7,
+ 0x21eb03,
+ 0x20b2c2,
+ 0x2c7448,
+ 0x36a851,
+ 0x36ac90,
0x200942,
- 0x20f047,
- 0x203dc2,
- 0x30f787,
- 0x20a482,
- 0x24b949,
- 0x372bc7,
- 0x285b08,
- 0x222446,
- 0x261e43,
- 0x261e45,
- 0x22fdc2,
+ 0x22a647,
+ 0x2074c2,
+ 0x3328c7,
+ 0x209682,
+ 0x305dc9,
+ 0x3774c7,
+ 0x3615c8,
+ 0x228246,
+ 0x2daf83,
+ 0x34ad45,
+ 0x234642,
0x200402,
0x200405,
- 0x22b385,
- 0x20a902,
- 0x2280c3,
- 0x2321c7,
- 0x3a3f87,
- 0x201302,
- 0x2ff804,
- 0x23e383,
- 0x2bfc09,
- 0x2d9208,
- 0x2120c2,
- 0x2067c2,
- 0x2164c7,
- 0x21d1c5,
- 0x2a4008,
- 0x204b87,
- 0x2037c3,
- 0x2a1246,
- 0x2b200d,
- 0x2b238c,
- 0x279346,
- 0x209082,
- 0x208a42,
- 0x202242,
- 0x230c4f,
- 0x23104e,
- 0x2e3587,
+ 0x399485,
+ 0x202102,
+ 0x24a503,
+ 0x2cfc47,
+ 0x208a07,
+ 0x203f42,
+ 0x2fec04,
+ 0x214803,
+ 0x2be489,
+ 0x2db488,
+ 0x20b402,
+ 0x2061c2,
+ 0x22f2c7,
+ 0x24bcc5,
+ 0x2a5f88,
+ 0x3b0e87,
+ 0x2047c3,
+ 0x27df86,
+ 0x2b330d,
+ 0x2b368c,
+ 0x276a06,
+ 0x203142,
+ 0x29a1c2,
+ 0x206742,
+ 0x2348cf,
+ 0x234cce,
+ 0x2d3847,
0x200342,
- 0x309445,
- 0x309446,
- 0x253702,
- 0x208f82,
- 0x212946,
- 0x2a0203,
- 0x30f6c6,
- 0x2c1285,
- 0x2c128d,
- 0x2c1dd5,
- 0x2c258c,
- 0x2c330d,
- 0x2c39d2,
- 0x20dc02,
- 0x207a42,
- 0x201082,
- 0x2e0986,
- 0x2abc86,
- 0x201a82,
- 0x209a46,
- 0x202bc2,
- 0x21ff85,
- 0x203c42,
- 0x261109,
- 0x33d40c,
- 0x33d74b,
- 0x2016c2,
- 0x248308,
- 0x201342,
- 0x200d82,
- 0x224f46,
- 0x366b45,
- 0x21f387,
- 0x247485,
- 0x2a1405,
- 0x23dfc2,
- 0x352f42,
+ 0x39e205,
+ 0x39e206,
+ 0x250042,
+ 0x203042,
+ 0x217c86,
+ 0x2a9a83,
+ 0x332806,
+ 0x2bfb05,
+ 0x2bfb0d,
+ 0x2c00d5,
+ 0x2c0c0c,
+ 0x2c150d,
+ 0x2c18d2,
+ 0x20e842,
+ 0x200e02,
0x200ac2,
- 0x277387,
- 0x2d004d,
- 0x2d03cc,
- 0x234107,
- 0x2adac2,
- 0x21d302,
- 0x22be08,
- 0x258108,
- 0x2d4148,
- 0x2dd044,
- 0x2e5407,
- 0x2da3c3,
- 0x2aed82,
- 0x2137c2,
- 0x2dd809,
- 0x3a3107,
- 0x205fc2,
- 0x26f0c5,
- 0x23c782,
- 0x2768c2,
- 0x2768c3,
- 0x2768c6,
- 0x2e4b42,
- 0x2e63c2,
- 0x2018c2,
- 0x33e186,
- 0x30f047,
- 0x201702,
- 0x2058c2,
- 0x268acf,
- 0x28410d,
- 0x28668e,
- 0x35704c,
- 0x20cb82,
- 0x2024c2,
- 0x222285,
- 0x3b2346,
- 0x2135c2,
- 0x20b942,
- 0x203b82,
- 0x204b04,
- 0x2c7684,
- 0x336d86,
- 0x203182,
- 0x277bc7,
- 0x220a83,
- 0x222988,
- 0x2244c8,
- 0x2c7e47,
- 0x3a5fc6,
- 0x21b842,
- 0x234503,
- 0x2413c7,
- 0x2693c6,
- 0x2e08c5,
- 0x344808,
- 0x2063c2,
- 0x322587,
- 0x210ec2,
- 0x2e74c2,
- 0x203e02,
- 0x2bab89,
+ 0x2d6646,
+ 0x2ac506,
+ 0x2025c2,
+ 0x208fc6,
+ 0x203382,
+ 0x2249c5,
+ 0x204c02,
+ 0x263949,
+ 0x34700c,
+ 0x34734b,
+ 0x201502,
+ 0x24ca48,
+ 0x2042c2,
+ 0x207a82,
+ 0x219bc6,
+ 0x36c005,
+ 0x3a1687,
+ 0x24a385,
+ 0x28df05,
+ 0x242a42,
+ 0x202042,
+ 0x206d42,
+ 0x26e847,
+ 0x2d094d,
+ 0x2d0ccc,
+ 0x2229c7,
+ 0x2b5482,
+ 0x226282,
+ 0x36f088,
+ 0x22ce88,
+ 0x2d5b48,
+ 0x2dfd44,
+ 0x2ef207,
+ 0x2dbf83,
+ 0x280b82,
+ 0x2014c2,
+ 0x2e0489,
+ 0x3a3247,
+ 0x207442,
+ 0x26d485,
+ 0x241542,
+ 0x22ff42,
+ 0x297fc3,
+ 0x297fc6,
+ 0x2e6a82,
+ 0x2e8642,
+ 0x200c02,
+ 0x30f006,
+ 0x29dc87,
+ 0x200b82,
+ 0x208782,
+ 0x26768f,
+ 0x2824cd,
+ 0x284d8e,
+ 0x356a0c,
+ 0x20d342,
+ 0x207482,
+ 0x228085,
+ 0x3b3086,
+ 0x212182,
+ 0x208b02,
+ 0x204b42,
+ 0x282844,
+ 0x2cf344,
+ 0x338a86,
+ 0x201bc2,
+ 0x275247,
+ 0x214343,
+ 0x21cb88,
+ 0x224348,
+ 0x239247,
+ 0x33fbc6,
+ 0x2015c2,
+ 0x239bc3,
+ 0x35bf87,
+ 0x266c86,
+ 0x2d6585,
+ 0x2d8e88,
+ 0x208d82,
+ 0x3211c7,
+ 0x20dfc2,
+ 0x35b202,
+ 0x20ad82,
+ 0x2bf8c9,
0x200242,
0x200a02,
- 0x234383,
- 0x32a387,
- 0x2013c2,
- 0x33d58c,
- 0x33d88b,
- 0x2793c6,
- 0x20b8c5,
- 0x21f6c2,
- 0x2020c2,
- 0x2b1d06,
- 0x22aa83,
- 0x33f547,
- 0x242c82,
- 0x206882,
- 0x250915,
- 0x384495,
- 0x25fc93,
- 0x3849d3,
- 0x26bf07,
- 0x289688,
- 0x289690,
- 0x28af0f,
- 0x28fd53,
- 0x2914d2,
- 0x29fb90,
- 0x2a8bcf,
- 0x336352,
- 0x31f291,
- 0x34ed13,
- 0x2ba952,
- 0x2c0ecf,
- 0x2c944e,
- 0x2cba12,
- 0x2cc851,
- 0x2cd84f,
- 0x2ce5ce,
- 0x2fa911,
- 0x2d9e10,
- 0x2dd392,
- 0x2e1dd1,
- 0x2e25c6,
- 0x2e4bc7,
- 0x2f7947,
- 0x205542,
- 0x27f985,
- 0x35a847,
- 0x21ce42,
- 0x208d02,
- 0x228f05,
- 0x21c743,
- 0x2741c6,
- 0x2d020d,
- 0x2d054c,
- 0x201502,
- 0x31d24b,
- 0x22504a,
- 0x2eaf4a,
- 0x2b0fc9,
- 0x2dbe4b,
- 0x204ccd,
- 0x36cb8c,
- 0x21ce8a,
- 0x220c0c,
- 0x33940b,
- 0x26dbcc,
- 0x270c0b,
- 0x33d383,
- 0x289286,
- 0x2e7a82,
- 0x2e7242,
- 0x21e383,
- 0x203f02,
- 0x2047c3,
- 0x2498c6,
- 0x25b647,
- 0x273406,
- 0x2e8ec8,
- 0x257e08,
- 0x2f0646,
- 0x2049c2,
- 0x2f378d,
- 0x2f3acc,
- 0x2afd47,
- 0x2f8b87,
- 0x20c702,
- 0x236e02,
- 0x241342,
- 0x32bd42,
- 0x204a82,
- 0x249943,
- 0x2257c3,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x219bc3,
- 0x2021c4,
- 0x249943,
- 0x2257c3,
- 0x2161c3,
+ 0x222c43,
+ 0x321887,
+ 0x201a02,
+ 0x34718c,
+ 0x34748b,
+ 0x276a86,
+ 0x20cdc5,
+ 0x224982,
+ 0x206ec2,
+ 0x2b3006,
+ 0x229083,
+ 0x340d07,
+ 0x246002,
+ 0x200cc2,
+ 0x248e15,
+ 0x32a415,
+ 0x24dd53,
+ 0x32a953,
+ 0x264dc7,
+ 0x288288,
+ 0x288290,
+ 0x289b0f,
+ 0x28bf13,
+ 0x2a3fd2,
+ 0x2a9410,
+ 0x2e79cf,
+ 0x2f14d2,
+ 0x351551,
+ 0x2afb13,
+ 0x2bf692,
+ 0x2c8d0f,
+ 0x2cb38e,
+ 0x2cc152,
+ 0x2cd191,
+ 0x2cdd8f,
+ 0x2ced4e,
+ 0x2d4c11,
+ 0x2e0090,
+ 0x2e4452,
+ 0x2e55d1,
+ 0x2e6b06,
+ 0x2e89c7,
+ 0x2f77c7,
+ 0x201582,
+ 0x27a485,
+ 0x2f2447,
+ 0x221e42,
+ 0x203c42,
+ 0x22c605,
+ 0x221303,
+ 0x26e246,
+ 0x2d0b0d,
+ 0x2d0e4c,
+ 0x203dc2,
+ 0x27fdcb,
+ 0x219cca,
+ 0x31b28a,
+ 0x2b22c9,
+ 0x2dd20b,
+ 0x3b0fcd,
+ 0x2f2b4c,
+ 0x2144ca,
+ 0x221e8c,
+ 0x24d10b,
+ 0x268e4c,
+ 0x26c10b,
+ 0x346f83,
+ 0x287e86,
+ 0x326e82,
+ 0x2e9202,
+ 0x208943,
+ 0x205882,
+ 0x205883,
+ 0x238406,
+ 0x25ca07,
+ 0x271406,
+ 0x2ea8c8,
+ 0x22cb88,
+ 0x2f0206,
+ 0x22d742,
+ 0x2f508d,
+ 0x2f53cc,
+ 0x22d747,
+ 0x2f8787,
+ 0x2156c2,
+ 0x21bf02,
+ 0x21eb82,
+ 0x24b982,
+ 0x216582,
+ 0x238483,
+ 0x2264c3,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x211003,
+ 0x212444,
+ 0x238483,
+ 0x2264c3,
+ 0x217643,
0x200882,
0x200702,
- 0x21a8d2c5,
- 0x21e031c5,
- 0x22309946,
- 0x894c8,
- 0x226ae205,
- 0x204a82,
- 0x201802,
- 0x22b27605,
- 0x22e7d805,
- 0x2327ea47,
- 0x23612609,
- 0x23a57284,
- 0x2095c2,
- 0x21a042,
- 0x23f808c5,
- 0x2428f9c9,
- 0x2470cf88,
- 0x24aac305,
- 0x24ebf387,
- 0x25217788,
- 0x256d6205,
- 0x25a03606,
- 0x25ed7ac9,
- 0x26373f08,
- 0x266b96c8,
- 0x26a97d0a,
- 0x26e457c4,
- 0x272c9b05,
- 0x276b4c88,
- 0x27a67a05,
- 0x2175c2,
- 0x27e00343,
- 0x282a0b86,
- 0x28641bc8,
- 0x28a087c6,
- 0x28f0f188,
- 0x2931d706,
- 0x29701044,
- 0x201cc2,
- 0x29a404c7,
- 0x29ea7ac4,
- 0x2a276e47,
- 0x2a79f6c7,
- 0x2016c2,
- 0x2aa98a85,
- 0x2af2df84,
- 0x2b3744c7,
- 0x2b61c307,
- 0x2ba81986,
- 0x2be2af85,
- 0x2c292307,
- 0x2c6d0ec8,
- 0x2cb1b5c7,
- 0x2ceab1c9,
- 0x2d38dd45,
- 0x2d736047,
- 0x2da8cb46,
- 0x2de546c8,
- 0x2c834d,
- 0x23e149,
- 0x2e0e0b,
- 0x382f0b,
- 0x27130b,
- 0x2a380b,
- 0x3006cb,
- 0x30098b,
- 0x300d89,
- 0x301e4b,
- 0x30210b,
- 0x30268b,
- 0x3035ca,
- 0x303b0a,
- 0x30410c,
- 0x30764b,
- 0x307a8a,
- 0x31a60a,
- 0x32b44e,
- 0x32c04e,
- 0x32c3ca,
- 0x32e54a,
- 0x32f08b,
- 0x32f34b,
- 0x32fecb,
- 0x34960b,
- 0x349c0a,
- 0x34a8cb,
- 0x34ab8a,
- 0x34ae0a,
- 0x34b08a,
- 0x36fbcb,
- 0x377d0b,
- 0x37968e,
- 0x379a0b,
- 0x3831cb,
- 0x38540b,
- 0x3898ca,
- 0x389b49,
- 0x389d8a,
- 0x38b40a,
- 0x39cb4b,
- 0x39e68b,
- 0x39f00a,
- 0x3a0e0b,
- 0x3a590b,
- 0x3b198b,
- 0x2e280048,
- 0x2e686b89,
- 0x2eb5e8c9,
- 0x2eecf548,
- 0x336b05,
- 0x202c83,
- 0x20d2c4,
- 0x2e7d45,
- 0x256fc6,
- 0x260585,
- 0x285d04,
- 0x26d788,
- 0x21db45,
- 0x28e684,
- 0x201b07,
- 0x29abca,
- 0x35504a,
- 0x35de07,
+ 0x2368c545,
+ 0x23a03985,
+ 0x23f0b146,
+ 0x880c8,
+ 0x242b0185,
+ 0x216582,
+ 0x201a42,
+ 0x24755c45,
+ 0x24a786c5,
+ 0x24e79547,
+ 0x2527b109,
+ 0x2564b084,
+ 0x201f82,
+ 0x20b2c2,
+ 0x25a43785,
+ 0x25e8bb89,
+ 0x26311f08,
+ 0x266abe45,
+ 0x26b0bc07,
+ 0x26e18948,
+ 0x272d8045,
+ 0x27604606,
+ 0x27b47b09,
+ 0x27f25348,
+ 0x282b8888,
+ 0x2869310a,
+ 0x28a48444,
+ 0x28ec9405,
+ 0x292b5dc8,
+ 0x29616c85,
+ 0x21ac42,
+ 0x29a00343,
+ 0x29ea2f86,
+ 0x2a233a88,
+ 0x2a69e2c6,
+ 0x2aa9ddc8,
+ 0x2ae09c86,
+ 0x2b2f6284,
+ 0x205902,
+ 0x2b73b7c7,
+ 0x2baa8444,
+ 0x2be746c7,
+ 0x2c333a07,
+ 0x201502,
+ 0x2c696ec5,
+ 0x2ca31504,
+ 0x2cf7fd07,
+ 0x2d211e47,
+ 0x2d67c906,
+ 0x2da29585,
+ 0x2de91bc7,
+ 0x2e2d1a48,
+ 0x2e60ab87,
+ 0x2eb12b09,
+ 0x2eec0f45,
+ 0x2f32bb87,
+ 0x2f68b886,
+ 0x2fa51008,
+ 0x225a4d,
+ 0x242bc9,
+ 0x2e4ccb,
+ 0x3726cb,
+ 0x26f30b,
+ 0x2a564b,
+ 0x2ffd0b,
+ 0x2fffcb,
+ 0x300849,
+ 0x30208b,
+ 0x30234b,
+ 0x30290b,
+ 0x30340a,
+ 0x30394a,
+ 0x303f4c,
+ 0x308e0b,
+ 0x30964a,
+ 0x31c18a,
+ 0x32734e,
+ 0x3282ce,
+ 0x32864a,
+ 0x32b14a,
+ 0x32cb4b,
+ 0x32ce0b,
+ 0x32dd0b,
+ 0x34c50b,
+ 0x34cb0a,
+ 0x34d7cb,
+ 0x34da8a,
+ 0x34dd0a,
+ 0x34df8a,
+ 0x373f4b,
+ 0x37c18b,
+ 0x37dace,
+ 0x37de4b,
+ 0x3849cb,
+ 0x38598b,
+ 0x3893ca,
+ 0x389649,
+ 0x38988a,
+ 0x38af0a,
+ 0x39c60b,
+ 0x39e64b,
+ 0x39f24a,
+ 0x3a02cb,
+ 0x3a4f0b,
+ 0x3b26cb,
+ 0x2fe7ab48,
+ 0x30285289,
+ 0x30626809,
+ 0x30acfe48,
+ 0x338805,
+ 0x203443,
+ 0x204204,
+ 0x327145,
+ 0x24adc6,
+ 0x259145,
+ 0x284404,
+ 0x26bcc8,
+ 0x3739c5,
+ 0x28d904,
+ 0x3b3f87,
+ 0x2996ca,
+ 0x3605ca,
+ 0x336947,
+ 0x203347,
+ 0x2f10c7,
+ 0x362607,
+ 0x2b9d05,
+ 0x306d46,
+ 0x2fb0c7,
+ 0x3a2784,
+ 0x376b06,
+ 0x376a06,
+ 0x3a3745,
+ 0x280584,
+ 0x2d3d46,
+ 0x298387,
+ 0x225d46,
+ 0x2c7ec7,
+ 0x28d6c3,
+ 0x268446,
+ 0x2328c5,
+ 0x279647,
+ 0x266fca,
+ 0x263204,
+ 0x2180c8,
+ 0x2fb649,
+ 0x2ce487,
+ 0x3aed06,
+ 0x29f988,
+ 0x306409,
+ 0x2e6244,
+ 0x35d804,
+ 0x2f9685,
+ 0x2fadc8,
+ 0x2bd1c7,
+ 0x2aa009,
+ 0x327c48,
+ 0x2fc706,
+ 0x379bc6,
+ 0x2943c8,
+ 0x375fc6,
+ 0x203985,
+ 0x27c9c6,
+ 0x274bc8,
+ 0x2347c6,
+ 0x25708b,
+ 0x233406,
+ 0x295d4d,
+ 0x358a45,
+ 0x2a8306,
+ 0x218a05,
+ 0x297c89,
+ 0x2f1d07,
+ 0x382048,
+ 0x2db2c6,
+ 0x294ac9,
+ 0x3a6246,
+ 0x266f45,
+ 0x29c1c6,
+ 0x2a8e86,
+ 0x2c2909,
+ 0x306206,
+ 0x279247,
+ 0x33cf05,
+ 0x205703,
+ 0x257205,
+ 0x296007,
+ 0x323446,
+ 0x358949,
+ 0x30b146,
+ 0x27cc06,
+ 0x365389,
+ 0x27c3c9,
+ 0x29ca07,
+ 0x369fc8,
+ 0x39ee89,
+ 0x27a108,
+ 0x31f686,
+ 0x2cc9c5,
+ 0x30a44a,
+ 0x27cc86,
+ 0x330bc6,
+ 0x2a3145,
+ 0x24d588,
+ 0x206847,
+ 0x2318ca,
+ 0x247786,
+ 0x243005,
+ 0x2a0e06,
+ 0x265b47,
+ 0x3aebc7,
+ 0x2bacc5,
+ 0x267105,
+ 0x2acf46,
+ 0x383446,
+ 0x2ad886,
+ 0x328cc4,
+ 0x27b489,
+ 0x286146,
+ 0x2a5a0a,
+ 0x214048,
+ 0x32b888,
+ 0x3605ca,
+ 0x202145,
+ 0x2982c5,
+ 0x323c48,
+ 0x2c9188,
+ 0x320d47,
+ 0x265146,
+ 0x315308,
0x202b87,
- 0x2f16c7,
- 0x364307,
- 0x3af485,
- 0x30fdc6,
- 0x3287c7,
- 0x247004,
- 0x2fbe46,
- 0x3a5246,
- 0x3b31c5,
- 0x305a04,
- 0x2b8306,
- 0x299fc7,
- 0x2298c6,
- 0x37c747,
- 0x27a403,
- 0x248f46,
- 0x22f405,
- 0x27eb47,
- 0x2bde8a,
- 0x22cd04,
- 0x215988,
- 0x2aac49,
- 0x2c6c07,
- 0x24b286,
- 0x2de448,
- 0x39fa49,
- 0x234cc4,
- 0x35e484,
- 0x2fa145,
- 0x2020c8,
- 0x2be687,
- 0x2a7149,
- 0x23dc08,
- 0x2fd446,
- 0x23f046,
- 0x295b48,
- 0x372286,
- 0x2031c5,
- 0x281a46,
- 0x277548,
- 0x230b46,
- 0x24d90b,
- 0x233346,
- 0x29788d,
- 0x399e85,
- 0x2a7986,
- 0x2085c5,
- 0x294709,
- 0x341c87,
- 0x37fd88,
- 0x36d906,
- 0x296249,
- 0x2ee4c6,
- 0x2bde05,
- 0x27ba86,
- 0x2a8646,
- 0x2c4ec9,
- 0x234ac6,
- 0x36e4c7,
- 0x2d71c5,
- 0x204643,
- 0x24da85,
- 0x297b47,
- 0x3274c6,
- 0x399d89,
- 0x309946,
- 0x281c86,
- 0x37d649,
- 0x281449,
- 0x29dd87,
- 0x310e88,
- 0x28f009,
- 0x27f608,
- 0x320146,
- 0x2cd085,
- 0x30888a,
- 0x281d06,
- 0x37df46,
- 0x2a0d45,
- 0x387ac8,
- 0x20e647,
- 0x3abe8a,
- 0x244b06,
- 0x2e7805,
- 0x365bc6,
- 0x326787,
- 0x24b147,
- 0x2bbb85,
- 0x2bdfc5,
- 0x29e106,
- 0x2acd46,
- 0x387106,
- 0x330844,
- 0x2809c9,
- 0x287a46,
- 0x28c58a,
- 0x2171c8,
- 0x335d48,
- 0x35504a,
- 0x359445,
- 0x299f05,
- 0x382a08,
- 0x2c9888,
- 0x332447,
- 0x2023c6,
- 0x313d48,
- 0x2e1447,
- 0x27ec88,
- 0x368d46,
- 0x282f08,
- 0x2b2886,
- 0x238847,
- 0x296c86,
- 0x2b8306,
- 0x23280a,
- 0x381fc6,
- 0x2cd089,
- 0x2ae506,
- 0x2d180a,
- 0x301049,
- 0x2f0746,
- 0x386bc4,
- 0x31b30d,
- 0x286e07,
- 0x3163c6,
- 0x2b9585,
- 0x2ee545,
- 0x31b806,
- 0x26f609,
- 0x2db807,
- 0x278606,
- 0x2c6606,
- 0x285d89,
- 0x2bf544,
- 0x22a504,
- 0x203888,
- 0x249c86,
- 0x26f188,
- 0x27ba08,
- 0x282987,
+ 0x279788,
+ 0x35f146,
+ 0x27dd08,
+ 0x2b3b86,
+ 0x2370c7,
+ 0x295506,
+ 0x2d3d46,
+ 0x23628a,
+ 0x392986,
+ 0x2cc9c9,
+ 0x2b0486,
+ 0x2d238a,
+ 0x2f6289,
+ 0x2f0306,
+ 0x37c504,
+ 0x20a8cd,
+ 0x285507,
+ 0x317906,
+ 0x2b8745,
+ 0x3a62c5,
+ 0x305546,
+ 0x26d9c9,
+ 0x3ad5c7,
+ 0x275cc6,
+ 0x2cd946,
+ 0x284489,
+ 0x212a44,
+ 0x228dc4,
+ 0x204308,
+ 0x2387c6,
+ 0x26d548,
+ 0x2d6b88,
+ 0x203ac7,
0x200849,
- 0x387307,
- 0x2ae0ca,
- 0x27b3cf,
- 0x243b4a,
- 0x222085,
- 0x277785,
- 0x214cc5,
- 0x2aeb07,
- 0x205d83,
- 0x311088,
- 0x2f43c6,
- 0x2f44c9,
- 0x2af546,
- 0x2c3807,
- 0x296009,
- 0x37fc88,
- 0x2a0e07,
- 0x2ffa83,
- 0x336b85,
+ 0x2ada87,
+ 0x2b004a,
+ 0x22decf,
+ 0x2377ca,
+ 0x227e85,
+ 0x274e05,
+ 0x216005,
+ 0x334507,
+ 0x277283,
+ 0x36a1c8,
+ 0x334d86,
+ 0x334e89,
+ 0x2c6a06,
+ 0x2c2747,
+ 0x294889,
+ 0x381f48,
+ 0x2a3207,
+ 0x2fee83,
+ 0x338885,
+ 0x3b2005,
+ 0x328b0b,
+ 0x216d44,
+ 0x2c5044,
+ 0x273486,
+ 0x2ff447,
+ 0x39794a,
+ 0x245807,
+ 0x3b0407,
+ 0x2786c5,
+ 0x205285,
+ 0x2196c9,
+ 0x2d3d46,
+ 0x24568d,
+ 0x358045,
+ 0x2a2d43,
+ 0x205d03,
+ 0x349205,
+ 0x350005,
+ 0x29f988,
+ 0x276707,
+ 0x228b46,
+ 0x29a646,
+ 0x22d905,
+ 0x234687,
+ 0x2035c7,
+ 0x36ec47,
+ 0x2c948a,
+ 0x268508,
+ 0x328cc4,
+ 0x2ade47,
+ 0x277cc7,
+ 0x32d086,
+ 0x264607,
+ 0x2b2a08,
+ 0x226708,
+ 0x26b786,
+ 0x367f08,
+ 0x2c32c4,
+ 0x2fb0c6,
+ 0x3a9146,
+ 0x2c0a86,
+ 0x349c06,
+ 0x29abc4,
+ 0x3626c6,
+ 0x2b76c6,
+ 0x293606,
+ 0x2293c6,
+ 0x205bc6,
+ 0x2b2846,
+ 0x228a48,
+ 0x39de08,
+ 0x2c9cc8,
+ 0x259348,
+ 0x323bc6,
+ 0x210785,
+ 0x275386,
+ 0x2abec5,
+ 0x388807,
+ 0x28ae45,
+ 0x213d43,
+ 0x364605,
+ 0x22fd84,
0x205d05,
- 0x33068b,
- 0x267ac4,
- 0x2d2d44,
- 0x276106,
- 0x2ffe07,
- 0x39814a,
- 0x242487,
- 0x234d47,
- 0x27d805,
- 0x2041c5,
- 0x224a49,
- 0x2b8306,
- 0x24230d,
- 0x358585,
- 0x3029c3,
- 0x206c43,
- 0x346ec5,
- 0x34d7c5,
- 0x2de448,
- 0x279047,
- 0x22a286,
- 0x29b9c6,
- 0x22a845,
- 0x230a07,
- 0x202e07,
- 0x3627c7,
- 0x2c9b8a,
- 0x249008,
- 0x330844,
- 0x3876c7,
- 0x27a547,
- 0x32ed06,
- 0x266307,
- 0x2b1708,
- 0x35e7c8,
- 0x26d246,
- 0x264788,
- 0x234b44,
- 0x3287c6,
- 0x20f646,
- 0x3658c6,
- 0x3478c6,
- 0x29bf44,
- 0x3643c6,
- 0x2b8506,
- 0x294d86,
- 0x22adc6,
- 0x206b06,
- 0x2b1546,
- 0x22a188,
- 0x2fbcc8,
- 0x2ca688,
- 0x260788,
- 0x382986,
- 0x20dd85,
- 0x277d06,
- 0x2ac385,
- 0x388d07,
- 0x23dcc5,
- 0x213a43,
- 0x200e85,
- 0x22a744,
- 0x206c45,
- 0x212b83,
- 0x2f2b47,
- 0x31a8c8,
- 0x37c806,
- 0x36918d,
- 0x277746,
- 0x293ec5,
- 0x2bab83,
- 0x2b4649,
- 0x2bf6c6,
- 0x2944c6,
- 0x29d644,
- 0x243ac7,
- 0x231e86,
- 0x387905,
- 0x2327c3,
- 0x203d04,
- 0x27a706,
- 0x2d2f44,
- 0x30bc88,
- 0x397609,
- 0x342189,
- 0x29d44a,
- 0x23ac0d,
- 0x30ee07,
- 0x37ddc6,
- 0x20d9c4,
- 0x212609,
- 0x2851c8,
- 0x286a06,
- 0x261386,
- 0x266307,
- 0x2bff86,
- 0x21b206,
- 0x397906,
- 0x39f74a,
- 0x217788,
- 0x22d785,
- 0x2826c9,
- 0x27f18a,
- 0x369508,
- 0x299548,
- 0x294448,
- 0x20320c,
- 0x2e5085,
- 0x29bc48,
- 0x309346,
- 0x2d1186,
- 0x375e47,
- 0x242385,
- 0x281bc5,
- 0x342049,
- 0x212287,
- 0x2b1bc5,
- 0x21cc87,
- 0x206c43,
- 0x2bebc5,
- 0x37eb08,
- 0x2ce187,
- 0x299409,
- 0x2d4005,
- 0x2fb844,
- 0x29f308,
- 0x20be47,
- 0x2a0fc8,
- 0x329fc8,
- 0x2ebdc5,
- 0x240dc6,
- 0x264e46,
- 0x2e3109,
- 0x3145c7,
- 0x2ac786,
- 0x31c787,
- 0x212a03,
- 0x257284,
- 0x29b305,
- 0x257444,
- 0x33e8c4,
- 0x248687,
- 0x206287,
- 0x2787c4,
- 0x299250,
- 0x322187,
- 0x2041c5,
- 0x33df0c,
- 0x2b77c4,
- 0x2f9648,
- 0x238749,
- 0x300546,
- 0x227d08,
- 0x259404,
- 0x259408,
- 0x388046,
- 0x22ac48,
- 0x29b006,
- 0x2c89cb,
- 0x204645,
- 0x2c4a08,
- 0x216cc4,
- 0x28074a,
- 0x299409,
- 0x227e86,
- 0x2d6cc8,
- 0x256405,
- 0x2ff184,
- 0x2f9546,
- 0x362688,
- 0x280048,
- 0x344586,
- 0x325944,
- 0x308806,
- 0x387387,
- 0x276d47,
- 0x26630f,
+ 0x210143,
+ 0x39a7c7,
+ 0x31c448,
+ 0x2c7f86,
+ 0x2c514d,
+ 0x274dc6,
+ 0x292b85,
+ 0x2afd43,
+ 0x2b5789,
+ 0x212bc6,
+ 0x231246,
+ 0x29c2c4,
+ 0x237747,
+ 0x235b06,
+ 0x243245,
+ 0x216ec3,
+ 0x378a44,
+ 0x277e86,
+ 0x2b15c4,
+ 0x30d748,
+ 0x324a89,
+ 0x2f2209,
+ 0x29c0ca,
+ 0x23f88d,
+ 0x29da47,
+ 0x330a46,
+ 0x20ec44,
+ 0x27b109,
+ 0x283588,
+ 0x285106,
+ 0x263bc6,
+ 0x264607,
+ 0x2c3c06,
+ 0x21b606,
+ 0x38c346,
+ 0x333a8a,
+ 0x218948,
+ 0x22bc45,
+ 0x27d649,
+ 0x279c8a,
+ 0x2c54c8,
+ 0x2979c8,
+ 0x292108,
+ 0x2a864c,
+ 0x2dc7c5,
+ 0x29a8c8,
+ 0x39e106,
+ 0x2d1d06,
+ 0x37af07,
+ 0x245705,
+ 0x27cb45,
+ 0x2f20c9,
+ 0x212747,
+ 0x2b2ec5,
+ 0x21e9c7,
+ 0x205d03,
+ 0x2bd705,
+ 0x366548,
+ 0x2d1687,
+ 0x297889,
+ 0x2d7985,
+ 0x2f4504,
+ 0x2a1788,
+ 0x2cf787,
+ 0x2a33c8,
+ 0x2740c8,
+ 0x32c005,
+ 0x334c86,
+ 0x257706,
+ 0x2e7649,
+ 0x315b87,
+ 0x2ac986,
+ 0x30e947,
+ 0x217d43,
+ 0x24b084,
+ 0x298c45,
+ 0x2ae0c4,
+ 0x236844,
+ 0x27adc7,
+ 0x3affc7,
+ 0x239a04,
+ 0x2976d0,
+ 0x3056c7,
+ 0x205285,
+ 0x22ae8c,
+ 0x2018c4,
+ 0x2bee08,
+ 0x236fc9,
+ 0x2ffb86,
+ 0x2a03c8,
+ 0x25a7c4,
+ 0x25a7c8,
+ 0x231ec6,
+ 0x229248,
+ 0x298946,
+ 0x2c828b,
+ 0x205705,
+ 0x2c3248,
+ 0x21a3c4,
+ 0x27c04a,
+ 0x297889,
+ 0x2e0d06,
+ 0x2160c8,
+ 0x258645,
+ 0x301944,
+ 0x2bed06,
+ 0x36eb08,
+ 0x27ab48,
+ 0x345d06,
+ 0x31d6c4,
+ 0x30a3c6,
+ 0x2adb07,
+ 0x2745c7,
+ 0x26460f,
0x2074c7,
- 0x2f0807,
- 0x2d1045,
- 0x2ec8c5,
- 0x29da49,
- 0x28c246,
- 0x27e005,
- 0x281747,
- 0x2d6f88,
- 0x294e85,
- 0x296c86,
- 0x217008,
- 0x2087ca,
- 0x2845c8,
- 0x3adfc7,
- 0x27b806,
- 0x282686,
- 0x205303,
- 0x20d383,
- 0x27f349,
- 0x28ee89,
- 0x2ab0c6,
- 0x2d4005,
- 0x2a4188,
- 0x2d6cc8,
- 0x2b9ec8,
- 0x39798b,
- 0x3693c7,
- 0x2fdd89,
- 0x266588,
+ 0x2f03c7,
+ 0x2d1bc5,
+ 0x2ed845,
+ 0x29c6c9,
+ 0x28ae86,
+ 0x278fc5,
+ 0x27c6c7,
+ 0x37b188,
+ 0x293705,
+ 0x295506,
+ 0x213e88,
+ 0x29e2ca,
+ 0x282988,
+ 0x287947,
+ 0x22e306,
+ 0x27d606,
+ 0x21f283,
+ 0x2042c3,
+ 0x279e49,
+ 0x39ed09,
+ 0x2bec06,
+ 0x2d7985,
+ 0x2a84c8,
+ 0x2160c8,
+ 0x387808,
+ 0x38c3cb,
+ 0x2c5387,
+ 0x2fd189,
+ 0x264888,
+ 0x33c7c4,
+ 0x2c2a08,
+ 0x2895c9,
+ 0x2acc85,
+ 0x334407,
+ 0x24b105,
+ 0x27aa48,
+ 0x28c3cb,
+ 0x291910,
+ 0x2a8105,
+ 0x21a30c,
+ 0x228d05,
+ 0x2032c3,
+ 0x2a2c06,
+ 0x2b6e04,
+ 0x231606,
+ 0x298387,
+ 0x213f04,
+ 0x2415c8,
+ 0x36a08d,
+ 0x2d9685,
+ 0x23fd84,
+ 0x219904,
+ 0x27d0c9,
+ 0x297408,
+ 0x30afc7,
+ 0x231f48,
+ 0x27b548,
+ 0x275fc5,
+ 0x331547,
+ 0x275f47,
+ 0x20af07,
+ 0x267109,
+ 0x235989,
+ 0x23f346,
+ 0x2b39c6,
+ 0x264846,
+ 0x25b8c5,
+ 0x3af344,
+ 0x204506,
+ 0x204a46,
+ 0x276008,
+ 0x26580b,
+ 0x2630c7,
+ 0x20ec44,
+ 0x317d86,
+ 0x203107,
+ 0x348b45,
+ 0x318f05,
+ 0x201e84,
+ 0x235906,
+ 0x204588,
+ 0x27b109,
+ 0x257c86,
+ 0x282f08,
+ 0x243306,
+ 0x33ce48,
+ 0x2d8a8c,
+ 0x275e86,
+ 0x29284d,
+ 0x292ccb,
+ 0x279305,
+ 0x203707,
+ 0x306306,
+ 0x3aea88,
+ 0x23f3c9,
+ 0x2e7288,
+ 0x205285,
+ 0x2ecc07,
+ 0x27a208,
+ 0x384789,
+ 0x2a05c6,
+ 0x33bfca,
+ 0x3ae808,
+ 0x2e70cb,
+ 0x2c608c,
+ 0x25a8c8,
+ 0x277506,
+ 0x334708,
+ 0x29df47,
+ 0x2cfa09,
+ 0x28ba8d,
+ 0x2961c6,
+ 0x3017c8,
+ 0x39dcc9,
+ 0x2b6188,
+ 0x27de08,
+ 0x2b7f8c,
+ 0x2b9347,
+ 0x2b9f07,
+ 0x266f45,
+ 0x3a4d47,
+ 0x37b048,
+ 0x2bed86,
+ 0x257b0c,
+ 0x2e4988,
+ 0x2c44c8,
+ 0x24b5c6,
+ 0x3b1d87,
+ 0x23f544,
+ 0x259348,
+ 0x356e4c,
+ 0x3a1a0c,
+ 0x227f05,
+ 0x393d47,
+ 0x31d646,
+ 0x3b1d06,
+ 0x297e48,
+ 0x38c284,
+ 0x225d4b,
+ 0x22844b,
+ 0x22e306,
+ 0x369f07,
+ 0x307d45,
+ 0x26ca85,
+ 0x225e86,
+ 0x258605,
+ 0x216d05,
+ 0x3accc7,
+ 0x273a89,
+ 0x233504,
+ 0x2722c5,
+ 0x2d7645,
+ 0x254448,
+ 0x22b4c5,
+ 0x2a7809,
+ 0x2af2c7,
+ 0x2af2cb,
+ 0x2d1046,
+ 0x228789,
+ 0x2804c8,
+ 0x271c05,
+ 0x20b008,
+ 0x2359c8,
+ 0x207ec7,
+ 0x27d4c7,
+ 0x27ae49,
+ 0x229187,
+ 0x32d3c9,
+ 0x2aaf4c,
+ 0x312a08,
+ 0x2b9b49,
+ 0x2be7c7,
+ 0x27b609,
+ 0x3b0107,
+ 0x2c6188,
+ 0x3afac5,
+ 0x2fb046,
+ 0x2b8788,
+ 0x2f8b88,
+ 0x279b49,
+ 0x216d47,
+ 0x26cb45,
+ 0x20e3c9,
+ 0x2c4086,
+ 0x28b884,
+ 0x2e6f46,
+ 0x233908,
+ 0x2426c7,
+ 0x265a08,
+ 0x367fc9,
+ 0x261a47,
+ 0x299886,
+ 0x2037c4,
+ 0x364689,
+ 0x3313c8,
+ 0x24b487,
+ 0x306e46,
+ 0x3b20c6,
+ 0x330b44,
+ 0x27f886,
+ 0x205c83,
+ 0x308149,
+ 0x2056c6,
+ 0x2a61c5,
+ 0x29a646,
+ 0x2a3505,
+ 0x27a688,
+ 0x25a607,
+ 0x362446,
+ 0x355c86,
+ 0x32b888,
+ 0x29c847,
+ 0x296205,
+ 0x29ab48,
+ 0x39ea48,
+ 0x3ae808,
+ 0x228bc5,
+ 0x2fb0c6,
+ 0x2f1fc9,
+ 0x257584,
+ 0x3760cb,
+ 0x21b30b,
+ 0x22bb49,
+ 0x205d03,
+ 0x256385,
+ 0x205986,
+ 0x229908,
+ 0x22de44,
+ 0x2c7f86,
+ 0x2c95c9,
+ 0x2c5b05,
+ 0x3acc06,
+ 0x2cf786,
+ 0x2160c4,
+ 0x2a1b4a,
+ 0x2a6108,
+ 0x2f8b86,
+ 0x368a05,
+ 0x204887,
+ 0x301547,
+ 0x334c84,
+ 0x21b547,
+ 0x2b0044,
+ 0x2c0a06,
+ 0x202e03,
+ 0x267105,
+ 0x373445,
+ 0x207708,
+ 0x2ae005,
+ 0x275bc9,
+ 0x259187,
+ 0x25918b,
+ 0x2a2d8c,
+ 0x2a3a0a,
+ 0x30bc07,
+ 0x200a83,
+ 0x2d3948,
+ 0x228d85,
+ 0x293785,
0x338944,
- 0x2c4fc8,
- 0x28a9c9,
- 0x2aca85,
- 0x2aea07,
- 0x2f49c5,
- 0x27ff48,
- 0x28d14b,
- 0x292050,
- 0x2a7785,
- 0x216c0c,
- 0x22a445,
- 0x209203,
- 0x2a6a46,
- 0x2b6d84,
- 0x32e086,
- 0x299fc7,
- 0x212a44,
- 0x23c808,
- 0x310f4d,
- 0x2d6b85,
- 0x23b104,
- 0x221dc4,
- 0x282149,
- 0x2a06c8,
- 0x3097c7,
- 0x3880c8,
- 0x280a88,
- 0x278905,
- 0x262a87,
- 0x278887,
- 0x2f5007,
- 0x2bdfc9,
- 0x231d09,
- 0x23a6c6,
- 0x2b26c6,
- 0x266546,
- 0x25a505,
- 0x3b1504,
- 0x203506,
- 0x203a86,
- 0x278948,
- 0x32644b,
- 0x267f07,
- 0x20d9c4,
- 0x316846,
- 0x209047,
- 0x346805,
- 0x3179c5,
- 0x204884,
- 0x231c86,
- 0x203588,
- 0x212609,
- 0x2559c6,
- 0x284b48,
- 0x3879c6,
- 0x32f5c8,
- 0x2b010c,
- 0x2787c6,
- 0x293b8d,
- 0x29400b,
- 0x36e585,
- 0x202f47,
- 0x234bc6,
- 0x24b008,
- 0x23a749,
- 0x2e2d48,
- 0x2041c5,
- 0x2ed607,
- 0x27f708,
- 0x3a2509,
- 0x240686,
- 0x36e2ca,
- 0x24ad88,
- 0x2e2b8b,
- 0x2cb44c,
- 0x259508,
- 0x279e46,
- 0x262488,
+ 0x2c6086,
+ 0x236fc6,
+ 0x27f8c7,
+ 0x3656cb,
+ 0x29abc4,
+ 0x3821c4,
+ 0x26b904,
+ 0x2c25c6,
+ 0x213f04,
+ 0x2faec8,
+ 0x338745,
+ 0x23fec5,
+ 0x387747,
+ 0x203809,
+ 0x350005,
+ 0x375a4a,
+ 0x37b2c9,
+ 0x290f8a,
+ 0x333bc9,
+ 0x353144,
+ 0x2cda05,
+ 0x2c3d08,
+ 0x37fdcb,
+ 0x2f9685,
+ 0x38d4c6,
+ 0x2159c4,
+ 0x276106,
+ 0x2618c9,
+ 0x317e47,
+ 0x30b308,
+ 0x23fc06,
+ 0x2ada87,
+ 0x27ab48,
+ 0x38f586,
+ 0x280204,
+ 0x35eb87,
+ 0x34e905,
+ 0x360c07,
+ 0x204604,
+ 0x306286,
+ 0x218bc8,
+ 0x292e88,
+ 0x3a4ac7,
+ 0x217d88,
+ 0x2b3c45,
+ 0x205b44,
+ 0x3604c8,
+ 0x217e84,
+ 0x207ec5,
+ 0x2ed984,
+ 0x202c87,
+ 0x286207,
+ 0x27b748,
+ 0x2a3546,
+ 0x2adf85,
+ 0x2759c8,
+ 0x282b88,
+ 0x29c009,
+ 0x21b606,
+ 0x231948,
+ 0x27beca,
+ 0x348bc8,
+ 0x2d8045,
+ 0x275586,
+ 0x26d888,
+ 0x2eccca,
+ 0x341107,
+ 0x283985,
+ 0x28ef48,
+ 0x2b1184,
+ 0x24d606,
+ 0x2ba688,
+ 0x205bc6,
+ 0x380dc8,
+ 0x2573c7,
+ 0x3b3e86,
+ 0x37c504,
+ 0x29ce07,
+ 0x2fac04,
+ 0x261887,
+ 0x23108d,
+ 0x22bbc5,
+ 0x2d148b,
+ 0x298a46,
+ 0x24cb48,
+ 0x241584,
+ 0x272086,
+ 0x277e86,
+ 0x334a47,
+ 0x29250d,
+ 0x25fd07,
+ 0x300248,
+ 0x29fb05,
+ 0x284008,
+ 0x2bd146,
+ 0x2b3cc8,
+ 0x20e886,
+ 0x367707,
+ 0x368189,
+ 0x33f9c7,
+ 0x2853c8,
+ 0x26f705,
+ 0x21ed88,
+ 0x3b1c45,
+ 0x23b2c5,
+ 0x333e45,
+ 0x226743,
+ 0x27ca44,
+ 0x27d645,
+ 0x347b09,
+ 0x31b646,
+ 0x2b2b08,
+ 0x2ecec5,
+ 0x312447,
+ 0x249dca,
+ 0x3acb49,
+ 0x2a8d8a,
+ 0x2c9d48,
+ 0x21e80c,
+ 0x27c74d,
+ 0x2f86c3,
+ 0x380cc8,
+ 0x378a05,
+ 0x29e086,
+ 0x381dc6,
+ 0x2e3985,
+ 0x30ea49,
+ 0x310045,
+ 0x2759c8,
+ 0x279146,
+ 0x33f4c6,
+ 0x2a1649,
+ 0x38ed87,
+ 0x28c686,
+ 0x249d48,
+ 0x2c0988,
+ 0x2d0047,
+ 0x2293ce,
+ 0x2bd385,
+ 0x384685,
+ 0x205ac8,
+ 0x322d07,
+ 0x214782,
+ 0x2b7b04,
+ 0x23150a,
+ 0x24b548,
+ 0x203206,
+ 0x2949c8,
+ 0x257706,
+ 0x335988,
+ 0x2ac988,
+ 0x23b284,
+ 0x328945,
+ 0x683c04,
+ 0x683c04,
+ 0x683c04,
+ 0x203983,
+ 0x3b1f46,
+ 0x275e86,
+ 0x29924c,
+ 0x205b03,
+ 0x279c86,
+ 0x213f84,
+ 0x212b48,
+ 0x2c9405,
+ 0x231606,
+ 0x2b5ec8,
+ 0x2cb0c6,
+ 0x3623c6,
+ 0x29f788,
+ 0x298cc7,
+ 0x228f49,
+ 0x2e96ca,
+ 0x20abc4,
+ 0x28ae45,
+ 0x2a9fc5,
+ 0x2128c6,
+ 0x29da86,
+ 0x299c86,
+ 0x2ec386,
+ 0x229084,
+ 0x22908b,
+ 0x233904,
+ 0x204905,
+ 0x2ab5c5,
+ 0x203b86,
+ 0x359288,
+ 0x27c607,
+ 0x30b0c4,
+ 0x259cc3,
+ 0x2b0c85,
+ 0x2e6e07,
+ 0x2a4449,
+ 0x27c50b,
+ 0x27f8c7,
0x207607,
- 0x231f89,
- 0x28f8cd,
- 0x29a486,
- 0x3a5348,
- 0x2fbb89,
- 0x2b5048,
- 0x283008,
- 0x2b8dcc,
- 0x2ba0c7,
- 0x2badc7,
- 0x2bde05,
- 0x2e9d47,
- 0x2d6e48,
- 0x2f95c6,
- 0x25584c,
- 0x2e22c8,
- 0x2c5f48,
- 0x361fc6,
- 0x205a87,
- 0x23a8c4,
- 0x260788,
- 0x35748c,
- 0x21f70c,
- 0x222105,
- 0x3943c7,
- 0x3258c6,
- 0x205a06,
- 0x2948c8,
- 0x3a3584,
- 0x2298cb,
- 0x22264b,
- 0x27b806,
- 0x310dc7,
- 0x261f45,
- 0x26e545,
- 0x229a06,
- 0x2563c5,
- 0x267a85,
- 0x376107,
- 0x276709,
- 0x233444,
- 0x35ec85,
- 0x2d53c5,
- 0x24f708,
- 0x229245,
- 0x2a6549,
- 0x2c2f87,
- 0x2c2f8b,
- 0x2d0746,
- 0x229ec9,
- 0x305948,
- 0x27e545,
- 0x2f5108,
- 0x231d48,
- 0x218687,
- 0x282547,
- 0x248709,
- 0x22ab87,
- 0x374bc9,
- 0x2a910c,
- 0x2ab0c8,
- 0x3af2c9,
- 0x2b5447,
- 0x280b49,
- 0x2063c7,
- 0x2cb548,
- 0x24fa45,
- 0x328746,
- 0x2b95c8,
- 0x2d4d08,
- 0x27f049,
- 0x267ac7,
- 0x26e605,
- 0x2112c9,
- 0x2c0406,
- 0x28cb44,
- 0x2e2a06,
- 0x241a48,
- 0x244507,
- 0x326648,
- 0x264849,
- 0x361d47,
- 0x29ad86,
- 0x203004,
- 0x200f09,
- 0x262908,
- 0x361e87,
- 0x30fec6,
- 0x205dc6,
- 0x37dec4,
- 0x2a7b86,
- 0x206bc3,
- 0x355e89,
- 0x204606,
- 0x29f785,
- 0x29b9c6,
- 0x2a1105,
- 0x27fb88,
- 0x259247,
- 0x364146,
- 0x327646,
- 0x335d48,
- 0x29dbc7,
- 0x29a4c5,
- 0x29bec8,
- 0x38b7c8,
- 0x24ad88,
- 0x22a305,
- 0x3287c6,
- 0x341f49,
- 0x264cc4,
- 0x37238b,
- 0x21af0b,
- 0x22d689,
- 0x206c43,
- 0x250645,
- 0x20dc46,
- 0x2585c8,
- 0x27b344,
- 0x37c806,
- 0x2c9cc9,
- 0x2c5d45,
- 0x376046,
- 0x20be46,
- 0x202344,
- 0x2996ca,
- 0x29f6c8,
- 0x2d4d06,
- 0x24c0c5,
- 0x20c807,
- 0x22ff87,
- 0x240dc4,
- 0x21b147,
- 0x23dc84,
- 0x23dc86,
- 0x217143,
- 0x2bdfc5,
- 0x370105,
- 0x20c1c8,
- 0x257385,
- 0x278509,
- 0x2605c7,
- 0x2605cb,
- 0x2a098c,
- 0x2a200a,
- 0x2bf387,
- 0x201043,
- 0x2e3688,
- 0x22a4c5,
- 0x294f05,
- 0x336c44,
- 0x2cb446,
- 0x238746,
- 0x2a7bc7,
- 0x38c5cb,
- 0x29bf44,
- 0x37ff04,
- 0x26d3c4,
- 0x2c4746,
- 0x212a44,
- 0x2021c8,
- 0x336a45,
- 0x23b245,
- 0x2b9e07,
- 0x203049,
- 0x34d7c5,
- 0x371d0a,
- 0x2d70c9,
- 0x299b0a,
- 0x39f889,
- 0x385304,
- 0x2c66c5,
- 0x2c0088,
- 0x37458b,
- 0x2fa145,
- 0x27bb86,
- 0x21a544,
- 0x278a46,
- 0x361bc9,
- 0x316907,
- 0x309b08,
- 0x23af86,
- 0x387307,
- 0x280048,
- 0x38f206,
- 0x23e684,
- 0x360487,
- 0x3458c5,
- 0x34ba07,
- 0x203604,
- 0x234b46,
- 0x217a08,
- 0x2941c8,
- 0x2e9ac7,
- 0x212a48,
- 0x2b2945,
- 0x206a84,
- 0x354f48,
- 0x212b44,
- 0x214c45,
- 0x2eca04,
- 0x2e1547,
- 0x287b07,
- 0x280c88,
- 0x2a1146,
- 0x257305,
- 0x278308,
- 0x2847c8,
- 0x29d389,
- 0x21b206,
- 0x3abf08,
- 0x2805ca,
- 0x346888,
- 0x2d6205,
- 0x277f06,
- 0x26f4c8,
- 0x2ed6ca,
- 0x305b47,
- 0x2855c5,
- 0x292848,
- 0x2ad704,
- 0x387b46,
- 0x2bb548,
- 0x206b06,
- 0x359748,
- 0x264b07,
- 0x201a06,
- 0x386bc4,
- 0x37bdc7,
- 0x2fefc4,
- 0x361b87,
- 0x2de18d,
- 0x22d705,
- 0x2cdf8b,
- 0x29b106,
- 0x248408,
- 0x23c7c4,
- 0x275446,
- 0x27a706,
- 0x2627c7,
- 0x29384d,
- 0x2a9dc7,
- 0x302908,
- 0x247705,
- 0x2a7d08,
- 0x2be606,
- 0x2b29c8,
- 0x211dc6,
- 0x263f87,
- 0x281009,
- 0x339b47,
- 0x286cc8,
- 0x271705,
- 0x21a888,
- 0x205945,
- 0x235cc5,
- 0x358e45,
- 0x222383,
- 0x281ac4,
- 0x2826c5,
- 0x2d7ac9,
- 0x324e86,
- 0x2b1808,
- 0x3a9485,
- 0x32c607,
- 0x246e0a,
- 0x375f89,
- 0x2a854a,
- 0x2ca708,
- 0x21cacc,
- 0x2817cd,
- 0x304983,
- 0x359648,
- 0x203cc5,
- 0x208586,
- 0x37fb06,
- 0x2d5d45,
- 0x31c889,
- 0x355305,
- 0x278308,
- 0x251a46,
- 0x33a446,
- 0x29f1c9,
- 0x38ea07,
- 0x28d406,
- 0x246d88,
- 0x3657c8,
- 0x2cf747,
- 0x22adce,
- 0x2be845,
- 0x3a2405,
- 0x206a08,
- 0x326d87,
- 0x205e02,
- 0x2b8944,
- 0x32df8a,
- 0x361f48,
- 0x209146,
- 0x296148,
- 0x264e46,
- 0x323348,
- 0x2ac788,
- 0x235c84,
- 0x3304c5,
- 0x685844,
- 0x685844,
- 0x685844,
- 0x2031c3,
- 0x205c46,
- 0x2787c6,
- 0x29a74c,
- 0x201a43,
- 0x27f186,
- 0x217104,
- 0x2bf648,
- 0x2c9b05,
- 0x32e086,
- 0x2b4d88,
- 0x2cb746,
- 0x3640c6,
- 0x323848,
- 0x29b387,
- 0x22a949,
- 0x2c864a,
- 0x26aa44,
- 0x23dcc5,
- 0x2a7105,
- 0x212406,
- 0x30ee46,
- 0x2a4586,
- 0x2eb986,
- 0x22aa84,
- 0x22aa8b,
- 0x22ff84,
- 0x20c885,
- 0x2ab645,
- 0x282a46,
- 0x3aae88,
- 0x281687,
- 0x3098c4,
- 0x258903,
- 0x2ad205,
- 0x2e28c7,
- 0x2a2609,
- 0x28158b,
- 0x2a7bc7,
- 0x20c0c7,
- 0x2b4c88,
- 0x32c747,
- 0x2a2846,
- 0x23e408,
- 0x2a478b,
- 0x2e7c86,
- 0x212d09,
- 0x2a4905,
- 0x2ffa83,
- 0x376046,
- 0x264a08,
- 0x211e83,
- 0x234c83,
- 0x280046,
- 0x264e46,
- 0x38b18a,
- 0x279e85,
- 0x27a54b,
- 0x29b90b,
- 0x23bf83,
- 0x21b543,
- 0x2ae044,
- 0x2643c7,
- 0x259504,
- 0x203204,
- 0x3091c4,
- 0x346b88,
- 0x24c008,
- 0x31c1c9,
- 0x38ddc8,
- 0x39fc07,
- 0x22adc6,
- 0x2b144f,
- 0x2be986,
- 0x2c9a84,
- 0x24be4a,
- 0x2e27c7,
- 0x3b3246,
- 0x28cb89,
- 0x31c145,
- 0x20c305,
- 0x31c286,
- 0x21a9c3,
- 0x2ad749,
- 0x217906,
- 0x264609,
- 0x398146,
- 0x2bdfc5,
- 0x222505,
- 0x205cc3,
- 0x264508,
- 0x228b07,
- 0x2f43c4,
- 0x2bf4c8,
- 0x2b8084,
- 0x2c6f86,
- 0x2a6a46,
- 0x239786,
- 0x2c48c9,
- 0x294e85,
- 0x2b8306,
- 0x2667c9,
- 0x3ae786,
- 0x2b1546,
- 0x386f46,
- 0x2104c5,
- 0x2eca06,
- 0x263f84,
- 0x24fa45,
- 0x2b95c4,
- 0x3090c6,
- 0x358544,
- 0x2064c3,
- 0x285285,
- 0x231a48,
- 0x223947,
- 0x2b3249,
- 0x2854c8,
- 0x295911,
- 0x20beca,
- 0x27b747,
- 0x2edf06,
- 0x217104,
- 0x2b96c8,
- 0x283b88,
- 0x295aca,
- 0x2a630d,
- 0x27ba86,
- 0x323946,
- 0x37be86,
- 0x2bba07,
- 0x3029c5,
- 0x254587,
- 0x2bf585,
- 0x2c30c4,
- 0x2a5d46,
- 0x328607,
- 0x2ad44d,
- 0x26f407,
- 0x26d688,
- 0x278609,
- 0x277e06,
- 0x240605,
- 0x2145c4,
- 0x241b46,
- 0x240cc6,
- 0x3620c6,
- 0x298c48,
- 0x210383,
- 0x24f943,
- 0x30fb85,
- 0x31e686,
- 0x2ac745,
- 0x23b188,
- 0x29a18a,
- 0x30f304,
- 0x2bf648,
- 0x294448,
- 0x282887,
- 0x3a9549,
- 0x2b4988,
- 0x212687,
- 0x26c106,
- 0x206b0a,
- 0x241bc8,
- 0x2cb289,
- 0x2a0788,
- 0x217f09,
- 0x2e2e47,
- 0x2eb385,
- 0x35ea46,
- 0x2f9448,
- 0x323a48,
- 0x24db48,
- 0x214d88,
- 0x20c885,
+ 0x2b5dc8,
+ 0x312587,
+ 0x2a4686,
+ 0x242e88,
+ 0x299e8b,
+ 0x327086,
+ 0x213a89,
+ 0x29a005,
+ 0x2fee83,
+ 0x3acc06,
+ 0x2572c8,
+ 0x20e943,
+ 0x2e6f03,
+ 0x27ab46,
+ 0x257706,
+ 0x38ac8a,
+ 0x277545,
+ 0x277ccb,
+ 0x29a58b,
+ 0x240a03,
+ 0x20f943,
+ 0x2affc4,
+ 0x367b47,
+ 0x257344,
+ 0x2039c4,
+ 0x39df84,
+ 0x348ec8,
+ 0x368948,
+ 0x30e389,
+ 0x2c0fc8,
+ 0x3065c7,
+ 0x2293c6,
+ 0x2b274f,
+ 0x2bd4c6,
+ 0x2c9384,
+ 0x36878a,
+ 0x2e6d07,
+ 0x3a37c6,
+ 0x28b8c9,
+ 0x30e305,
+ 0x207845,
+ 0x30e446,
+ 0x21eec3,
+ 0x2b11c9,
+ 0x218ac6,
+ 0x367d89,
+ 0x397946,
+ 0x267105,
+ 0x228305,
+ 0x2074c3,
+ 0x367c88,
+ 0x2df587,
+ 0x334d84,
+ 0x2129c8,
+ 0x2d3ac4,
+ 0x2d4646,
+ 0x2a2c06,
+ 0x23e7c6,
+ 0x2c3109,
+ 0x293705,
+ 0x2d3d46,
+ 0x264ac9,
+ 0x3ac846,
+ 0x2b2846,
+ 0x387c46,
+ 0x2119c5,
+ 0x2ed986,
+ 0x367704,
+ 0x3afac5,
+ 0x2b8784,
+ 0x309246,
+ 0x358004,
+ 0x202c83,
+ 0x283645,
+ 0x2356c8,
+ 0x21e007,
+ 0x2b4549,
+ 0x283888,
+ 0x294191,
+ 0x2cf80a,
+ 0x22e247,
+ 0x2ee8c6,
+ 0x213f84,
+ 0x2b8888,
+ 0x239748,
+ 0x29434a,
+ 0x2a75cd,
+ 0x29c1c6,
+ 0x29f886,
+ 0x29cec6,
+ 0x2bab47,
+ 0x300305,
+ 0x250ec7,
+ 0x212a85,
+ 0x2af404,
+ 0x2a7006,
+ 0x27f707,
+ 0x2b0ecd,
+ 0x26d7c7,
+ 0x26bbc8,
+ 0x275cc9,
+ 0x275486,
+ 0x2a0545,
+ 0x210184,
+ 0x233a06,
+ 0x334b86,
+ 0x24b6c6,
+ 0x297088,
+ 0x211883,
+ 0x203b43,
+ 0x323585,
+ 0x3112c6,
+ 0x2ac945,
+ 0x23fe08,
+ 0x29854a,
+ 0x2f5cc4,
+ 0x212b48,
+ 0x292108,
+ 0x2039c7,
+ 0x2ecf89,
+ 0x2b5ac8,
+ 0x27b187,
+ 0x264fc6,
+ 0x205bca,
+ 0x233a88,
+ 0x2c5ec9,
+ 0x2974c8,
+ 0x21adc9,
+ 0x2e7387,
+ 0x2d9005,
+ 0x226986,
+ 0x2bec08,
+ 0x24ccc8,
+ 0x30bec8,
+ 0x22e408,
+ 0x204905,
0x200884,
- 0x228808,
- 0x2bcbc4,
- 0x39f684,
- 0x2bdfc5,
- 0x28e6c7,
- 0x202e09,
- 0x2625c7,
- 0x280605,
- 0x276306,
- 0x33d146,
- 0x208944,
- 0x29f506,
- 0x387644,
- 0x283a86,
- 0x3a3646,
- 0x213106,
- 0x2041c5,
- 0x23b047,
- 0x201043,
- 0x33f949,
- 0x335b48,
- 0x212504,
- 0x21250d,
- 0x2942c8,
- 0x381ac8,
- 0x2cb206,
- 0x281109,
- 0x375f89,
- 0x3618c5,
- 0x29a28a,
- 0x287cca,
- 0x34c08c,
- 0x34c206,
- 0x276bc6,
- 0x2beb06,
- 0x26aa09,
- 0x2087c6,
- 0x2545c6,
- 0x3553c6,
- 0x260788,
- 0x212a46,
- 0x2c4c0b,
- 0x28e845,
- 0x23b245,
- 0x276e45,
- 0x2028c6,
- 0x206ac3,
- 0x239706,
- 0x26f387,
- 0x2b9585,
- 0x23f105,
- 0x2ee545,
- 0x344986,
- 0x30ce84,
- 0x30ce86,
- 0x293089,
- 0x20274c,
- 0x2c2e08,
- 0x2931c4,
- 0x2ec7c6,
- 0x29b206,
- 0x264a08,
- 0x2d6cc8,
- 0x202649,
- 0x20c807,
- 0x2499c9,
- 0x247c06,
- 0x22e244,
- 0x20e304,
- 0x27fe44,
- 0x280048,
- 0x202c4a,
- 0x34d746,
- 0x3514c7,
- 0x22ce47,
- 0x229fc5,
- 0x2a70c4,
- 0x28a986,
- 0x302a06,
- 0x231f43,
- 0x335987,
- 0x329ec8,
- 0x361a0a,
- 0x2cc1c8,
- 0x30f188,
- 0x358585,
- 0x36e685,
- 0x268005,
- 0x22a386,
- 0x37c246,
- 0x2061c5,
- 0x3560c9,
- 0x2a6ecc,
- 0x2680c7,
- 0x295b48,
- 0x2d6085,
- 0x685844,
- 0x20a104,
- 0x2ce2c4,
- 0x2c1786,
- 0x29c48e,
- 0x20c387,
- 0x2bbc05,
- 0x264c4c,
- 0x2b7f47,
- 0x328587,
- 0x328f89,
- 0x215a49,
- 0x2855c5,
- 0x335b48,
- 0x341f49,
- 0x2ea885,
- 0x2b94c8,
- 0x2c51c6,
- 0x3551c6,
- 0x301044,
- 0x2a2408,
- 0x245603,
- 0x353b84,
- 0x2ad285,
- 0x31b807,
- 0x209505,
- 0x280489,
- 0x38ba8d,
- 0x2a53c6,
- 0x35c244,
- 0x202348,
- 0x27654a,
- 0x3b17c7,
- 0x235385,
- 0x208d03,
- 0x29bace,
- 0x264e4c,
- 0x2fa487,
- 0x29c647,
- 0x203643,
- 0x208805,
- 0x2ce2c5,
- 0x296508,
- 0x292689,
- 0x362506,
- 0x259504,
- 0x27b686,
- 0x36558b,
- 0x2eebcc,
- 0x262347,
- 0x2c97c5,
- 0x38b6c8,
- 0x2cf505,
- 0x24be47,
- 0x2404c7,
- 0x245605,
- 0x206ac3,
- 0x36c2c4,
- 0x20d285,
- 0x2ace05,
- 0x2ace06,
- 0x2908c8,
- 0x328607,
- 0x37fe06,
- 0x208486,
- 0x358d86,
- 0x3262c9,
- 0x262b87,
- 0x362386,
- 0x2eed46,
- 0x2456c6,
- 0x2a7a85,
- 0x20a206,
- 0x399745,
- 0x2292c8,
- 0x291c8b,
- 0x28a786,
- 0x22ce84,
- 0x2ed489,
- 0x2605c4,
- 0x2c5148,
- 0x2f0e87,
- 0x282f04,
- 0x2b3b88,
- 0x2ba684,
- 0x2a7ac4,
- 0x3a93c5,
- 0x2d6bc6,
- 0x346ac7,
- 0x23b0c3,
- 0x29ae45,
- 0x2f4944,
- 0x3a2446,
- 0x361948,
- 0x323745,
- 0x28e149,
- 0x2114c5,
- 0x2f4bc8,
- 0x326007,
- 0x388e48,
- 0x2b3087,
- 0x2f08c9,
- 0x364246,
- 0x35aec6,
- 0x28f144,
- 0x26c045,
- 0x2f300c,
- 0x276e47,
- 0x277647,
- 0x22cd08,
- 0x2a53c6,
- 0x26f2c4,
- 0x2eae44,
- 0x248589,
- 0x2bec06,
- 0x224ac7,
- 0x347844,
- 0x324f86,
- 0x328185,
- 0x2a0c87,
- 0x2c4b86,
- 0x36e189,
- 0x34bec7,
- 0x266307,
- 0x29f046,
- 0x23ab05,
- 0x27de88,
- 0x217788,
- 0x237a86,
- 0x323785,
- 0x255106,
- 0x201b83,
- 0x296389,
- 0x2a430e,
- 0x2b1e88,
- 0x2b8188,
- 0x23788b,
- 0x28e386,
- 0x30eac4,
- 0x2813c4,
- 0x2a440a,
- 0x216b07,
- 0x362445,
- 0x212d09,
- 0x2b85c5,
- 0x39f6c7,
- 0x300344,
- 0x397787,
- 0x27b908,
- 0x2c6cc6,
- 0x3a54c9,
- 0x2b4a8a,
- 0x216a86,
- 0x293e06,
- 0x2ab5c5,
- 0x379fc5,
- 0x333207,
- 0x23f608,
- 0x3280c8,
- 0x235c86,
- 0x222585,
- 0x30ebce,
- 0x330844,
- 0x237a05,
- 0x275c89,
- 0x28c048,
- 0x3adf06,
- 0x2988cc,
- 0x299d90,
- 0x29c0cf,
- 0x29d948,
- 0x2bf387,
+ 0x2df288,
+ 0x20bdc4,
+ 0x3339c4,
+ 0x267105,
+ 0x28d947,
+ 0x2035c9,
+ 0x334847,
+ 0x231985,
+ 0x273686,
+ 0x346d46,
+ 0x213bc4,
+ 0x2a1986,
+ 0x2addc4,
+ 0x283f06,
+ 0x3b0586,
+ 0x2150c6,
+ 0x205285,
+ 0x23fcc7,
+ 0x200a83,
+ 0x3334c9,
+ 0x32b688,
+ 0x2129c4,
+ 0x27b00d,
+ 0x292f88,
+ 0x2f0848,
+ 0x2c5e46,
+ 0x368289,
+ 0x3acb49,
+ 0x2615c5,
+ 0x29864a,
+ 0x2863ca,
+ 0x28b24c,
+ 0x28b3c6,
+ 0x274446,
+ 0x2bd646,
+ 0x269509,
+ 0x29e2c6,
+ 0x250f06,
+ 0x310106,
+ 0x259348,
+ 0x217d86,
+ 0x2c344b,
+ 0x28dac5,
+ 0x23fec5,
+ 0x2746c5,
+ 0x202606,
+ 0x205b83,
+ 0x23e746,
+ 0x26d747,
+ 0x2b8745,
+ 0x379c85,
+ 0x3a62c5,
+ 0x2eb2c6,
+ 0x261684,
+ 0x311e06,
+ 0x28f789,
+ 0x20248c,
+ 0x2af148,
+ 0x28f8c4,
+ 0x2ed746,
+ 0x298b46,
+ 0x2572c8,
+ 0x2160c8,
+ 0x202389,
+ 0x204887,
+ 0x238509,
+ 0x24c346,
+ 0x22f904,
+ 0x20edc4,
+ 0x27a944,
+ 0x27ab48,
+ 0x20340a,
+ 0x34ff86,
+ 0x353d47,
+ 0x2c7687,
+ 0x228885,
+ 0x2a9f84,
+ 0x289586,
+ 0x300346,
+ 0x235bc3,
+ 0x32b4c7,
+ 0x273fc8,
+ 0x26170a,
+ 0x30fa88,
+ 0x29ddc8,
+ 0x358045,
+ 0x279405,
+ 0x2631c5,
+ 0x228c46,
+ 0x229d06,
+ 0x3aff05,
+ 0x308389,
+ 0x2a9d8c,
+ 0x263287,
+ 0x2943c8,
+ 0x258945,
+ 0x683c04,
+ 0x2e3d84,
+ 0x2d17c4,
+ 0x214b06,
+ 0x29b10e,
+ 0x2078c7,
+ 0x2bad45,
+ 0x25750c,
+ 0x2c0847,
+ 0x27f687,
+ 0x2806c9,
+ 0x218189,
+ 0x283985,
+ 0x32b688,
+ 0x2f1fc9,
+ 0x2f3d05,
+ 0x2b8688,
+ 0x2c2c06,
+ 0x360746,
+ 0x2f6284,
+ 0x33c1c8,
+ 0x248283,
+ 0x3630c4,
+ 0x2b0d05,
+ 0x305547,
+ 0x201ec5,
+ 0x27bd89,
+ 0x38040d,
+ 0x2a1f86,
+ 0x2e9644,
+ 0x2650c8,
+ 0x2738ca,
+ 0x21fe87,
+ 0x23a245,
+ 0x203c43,
+ 0x29a74e,
+ 0x25770c,
+ 0x2f99c7,
+ 0x29b2c7,
+ 0x204643,
+ 0x29e305,
+ 0x2d17c5,
+ 0x294d88,
+ 0x291f49,
+ 0x36e986,
+ 0x257344,
+ 0x22e186,
+ 0x32ffcb,
+ 0x3a694c,
+ 0x35dc47,
+ 0x2c90c5,
+ 0x39e948,
+ 0x2cfe05,
+ 0x368787,
+ 0x33b7c7,
+ 0x248285,
+ 0x205b83,
+ 0x371284,
0x2041c5,
- 0x2826c5,
- 0x346949,
- 0x292a49,
- 0x308906,
- 0x2fa1c7,
- 0x394345,
- 0x332449,
- 0x32ed86,
- 0x20860d,
- 0x27fd09,
- 0x203204,
- 0x2b1c08,
- 0x2288c9,
- 0x34d906,
- 0x276405,
- 0x35aec6,
- 0x3099c9,
- 0x27c808,
- 0x20dd85,
- 0x2806c4,
- 0x298a8b,
- 0x34d7c5,
- 0x258646,
- 0x281b06,
- 0x265cc6,
- 0x397b8b,
- 0x28e249,
- 0x206505,
- 0x388c07,
- 0x20be46,
- 0x2de086,
- 0x280348,
- 0x26c209,
- 0x26d44c,
- 0x2e26c8,
- 0x34da06,
- 0x344583,
- 0x2aec06,
- 0x282385,
- 0x27a888,
- 0x221f86,
- 0x2a0ec8,
- 0x242505,
- 0x212785,
- 0x2998c8,
- 0x2300c7,
- 0x37fa47,
- 0x2a7bc7,
- 0x227d08,
- 0x28cd48,
- 0x26a386,
- 0x308f07,
- 0x257147,
- 0x28224a,
- 0x247b03,
- 0x2028c6,
+ 0x383505,
+ 0x383506,
+ 0x28e848,
+ 0x27f707,
+ 0x3820c6,
+ 0x200a06,
+ 0x333d86,
+ 0x265689,
+ 0x331647,
+ 0x378186,
+ 0x3a6ac6,
+ 0x248346,
+ 0x2a8405,
+ 0x399a86,
+ 0x398f45,
+ 0x22b548,
+ 0x29154b,
+ 0x289386,
+ 0x2c76c4,
+ 0x2eca89,
+ 0x259184,
+ 0x2c2b88,
+ 0x2aab47,
+ 0x27dd04,
+ 0x2b4e88,
+ 0x2b9904,
+ 0x2a8444,
+ 0x3a26c5,
+ 0x2d96c6,
+ 0x348e07,
+ 0x23fd43,
+ 0x299945,
+ 0x316144,
+ 0x3846c6,
+ 0x261648,
+ 0x323ac5,
+ 0x28d3c9,
+ 0x20e5c5,
+ 0x2d6288,
+ 0x34a5c7,
+ 0x388948,
+ 0x2b4387,
+ 0x2f0489,
+ 0x362546,
+ 0x336186,
+ 0x310104,
+ 0x264f05,
+ 0x2f490c,
+ 0x2746c7,
+ 0x274cc7,
+ 0x2c7548,
+ 0x2a1f86,
+ 0x26d684,
+ 0x31b184,
+ 0x27acc9,
+ 0x2bd746,
+ 0x219747,
+ 0x349b84,
+ 0x31b746,
+ 0x27f285,
+ 0x2a3087,
+ 0x2c33c6,
+ 0x33be89,
+ 0x28b087,
+ 0x264607,
+ 0x2a14c6,
+ 0x23f785,
+ 0x278e48,
+ 0x218948,
+ 0x23acc6,
+ 0x323b05,
+ 0x251a46,
+ 0x206583,
+ 0x294c09,
+ 0x299a0e,
+ 0x2b3188,
+ 0x2d3bc8,
+ 0x23aacb,
+ 0x28d606,
+ 0x209c84,
+ 0x27c344,
+ 0x299b0a,
+ 0x21a207,
+ 0x378245,
+ 0x213a89,
+ 0x2b7785,
+ 0x333a07,
+ 0x2ff984,
+ 0x324c07,
+ 0x2d6a88,
+ 0x2ce546,
+ 0x34a889,
+ 0x2b5bca,
+ 0x21a186,
+ 0x292ac6,
+ 0x2ab545,
+ 0x37e405,
+ 0x3261c7,
+ 0x244208,
+ 0x27f1c8,
+ 0x23b286,
+ 0x228385,
+ 0x29d80e,
+ 0x328cc4,
+ 0x23ac45,
+ 0x273009,
+ 0x28ac88,
+ 0x287886,
+ 0x296d0c,
+ 0x298150,
+ 0x29ad4f,
+ 0x29c5c8,
+ 0x30bc07,
+ 0x205285,
+ 0x27d645,
+ 0x348c89,
+ 0x28f149,
+ 0x30a4c6,
+ 0x2f9707,
+ 0x393cc5,
+ 0x320d49,
+ 0x32d106,
+ 0x29e10d,
+ 0x27a809,
+ 0x2039c4,
+ 0x2b2f08,
+ 0x2df349,
+ 0x350146,
+ 0x273785,
+ 0x336186,
+ 0x30b1c9,
+ 0x38e148,
+ 0x210785,
+ 0x27bfc4,
+ 0x296ecb,
+ 0x350005,
+ 0x226786,
+ 0x27ca86,
+ 0x25f1c6,
+ 0x38c5cb,
+ 0x28d4c9,
+ 0x3b0245,
+ 0x388707,
+ 0x2cf786,
+ 0x231346,
+ 0x27bc48,
+ 0x2d97c9,
+ 0x26b98c,
+ 0x2e6c08,
+ 0x350246,
+ 0x345d03,
+ 0x334606,
+ 0x27d305,
+ 0x278008,
+ 0x227d86,
+ 0x2a32c8,
+ 0x245885,
+ 0x294505,
+ 0x2a1d48,
+ 0x301687,
+ 0x381d07,
+ 0x27f8c7,
+ 0x2a03c8,
+ 0x30bd48,
+ 0x262286,
+ 0x309087,
+ 0x24af47,
+ 0x27d1ca,
+ 0x24c243,
+ 0x202606,
+ 0x203545,
+ 0x231504,
+ 0x275cc9,
+ 0x2f0404,
+ 0x21e084,
+ 0x2989c4,
+ 0x29b2cb,
+ 0x2df4c7,
+ 0x29da45,
+ 0x2913c8,
+ 0x273686,
+ 0x273688,
+ 0x277486,
+ 0x287d45,
+ 0x288685,
+ 0x28a0c6,
+ 0x28b548,
+ 0x28b808,
+ 0x275e86,
+ 0x29120f,
+ 0x2946d0,
+ 0x358a45,
+ 0x200a83,
+ 0x24a985,
+ 0x2fd0c8,
+ 0x28f049,
+ 0x3ae808,
+ 0x34a708,
+ 0x330608,
+ 0x2df587,
+ 0x273349,
+ 0x2a34c8,
+ 0x2785c4,
+ 0x298848,
+ 0x254509,
+ 0x30aac7,
+ 0x296144,
+ 0x334908,
+ 0x23fa8a,
+ 0x2c2446,
+ 0x29c1c6,
+ 0x21b4c9,
+ 0x298387,
+ 0x2c2f88,
+ 0x332348,
+ 0x349a08,
+ 0x353885,
+ 0x37f385,
+ 0x23fec5,
+ 0x2d1785,
+ 0x371dc7,
+ 0x205b85,
+ 0x2b8745,
+ 0x36fd86,
+ 0x3ae747,
+ 0x37fd07,
+ 0x23fd86,
+ 0x2ca285,
+ 0x226786,
+ 0x25a685,
+ 0x2c06c8,
+ 0x31b5c4,
+ 0x3ac8c6,
+ 0x358844,
+ 0x301948,
+ 0x22534a,
+ 0x27670c,
+ 0x3658c5,
+ 0x2bac06,
+ 0x26bb46,
+ 0x323946,
+ 0x2fd2c4,
+ 0x27f545,
+ 0x2772c7,
+ 0x298409,
+ 0x2a4547,
+ 0x683c04,
+ 0x683c04,
+ 0x30af45,
+ 0x20f5c4,
+ 0x2966ca,
+ 0x273506,
+ 0x2e7044,
+ 0x3a3745,
+ 0x2eee85,
+ 0x300244,
+ 0x27c6c7,
+ 0x20e547,
+ 0x2c25c8,
+ 0x319188,
+ 0x210789,
+ 0x2994c8,
+ 0x29688b,
+ 0x2128c4,
+ 0x35d745,
+ 0x279045,
+ 0x27f849,
+ 0x2d97c9,
+ 0x2ec988,
+ 0x327ac8,
+ 0x203b84,
+ 0x298b85,
+ 0x203443,
+ 0x212885,
+ 0x2d3dc6,
+ 0x291d8c,
+ 0x2189c6,
+ 0x25a6c6,
+ 0x287b05,
+ 0x2eb348,
+ 0x3a6bc6,
+ 0x2eea46,
+ 0x29c1c6,
+ 0x21f40c,
+ 0x24b884,
+ 0x333eca,
+ 0x287a48,
+ 0x291bc7,
+ 0x316046,
+ 0x36ea47,
+ 0x2e12c5,
+ 0x306e46,
+ 0x352386,
+ 0x381bc7,
+ 0x21e0c4,
0x202d85,
- 0x32df84,
- 0x278609,
- 0x2f0844,
- 0x2239c4,
- 0x29b084,
- 0x29c64b,
- 0x228a47,
- 0x30ee05,
- 0x291b08,
- 0x276306,
- 0x276308,
- 0x279dc6,
- 0x289145,
- 0x289a85,
- 0x28b4c6,
- 0x28c808,
- 0x28cac8,
- 0x2787c6,
- 0x29194f,
- 0x295e50,
- 0x399e85,
- 0x201043,
- 0x247645,
- 0x2fdcc8,
- 0x292949,
- 0x24ad88,
- 0x326148,
- 0x37d988,
- 0x228b07,
- 0x275fc9,
- 0x2a10c8,
- 0x2d3d44,
- 0x29af08,
- 0x24f7c9,
- 0x30d4c7,
- 0x297c84,
- 0x262688,
- 0x23ae0a,
- 0x2c45c6,
- 0x27ba86,
- 0x21b0c9,
- 0x299fc7,
- 0x2c5548,
- 0x3999c8,
- 0x3476c8,
- 0x351005,
- 0x37af45,
- 0x23b245,
- 0x2ce285,
- 0x32b287,
- 0x206ac5,
- 0x2b9585,
- 0x3a8606,
- 0x24acc7,
- 0x3744c7,
- 0x23b106,
- 0x2cac45,
- 0x258646,
- 0x2592c5,
- 0x2b7dc8,
- 0x324e04,
- 0x3ae806,
- 0x2e4684,
- 0x2ff188,
- 0x3ae90a,
- 0x27904c,
- 0x38c7c5,
- 0x2bbac6,
- 0x26d606,
- 0x3297c6,
- 0x2fdec4,
- 0x328445,
- 0x279c07,
- 0x29a049,
- 0x2a2707,
- 0x685844,
- 0x685844,
- 0x309745,
- 0x227084,
- 0x29828a,
- 0x276186,
- 0x2e2b04,
- 0x3b31c5,
- 0x2f8f45,
- 0x302904,
- 0x281747,
- 0x211447,
- 0x2c4748,
- 0x317c48,
- 0x20dd89,
- 0x32ee88,
- 0x29844b,
- 0x212404,
- 0x35e3c5,
- 0x27e085,
- 0x2a7b49,
- 0x26c209,
- 0x2ed388,
- 0x23da88,
- 0x282a44,
- 0x29b245,
- 0x202c83,
- 0x2123c5,
- 0x2b8386,
- 0x2924cc,
- 0x217806,
- 0x259306,
- 0x292685,
- 0x344a08,
- 0x2eee46,
- 0x2ee086,
- 0x27ba86,
- 0x2260cc,
- 0x362284,
- 0x358eca,
- 0x3ae0c8,
- 0x292307,
- 0x23e586,
- 0x3625c7,
- 0x2de9c5,
- 0x30fec6,
- 0x34fbc6,
- 0x37f907,
- 0x223a04,
- 0x2e1645,
- 0x275c84,
- 0x2c3147,
- 0x275ec8,
- 0x276a4a,
- 0x27f587,
- 0x237c07,
- 0x2bf307,
- 0x2cf649,
- 0x2924ca,
- 0x22aa43,
- 0x223905,
- 0x213143,
- 0x309209,
- 0x22e988,
- 0x2d1047,
- 0x24ae89,
- 0x217886,
- 0x2af648,
- 0x2f2ac5,
- 0x2848ca,
- 0x321f89,
- 0x26d109,
- 0x375e47,
- 0x283c89,
- 0x213008,
- 0x2ecb86,
- 0x2bbc88,
- 0x2104c7,
- 0x22ab87,
- 0x2d70c7,
- 0x2d0ec8,
- 0x2ec646,
- 0x23abc5,
- 0x279c07,
- 0x293908,
- 0x358d04,
- 0x28c444,
- 0x28d307,
- 0x2acb07,
- 0x341dca,
- 0x2ecb06,
- 0x2fa30a,
- 0x2b8887,
- 0x330607,
- 0x235d84,
- 0x374c84,
- 0x22c5c6,
- 0x3558c4,
- 0x3558cc,
- 0x3a8d05,
- 0x214bc9,
- 0x2f4d44,
- 0x3029c5,
- 0x2764c8,
- 0x28cb85,
- 0x31b806,
- 0x20f544,
- 0x298fca,
- 0x2d2e46,
- 0x28ceca,
- 0x31b5c7,
- 0x2c8ac5,
- 0x21a9c5,
- 0x22a00a,
- 0x29f605,
- 0x29d446,
- 0x2bcbc4,
- 0x2ae1c6,
- 0x3332c5,
- 0x222046,
- 0x2e9acc,
- 0x2c56ca,
- 0x26c104,
- 0x22adc6,
- 0x299fc7,
- 0x2c8e84,
- 0x260788,
- 0x38dc46,
- 0x30ea49,
- 0x2c2949,
- 0x2ab1c9,
- 0x372546,
- 0x2105c6,
- 0x2bbdc7,
- 0x356008,
- 0x2103c9,
- 0x228a47,
- 0x2b27c6,
- 0x387387,
- 0x37bd45,
- 0x330844,
- 0x2bb987,
- 0x2f49c5,
- 0x285fc5,
- 0x33b2c7,
- 0x2454c8,
- 0x38b646,
- 0x294bcd,
- 0x29670f,
- 0x29b90d,
- 0x20bf44,
- 0x231b46,
- 0x2cc508,
- 0x355385,
- 0x282408,
- 0x21854a,
- 0x203204,
- 0x3a5686,
- 0x28bbc7,
- 0x3a6207,
- 0x29b449,
- 0x2bbc45,
- 0x302904,
- 0x33040a,
- 0x2b4549,
- 0x283d87,
- 0x269846,
- 0x34d906,
- 0x29b186,
- 0x360546,
- 0x2cbe8f,
- 0x2cc3c9,
- 0x212a46,
- 0x3a6606,
- 0x274d09,
- 0x309007,
- 0x214603,
- 0x226246,
- 0x20d383,
- 0x2d5c08,
- 0x3871c7,
- 0x29db49,
- 0x2a68c8,
- 0x37fb88,
- 0x267c06,
- 0x240b09,
- 0x2c7ac5,
- 0x23e584,
- 0x2eb447,
- 0x26aa85,
- 0x20bf44,
- 0x30eec8,
- 0x216dc4,
- 0x3078c7,
- 0x31a846,
- 0x29e1c5,
- 0x2a0788,
- 0x34d7cb,
- 0x336047,
- 0x22a286,
- 0x2bea04,
- 0x31d686,
- 0x2bdfc5,
- 0x2f49c5,
- 0x27dc09,
- 0x281349,
- 0x22abc4,
- 0x22ac05,
- 0x22ae05,
- 0x284746,
- 0x335c48,
- 0x2b7106,
- 0x329d0b,
- 0x3003ca,
- 0x2ff0c5,
- 0x289b06,
- 0x2f40c5,
- 0x2065c5,
- 0x2945c7,
- 0x203888,
- 0x2499c4,
- 0x3617c6,
- 0x28cb46,
- 0x2131c7,
- 0x2ffa44,
- 0x27a706,
- 0x36d285,
- 0x36d289,
- 0x2107c4,
- 0x2a7249,
- 0x2787c6,
- 0x2ba188,
- 0x22ae05,
- 0x22cf45,
- 0x222046,
- 0x26d349,
- 0x215a49,
- 0x259386,
- 0x28c148,
- 0x264d48,
- 0x2f4084,
- 0x360a44,
- 0x360a48,
- 0x3164c8,
- 0x249ac9,
- 0x2b8306,
- 0x27ba86,
- 0x313c0d,
- 0x37c806,
- 0x2affc9,
- 0x202a85,
- 0x31c286,
- 0x2546c8,
- 0x30cdc5,
- 0x257184,
- 0x2bdfc5,
- 0x280e88,
- 0x298049,
- 0x275d44,
- 0x234b46,
- 0x2e2f8a,
- 0x369508,
- 0x341f49,
- 0x2de5ca,
- 0x24ae06,
- 0x2968c8,
- 0x24bc05,
- 0x321e08,
- 0x2b3185,
- 0x217749,
- 0x366f89,
- 0x228c42,
- 0x2a4905,
- 0x26e286,
- 0x278707,
- 0x3ace45,
- 0x2e7706,
- 0x2f7f88,
- 0x2a53c6,
- 0x2bff49,
- 0x277746,
- 0x2801c8,
- 0x2a8885,
- 0x246546,
- 0x264088,
- 0x280048,
- 0x3a36c8,
- 0x2fd4c8,
- 0x20a204,
- 0x22a803,
- 0x2c0184,
- 0x27b606,
- 0x37bd84,
- 0x2b80c7,
- 0x2edf89,
- 0x2be205,
- 0x3999c6,
- 0x226246,
- 0x29070b,
- 0x2ff006,
- 0x317006,
- 0x2c3688,
- 0x23f046,
- 0x2a6603,
- 0x209fc3,
- 0x330844,
- 0x3abe05,
- 0x387807,
- 0x275ec8,
- 0x275ecf,
- 0x279b0b,
- 0x335a48,
- 0x234bc6,
- 0x335d4e,
- 0x222043,
- 0x2db944,
- 0x2fef85,
- 0x300c06,
- 0x28aa8b,
- 0x28e786,
- 0x217089,
- 0x29e1c5,
- 0x38a288,
- 0x20d588,
- 0x21590c,
- 0x29c686,
- 0x212406,
- 0x2d4005,
- 0x286a88,
- 0x24b145,
- 0x338948,
- 0x29bd4a,
- 0x35e8c9,
- 0x685844,
- 0x2f604a82,
- 0x894c8,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x323743,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x201104,
- 0x249943,
- 0x2257c3,
- 0x224283,
- 0x224284,
- 0x258403,
- 0x232ec4,
- 0x230743,
- 0x2afc84,
- 0x2d9d43,
- 0x3ad107,
- 0x219bc3,
- 0x202883,
- 0x251b48,
- 0x2257c3,
- 0x2db58b,
- 0x2df103,
- 0x23d1c6,
- 0x201582,
- 0x385c4b,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x2257c3,
- 0x29ca03,
- 0x206883,
+ 0x273004,
+ 0x2af487,
+ 0x273248,
+ 0x2742ca,
+ 0x27a087,
+ 0x23ae47,
+ 0x30bb87,
+ 0x2cff49,
+ 0x291d8a,
+ 0x229043,
+ 0x21dfc5,
+ 0x215103,
+ 0x39dfc9,
+ 0x24b308,
+ 0x2d1bc7,
+ 0x3ae909,
+ 0x218a46,
+ 0x2c6b08,
+ 0x39a745,
+ 0x282c8a,
+ 0x216249,
+ 0x26b649,
+ 0x37af07,
+ 0x239849,
+ 0x214fc8,
+ 0x2edb06,
+ 0x2badc8,
+ 0x2119c7,
+ 0x229187,
+ 0x37b2c7,
+ 0x2d1a48,
+ 0x2ed5c6,
+ 0x23f845,
+ 0x2772c7,
+ 0x2925c8,
+ 0x3587c4,
+ 0x2a58c4,
+ 0x28c587,
+ 0x2acd07,
+ 0x2f1e4a,
+ 0x2eda86,
+ 0x2f984a,
+ 0x2b7a47,
+ 0x328a87,
+ 0x23b384,
+ 0x32d484,
+ 0x2272c6,
+ 0x30ed84,
+ 0x30ed8c,
+ 0x3a2005,
+ 0x215f09,
+ 0x2d6404,
+ 0x300305,
+ 0x273848,
+ 0x28b8c5,
+ 0x305546,
+ 0x207c84,
+ 0x29044a,
+ 0x2b14c6,
+ 0x29228a,
+ 0x20ab87,
+ 0x265b45,
+ 0x21eec5,
+ 0x2288ca,
+ 0x2a1a85,
+ 0x29c0c6,
+ 0x20bdc4,
+ 0x2b0146,
+ 0x326285,
+ 0x227e46,
+ 0x3a4acc,
+ 0x2cba4a,
+ 0x264fc4,
+ 0x2293c6,
+ 0x298387,
+ 0x2c8744,
+ 0x259348,
+ 0x38d3c6,
+ 0x29d689,
+ 0x2c4b89,
+ 0x312b09,
+ 0x376286,
+ 0x211ac6,
+ 0x2baf07,
+ 0x3082c8,
+ 0x2118c9,
+ 0x2df4c7,
+ 0x2b3ac6,
+ 0x2adb07,
+ 0x29cd85,
+ 0x328cc4,
+ 0x2baac7,
+ 0x24b105,
+ 0x2846c5,
+ 0x2fe0c7,
+ 0x248148,
+ 0x39e8c6,
+ 0x29344d,
+ 0x294f8f,
+ 0x29a58d,
+ 0x21b3c4,
+ 0x2357c6,
+ 0x2cbe08,
+ 0x3100c5,
+ 0x27d388,
+ 0x207d8a,
+ 0x2039c4,
+ 0x330206,
+ 0x27e487,
+ 0x33fe07,
+ 0x298d89,
+ 0x2bad85,
+ 0x300244,
+ 0x32888a,
+ 0x2b5689,
+ 0x239947,
+ 0x268206,
+ 0x350146,
+ 0x298ac6,
+ 0x35ec46,
+ 0x2cb70f,
+ 0x2cbcc9,
+ 0x217d86,
+ 0x239646,
+ 0x29ed49,
+ 0x309187,
+ 0x2101c3,
+ 0x21f586,
+ 0x2042c3,
+ 0x2e3848,
+ 0x2ad947,
+ 0x29c7c9,
+ 0x2a2a88,
+ 0x381e48,
+ 0x216e86,
+ 0x331209,
+ 0x33b905,
+ 0x2a33c4,
+ 0x2d90c7,
+ 0x269585,
+ 0x21b3c4,
+ 0x29db08,
+ 0x21a4c4,
+ 0x302b87,
+ 0x31c3c6,
+ 0x2ad005,
+ 0x2974c8,
+ 0x35000b,
+ 0x32bb87,
+ 0x228b46,
+ 0x2bd544,
+ 0x209c06,
+ 0x267105,
+ 0x24b105,
+ 0x278bc9,
+ 0x27c2c9,
+ 0x2291c4,
+ 0x229205,
+ 0x229405,
+ 0x282b06,
+ 0x32b788,
+ 0x2b7186,
+ 0x273e0b,
+ 0x2ffa0a,
+ 0x2fad05,
+ 0x288706,
+ 0x2f59c5,
+ 0x3b2585,
+ 0x297b47,
+ 0x204308,
+ 0x238504,
+ 0x2614c6,
+ 0x28b886,
+ 0x215187,
+ 0x2fee44,
+ 0x277e86,
+ 0x239d85,
+ 0x239d89,
+ 0x211cc4,
+ 0x2aa109,
+ 0x275e86,
+ 0x2b9408,
+ 0x229405,
+ 0x2c7785,
+ 0x227e46,
+ 0x26b889,
+ 0x218189,
+ 0x25a746,
+ 0x28ad88,
+ 0x257608,
+ 0x2f5984,
+ 0x32e244,
+ 0x32e248,
+ 0x317a08,
+ 0x238609,
+ 0x2d3d46,
+ 0x29c1c6,
+ 0x3151cd,
+ 0x2c7f86,
+ 0x2d8949,
+ 0x254785,
+ 0x30e446,
+ 0x251008,
+ 0x311d45,
+ 0x24af84,
+ 0x267105,
+ 0x27b948,
+ 0x296489,
+ 0x2730c4,
+ 0x306286,
+ 0x2e74ca,
+ 0x2c54c8,
+ 0x2f1fc9,
+ 0x2d114a,
+ 0x3ae886,
+ 0x295148,
+ 0x368545,
+ 0x30f908,
+ 0x2b4485,
+ 0x218909,
+ 0x36c449,
+ 0x228e82,
+ 0x29a005,
+ 0x26c7c6,
+ 0x275dc7,
+ 0x3aacc5,
+ 0x2f8a86,
+ 0x2f7e08,
+ 0x2a1f86,
+ 0x2c3bc9,
+ 0x274dc6,
+ 0x27bac8,
+ 0x2a90c5,
+ 0x244046,
+ 0x367808,
+ 0x27ab48,
+ 0x3b0608,
+ 0x2fc788,
+ 0x399a84,
+ 0x22d8c3,
+ 0x2c3e04,
+ 0x22e106,
+ 0x29cdc4,
+ 0x2d3b07,
+ 0x2ee949,
+ 0x2bcd45,
+ 0x332346,
+ 0x21f586,
+ 0x28e68b,
+ 0x2fac46,
+ 0x318546,
+ 0x3ac9c8,
+ 0x379bc6,
+ 0x265943,
+ 0x396f83,
+ 0x328cc4,
+ 0x231845,
+ 0x243147,
+ 0x273248,
+ 0x27324f,
+ 0x2771cb,
+ 0x32b588,
+ 0x306306,
+ 0x32b88e,
+ 0x227e43,
+ 0x2430c4,
+ 0x2fabc5,
+ 0x33db46,
+ 0x28968b,
+ 0x28da06,
+ 0x213f09,
+ 0x2ad005,
+ 0x389d88,
+ 0x206408,
+ 0x21804c,
+ 0x29b306,
+ 0x2128c6,
+ 0x2d7985,
+ 0x285188,
+ 0x276705,
+ 0x33c7c8,
+ 0x29a9ca,
+ 0x226809,
+ 0x683c04,
+ 0x31216582,
+ 0x880c8,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x323ac3,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x201604,
+ 0x238483,
+ 0x2264c3,
+ 0x224103,
+ 0x224104,
+ 0x22d183,
+ 0x2374c4,
+ 0x2343c3,
+ 0x22d684,
+ 0x21eb03,
+ 0x3aaf87,
+ 0x211003,
+ 0x2025c3,
+ 0x32d208,
+ 0x2264c3,
+ 0x2aeecb,
+ 0x2e1a03,
+ 0x241f86,
+ 0x203e42,
+ 0x38660b,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x2264c3,
+ 0x280ec3,
+ 0x200cc3,
0x200882,
- 0x894c8,
- 0x354045,
- 0x2d3b88,
- 0x2d88c8,
- 0x204a82,
- 0x365cc5,
- 0x33f707,
+ 0x880c8,
+ 0x281045,
+ 0x2db108,
+ 0x2e7e08,
+ 0x216582,
+ 0x2a0f05,
+ 0x340ec7,
0x200202,
- 0x23ca07,
- 0x2095c2,
- 0x237647,
- 0x265389,
- 0x3173c8,
- 0x347549,
- 0x331282,
- 0x2672c7,
- 0x259104,
- 0x33f7c7,
- 0x3002c7,
- 0x23f402,
- 0x219bc3,
- 0x20dc02,
- 0x201cc2,
- 0x2016c2,
- 0x200ac2,
- 0x2058c2,
- 0x2057c2,
- 0x2a8405,
- 0x20a045,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
+ 0x2417c7,
+ 0x201f82,
+ 0x23a887,
+ 0x36b2c9,
+ 0x318908,
+ 0x349889,
+ 0x32ed82,
+ 0x266707,
+ 0x25a4c4,
+ 0x340f87,
+ 0x2ff907,
+ 0x233e42,
+ 0x211003,
+ 0x20e842,
+ 0x205902,
+ 0x201502,
+ 0x206d42,
+ 0x208782,
+ 0x217642,
+ 0x2a8c45,
+ 0x2e3cc5,
+ 0x16582,
+ 0x343c3,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x12003,
0x481,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x201104,
- 0x202503,
- 0x249943,
- 0x2257c3,
- 0x20f0c3,
- 0x3216cdc6,
- 0x110083,
- 0x7efc5,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x204a82,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x9f82,
- 0x894c8,
- 0x3f5c4,
- 0xcf905,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x201604,
+ 0x202243,
+ 0x238483,
+ 0x2264c3,
+ 0x21ca03,
+ 0x340f2d86,
+ 0x107003,
+ 0x79ac5,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x216582,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x9502,
+ 0x880c8,
+ 0x441c4,
+ 0xd0205,
0x200882,
- 0x2bb244,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x268583,
- 0x2a8f85,
- 0x202503,
- 0x332283,
- 0x249943,
- 0x209583,
- 0x2257c3,
- 0x2161c3,
- 0x224303,
- 0x224043,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x204a82,
- 0x2257c3,
- 0x894c8,
- 0x2d9d43,
- 0x894c8,
- 0x2c69c3,
- 0x258403,
- 0x22ec84,
- 0x230743,
- 0x2d9d43,
- 0x20b9c2,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x20b9c2,
- 0x230c43,
- 0x249943,
- 0x2257c3,
- 0x2d8843,
- 0x2161c3,
+ 0x2ba384,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x35bb03,
+ 0x2a9c05,
+ 0x202243,
+ 0x332683,
+ 0x238483,
+ 0x201f43,
+ 0x2264c3,
+ 0x217643,
+ 0x224183,
+ 0x223ec3,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x216582,
+ 0x2264c3,
+ 0x880c8,
+ 0x21eb03,
+ 0x880c8,
+ 0x316403,
+ 0x22d183,
+ 0x232144,
+ 0x2343c3,
+ 0x21eb03,
+ 0x2082c2,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x2082c2,
+ 0x2348c3,
+ 0x238483,
+ 0x2264c3,
+ 0x2db083,
+ 0x217643,
0x200882,
- 0x204a82,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x23d1c5,
- 0xacec6,
- 0x224284,
- 0x201582,
- 0x894c8,
+ 0x216582,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x241f85,
+ 0x1835c6,
+ 0x224104,
+ 0x203e42,
+ 0x880c8,
0x200882,
- 0x1b788,
- 0x204a82,
- 0xe386,
- 0x63604,
- 0x11bb0b,
- 0x1d786,
- 0x63007,
- 0x230743,
- 0x2d9d43,
- 0x158485,
- 0x127784,
- 0x262383,
- 0x47ac7,
- 0xcdec4,
- 0x249943,
- 0x132d84,
- 0x2257c3,
- 0x2dfdc4,
- 0x1473c8,
- 0x152dc6,
- 0x204a82,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x219bc3,
- 0x202883,
- 0x2257c3,
- 0x2df103,
- 0x201582,
- 0x894c8,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x201103,
- 0x2021c4,
- 0x249943,
- 0x2257c3,
- 0x258403,
- 0x230743,
- 0x2afc84,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x23d1c6,
- 0x230743,
- 0x2d9d43,
- 0x175583,
- 0x2257c3,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x63007,
- 0x894c8,
- 0x2d9d43,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x38a58403,
- 0x230743,
- 0x249943,
- 0x2257c3,
- 0x894c8,
+ 0x20448,
+ 0x216582,
+ 0xee46,
+ 0x167404,
+ 0x10f2cb,
+ 0x173606,
+ 0x131ac7,
+ 0x2343c3,
+ 0x21eb03,
+ 0x157f45,
+ 0x155dc4,
+ 0x202c43,
+ 0x4c207,
+ 0xcd884,
+ 0x238483,
+ 0x133184,
+ 0x2264c3,
+ 0x2e26c4,
+ 0x149708,
+ 0x155646,
+ 0x216582,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x211003,
+ 0x2025c3,
+ 0x2264c3,
+ 0x2e1a03,
+ 0x203e42,
+ 0x880c8,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x201603,
+ 0x212444,
+ 0x238483,
+ 0x2264c3,
+ 0x22d183,
+ 0x2343c3,
+ 0x22d684,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x241f86,
+ 0x2343c3,
+ 0x21eb03,
+ 0x179ac3,
+ 0x2264c3,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x131ac7,
+ 0x880c8,
+ 0x21eb03,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x3aa2d183,
+ 0x2343c3,
+ 0x238483,
+ 0x2264c3,
+ 0x880c8,
0x200882,
- 0x204a82,
- 0x258403,
- 0x2d9d43,
- 0x249943,
- 0x2016c2,
- 0x2257c3,
- 0x308207,
- 0x2f538b,
- 0x206603,
- 0x22c1c8,
- 0x355d87,
- 0x2b76c6,
- 0x2bc8c5,
- 0x2f7b09,
- 0x23cf48,
- 0x311cc9,
- 0x311cd0,
- 0x35a5cb,
- 0x2e8b89,
- 0x204903,
- 0x3a8809,
- 0x22f786,
- 0x22f78c,
- 0x311ec8,
- 0x3ae5c8,
- 0x274009,
- 0x29ce4e,
- 0x37880b,
- 0x27c20c,
- 0x203803,
- 0x25dfcc,
+ 0x216582,
+ 0x22d183,
+ 0x21eb03,
+ 0x238483,
+ 0x201502,
+ 0x2264c3,
+ 0x309dc7,
+ 0x20b28b,
+ 0x200b03,
+ 0x2a06c8,
+ 0x308047,
+ 0x2017c6,
+ 0x2bba05,
+ 0x2f7989,
+ 0x20bc48,
+ 0x20bc49,
+ 0x20bc50,
+ 0x359fcb,
+ 0x2ea589,
+ 0x20c783,
+ 0x221749,
+ 0x232c46,
+ 0x232c4c,
+ 0x20be48,
+ 0x3ac688,
+ 0x26e089,
+ 0x29bace,
+ 0x37cc4b,
+ 0x38db4c,
+ 0x204803,
+ 0x2582cc,
0x207209,
- 0x3736c7,
- 0x23068c,
- 0x39baca,
- 0x2054c4,
- 0x3a398d,
- 0x25de88,
- 0x22830d,
- 0x2692c6,
- 0x2975cb,
- 0x3532c9,
- 0x316ec7,
+ 0x2de107,
+ 0x23430c,
+ 0x39b60a,
+ 0x245dc4,
+ 0x3b08cd,
+ 0x258188,
+ 0x2ded8d,
+ 0x266b86,
+ 0x28a70b,
+ 0x209dc9,
+ 0x318407,
0x31d846,
- 0x322309,
- 0x33264a,
- 0x301708,
- 0x2ded04,
- 0x35eb47,
- 0x275547,
- 0x347a44,
- 0x226d04,
- 0x2615c9,
- 0x2e7ac9,
- 0x3114c8,
- 0x20ffc5,
- 0x392805,
- 0x20cc06,
- 0x3a3849,
- 0x2187cd,
- 0x27bc88,
- 0x20cb07,
- 0x2bc948,
- 0x27d286,
- 0x3a2044,
- 0x37b205,
- 0x204506,
- 0x206704,
+ 0x320f49,
+ 0x332a4a,
+ 0x302708,
+ 0x2e1604,
+ 0x272187,
+ 0x226a87,
+ 0x349d84,
+ 0x20f244,
+ 0x27e989,
+ 0x326ec9,
+ 0x20a588,
+ 0x2114c5,
+ 0x392785,
+ 0x20d3c6,
+ 0x3b0789,
+ 0x20800d,
+ 0x38d5c8,
+ 0x20d2c7,
+ 0x2bba88,
+ 0x22eec6,
+ 0x3a1504,
+ 0x37f645,
+ 0x2055c6,
+ 0x206104,
0x207107,
- 0x209bca,
- 0x212f44,
- 0x2169c6,
- 0x2173c9,
- 0x2173cf,
- 0x217c0d,
- 0x218146,
- 0x21b390,
+ 0x20914a,
+ 0x2139c4,
+ 0x21a0c6,
+ 0x21aa49,
+ 0x21aa4f,
+ 0x21b00d,
0x21b786,
- 0x21bec7,
- 0x21c4c7,
- 0x21c4cf,
- 0x21dc89,
- 0x221946,
- 0x2246c7,
- 0x2246c8,
- 0x225449,
- 0x28e488,
- 0x2d5747,
- 0x20b803,
- 0x375746,
- 0x2e1788,
- 0x29d10a,
- 0x21a2c9,
- 0x20d883,
- 0x33f606,
- 0x36160a,
- 0x2f6307,
- 0x37350a,
- 0x3a9dce,
- 0x21ddc6,
- 0x2a4b07,
- 0x212046,
+ 0x220050,
+ 0x220446,
+ 0x220b87,
+ 0x221087,
+ 0x22108f,
+ 0x222309,
+ 0x227746,
+ 0x229747,
+ 0x229748,
+ 0x229b09,
+ 0x28d708,
+ 0x2d7d07,
+ 0x20cd03,
+ 0x3852c6,
+ 0x204008,
+ 0x29bd8a,
+ 0x215749,
+ 0x20bd83,
+ 0x340dc6,
+ 0x26130a,
+ 0x2ef8c7,
+ 0x2ddf4a,
+ 0x377e0e,
+ 0x222446,
+ 0x29a207,
+ 0x214d86,
0x2072c6,
- 0x37ad4b,
- 0x3b058a,
- 0x2232cd,
- 0x210687,
- 0x355548,
- 0x355549,
- 0x35554f,
- 0x205e8c,
- 0x27ab09,
- 0x3772ce,
- 0x3ad20a,
- 0x24c486,
- 0x2ff406,
- 0x30238c,
- 0x3043cc,
- 0x30e188,
- 0x339a47,
- 0x211a85,
- 0x208a84,
- 0x2531ce,
- 0x3328c4,
- 0x22b747,
- 0x25f88a,
- 0x369f14,
- 0x36f74f,
- 0x21c688,
- 0x375608,
- 0x36becd,
- 0x36bece,
- 0x380289,
- 0x392988,
- 0x39298f,
- 0x23038c,
- 0x23038f,
- 0x231887,
- 0x2336ca,
- 0x21ac8b,
- 0x235208,
- 0x236407,
- 0x259ccd,
- 0x20ab46,
- 0x3a3b46,
- 0x239589,
- 0x306248,
- 0x23d548,
- 0x23d54e,
- 0x2f5487,
- 0x2a9985,
- 0x23ee45,
- 0x20a884,
- 0x2b7986,
- 0x3113c8,
- 0x2527c3,
- 0x20524e,
- 0x25a088,
- 0x22784b,
- 0x33fd07,
- 0x3a3085,
- 0x25e146,
- 0x2aa9c7,
- 0x2e6888,
- 0x24ab09,
- 0x292f85,
- 0x2852c8,
- 0x218ac6,
- 0x37b9ca,
- 0x2530c9,
- 0x230749,
- 0x23074b,
- 0x323fc8,
- 0x347909,
- 0x210086,
- 0x3591ca,
- 0x2b5b8a,
- 0x2338cc,
- 0x340647,
- 0x2a010a,
- 0x35ef4b,
- 0x35ef59,
- 0x2dc808,
- 0x23d245,
- 0x259e86,
- 0x2d9949,
- 0x3178c6,
- 0x2156ca,
- 0x262e86,
- 0x213544,
- 0x2c0bcd,
- 0x305d07,
- 0x213549,
- 0x241585,
- 0x2416c8,
- 0x242009,
- 0x242244,
- 0x242947,
- 0x242948,
- 0x2432c7,
- 0x265948,
- 0x2480c7,
- 0x240845,
- 0x25118c,
- 0x251849,
- 0x35b0ca,
- 0x38e889,
- 0x3a8909,
- 0x26f90c,
- 0x2587cb,
- 0x258a88,
- 0x25a708,
- 0x25dac4,
- 0x282bc8,
- 0x283f49,
- 0x39bb87,
- 0x217606,
- 0x23bb87,
- 0x377089,
- 0x34028b,
- 0x327f47,
- 0x36c507,
- 0x2f4dc7,
- 0x228284,
- 0x228285,
- 0x2a7845,
- 0x3355cb,
- 0x3989c4,
- 0x318a88,
- 0x2a958a,
- 0x218b87,
- 0x34d287,
- 0x28a312,
- 0x283986,
- 0x2e0006,
- 0x32704e,
- 0x285a46,
- 0x28f748,
- 0x29020f,
- 0x2286c8,
- 0x286508,
- 0x2b400a,
- 0x2b4011,
- 0x2a038e,
- 0x23670a,
- 0x23670c,
- 0x2348c7,
- 0x392b90,
- 0x203b08,
- 0x2a0585,
- 0x2aae8a,
- 0x20674c,
- 0x2b2b0d,
- 0x2abb46,
- 0x2abb47,
- 0x2abb4c,
- 0x2f00cc,
- 0x2d814c,
- 0x28d70b,
- 0x284c84,
- 0x21b244,
- 0x372689,
- 0x2daac7,
- 0x2e58c9,
- 0x2b59c9,
- 0x366687,
- 0x39b946,
- 0x39b949,
- 0x3a51c3,
- 0x2a54ca,
- 0x208cc7,
- 0x309ecb,
- 0x22314a,
- 0x237784,
- 0x351606,
- 0x27f809,
- 0x31ca44,
- 0x3a8dca,
- 0x2e78c5,
- 0x2b5e05,
- 0x2b5e0d,
- 0x2b614e,
- 0x28f285,
- 0x315286,
- 0x23cdc7,
- 0x2688ca,
- 0x2e6a86,
- 0x319bc4,
- 0x314e87,
- 0x219a8b,
- 0x27d347,
- 0x359404,
- 0x24fdc6,
- 0x24fdcd,
- 0x23478c,
- 0x325dc6,
- 0x27be8a,
- 0x20c646,
- 0x2146c8,
- 0x21e447,
- 0x26834a,
- 0x37c606,
- 0x210583,
- 0x254846,
- 0x2015c8,
- 0x29864a,
- 0x268fc7,
- 0x268fc8,
- 0x26e6c4,
- 0x283187,
- 0x2c0488,
- 0x2127c8,
- 0x3a6708,
- 0x28810a,
- 0x2cf185,
- 0x2c7707,
- 0x236553,
- 0x258486,
- 0x2d2fc8,
- 0x21fcc9,
- 0x23c8c8,
- 0x267c8b,
- 0x2b8688,
- 0x219bc4,
- 0x2999c6,
- 0x3b23c6,
- 0x2d6a09,
- 0x385687,
- 0x251288,
- 0x3ae246,
- 0x21f4c4,
- 0x2c5405,
- 0x2bf148,
- 0x2bfa0a,
- 0x2c0848,
- 0x2c5b46,
- 0x298d4a,
- 0x2334c8,
- 0x2c8c88,
- 0x2ca008,
- 0x2ca906,
- 0x2cc706,
- 0x31dd4c,
- 0x2ccc90,
- 0x288885,
- 0x2284c8,
- 0x2f8490,
- 0x2284d0,
- 0x311b4e,
- 0x31d9ce,
- 0x31d9d4,
- 0x32418f,
- 0x324546,
- 0x347e51,
- 0x306413,
- 0x306888,
- 0x31d1c5,
- 0x3587c8,
- 0x20e545,
- 0x228fcc,
- 0x249d89,
- 0x22b589,
- 0x23b907,
- 0x21a5c9,
- 0x305f47,
- 0x3af506,
- 0x37b007,
- 0x253945,
- 0x2e5ac3,
- 0x252989,
- 0x223689,
- 0x375583,
- 0x3acd44,
- 0x325a0d,
- 0x37e40f,
- 0x33b205,
- 0x3194c6,
- 0x213807,
- 0x3b09c7,
- 0x287686,
- 0x28768b,
- 0x2a21c5,
- 0x256946,
- 0x20bb87,
- 0x26ed49,
- 0x328c86,
- 0x200d85,
- 0x22020b,
- 0x268606,
- 0x242fc5,
- 0x28b888,
- 0x2b5248,
- 0x2b66cc,
- 0x2b66d0,
- 0x2cae09,
- 0x2f6b87,
- 0x2d480b,
- 0x2d4346,
- 0x2d560a,
- 0x2d678b,
- 0x2d730a,
- 0x2d7586,
- 0x2d8705,
- 0x355c86,
- 0x277908,
- 0x23b9ca,
- 0x36bb5c,
- 0x2df1cc,
- 0x2df4c8,
- 0x23d1c5,
- 0x2e1c47,
- 0x29ca86,
- 0x399805,
- 0x219e86,
- 0x287848,
- 0x2b47c7,
- 0x29cd48,
- 0x2a4c0a,
- 0x32268c,
- 0x322909,
- 0x399b47,
- 0x204b04,
- 0x23f786,
- 0x28608a,
- 0x2b5ac5,
- 0x364b4c,
- 0x37d1c8,
- 0x34bb08,
- 0x20558c,
- 0x20f98c,
- 0x210949,
- 0x210b87,
- 0x2af94c,
- 0x377784,
- 0x339d4a,
- 0x31cd4c,
- 0x27018b,
- 0x23588b,
- 0x236286,
- 0x238247,
- 0x238dc7,
- 0x392dcf,
- 0x2f1211,
- 0x3b2cd2,
- 0x238dcd,
- 0x238dce,
- 0x23910e,
- 0x324348,
- 0x324352,
- 0x23c4c8,
- 0x2fb047,
- 0x245f4a,
- 0x20d0c8,
- 0x285a05,
- 0x32b0ca,
- 0x21bcc7,
- 0x2e1944,
- 0x2636c3,
- 0x31e545,
- 0x2b4287,
- 0x2f2187,
- 0x2b2d0e,
- 0x35db8d,
- 0x36abc9,
- 0x210ec5,
- 0x39c543,
- 0x252106,
- 0x36aa45,
- 0x273a48,
- 0x2b1149,
- 0x259ec5,
- 0x259ecf,
- 0x2d8547,
- 0x2f7a45,
- 0x3a058a,
- 0x39a146,
- 0x239c09,
- 0x2e878c,
- 0x2eab49,
- 0x203d46,
- 0x2a938c,
- 0x2eb806,
- 0x2eefc8,
- 0x2ef1c6,
- 0x2dc986,
- 0x305a84,
- 0x258e03,
- 0x2ec3ca,
- 0x321651,
- 0x27acca,
- 0x3644c5,
- 0x38e287,
- 0x24d547,
- 0x2c0584,
- 0x2c058b,
- 0x317248,
- 0x2b1d06,
- 0x22cd85,
- 0x25f344,
- 0x26bd09,
- 0x275284,
- 0x3b0e87,
- 0x2efd05,
- 0x2efd07,
- 0x327285,
- 0x2a84c3,
- 0x2faf08,
- 0x32820a,
- 0x23b0c3,
- 0x35408a,
- 0x26f786,
- 0x259c4f,
- 0x356e89,
- 0x2051d0,
- 0x2df9c8,
- 0x2c6049,
- 0x297e87,
- 0x24fd4f,
- 0x24b244,
- 0x2afd04,
- 0x21b606,
- 0x2342c6,
- 0x314bca,
- 0x380786,
- 0x3450c7,
- 0x2f7148,
- 0x2f7347,
- 0x2f7d47,
- 0x348a4a,
- 0x2fad4b,
- 0x27ce85,
- 0x3b2908,
- 0x22b843,
- 0x36d5cc,
- 0x21180f,
- 0x26090d,
- 0x2bc047,
- 0x36ad09,
- 0x22ca87,
- 0x258ec8,
- 0x36a10c,
- 0x26b0c8,
- 0x24cbc8,
- 0x30a7ce,
- 0x3202d4,
- 0x3207e4,
- 0x33cf0a,
- 0x35aa0b,
- 0x306004,
- 0x306009,
- 0x3a5708,
- 0x23f945,
- 0x2522ca,
- 0x265247,
- 0x2ee604,
- 0x323743,
- 0x258403,
- 0x232ec4,
- 0x230743,
- 0x2d9d43,
- 0x201104,
- 0x202503,
- 0x219bc3,
- 0x2ccc86,
- 0x2021c4,
- 0x249943,
- 0x2257c3,
- 0x219683,
+ 0x37f18b,
+ 0x21d18a,
+ 0x21768d,
+ 0x211b87,
+ 0x310288,
+ 0x310289,
+ 0x31028f,
+ 0x3b218c,
+ 0x278289,
+ 0x33948e,
+ 0x3ab08a,
+ 0x368dc6,
+ 0x37bf86,
+ 0x30420c,
+ 0x31370c,
+ 0x327688,
+ 0x33f8c7,
+ 0x2131c5,
+ 0x29e584,
+ 0x24fb0e,
+ 0x332cc4,
+ 0x238a87,
+ 0x26274a,
+ 0x382554,
+ 0x3839cf,
+ 0x221248,
+ 0x385188,
+ 0x370e8d,
+ 0x370e8e,
+ 0x38fec9,
+ 0x22fe88,
+ 0x22fe8f,
+ 0x23400c,
+ 0x23400f,
+ 0x235507,
+ 0x237bca,
+ 0x21f18b,
+ 0x23a0c8,
+ 0x23bb47,
+ 0x25b08d,
+ 0x252506,
+ 0x3b0a86,
+ 0x23e5c9,
+ 0x215d48,
+ 0x242188,
+ 0x24218e,
+ 0x20b387,
+ 0x25f8c5,
+ 0x243a85,
+ 0x202084,
+ 0x201a86,
+ 0x20a488,
+ 0x24f103,
+ 0x3b154e,
+ 0x25b448,
+ 0x29ff0b,
+ 0x366947,
+ 0x3a31c5,
+ 0x239506,
+ 0x2aa947,
+ 0x39a248,
+ 0x27efc9,
+ 0x28f685,
+ 0x283688,
+ 0x213446,
+ 0x38b30a,
+ 0x24fa09,
+ 0x2343c9,
+ 0x2343cb,
+ 0x364b88,
+ 0x349c49,
+ 0x211586,
+ 0x2b074a,
+ 0x35904a,
+ 0x237dcc,
+ 0x367287,
+ 0x2a998a,
+ 0x27258b,
+ 0x272599,
+ 0x2da488,
+ 0x242005,
+ 0x25b246,
+ 0x2ed389,
+ 0x318e06,
+ 0x21250a,
+ 0x2f31c6,
+ 0x212104,
+ 0x2bf38d,
+ 0x3412c7,
+ 0x212109,
+ 0x244d45,
+ 0x244e88,
+ 0x245389,
+ 0x2455c4,
+ 0x245cc7,
+ 0x245cc8,
+ 0x246347,
+ 0x263e88,
+ 0x24c807,
+ 0x36f505,
+ 0x2567cc,
+ 0x256e89,
+ 0x2d9a8a,
+ 0x38ec09,
+ 0x221849,
+ 0x26b00c,
+ 0x259b8b,
+ 0x259e48,
+ 0x25bac8,
+ 0x25ee84,
+ 0x27d9c8,
+ 0x282309,
+ 0x39b6c7,
+ 0x21ac86,
+ 0x399907,
+ 0x325e89,
+ 0x366ecb,
+ 0x324907,
+ 0x3714c7,
+ 0x20acc7,
+ 0x2ded04,
+ 0x2ded05,
+ 0x2a81c5,
+ 0x337ecb,
+ 0x3981c4,
+ 0x319fc8,
+ 0x25f4ca,
+ 0x213507,
+ 0x346547,
+ 0x288f12,
+ 0x283e06,
+ 0x231ac6,
+ 0x322fce,
+ 0x361506,
+ 0x28edc8,
+ 0x28ff4f,
+ 0x2df148,
+ 0x284c08,
+ 0x35f54a,
+ 0x35f551,
+ 0x2a274e,
+ 0x23be4a,
+ 0x23be4c,
+ 0x230087,
+ 0x230090,
+ 0x204ac8,
+ 0x2a2945,
+ 0x2aad0a,
+ 0x20614c,
+ 0x2b3e0d,
+ 0x2ac3c6,
+ 0x2ac3c7,
+ 0x2ac3cc,
+ 0x2efc8c,
+ 0x2da98c,
+ 0x28c98b,
+ 0x283044,
+ 0x21b644,
+ 0x3741c9,
+ 0x2d72c7,
+ 0x2e94c9,
+ 0x358e89,
+ 0x36bb47,
+ 0x39b486,
+ 0x39b489,
+ 0x3a4a43,
+ 0x2a208a,
+ 0x29e7c7,
+ 0x30b6cb,
+ 0x21750a,
+ 0x23a9c4,
+ 0x353e86,
+ 0x27a309,
+ 0x30ec04,
+ 0x3a20ca,
+ 0x228e45,
+ 0x2b6485,
+ 0x2b648d,
+ 0x2b67ce,
+ 0x39f105,
+ 0x3167c6,
+ 0x241b87,
+ 0x26748a,
+ 0x39a446,
+ 0x35a2c4,
+ 0x35e2c7,
+ 0x210ecb,
+ 0x22ef87,
+ 0x202104,
+ 0x265d46,
+ 0x265d4d,
+ 0x325b4c,
+ 0x32fd86,
+ 0x38d7ca,
+ 0x225806,
+ 0x210288,
+ 0x263507,
+ 0x23660a,
+ 0x23c3c6,
+ 0x211a83,
+ 0x251186,
+ 0x203e88,
+ 0x296a8a,
+ 0x24aa47,
+ 0x24aa48,
+ 0x267b84,
+ 0x27b2c7,
+ 0x2c4108,
+ 0x2a3648,
+ 0x286808,
+ 0x27fa0a,
+ 0x2cf145,
+ 0x2cf3c7,
+ 0x23bc93,
+ 0x22d206,
+ 0x2b1648,
+ 0x224709,
+ 0x241688,
+ 0x216f0b,
+ 0x2b7848,
+ 0x211004,
+ 0x2a1e46,
+ 0x3b3106,
+ 0x2d9509,
+ 0x385c07,
+ 0x2568c8,
+ 0x287bc6,
+ 0x3a17c4,
+ 0x2c2e45,
+ 0x2bdc88,
+ 0x2be28a,
+ 0x2bf008,
+ 0x2c3906,
+ 0x29718a,
+ 0x233588,
+ 0x2c8548,
+ 0x2c9908,
+ 0x2c9f46,
+ 0x2cc006,
+ 0x31098c,
+ 0x2cc5d0,
+ 0x286fc5,
+ 0x2def48,
+ 0x2f8310,
+ 0x2def50,
+ 0x20bace,
+ 0x31060e,
+ 0x310614,
+ 0x31d9cf,
+ 0x31dd86,
+ 0x342211,
+ 0x349e53,
+ 0x34a2c8,
+ 0x27fd45,
+ 0x358288,
+ 0x20f985,
+ 0x22b24c,
+ 0x24bf89,
+ 0x2388c9,
+ 0x399687,
+ 0x240589,
+ 0x215a47,
+ 0x2b9d86,
+ 0x37f447,
+ 0x20c185,
+ 0x212043,
+ 0x24f2c9,
+ 0x217a49,
+ 0x379ac3,
+ 0x3aabc4,
+ 0x34ae4d,
+ 0x3558cf,
+ 0x2fe005,
+ 0x31aa06,
+ 0x20cfc7,
+ 0x21d5c7,
+ 0x285d86,
+ 0x285d8b,
+ 0x2a3bc5,
+ 0x258ac6,
+ 0x208487,
+ 0x26d109,
+ 0x2de6c6,
+ 0x364505,
+ 0x21c08b,
+ 0x22e946,
+ 0x246045,
+ 0x27e148,
+ 0x2d8748,
+ 0x2ca44c,
+ 0x2ca450,
+ 0x2ce7c9,
+ 0x2d5587,
+ 0x2f6c4b,
+ 0x2d5d46,
+ 0x2d7bca,
+ 0x2d928b,
+ 0x2d9d0a,
+ 0x2d9f86,
+ 0x2daf45,
+ 0x307f46,
+ 0x274f88,
+ 0x39974a,
+ 0x370b1c,
+ 0x2e1acc,
+ 0x2e1dc8,
+ 0x241f85,
+ 0x2e42c7,
+ 0x29b706,
+ 0x273c45,
+ 0x21dd86,
+ 0x285f48,
+ 0x2b5907,
+ 0x29b9c8,
+ 0x29a30a,
+ 0x3212cc,
+ 0x321549,
+ 0x224a87,
+ 0x282844,
+ 0x244386,
+ 0x28478a,
+ 0x358f85,
+ 0x3637cc,
+ 0x364f08,
+ 0x360d08,
+ 0x3b188c,
+ 0x20c8cc,
+ 0x20da49,
+ 0x20dc87,
+ 0x22d34c,
+ 0x29d284,
+ 0x2e83ca,
+ 0x2ad2cc,
+ 0x26eb4b,
+ 0x39070b,
+ 0x3a5946,
+ 0x23c107,
+ 0x2302c7,
+ 0x2302cf,
+ 0x2f0c11,
+ 0x3b3a12,
+ 0x23c90d,
+ 0x23c90e,
+ 0x23cc4e,
+ 0x31db88,
+ 0x31db92,
+ 0x23ea88,
+ 0x201407,
+ 0x248bca,
+ 0x20d888,
+ 0x3614c5,
+ 0x371c0a,
+ 0x220987,
+ 0x2da0c4,
+ 0x202b43,
+ 0x311185,
+ 0x35f7c7,
+ 0x39fe87,
+ 0x2b400e,
+ 0x3366cd,
+ 0x338149,
+ 0x20dfc5,
+ 0x35d103,
+ 0x24ea46,
+ 0x36fb85,
+ 0x271a48,
+ 0x2b2449,
+ 0x25b285,
+ 0x25b28f,
+ 0x2dad87,
+ 0x2f78c5,
+ 0x306b0a,
+ 0x27fc06,
+ 0x23dd09,
+ 0x2ea18c,
+ 0x2ebe09,
+ 0x378a86,
+ 0x25f2cc,
+ 0x2ec206,
+ 0x2ef3c8,
+ 0x2ef5c6,
+ 0x2da606,
+ 0x280604,
+ 0x25a1c3,
+ 0x35760a,
+ 0x369111,
+ 0x38c04a,
+ 0x3627c5,
+ 0x2a64c7,
+ 0x253647,
+ 0x2c4204,
+ 0x2c420b,
+ 0x318788,
+ 0x2b3006,
+ 0x2c75c5,
+ 0x38b604,
+ 0x262b49,
+ 0x29f2c4,
+ 0x21da87,
+ 0x322045,
+ 0x322047,
+ 0x323205,
+ 0x2a8d03,
+ 0x2012c8,
+ 0x27f30a,
+ 0x23fd43,
+ 0x28108a,
+ 0x26db46,
+ 0x25b00f,
+ 0x356849,
+ 0x3b14d0,
+ 0x2e22c8,
+ 0x2c45c9,
+ 0x293287,
+ 0x265ccf,
+ 0x3aecc4,
+ 0x22d704,
+ 0x219f46,
+ 0x222b86,
+ 0x3a5dca,
+ 0x3903c6,
+ 0x33eb87,
+ 0x2f6fc8,
+ 0x2f71c7,
+ 0x2f7bc7,
+ 0x34b94a,
+ 0x2fa14b,
+ 0x38e7c5,
+ 0x3b3648,
+ 0x238b83,
+ 0x261d0c,
+ 0x212f4f,
+ 0x2594cd,
+ 0x2bb187,
+ 0x338289,
+ 0x22f4c7,
+ 0x25a288,
+ 0x38274c,
+ 0x2a6c48,
+ 0x252cc8,
+ 0x30c28e,
+ 0x31f814,
+ 0x31fd24,
+ 0x33f28a,
+ 0x35a54b,
+ 0x215b04,
+ 0x215b09,
+ 0x330288,
+ 0x244545,
+ 0x24ec0a,
+ 0x36b187,
+ 0x307e44,
+ 0x323ac3,
+ 0x22d183,
+ 0x2374c4,
+ 0x2343c3,
+ 0x21eb03,
+ 0x201604,
+ 0x202243,
+ 0x211003,
+ 0x2cc5c6,
+ 0x212444,
+ 0x238483,
+ 0x2264c3,
+ 0x21bd03,
0x200882,
- 0x323743,
- 0x204a82,
- 0x258403,
- 0x232ec4,
- 0x230743,
- 0x2d9d43,
- 0x202503,
- 0x2ccc86,
- 0x249943,
- 0x2257c3,
- 0x894c8,
- 0x258403,
- 0x230743,
- 0x2095c3,
- 0x249943,
- 0x2257c3,
- 0x894c8,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x219bc3,
- 0x2021c4,
- 0x249943,
- 0x2257c3,
- 0x7112c8,
- 0x201742,
+ 0x323ac3,
+ 0x216582,
+ 0x22d183,
+ 0x2374c4,
+ 0x2343c3,
+ 0x21eb03,
+ 0x202243,
+ 0x2cc5c6,
+ 0x238483,
+ 0x2264c3,
+ 0x880c8,
+ 0x22d183,
+ 0x2343c3,
+ 0x211cc3,
+ 0x238483,
+ 0x2264c3,
+ 0x880c8,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x211003,
+ 0x212444,
+ 0x238483,
+ 0x2264c3,
+ 0x200882,
+ 0x2f5003,
+ 0x216582,
+ 0x2343c3,
+ 0x21eb03,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x202ec2,
0x200482,
- 0x204a82,
- 0x258403,
- 0x201e02,
- 0x201042,
- 0x201104,
- 0x30ac84,
- 0x218f82,
- 0x2021c4,
- 0x2016c2,
- 0x2257c3,
- 0x219683,
- 0x236286,
- 0x21ce42,
- 0x203d02,
- 0x21a642,
- 0x3b21fc03,
- 0x3b606343,
- 0x4df06,
- 0x4df06,
- 0x224284,
- 0xf5dcc,
- 0x18ce0c,
- 0x7edcd,
- 0xd9547,
- 0x182c8,
- 0x1e808,
- 0x1a7e8a,
- 0x3c2fc045,
- 0x11fe09,
- 0x153b08,
- 0x19ec8a,
- 0x190d0e,
- 0x143c6cb,
- 0x63604,
- 0x1702c8,
- 0x7a287,
- 0x1a8387,
- 0x10d109,
- 0x11cac7,
- 0x132948,
- 0x1a2e49,
- 0x12ba85,
- 0x53e0e,
- 0xa88cd,
- 0x62e88,
- 0x3c665e86,
- 0x5ec87,
- 0x5f747,
- 0x68787,
- 0x6df87,
- 0xcbc2,
- 0x122d07,
- 0x1b074c,
- 0xe94c7,
- 0x8eb46,
- 0xa3609,
- 0xa5ec8,
- 0xd4c2,
- 0x1042,
- 0x17dc0b,
- 0x13349,
- 0x3f209,
- 0x295c8,
- 0xaf102,
- 0x40ec9,
- 0xcd649,
- 0xce408,
- 0xce947,
- 0xcf109,
- 0xd1dc5,
- 0xd21d0,
- 0x19a286,
- 0x555c5,
- 0x23ccd,
- 0x11c686,
- 0xda487,
- 0xdfdd8,
- 0x156288,
- 0x1a080a,
- 0x162d0d,
- 0x3e42,
- 0x7e246,
- 0x8ad48,
- 0x174a08,
- 0x89389,
- 0x42b08,
- 0x4e10e,
- 0xe6f85,
- 0x4a148,
- 0x35c2,
- 0x152dc6,
+ 0x216582,
+ 0x22d183,
+ 0x22b782,
+ 0x200a82,
+ 0x201604,
+ 0x307b04,
+ 0x219382,
+ 0x212444,
+ 0x201502,
+ 0x2264c3,
+ 0x21bd03,
+ 0x3a5946,
+ 0x221e42,
+ 0x206202,
+ 0x224dc2,
+ 0x3d224643,
+ 0x3d626703,
+ 0x53d46,
+ 0x53d46,
+ 0x224104,
+ 0x140a30a,
+ 0x16970c,
+ 0x165f0c,
+ 0x798cd,
+ 0xdb7c7,
+ 0x1b908,
+ 0x22f08,
+ 0x1a7eca,
+ 0x3e31f345,
+ 0x11f349,
+ 0x163048,
+ 0x1ac10a,
+ 0x16348e,
+ 0x144148b,
+ 0x167404,
+ 0x2988,
+ 0x16e847,
+ 0x178587,
+ 0x112089,
+ 0x10ec87,
+ 0x132d48,
+ 0x1a2f89,
+ 0x17a845,
+ 0x5074e,
+ 0xa910d,
+ 0x131948,
+ 0x3e6d7e86,
+ 0x60c47,
+ 0x62607,
+ 0x67347,
+ 0x6c4c7,
+ 0xd382,
+ 0x141807,
+ 0x1d34c,
+ 0xeaec7,
+ 0x8ddc6,
+ 0xa5449,
+ 0xa7188,
+ 0xf1c2,
+ 0xa82,
+ 0x13088b,
+ 0x15309,
+ 0x33c49,
+ 0x2b848,
+ 0xb09c2,
+ 0x1afb89,
+ 0xccf89,
+ 0xcdbc8,
+ 0xce147,
+ 0xcf0c9,
+ 0xd2905,
+ 0xd2d10,
+ 0x164d46,
+ 0x51f05,
+ 0x23b4d,
+ 0x10e846,
+ 0xdc047,
+ 0xe26d8,
+ 0x108548,
+ 0x19104a,
+ 0x4114d,
+ 0x1402,
+ 0x161186,
+ 0x89948,
+ 0x180248,
+ 0x87f89,
+ 0x45e88,
+ 0x4da0e,
+ 0xe8f85,
+ 0x539c8,
+ 0x3282,
+ 0x155646,
0x6c2,
- 0xc01,
- 0x3cae0644,
- 0x3ce91043,
+ 0xb81,
+ 0x3eae2f44,
+ 0x3ee90c43,
0x141,
- 0x17d386,
+ 0x1650c6,
0x141,
0x1,
- 0x17d386,
- 0x1564a45,
- 0x2054c4,
- 0x258403,
- 0x2446c4,
- 0x201104,
- 0x249943,
- 0x21fb85,
- 0x20f0c3,
- 0x244443,
- 0x2e82c5,
- 0x224043,
- 0x3de58403,
- 0x230743,
- 0x2d9d43,
+ 0x1650c6,
+ 0x14f60c5,
+ 0x245dc4,
+ 0x22d183,
+ 0x247344,
+ 0x201604,
+ 0x238483,
+ 0x2245c5,
+ 0x21ca03,
+ 0x215cc3,
+ 0x2e9cc5,
+ 0x223ec3,
+ 0x3fe2d183,
+ 0x2343c3,
+ 0x21eb03,
0x200041,
- 0x219bc3,
- 0x30ac84,
- 0x2021c4,
- 0x249943,
- 0x2257c3,
- 0x2161c3,
- 0x894c8,
+ 0x211003,
+ 0x307b04,
+ 0x212444,
+ 0x238483,
+ 0x2264c3,
+ 0x217643,
+ 0x880c8,
0x200882,
- 0x323743,
- 0x204a82,
- 0x258403,
- 0x230743,
- 0x2095c3,
- 0x201042,
- 0x201104,
- 0x202503,
- 0x219bc3,
- 0x249943,
- 0x202883,
- 0x2257c3,
- 0x224043,
- 0x894c8,
- 0x38c082,
- 0x4a82,
- 0xf750e,
- 0x3ee00142,
- 0x274948,
- 0x2221c6,
- 0x2634c6,
- 0x221b47,
- 0x3f207d42,
- 0x3f756d08,
- 0x20828a,
- 0x25e708,
- 0x200dc2,
- 0x208b09,
- 0x27cec7,
- 0x217586,
- 0x207c49,
- 0x24f9c4,
- 0x2b75c6,
- 0x2d7804,
- 0x276684,
- 0x250689,
- 0x354786,
- 0x20a105,
- 0x380a85,
- 0x383a87,
- 0x2b8b07,
- 0x3809c4,
- 0x221d86,
- 0x2fe205,
- 0x2e13c5,
- 0x2f4005,
- 0x3925c7,
- 0x33fb45,
- 0x307409,
- 0x30f905,
- 0x2cfec4,
- 0x2e69c7,
- 0x24b3ce,
- 0x261c49,
- 0x326f09,
- 0x346646,
- 0x33c4c8,
- 0x2ae2cb,
- 0x2d158c,
- 0x25a586,
- 0x3786c7,
- 0x20a605,
- 0x226d0a,
- 0x31b0c9,
- 0x24a909,
- 0x295506,
- 0x2edd05,
- 0x34bf85,
- 0x363c49,
- 0x2f418b,
- 0x279f46,
- 0x330ac6,
- 0x20cb04,
- 0x289fc6,
- 0x2a9a08,
- 0x201446,
- 0x3a3e46,
- 0x209648,
- 0x209e47,
- 0x20a389,
- 0x20b085,
- 0x894c8,
- 0x3a8304,
- 0x37c344,
- 0x211605,
- 0x395c09,
- 0x21ef07,
- 0x21ef0b,
- 0x22108a,
- 0x226a05,
- 0x3fa0b802,
- 0x223007,
- 0x3fe28d88,
- 0x285007,
- 0x354ac5,
- 0x23458a,
- 0x4a82,
- 0x3aa0cb,
- 0x3874ca,
- 0x21fe86,
- 0x3a3083,
- 0x32dc0d,
- 0x363e4c,
- 0x3a214d,
- 0x3828c5,
- 0x238985,
- 0x252807,
- 0x201e09,
- 0x208186,
- 0x380605,
- 0x2f1bc8,
- 0x289ec3,
- 0x2d8bc8,
- 0x289ec8,
- 0x2bd3c7,
- 0x3b1588,
- 0x200b09,
- 0x232687,
- 0x2f4f07,
- 0x2f4688,
- 0x3a9944,
- 0x3a9947,
- 0x2691c8,
- 0x204786,
- 0x37e78f,
- 0x221407,
- 0x2d58c6,
- 0x259045,
- 0x220803,
- 0x36dd07,
- 0x368c83,
- 0x243486,
- 0x245306,
- 0x2466c6,
- 0x28df45,
- 0x265943,
- 0x388ac8,
- 0x36b4c9,
- 0x37ef8b,
- 0x246848,
- 0x247d85,
- 0x248d45,
- 0x40237842,
- 0x37b0c9,
- 0x201187,
- 0x2569c5,
- 0x250587,
- 0x255b46,
- 0x360405,
- 0x36a88b,
- 0x258a84,
- 0x25e2c5,
- 0x25e407,
- 0x273986,
- 0x275385,
- 0x282dc7,
- 0x283347,
- 0x26f744,
- 0x288a8a,
- 0x288f48,
- 0x24bc89,
- 0x2ee845,
- 0x332f86,
- 0x2a9bca,
- 0x3aa306,
- 0x20c4c7,
- 0x31754d,
- 0x22c6c9,
- 0x24c745,
- 0x253647,
- 0x2637c8,
- 0x263e48,
- 0x311807,
- 0x323086,
- 0x2101c7,
- 0x244c03,
- 0x3355c4,
- 0x35ce05,
- 0x38d347,
- 0x391fc9,
- 0x21a048,
- 0x22a6c5,
- 0x2e62c4,
- 0x36a3c5,
- 0x23fccd,
- 0x204042,
- 0x302d86,
- 0x27e186,
- 0x2a3a8a,
- 0x363386,
- 0x374405,
- 0x317d45,
- 0x317d47,
- 0x37b80c,
- 0x271b8a,
- 0x289c86,
- 0x208945,
- 0x289e06,
- 0x28a147,
- 0x28bd86,
- 0x28de4c,
- 0x207d89,
- 0x4077d807,
- 0x2905c5,
- 0x2905c6,
- 0x290ac8,
- 0x2b0c05,
- 0x2a29c5,
- 0x2a2c08,
- 0x2a2e0a,
- 0x40a6b682,
- 0x40e0f402,
- 0x37ff85,
- 0x2d5843,
- 0x2e5c88,
- 0x21d543,
- 0x2a3084,
- 0x239d4b,
- 0x35edc8,
- 0x2a6d08,
- 0x41329249,
- 0x2a8109,
- 0x2a87c6,
- 0x2aa648,
- 0x2aa849,
- 0x2ab406,
- 0x2ab585,
- 0x381146,
- 0x2ac0c9,
- 0x31b987,
- 0x246406,
- 0x2d9007,
- 0x208007,
- 0x240204,
- 0x416fb349,
- 0x2c4408,
- 0x356c08,
- 0x33e947,
- 0x2bedc6,
- 0x33b409,
- 0x263487,
- 0x341a8a,
- 0x381908,
- 0x3231c7,
- 0x3330c6,
- 0x260c0a,
- 0x2488c8,
- 0x28bec5,
- 0x225b85,
- 0x2d38c7,
- 0x2d4fc9,
- 0x2d64cb,
- 0x2e9908,
- 0x30f989,
- 0x246b47,
- 0x3aef0c,
- 0x2b07cc,
- 0x2b0aca,
- 0x2b0d4c,
- 0x2bc388,
- 0x2bc588,
- 0x2bc784,
- 0x2bcb49,
- 0x2bcd89,
- 0x2bcfca,
- 0x2bd249,
- 0x2bd587,
+ 0x323ac3,
+ 0x216582,
+ 0x22d183,
+ 0x2343c3,
+ 0x211cc3,
+ 0x200a82,
+ 0x201604,
+ 0x202243,
+ 0x211003,
+ 0x238483,
+ 0x2025c3,
+ 0x2264c3,
+ 0x223ec3,
+ 0x880c8,
+ 0x38bcc2,
+ 0x16582,
+ 0x1462d48,
+ 0xf738e,
+ 0x40e00142,
+ 0x29e988,
+ 0x227fc6,
+ 0x2bb546,
+ 0x227947,
+ 0x41201102,
+ 0x417566c8,
+ 0x3af8ca,
+ 0x2606c8,
+ 0x201002,
+ 0x29e609,
+ 0x38e807,
+ 0x21ac06,
+ 0x201009,
+ 0x254704,
+ 0x2f5fc6,
+ 0x2d5fc4,
+ 0x273a04,
+ 0x2563c9,
+ 0x281786,
+ 0x2e3d85,
+ 0x220e45,
+ 0x3a5287,
+ 0x2b7cc7,
+ 0x243884,
+ 0x227b86,
+ 0x39fac5,
+ 0x202b05,
+ 0x2f5905,
+ 0x392547,
+ 0x366785,
+ 0x308bc9,
+ 0x2808c5,
+ 0x2d07c4,
+ 0x39a387,
+ 0x30584e,
+ 0x30fc49,
+ 0x322e89,
+ 0x348986,
+ 0x31e708,
+ 0x2b024b,
+ 0x2d210c,
+ 0x25b946,
+ 0x37cb07,
+ 0x209805,
+ 0x20f24a,
+ 0x20a689,
+ 0x252249,
+ 0x293d86,
+ 0x2ee6c5,
+ 0x28b145,
+ 0x361f09,
+ 0x2f5a8b,
+ 0x277606,
+ 0x32e5c6,
+ 0x20d2c4,
+ 0x288bc6,
+ 0x25f948,
+ 0x203d06,
+ 0x3a82c6,
+ 0x208bc8,
+ 0x2093c7,
+ 0x209589,
+ 0x20c445,
+ 0x880c8,
+ 0x378504,
+ 0x229e04,
+ 0x212d45,
+ 0x395589,
+ 0x223707,
+ 0x22370b,
+ 0x2255ca,
+ 0x22b185,
+ 0x41a0b602,
+ 0x2173c7,
+ 0x41e2c488,
+ 0x2833c7,
+ 0x281ac5,
+ 0x32594a,
+ 0x16582,
+ 0x24b90b,
+ 0x2adc4a,
+ 0x2248c6,
+ 0x3a31c3,
+ 0x230dcd,
+ 0x3320cc,
+ 0x36210d,
+ 0x3845c5,
+ 0x237205,
+ 0x24f147,
+ 0x3a8e89,
+ 0x3af7c6,
+ 0x390245,
+ 0x2ee3c8,
+ 0x288ac3,
+ 0x2e8108,
+ 0x288ac8,
+ 0x2bc507,
+ 0x2e62c8,
+ 0x3af3c9,
+ 0x236107,
+ 0x20ae07,
+ 0x335048,
+ 0x253384,
+ 0x253387,
+ 0x266a88,
+ 0x205846,
+ 0x3661cf,
+ 0x215507,
+ 0x2e3506,
+ 0x25a405,
+ 0x224f43,
+ 0x372207,
+ 0x36e143,
+ 0x246506,
+ 0x247f86,
+ 0x249686,
+ 0x28d1c5,
+ 0x263e83,
+ 0x3885c8,
+ 0x370489,
+ 0x38124b,
+ 0x249808,
+ 0x24c4c5,
+ 0x24d4c5,
+ 0x4223aa82,
+ 0x37f509,
+ 0x201687,
+ 0x258b45,
+ 0x2562c7,
+ 0x257e06,
+ 0x35eb05,
+ 0x36f9cb,
+ 0x259e44,
+ 0x260285,
+ 0x2603c7,
+ 0x271986,
+ 0x271fc5,
+ 0x27dbc7,
+ 0x27e647,
+ 0x26db04,
+ 0x2871ca,
+ 0x287688,
+ 0x3685c9,
+ 0x3a65c5,
+ 0x333386,
+ 0x25fb0a,
+ 0x220d46,
+ 0x24bb47,
+ 0x318a8d,
+ 0x2273c9,
+ 0x30ff45,
+ 0x24ff87,
+ 0x335608,
+ 0x3675c8,
+ 0x341b87,
+ 0x34a486,
+ 0x2116c7,
+ 0x247883,
+ 0x337ec4,
+ 0x35c385,
+ 0x38cac7,
+ 0x391f49,
+ 0x21a6c8,
+ 0x22fd05,
+ 0x382a04,
+ 0x240e85,
+ 0x2448cd,
+ 0x201142,
+ 0x3006c6,
+ 0x3610c6,
+ 0x2bde4a,
+ 0x3791c6,
+ 0x37fc45,
+ 0x319285,
+ 0x319287,
+ 0x38b14c,
+ 0x26fb8a,
+ 0x288886,
+ 0x29e445,
+ 0x288a06,
+ 0x288d47,
+ 0x28a9c6,
+ 0x28d0cc,
+ 0x201149,
+ 0x42765547,
+ 0x290305,
+ 0x290306,
+ 0x2906c8,
+ 0x2b1f05,
+ 0x2a4805,
+ 0x2a4a48,
+ 0x2a4c4a,
+ 0x42a6a242,
+ 0x42e0ff82,
+ 0x382245,
+ 0x29cdc3,
+ 0x37a688,
+ 0x21d083,
+ 0x2a4ec4,
+ 0x23de4b,
+ 0x272408,
+ 0x2d77c8,
+ 0x433255c9,
+ 0x2a8949,
+ 0x2a9006,
+ 0x2aa5c8,
+ 0x2aa7c9,
+ 0x2ab386,
+ 0x2ab505,
+ 0x383086,
+ 0x2abc09,
+ 0x2802c7,
+ 0x243f06,
+ 0x235c47,
+ 0x3af647,
+ 0x33b504,
+ 0x43743909,
+ 0x2c2288,
+ 0x3565c8,
+ 0x2368c7,
+ 0x2bd906,
+ 0x2fe209,
+ 0x331f47,
+ 0x2f1b0a,
+ 0x376848,
+ 0x3237c7,
+ 0x326086,
+ 0x33aa0a,
+ 0x249fc8,
+ 0x28ab05,
+ 0x21bf85,
+ 0x2bcb87,
+ 0x2d26c9,
+ 0x2d6e0b,
+ 0x2dd8c8,
+ 0x280949,
+ 0x249b07,
+ 0x3ad20c,
+ 0x2b1acc,
+ 0x2b1dca,
+ 0x2b204c,
+ 0x2bb4c8,
+ 0x2bb6c8,
+ 0x2bb8c4,
+ 0x2bbc89,
+ 0x2bbec9,
+ 0x2bc10a,
+ 0x2bc389,
+ 0x2bc6c7,
0x20010c,
- 0x22bd06,
- 0x273dc8,
- 0x3aa3c6,
+ 0x36ef86,
+ 0x26de48,
+ 0x220e06,
+ 0x387346,
+ 0x30fe47,
+ 0x341d08,
+ 0x25180b,
+ 0x283287,
+ 0x2aeb49,
+ 0x2474c9,
+ 0x255f87,
+ 0x2d6204,
+ 0x35efc7,
+ 0x29f606,
+ 0x219006,
+ 0x38d985,
+ 0x2ccd88,
+ 0x20ef04,
+ 0x20ef06,
+ 0x26fa4b,
+ 0x2a2389,
+ 0x364086,
+ 0x3a8409,
+ 0x3926c6,
+ 0x2fec08,
+ 0x214803,
+ 0x2083c5,
+ 0x219149,
+ 0x21fe05,
+ 0x3a6084,
+ 0x270fc6,
+ 0x3a5a85,
+ 0x2e6846,
+ 0x2fbc07,
+ 0x367186,
+ 0x2952cb,
+ 0x2b0647,
+ 0x2d2586,
+ 0x374346,
+ 0x3a5346,
+ 0x243849,
+ 0x26238a,
+ 0x2b6045,
+ 0x21f68d,
+ 0x2a4d46,
+ 0x391246,
+ 0x2e21c6,
+ 0x210205,
+ 0x2d3007,
+ 0x2962c7,
+ 0x23b68e,
+ 0x211003,
+ 0x2bd8c9,
+ 0x318fc9,
+ 0x20f647,
+ 0x276b87,
+ 0x299d85,
+ 0x306f45,
+ 0x43a7eacf,
+ 0x2c4807,
+ 0x2c49c8,
+ 0x2c5a44,
+ 0x2c5d06,
+ 0x43e43b02,
+ 0x2ca1c6,
+ 0x2cc5c6,
+ 0x251b4e,
+ 0x2e7f4a,
+ 0x21cd06,
+ 0x33fcca,
+ 0x3b4089,
+ 0x316fc5,
+ 0x393b48,
+ 0x3ad0c6,
+ 0x34ab88,
+ 0x30f788,
+ 0x25ab8b,
+ 0x227a45,
+ 0x366808,
+ 0x208d0c,
+ 0x281987,
+ 0x248b06,
+ 0x22f108,
+ 0x201948,
+ 0x44208382,
+ 0x362b0b,
+ 0x280bc9,
+ 0x363e89,
+ 0x209987,
+ 0x30e688,
+ 0x4460c648,
+ 0x3a8c0b,
+ 0x22b6c9,
+ 0x20870d,
+ 0x217e88,
+ 0x22c288,
+ 0x44a02282,
+ 0x31d784,
+ 0x44e23b42,
+ 0x2ebc06,
+ 0x452016c2,
+ 0x3a180a,
+ 0x201fc6,
+ 0x225f08,
+ 0x31ea08,
+ 0x2b7546,
0x386986,
- 0x24c647,
- 0x311988,
- 0x254ecb,
- 0x284ec7,
- 0x2ed9c9,
- 0x244849,
- 0x250247,
- 0x2d7a44,
- 0x3608c7,
- 0x329b86,
- 0x216386,
- 0x27c045,
- 0x2cd448,
- 0x20e444,
- 0x20e446,
- 0x271a4b,
- 0x2a57c9,
- 0x261a86,
- 0x31bf49,
- 0x392746,
- 0x2ff808,
- 0x23e383,
- 0x20bac5,
- 0x3aa509,
- 0x3b1745,
- 0x2f2904,
- 0x272fc6,
- 0x221805,
- 0x2da246,
- 0x2fc947,
- 0x340546,
- 0x296a4b,
- 0x3590c7,
- 0x2d0846,
- 0x372806,
- 0x383b46,
- 0x380989,
- 0x26a48a,
- 0x2b4f05,
- 0x22634d,
- 0x2a2f06,
- 0x3a0a06,
- 0x2df8c6,
- 0x214645,
- 0x2d24c7,
- 0x29a587,
- 0x29e54e,
- 0x219bc3,
- 0x2bed89,
- 0x317a89,
- 0x227107,
- 0x2794c7,
- 0x2a4685,
- 0x30ffc5,
- 0x41a6170f,
- 0x2c6287,
- 0x2c6448,
- 0x2c6b44,
- 0x2c6e46,
- 0x41e272c2,
- 0x2cab86,
- 0x2ccc86,
- 0x25520e,
- 0x2d8a0a,
- 0x222b06,
- 0x3a60ca,
- 0x201c09,
- 0x315a85,
- 0x3941c8,
- 0x3aedc6,
- 0x31bd88,
- 0x321c88,
- 0x2597cb,
- 0x221c45,
- 0x33fbc8,
- 0x20978c,
- 0x354987,
- 0x245e86,
- 0x27d4c8,
- 0x2b7848,
- 0x4220ba82,
- 0x36480b,
- 0x2aedc9,
- 0x365209,
- 0x20a787,
- 0x31c4c8,
- 0x4260b288,
- 0x3aab8b,
- 0x229449,
- 0x21e14d,
- 0x212b48,
- 0x29a9c8,
- 0x42a02542,
- 0x3a4104,
- 0x42e05842,
- 0x2ea586,
- 0x432011c2,
- 0x21f50a,
- 0x352ec6,
- 0x229a88,
- 0x33c7c8,
- 0x2b74c6,
- 0x385fc6,
- 0x2e4906,
- 0x227a05,
- 0x235b84,
- 0x436ff784,
- 0x336c86,
- 0x26ddc7,
- 0x43a2e647,
- 0x2ebbcb,
- 0x24b789,
- 0x2389ca,
- 0x254ac4,
- 0x317e88,
- 0x2461cd,
- 0x2ddb49,
- 0x2ddd88,
- 0x2de849,
- 0x2dfdc4,
- 0x207b44,
- 0x26ad85,
- 0x309c8b,
- 0x35ed46,
- 0x336ac5,
- 0x354c49,
- 0x221e48,
- 0x29de04,
- 0x226e89,
- 0x2ae605,
- 0x2b8b48,
- 0x2f55c7,
- 0x327308,
- 0x27fa06,
- 0x222ec7,
- 0x28f509,
- 0x220389,
- 0x243045,
- 0x32dec5,
- 0x43e24902,
- 0x2e6784,
- 0x22e005,
- 0x29fec6,
- 0x2e7645,
- 0x248e07,
- 0x269945,
- 0x2699c4,
- 0x346706,
- 0x380687,
- 0x23ef06,
- 0x376fc5,
- 0x31d008,
- 0x2223c5,
- 0x332207,
- 0x39a449,
- 0x2a590a,
- 0x27afc7,
- 0x27afcc,
- 0x20a0c6,
- 0x225649,
- 0x377bc5,
- 0x32b8c8,
- 0x210043,
- 0x210045,
- 0x2e5805,
- 0x251687,
- 0x442121c2,
- 0x2385c7,
- 0x2e0ac6,
- 0x2fb286,
- 0x2e7086,
- 0x2b7786,
- 0x2d1bc8,
- 0x358905,
- 0x2d5987,
- 0x2d598d,
- 0x2636c3,
- 0x3a3485,
- 0x3a0347,
- 0x385b08,
- 0x39ff05,
- 0x340048,
- 0x22e446,
- 0x31ffc7,
- 0x2be3c5,
- 0x221cc6,
- 0x36c205,
- 0x2bb2ca,
- 0x2eb286,
- 0x232a07,
- 0x2c5e05,
- 0x2fe5c7,
- 0x314e04,
- 0x2f2886,
- 0x300f85,
- 0x35458b,
- 0x329a09,
- 0x23ebca,
- 0x2430c8,
- 0x3312c8,
- 0x333b0c,
- 0x334047,
- 0x335848,
- 0x3507c8,
- 0x35adc5,
- 0x2bd80a,
- 0x39c549,
- 0x44601d42,
- 0x204386,
- 0x204f44,
- 0x204f49,
- 0x220e49,
- 0x339607,
- 0x270e07,
- 0x2b5849,
- 0x214848,
- 0x21484f,
- 0x33dbc6,
- 0x3535cb,
- 0x2e8105,
- 0x2e8107,
- 0x2e8549,
- 0x226e06,
- 0x226e07,
- 0x3b3045,
- 0x22f2c4,
- 0x268206,
- 0x200c44,
- 0x30d607,
- 0x2eb608,
- 0x44aedc08,
- 0x2ee205,
- 0x2ee347,
- 0x249749,
- 0x2a4384,
- 0x3b3308,
- 0x44f8c408,
- 0x2c0584,
- 0x22fc08,
+ 0x2e6606,
+ 0x2a00c5,
+ 0x23b184,
+ 0x456feb84,
+ 0x338986,
+ 0x269047,
+ 0x45a2ab47,
+ 0x32be0b,
+ 0x305c09,
+ 0x23724a,
+ 0x251404,
+ 0x3193c8,
+ 0x243ccd,
+ 0x2e07c9,
+ 0x2e0a08,
+ 0x2e1149,
+ 0x2e26c4,
+ 0x200f04,
+ 0x269885,
+ 0x30b48b,
+ 0x272386,
+ 0x3387c5,
+ 0x281c49,
+ 0x227c48,
+ 0x29ca84,
+ 0x20f3c9,
+ 0x2b0585,
+ 0x2b7d08,
+ 0x20b4c7,
+ 0x323288,
+ 0x27a506,
+ 0x217287,
+ 0x28eb89,
+ 0x21c209,
+ 0x2460c5,
+ 0x231445,
+ 0x45e25242,
+ 0x39a144,
+ 0x2fd585,
+ 0x2a9746,
+ 0x2f89c5,
+ 0x268307,
+ 0x243405,
+ 0x243484,
+ 0x348a46,
+ 0x3902c7,
+ 0x243b46,
+ 0x325dc5,
+ 0x31d488,
+ 0x2281c5,
+ 0x332607,
+ 0x397409,
+ 0x2a24ca,
+ 0x22dac7,
+ 0x22dacc,
+ 0x2e3d46,
+ 0x226349,
+ 0x2ad585,
+ 0x2c6e08,
+ 0x211543,
+ 0x211545,
+ 0x2e9405,
+ 0x256cc7,
+ 0x46214f02,
+ 0x236e47,
+ 0x2d6786,
+ 0x343846,
+ 0x2e8cc6,
+ 0x201886,
+ 0x347e88,
+ 0x3583c5,
+ 0x2e35c7,
+ 0x2e35cd,
+ 0x202b43,
+ 0x3a35c5,
+ 0x3068c7,
+ 0x3864c8,
+ 0x386085,
+ 0x366c88,
+ 0x22a946,
+ 0x31f507,
+ 0x2bcf05,
+ 0x227ac6,
+ 0x3711c5,
+ 0x2ba40a,
+ 0x2eb1c6,
+ 0x236487,
+ 0x2c5bc5,
+ 0x35a387,
+ 0x35e244,
+ 0x3a6006,
+ 0x2f61c5,
+ 0x28158b,
+ 0x29f489,
+ 0x37a20a,
+ 0x246148,
+ 0x2ff148,
+ 0x300a4c,
+ 0x3047c7,
+ 0x32b388,
+ 0x32edc8,
+ 0x336085,
+ 0x2bc94a,
+ 0x35d109,
+ 0x46601082,
+ 0x205446,
+ 0x214684,
+ 0x3b1249,
+ 0x2220c9,
+ 0x24d307,
+ 0x26c307,
+ 0x358d09,
+ 0x210408,
+ 0x21040f,
+ 0x3477c6,
+ 0x20a0cb,
+ 0x2e9b05,
+ 0x2e9b07,
+ 0x2e9f49,
+ 0x20f346,
+ 0x20f347,
+ 0x3b3d85,
+ 0x232784,
+ 0x2633c6,
+ 0x201284,
+ 0x30ac07,
+ 0x345e08,
+ 0x46aee5c8,
+ 0x2eebc5,
+ 0x2eed07,
+ 0x238289,
+ 0x2740c4,
+ 0x3a3888,
+ 0x46f20b88,
+ 0x2c4204,
+ 0x2330c8,
0x31d904,
- 0x21e9c9,
- 0x35c705,
- 0x45201582,
- 0x33dc05,
- 0x21bfc5,
- 0x247888,
- 0x2316c7,
- 0x45606882,
- 0x2c8905,
- 0x24e446,
- 0x266ac6,
- 0x2e6748,
- 0x32e888,
- 0x2e7606,
- 0x2ead46,
- 0x20ee89,
- 0x2fb1c6,
- 0x30564b,
- 0x24ddc5,
- 0x20d006,
- 0x380448,
- 0x20ac46,
- 0x292e06,
- 0x21938a,
- 0x25784a,
- 0x23ffc5,
- 0x3589c7,
- 0x344786,
- 0x45a01502,
- 0x3a0487,
- 0x22d205,
- 0x2a9b44,
- 0x2a9b45,
- 0x2549c6,
- 0x272447,
- 0x204cc5,
- 0x220f04,
- 0x2732c8,
- 0x292ec5,
- 0x291347,
- 0x2cefc5,
- 0x215305,
- 0x244e84,
- 0x28d949,
- 0x2fe048,
- 0x30f506,
- 0x3a8546,
- 0x2c0286,
- 0x45fa6b08,
- 0x2f2007,
- 0x2f234d,
- 0x2f2d0c,
- 0x2f3309,
- 0x2f3549,
- 0x4634f642,
- 0x3a4f83,
- 0x2049c3,
- 0x329c45,
- 0x38d44a,
- 0x319a06,
- 0x2f98c5,
- 0x2fce84,
- 0x2fce8b,
- 0x30b64c,
- 0x30be8c,
- 0x30c195,
- 0x30cb4d,
- 0x31244f,
- 0x312812,
- 0x312c8f,
- 0x313052,
- 0x3134d3,
- 0x31398d,
- 0x313f4d,
- 0x3142ce,
- 0x31478e,
- 0x31504c,
- 0x31540c,
- 0x31584b,
- 0x315bce,
- 0x318c92,
- 0x3197cc,
- 0x319d50,
- 0x32bbd2,
- 0x32cb8c,
- 0x32d24d,
- 0x32d58c,
- 0x32fa91,
- 0x330c4d,
- 0x33420d,
- 0x33480a,
- 0x334a8c,
- 0x33538c,
- 0x3367cc,
- 0x33704c,
- 0x339fd3,
- 0x33a5d0,
- 0x33a9d0,
- 0x33b64d,
- 0x33bc4c,
- 0x33cc49,
- 0x33eb0d,
- 0x33ee53,
- 0x340f91,
- 0x3413d3,
- 0x3423cf,
- 0x34278c,
- 0x342a8f,
- 0x342e4d,
- 0x34344f,
- 0x343810,
- 0x34428e,
- 0x34858e,
- 0x348cd0,
- 0x3498cd,
- 0x34a24e,
- 0x34a5cc,
- 0x34b593,
- 0x34d44e,
- 0x34db90,
- 0x34df91,
- 0x34e3cf,
- 0x34e793,
- 0x34f1cd,
- 0x34f50f,
- 0x34f8ce,
- 0x350010,
- 0x350409,
- 0x351150,
- 0x35178f,
- 0x351e0f,
- 0x3521d2,
- 0x35650e,
- 0x357dcd,
- 0x359f8d,
- 0x35a2cd,
- 0x35b34d,
- 0x35b68d,
- 0x35b9d0,
- 0x35bdcb,
- 0x35cbcc,
- 0x35cf4c,
- 0x35d24c,
- 0x35d54e,
- 0x36e7d0,
- 0x370952,
- 0x370dcb,
- 0x37138e,
- 0x37170e,
- 0x371f8e,
- 0x37298b,
- 0x46772f56,
- 0x37410d,
- 0x374e14,
- 0x3758cd,
- 0x378215,
- 0x37934d,
- 0x379ccf,
- 0x37a50f,
- 0x37f24f,
- 0x37f60e,
- 0x380bcd,
- 0x382451,
- 0x38614c,
- 0x38644c,
- 0x38674b,
- 0x386d0c,
- 0x3882cf,
- 0x388692,
- 0x38904d,
- 0x38a00c,
- 0x38a48c,
- 0x38a78d,
- 0x38aacf,
- 0x38ae8e,
- 0x38d10c,
- 0x38d6cd,
- 0x38da0b,
- 0x38e64c,
- 0x38ebcd,
- 0x38ef0e,
- 0x38f389,
- 0x38fd93,
- 0x39144d,
- 0x39178d,
- 0x391d8c,
- 0x39220e,
- 0x39318f,
- 0x39354c,
- 0x39384d,
- 0x393b8f,
- 0x393f4c,
- 0x39464c,
- 0x394acc,
- 0x394dcc,
- 0x39548d,
- 0x3957d2,
- 0x395e4c,
- 0x39614c,
- 0x396451,
- 0x39688f,
- 0x396c4f,
- 0x397013,
- 0x397e4e,
- 0x3983cf,
- 0x39878c,
- 0x46b98ace,
- 0x398e4f,
- 0x399216,
- 0x39a692,
- 0x39bd4c,
- 0x39c78f,
- 0x39ce0d,
- 0x39d14f,
- 0x39d50c,
- 0x39d80d,
- 0x39db4d,
- 0x39f28e,
- 0x3a10cc,
- 0x3a13cc,
- 0x3a16d0,
- 0x3a4211,
- 0x3a464b,
- 0x3a4b8c,
- 0x3a4e8e,
- 0x3a7011,
- 0x3a744e,
- 0x3a77cd,
- 0x3aeb8b,
- 0x3af9cf,
- 0x3b1054,
- 0x220442,
- 0x220442,
- 0x201cc3,
- 0x220442,
- 0x201cc3,
- 0x220442,
- 0x204f02,
- 0x381185,
- 0x3a6d0c,
- 0x220442,
- 0x220442,
- 0x204f02,
- 0x220442,
- 0x291145,
- 0x2a5905,
- 0x220442,
- 0x220442,
- 0x210842,
- 0x291145,
- 0x30d7c9,
- 0x340c8c,
- 0x220442,
- 0x220442,
- 0x220442,
- 0x220442,
- 0x381185,
- 0x220442,
- 0x220442,
- 0x220442,
- 0x220442,
- 0x210842,
- 0x30d7c9,
- 0x220442,
- 0x220442,
- 0x220442,
- 0x2a5905,
- 0x220442,
- 0x2a5905,
- 0x340c8c,
- 0x3a6d0c,
- 0x323743,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x201104,
- 0x249943,
- 0x2257c3,
- 0x105dc8,
- 0x4e244,
- 0x1a97c8,
+ 0x21f989,
+ 0x2230c5,
+ 0x47203e42,
+ 0x347805,
+ 0x220c85,
+ 0x29fc88,
+ 0x235347,
+ 0x47600cc2,
+ 0x2c81c5,
+ 0x246b46,
+ 0x256646,
+ 0x39a108,
+ 0x2ec008,
+ 0x2f8986,
+ 0x31b086,
+ 0x22a489,
+ 0x343786,
+ 0x37870b,
+ 0x30c145,
+ 0x20d7c6,
+ 0x390088,
+ 0x252606,
+ 0x28f506,
+ 0x21c64a,
+ 0x2ae4ca,
+ 0x24ce85,
+ 0x358487,
+ 0x2d8e06,
+ 0x47a03dc2,
+ 0x306a07,
+ 0x2c7a45,
+ 0x25fa84,
+ 0x25fa85,
+ 0x251306,
+ 0x270447,
+ 0x2144c5,
+ 0x222184,
+ 0x2712c8,
+ 0x28f5c5,
+ 0x2cebc7,
+ 0x39c105,
+ 0x216805,
+ 0x247b04,
+ 0x28cbc9,
+ 0x39f908,
+ 0x2f5ec6,
+ 0x36fcc6,
+ 0x2c3f06,
+ 0x47ef3648,
+ 0x2f3847,
+ 0x2f3fcd,
+ 0x2f460c,
+ 0x2f4c09,
+ 0x2f4e49,
+ 0x48351e02,
+ 0x3a4803,
+ 0x24cf03,
+ 0x29f6c5,
+ 0x38cbca,
+ 0x31af46,
+ 0x2f8e05,
+ 0x2fc144,
+ 0x2fc14b,
+ 0x30d10c,
+ 0x30d94c,
+ 0x30dc55,
+ 0x311acd,
+ 0x313a0f,
+ 0x313dd2,
+ 0x31424f,
+ 0x314612,
+ 0x314a93,
+ 0x314f4d,
+ 0x31550d,
+ 0x31588e,
+ 0x315d4e,
+ 0x31658c,
+ 0x31694c,
+ 0x316d8b,
+ 0x31710e,
+ 0x31a1d2,
+ 0x31ad0c,
+ 0x31b8d0,
+ 0x327e52,
+ 0x328dcc,
+ 0x32948d,
+ 0x3297cc,
+ 0x32d8d1,
+ 0x32e74d,
+ 0x336b0d,
+ 0x33710a,
+ 0x33738c,
+ 0x337c8c,
+ 0x3384cc,
+ 0x338d4c,
+ 0x33c9d3,
+ 0x33d050,
+ 0x33d450,
+ 0x33dccd,
+ 0x33e2cc,
+ 0x33efc9,
+ 0x3402cd,
+ 0x340613,
+ 0x342e51,
+ 0x343293,
+ 0x343b4f,
+ 0x343f0c,
+ 0x34420f,
+ 0x3445cd,
+ 0x344bcf,
+ 0x344f90,
+ 0x345a0e,
+ 0x34b48e,
+ 0x34bbd0,
+ 0x34c7cd,
+ 0x34d14e,
+ 0x34d4cc,
+ 0x34e493,
+ 0x34fc8e,
+ 0x3503d0,
+ 0x3507d1,
+ 0x350c0f,
+ 0x350fd3,
+ 0x35198d,
+ 0x351ccf,
+ 0x35208e,
+ 0x352990,
+ 0x352d89,
+ 0x3539d0,
+ 0x35400f,
+ 0x35468f,
+ 0x354a52,
+ 0x355ece,
+ 0x35788d,
+ 0x35998d,
+ 0x359ccd,
+ 0x35ac4d,
+ 0x35af8d,
+ 0x35b2d0,
+ 0x35b6cb,
+ 0x35c14c,
+ 0x35c4cc,
+ 0x35c7cc,
+ 0x35cace,
+ 0x372990,
+ 0x3744d2,
+ 0x37494b,
+ 0x3750ce,
+ 0x37544e,
+ 0x375cce,
+ 0x37728b,
+ 0x48777856,
+ 0x378ecd,
+ 0x379354,
+ 0x37a98d,
+ 0x37c655,
+ 0x37d78d,
+ 0x37e10f,
+ 0x37e94f,
+ 0x38150f,
+ 0x3818ce,
+ 0x382b0d,
+ 0x384151,
+ 0x386b0c,
+ 0x386e0c,
+ 0x38710b,
+ 0x387a0c,
+ 0x387dcf,
+ 0x388192,
+ 0x388b4d,
+ 0x389b0c,
+ 0x389f8c,
+ 0x38a28d,
+ 0x38a5cf,
+ 0x38a98e,
+ 0x38c88c,
+ 0x38ce4d,
+ 0x38d18b,
+ 0x38e9cc,
+ 0x38ef4d,
+ 0x38f28e,
+ 0x38f709,
+ 0x3909d3,
+ 0x3913cd,
+ 0x39170d,
+ 0x391d0c,
+ 0x39218e,
+ 0x392b0f,
+ 0x392ecc,
+ 0x3931cd,
+ 0x39350f,
+ 0x3938cc,
+ 0x393fcc,
+ 0x39444c,
+ 0x39474c,
+ 0x394e0d,
+ 0x395152,
+ 0x3957cc,
+ 0x395acc,
+ 0x395dd1,
+ 0x39620f,
+ 0x3965cf,
+ 0x396993,
+ 0x39764e,
+ 0x397bcf,
+ 0x397f8c,
+ 0x48b982ce,
+ 0x39864f,
+ 0x398a16,
+ 0x399c12,
+ 0x39b88c,
+ 0x39c24f,
+ 0x39c8cd,
+ 0x39cc0f,
+ 0x39cfcc,
+ 0x39d2cd,
+ 0x39d60d,
+ 0x39f4ce,
+ 0x3a058c,
+ 0x3a088c,
+ 0x3a0b90,
+ 0x3a3a91,
+ 0x3a3ecb,
+ 0x3a440c,
+ 0x3a470e,
+ 0x3a7051,
+ 0x3a748e,
+ 0x3a780d,
+ 0x3ace8b,
+ 0x3adbcf,
+ 0x3aee94,
+ 0x21c2c2,
+ 0x21c2c2,
+ 0x205903,
+ 0x21c2c2,
+ 0x205903,
+ 0x21c2c2,
+ 0x205e02,
+ 0x3830c5,
+ 0x3a6d4c,
+ 0x21c2c2,
+ 0x21c2c2,
+ 0x205e02,
+ 0x21c2c2,
+ 0x290d45,
+ 0x2a24c5,
+ 0x21c2c2,
+ 0x21c2c2,
+ 0x211d42,
+ 0x290d45,
+ 0x312d49,
+ 0x342b4c,
+ 0x21c2c2,
+ 0x21c2c2,
+ 0x21c2c2,
+ 0x21c2c2,
+ 0x3830c5,
+ 0x21c2c2,
+ 0x21c2c2,
+ 0x21c2c2,
+ 0x21c2c2,
+ 0x211d42,
+ 0x312d49,
+ 0x21c2c2,
+ 0x21c2c2,
+ 0x21c2c2,
+ 0x2a24c5,
+ 0x21c2c2,
+ 0x2a24c5,
+ 0x342b4c,
+ 0x3a6d4c,
+ 0x323ac3,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x201604,
+ 0x238483,
+ 0x2264c3,
+ 0x141388,
+ 0x4db44,
+ 0xed208,
0x200882,
- 0x47a04a82,
- 0x23b383,
- 0x2296c4,
- 0x2099c3,
- 0x2d9d44,
- 0x2e0006,
- 0x230243,
- 0x230204,
- 0x276f85,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x24388a,
- 0x236286,
- 0x371a8c,
- 0x894c8,
- 0x204a82,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x230c43,
- 0x2ccc86,
- 0x249943,
- 0x2257c3,
- 0x219683,
- 0x7982,
- 0xd9547,
- 0xb6b88,
- 0xf20e,
- 0x87092,
- 0x8e0b,
- 0x486fc045,
- 0x48afc04c,
- 0x40907,
- 0x11864a,
- 0x370d0,
- 0x1702c8,
- 0x7a287,
- 0x574cb,
- 0x10d109,
- 0x1701c7,
- 0x11cac7,
- 0x7a187,
- 0x1d6c6,
- 0x132948,
- 0x4901f186,
- 0xa88cd,
- 0x118010,
- 0x494079c2,
- 0x62e88,
- 0x69707,
- 0xa7e09,
- 0x4dfc6,
- 0x90cc8,
- 0x6dc2,
- 0x9d6ca,
- 0xef947,
- 0xe94c7,
- 0xa3609,
- 0xa5ec8,
- 0x158485,
- 0xded8e,
- 0xd74e,
- 0x11f0f,
- 0x13349,
- 0x3f209,
- 0x6c9cb,
- 0x81e4f,
- 0x8db4c,
- 0xac48b,
- 0x15b008,
- 0xebac7,
- 0xf0ac8,
- 0x13c2cb,
- 0x144e8c,
- 0x14cf8c,
- 0x14fd0c,
- 0x16efcd,
- 0x295c8,
- 0x40ec9,
- 0x14934b,
- 0xbefc6,
- 0xceb05,
- 0xd21d0,
- 0x126a46,
- 0x555c5,
- 0xd4b88,
- 0xda487,
- 0xdac87,
- 0x153d47,
- 0xea3ca,
- 0xb6a0a,
- 0x7e246,
- 0x8e90d,
- 0x174a08,
- 0x42b08,
- 0x44dc9,
- 0xe9f0c,
- 0x16f1cb,
- 0x12af84,
- 0xf1dc9,
- 0x126906,
- 0x3d02,
- 0x152dc6,
+ 0x49a16582,
+ 0x240003,
+ 0x22b944,
+ 0x208f43,
+ 0x21eb04,
+ 0x231ac6,
+ 0x31d243,
+ 0x34aa44,
+ 0x26cc05,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x24690a,
+ 0x3a5946,
+ 0x3757cc,
+ 0x880c8,
+ 0x216582,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x2348c3,
+ 0x2cc5c6,
+ 0x238483,
+ 0x2264c3,
+ 0x21bd03,
+ 0xd42,
+ 0xdb7c7,
+ 0xca908,
+ 0xfd8e,
+ 0x85792,
+ 0x2ecb,
+ 0x4a71f345,
+ 0x4ab76d0c,
+ 0x131007,
+ 0x16e747,
+ 0x119b8a,
+ 0x3c550,
+ 0x2988,
+ 0x16e847,
+ 0xae14b,
+ 0x112089,
+ 0x173507,
+ 0x10ec87,
+ 0x77847,
+ 0x169c6,
+ 0x132d48,
+ 0x4b01e1c6,
+ 0xa910d,
+ 0x119550,
+ 0x4b400d82,
+ 0x131948,
+ 0x680c7,
+ 0x84109,
+ 0x53e06,
+ 0x908c8,
+ 0x5e82,
+ 0x9c34a,
+ 0x8e507,
+ 0xeaec7,
+ 0xa5449,
+ 0xa7188,
+ 0x157f45,
+ 0xe168e,
+ 0xe9ce,
+ 0x14c4f,
+ 0x15309,
+ 0x33c49,
+ 0x6528b,
+ 0x7cdcf,
+ 0x8cdcc,
+ 0xdcbcb,
+ 0xd99c8,
+ 0x12bd07,
+ 0xede48,
+ 0x11e50b,
+ 0x13e94c,
+ 0x14624c,
+ 0x14f98c,
+ 0x1524cd,
+ 0x2b848,
+ 0x30cc2,
+ 0x1afb89,
+ 0x14c24b,
+ 0xbdb06,
+ 0xce6c5,
+ 0xd2d10,
+ 0x1229c6,
+ 0x51f05,
+ 0xd6908,
+ 0xdc047,
+ 0xdc307,
+ 0x163287,
+ 0xeba4a,
+ 0xca78a,
+ 0x161186,
+ 0x8db8d,
+ 0x180248,
+ 0x45e88,
+ 0x47a49,
+ 0xeb58c,
+ 0x1526cb,
+ 0x171ac4,
+ 0xf3109,
+ 0x44bc6,
+ 0x6202,
+ 0x155646,
+ 0xfefc7,
0x6c2,
- 0xc35c5,
+ 0xc0e85,
0x481,
- 0x35f83,
- 0x48f8b906,
- 0x91043,
- 0x95c2,
- 0x35604,
- 0xdc2,
- 0x24284,
+ 0x3b583,
+ 0x4af9eb86,
+ 0x90c43,
+ 0x1f82,
+ 0x3a4c4,
+ 0x1002,
+ 0x24104,
0x9c2,
- 0x7dc2,
- 0x6442,
- 0x52f42,
- 0x1742,
- 0xfc042,
+ 0x1182,
+ 0x3182,
+ 0x4f882,
+ 0x2ec2,
+ 0x104e82,
0x8c2,
- 0x19fc2,
- 0x33942,
+ 0x1dec2,
+ 0x37e42,
0x682,
- 0x1842,
- 0xb0a82,
- 0x30743,
- 0x3f42,
+ 0xf82,
+ 0xb1d82,
+ 0x343c3,
+ 0x8042,
0x202,
- 0xbc82,
- 0x5642,
- 0x1a042,
- 0x2f542,
- 0xd4c2,
+ 0x6ac2,
+ 0x21842,
+ 0xb2c2,
+ 0x32a02,
+ 0xf1c2,
0x42,
- 0x4542,
- 0x1042,
- 0x2503,
- 0x3dc2,
- 0x2602,
- 0xaf102,
- 0xa482,
- 0x120c2,
- 0x67c2,
- 0x326c2,
- 0x8a42,
- 0x2242,
- 0x16ecc2,
- 0x7a42,
- 0x2c902,
- 0x49943,
- 0x1ec2,
- 0xba82,
- 0x1a82,
- 0x10342,
- 0x42fc5,
- 0x9d02,
- 0x3c782,
- 0x394c3,
- 0x3b82,
- 0xb482,
- 0x3e42,
- 0x1b842,
- 0x14202,
- 0x6882,
- 0x35c2,
- 0x3d02,
- 0x6fb47,
- 0x2115c3,
+ 0x5602,
+ 0xa82,
+ 0x2243,
+ 0x74c2,
+ 0x1982,
+ 0xb09c2,
+ 0x9682,
+ 0xb402,
+ 0x61c2,
+ 0xa242,
+ 0x9a1c2,
+ 0x6742,
+ 0x172e82,
+ 0xe02,
+ 0x9f82,
+ 0x38483,
+ 0x1dc2,
+ 0x8382,
+ 0x25c2,
+ 0x2182,
+ 0x46045,
+ 0x6a42,
+ 0x41542,
+ 0x3e503,
+ 0x4b42,
+ 0x7982,
+ 0x1402,
+ 0x15c2,
+ 0x1882,
+ 0xcc2,
+ 0x3282,
+ 0x6202,
+ 0x6b247,
+ 0x212d03,
0x200882,
- 0x258403,
- 0x230743,
- 0x2095c3,
- 0x213ac3,
- 0x230c43,
- 0x249943,
- 0x202883,
- 0x2257c3,
- 0x291083,
- 0x894c8,
- 0x258403,
- 0x230743,
- 0x2095c3,
- 0x219bc3,
- 0x249943,
- 0x202883,
- 0x2257c3,
- 0x258403,
- 0x230743,
- 0x2257c3,
- 0x258403,
- 0x230743,
- 0x2d9d43,
+ 0x22d183,
+ 0x2343c3,
+ 0x211cc3,
+ 0x201d83,
+ 0x2348c3,
+ 0x238483,
+ 0x2025c3,
+ 0x2264c3,
+ 0x290c83,
+ 0x880c8,
+ 0x22d183,
+ 0x2343c3,
+ 0x211cc3,
+ 0x211003,
+ 0x238483,
+ 0x2025c3,
+ 0x2264c3,
+ 0x22d183,
+ 0x2343c3,
+ 0x2264c3,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
0x200041,
- 0x219bc3,
- 0x249943,
- 0x209583,
- 0x2257c3,
- 0x323743,
- 0x258403,
- 0x230743,
- 0x262e83,
- 0x2095c3,
- 0x31e683,
- 0x281c83,
- 0x2a2283,
- 0x24c2c3,
- 0x2d9d43,
- 0x201104,
- 0x249943,
- 0x2257c3,
- 0x224043,
- 0x262044,
- 0x223a83,
- 0x3803,
- 0x201543,
- 0x365a88,
- 0x260c44,
- 0x316a4a,
- 0x37db06,
- 0xdc784,
- 0x3a2d07,
- 0x21c7ca,
- 0x33da89,
- 0x3b27c7,
+ 0x211003,
+ 0x238483,
+ 0x201f43,
+ 0x2264c3,
+ 0x323ac3,
+ 0x22d183,
+ 0x2343c3,
+ 0x25f643,
+ 0x211cc3,
+ 0x3112c3,
+ 0x27cc03,
+ 0x201f83,
+ 0x25a603,
+ 0x21eb03,
+ 0x201604,
+ 0x238483,
+ 0x2264c3,
+ 0x223ec3,
+ 0x305fc4,
+ 0x21e143,
+ 0x4803,
+ 0x203e03,
+ 0x2a0cc8,
+ 0x332a44,
+ 0x317f8a,
+ 0x330786,
+ 0xda404,
+ 0x3a2e47,
+ 0x22138a,
+ 0x347689,
+ 0x3b3507,
0x20054a,
- 0x323743,
- 0x38000b,
- 0x24c209,
- 0x2c0385,
- 0x2ca9c7,
- 0x4a82,
- 0x258403,
- 0x333687,
- 0x20ebc5,
- 0x2d7909,
- 0x230743,
- 0x221a46,
- 0x2baf83,
- 0xe0b43,
- 0xfba46,
- 0x52b86,
- 0x106a47,
- 0x3aa706,
- 0x216fc5,
- 0x20b147,
- 0x336e87,
- 0x4b6d9d43,
- 0x32cdc7,
- 0x3607c3,
- 0x27cdc5,
- 0x201104,
- 0x226808,
- 0x2add4c,
- 0x2ad045,
- 0x364f86,
- 0x333547,
- 0x399c07,
- 0x214247,
- 0x2167c8,
- 0x29ec8f,
- 0x2aed05,
- 0x23b487,
- 0x28ba87,
- 0x2a31ca,
- 0x2f1a09,
- 0x2da985,
- 0x2db14a,
- 0x274c6,
- 0x2bb005,
- 0x371004,
- 0x2b7406,
- 0x36d007,
- 0x236ac7,
- 0x353008,
- 0x3a9ac5,
- 0x20eac6,
- 0x3a3dc5,
- 0x2212c5,
- 0x221744,
- 0x33c6c7,
- 0x2d1a0a,
- 0x38c948,
- 0x2ecc06,
- 0x30c43,
- 0x2cf185,
- 0x22b9c6,
+ 0x323ac3,
+ 0x3822cb,
+ 0x368b49,
+ 0x2c4005,
+ 0x2ca007,
+ 0x16582,
+ 0x22d183,
+ 0x326647,
+ 0x22a1c5,
+ 0x2d60c9,
+ 0x2343c3,
+ 0x227846,
+ 0x2ba0c3,
+ 0x9f543,
+ 0xfaa86,
+ 0x4f4c6,
+ 0x11d1c7,
+ 0x3a8786,
+ 0x213e45,
+ 0x20c507,
+ 0x338b87,
+ 0x4d61eb03,
+ 0x329007,
+ 0x35eec3,
+ 0x38e705,
+ 0x201604,
+ 0x221c08,
+ 0x2af6cc,
+ 0x2ad6c5,
+ 0x363c06,
+ 0x326507,
+ 0x224b47,
+ 0x205087,
+ 0x206e48,
+ 0x2597cf,
+ 0x280b05,
+ 0x240107,
+ 0x27e347,
+ 0x2a500a,
+ 0x2ee209,
+ 0x2d7185,
+ 0x2d830a,
+ 0xdea46,
+ 0x2ba145,
+ 0x374b84,
+ 0x2b7486,
+ 0x2fe5c7,
+ 0x230bc7,
+ 0x2a0a08,
+ 0x214805,
+ 0x22a0c6,
+ 0x3a8245,
+ 0x37a445,
+ 0x21fd44,
+ 0x31e907,
+ 0x347cca,
+ 0x365a48,
+ 0x2edb86,
+ 0x348c3,
+ 0x2cf145,
+ 0x238d06,
0x200346,
- 0x2554c6,
- 0x219bc3,
- 0x3892c7,
- 0x28ba05,
- 0x249943,
- 0x3b2a4d,
- 0x202883,
- 0x353108,
- 0x3acdc4,
- 0x206f05,
- 0x2a30c6,
- 0x232c46,
- 0x20cf07,
- 0x2a22c7,
- 0x267785,
- 0x2257c3,
- 0x326c87,
- 0x338ec9,
- 0x256dc9,
- 0x269a0a,
- 0x23dfc2,
- 0x27cd84,
- 0x2d5504,
- 0x219947,
- 0x238488,
- 0x2dbac9,
- 0x3a3349,
- 0x2dcb07,
- 0x2ae806,
- 0xdeb06,
- 0x2dfdc4,
- 0x2e03ca,
- 0x2e40c8,
- 0x2e47c9,
- 0x294a46,
- 0x302a85,
- 0x38c808,
- 0x2c094a,
- 0x25a383,
- 0x234a06,
- 0x2dcc07,
- 0x20f545,
- 0x3acc85,
- 0x23d2c3,
- 0x24ccc4,
- 0x225b45,
- 0x283447,
- 0x2fe185,
- 0x2e97c6,
- 0x12e785,
- 0x222bc3,
- 0x222bc9,
- 0x22ba8c,
- 0x2aa18c,
- 0x2c7348,
- 0x2931c7,
- 0x2ef348,
- 0x2efeca,
- 0x2f104b,
- 0x24c348,
- 0x365088,
- 0x362a06,
- 0x322e85,
- 0x323dca,
- 0x216005,
- 0x201582,
- 0x2be287,
- 0x26cc46,
- 0x350c85,
- 0x3418c9,
- 0x27c585,
- 0x381845,
- 0x27c989,
- 0x22b846,
- 0x36d448,
- 0x261483,
- 0x3aa846,
- 0x272f06,
- 0x2fed85,
- 0x2fed89,
- 0x2dc209,
- 0x23e307,
- 0xfec04,
- 0x2fec07,
- 0x3a3249,
- 0x21c9c5,
- 0x2bf88,
- 0x352cc5,
- 0x3529c5,
- 0x22b209,
- 0x20e3c2,
- 0x223884,
- 0x205e42,
- 0x203dc2,
- 0x2953c5,
- 0x2dc508,
- 0x377f85,
- 0x2bd743,
- 0x2bd745,
- 0x2cad83,
- 0x20fcc2,
- 0x266704,
- 0x233443,
- 0x200d82,
- 0x358c44,
- 0x2d61c3,
- 0x2137c2,
- 0x295443,
- 0x28acc4,
- 0x2b51c3,
- 0x2375c4,
- 0x203182,
- 0x270583,
- 0x22e443,
- 0x2063c2,
- 0x2e74c2,
- 0x2dc049,
- 0x2030c2,
- 0x287c04,
- 0x207a02,
- 0x38c684,
- 0x2ae7c4,
- 0x2e2484,
- 0x203d02,
- 0x2397c2,
- 0x210b03,
- 0x2f04c3,
- 0x23aa84,
- 0x261504,
- 0x2c5c84,
- 0x2dc404,
- 0x2fdc83,
- 0x346e83,
- 0x227444,
- 0x2ffa04,
- 0x2ffd06,
- 0x242f82,
- 0x204a82,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
+ 0x251e06,
+ 0x211003,
+ 0x388dc7,
+ 0x27e2c5,
+ 0x238483,
+ 0x3b378d,
+ 0x2025c3,
+ 0x2a0b08,
+ 0x3aac44,
+ 0x205fc5,
+ 0x2a4f06,
+ 0x236b06,
+ 0x20d6c7,
+ 0x355747,
+ 0x2641c5,
+ 0x2264c3,
+ 0x322c07,
+ 0x33b009,
+ 0x258f49,
+ 0x2434ca,
+ 0x242a42,
+ 0x38e6c4,
+ 0x2d7ac4,
+ 0x210d87,
+ 0x236d08,
+ 0x2dce89,
+ 0x3a3489,
+ 0x2df807,
+ 0x334206,
+ 0xe1406,
+ 0x2e26c4,
+ 0x2e2cca,
+ 0x2e5c88,
+ 0x2e64c9,
+ 0x2b6306,
+ 0x3003c5,
+ 0x365908,
+ 0x2bf10a,
+ 0x25b743,
+ 0x306146,
+ 0x2df907,
+ 0x207c85,
+ 0x3aab05,
+ 0x242083,
+ 0x252dc4,
+ 0x21bf45,
+ 0x27e747,
+ 0x39fa45,
+ 0x2f3bc6,
+ 0xfa705,
+ 0x212a43,
+ 0x21cdc9,
+ 0x238dcc,
+ 0x2ab90c,
+ 0x2c65c8,
+ 0x28f8c7,
+ 0x2ef748,
+ 0x2efa8a,
+ 0x2f0a4b,
+ 0x368c88,
+ 0x363d08,
+ 0x36ee86,
+ 0x341985,
+ 0x36498a,
+ 0x21ebc5,
+ 0x203e42,
+ 0x2bcdc7,
+ 0x26a8c6,
+ 0x353505,
+ 0x2f1949,
+ 0x38dec5,
+ 0x376785,
+ 0x38e2c9,
+ 0x238b86,
+ 0x261b88,
+ 0x2d1343,
+ 0x3a88c6,
+ 0x270f06,
+ 0x2fdcc5,
+ 0x2fdcc9,
+ 0x2dd5c9,
+ 0x242d87,
+ 0xfdb44,
+ 0x2fdb47,
+ 0x3a3389,
+ 0x221585,
+ 0x16f208,
+ 0x355545,
+ 0x355245,
+ 0x399309,
+ 0x201482,
+ 0x21df44,
+ 0x202e82,
+ 0x2074c2,
+ 0x293c45,
+ 0x2da188,
+ 0x374e45,
+ 0x2bc883,
+ 0x2bc885,
+ 0x2ca3c3,
+ 0x2111c2,
+ 0x264a04,
+ 0x233503,
+ 0x207a82,
+ 0x358704,
+ 0x2d8003,
+ 0x2014c2,
+ 0x293cc3,
+ 0x2898c4,
+ 0x2d7703,
+ 0x23a804,
+ 0x201bc2,
+ 0x21bc03,
+ 0x219283,
+ 0x208d82,
+ 0x35b202,
+ 0x2dd409,
+ 0x2011c2,
+ 0x286304,
+ 0x200dc2,
+ 0x365784,
+ 0x3341c4,
+ 0x3a1cc4,
+ 0x206202,
+ 0x23e802,
+ 0x20dc03,
+ 0x2f0083,
+ 0x23f704,
+ 0x27e8c4,
+ 0x2d13c4,
+ 0x2dd7c4,
+ 0x2fd083,
+ 0x3491c3,
+ 0x2de9c4,
+ 0x2fee04,
+ 0x2ff346,
+ 0x260dc2,
+ 0x216582,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
0x200882,
- 0x323743,
- 0x258403,
- 0x230743,
- 0x201d03,
- 0x2d9d43,
- 0x201104,
- 0x2dc304,
- 0x2021c4,
- 0x249943,
- 0x2257c3,
- 0x219683,
- 0x2e0c44,
- 0x274903,
- 0x2b2483,
- 0x341804,
- 0x352ac6,
- 0x203403,
- 0x224f03,
- 0x218903,
- 0x2b0703,
- 0x206f43,
- 0x230c43,
- 0x2fc2c5,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x2d91c3,
- 0x2a3e03,
- 0x894c8,
- 0x258403,
+ 0x323ac3,
+ 0x22d183,
+ 0x2343c3,
+ 0x205403,
+ 0x21eb03,
+ 0x201604,
+ 0x2dd6c4,
+ 0x212444,
+ 0x238483,
+ 0x2264c3,
+ 0x21bd03,
+ 0x2e3444,
+ 0x29e943,
+ 0x2b3783,
+ 0x3436c4,
+ 0x355346,
+ 0x20ca03,
+ 0x16e747,
+ 0x219b83,
+ 0x208143,
+ 0x2b1a03,
+ 0x206003,
+ 0x2348c3,
+ 0x376f85,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x2db443,
0x230743,
- 0x2d9d43,
- 0x202503,
- 0x249943,
- 0x231344,
- 0x2257c3,
- 0x29ca84,
- 0x2b7205,
- 0x204a82,
- 0x201802,
- 0x2095c2,
- 0x201cc2,
- 0x2016c2,
- 0x258403,
- 0x232ec4,
- 0x230743,
- 0x2d9d43,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x894c8,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x219bc3,
- 0x2021c4,
- 0x249943,
- 0x2257c3,
- 0x2161c3,
- 0x224284,
- 0x894c8,
- 0x258403,
- 0x202883,
- 0x2054c4,
- 0x894c8,
- 0x258403,
- 0x2446c4,
- 0x201104,
- 0x202883,
- 0x202542,
- 0x2257c3,
- 0x244443,
- 0x2e82c5,
- 0x201582,
- 0x2ffb43,
+ 0x880c8,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x202243,
+ 0x238483,
+ 0x234fc4,
+ 0x2264c3,
+ 0x29b704,
+ 0x2b7285,
+ 0x16e747,
+ 0x216582,
+ 0x201a42,
+ 0x201f82,
+ 0x205902,
+ 0x201502,
+ 0x22d183,
+ 0x2374c4,
+ 0x2343c3,
+ 0x21eb03,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x880c8,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x211003,
+ 0x212444,
+ 0x238483,
+ 0x2264c3,
+ 0x217643,
+ 0x224104,
+ 0x880c8,
+ 0x22d183,
+ 0x2025c3,
+ 0x245dc4,
+ 0x880c8,
+ 0x22d183,
+ 0x247344,
+ 0x201604,
+ 0x2025c3,
+ 0x202282,
+ 0x2264c3,
+ 0x215cc3,
+ 0x52dc4,
+ 0x2e9cc5,
+ 0x203e42,
+ 0x2fef43,
0x200882,
- 0x894c8,
- 0x204a82,
- 0x230743,
- 0x2d9d43,
- 0x201042,
- 0x2257c3,
+ 0x880c8,
+ 0x216582,
+ 0x2343c3,
+ 0x21eb03,
+ 0x200a82,
+ 0x2264c3,
0x200882,
0x200707,
- 0x24f9c5,
- 0x2b9f84,
- 0x385a06,
- 0x33fe0b,
- 0x261209,
- 0x364ec6,
- 0x33f2c9,
- 0x2b1988,
+ 0x254705,
+ 0x29f844,
+ 0x385f86,
+ 0x366a4b,
+ 0x263a49,
+ 0x363b46,
+ 0x340a89,
+ 0x2b2c88,
0x207103,
- 0x894c8,
- 0x225a07,
- 0x370548,
- 0x252f03,
- 0x337784,
- 0x33778b,
- 0x260585,
- 0x2f4a48,
- 0x2e7289,
- 0x258e43,
- 0x258403,
- 0x204288,
- 0x2eddc7,
- 0x253506,
- 0x230743,
- 0x253007,
- 0x2d9d43,
- 0x337f06,
- 0x202503,
- 0x22e307,
- 0x233d47,
- 0x390247,
- 0x33c645,
- 0x209e83,
- 0x206d0b,
- 0x265588,
- 0x22c848,
- 0x339086,
- 0x264209,
- 0x3234c7,
- 0x2f9c05,
- 0x377284,
- 0x33dcc8,
- 0x236c4a,
- 0x236e89,
- 0x33d303,
- 0x26abc5,
- 0x2aabc3,
- 0x22a586,
- 0x2b9dc4,
- 0x33b0c8,
- 0x3903cb,
- 0x33d1c5,
- 0x2b6f86,
- 0x2b9cc5,
- 0x2ba388,
- 0x2bb147,
- 0x365407,
- 0x316647,
- 0x2127c4,
- 0x308a07,
- 0x295cc6,
- 0x219bc3,
- 0x2c4208,
- 0x248e83,
- 0x2cb048,
- 0x2d31c5,
- 0x373d88,
- 0x230947,
- 0x249943,
- 0x23fbc3,
- 0x2891c4,
- 0x30fc47,
- 0x209a43,
- 0x233e0b,
- 0x2141c3,
- 0x248e44,
- 0x2e8348,
- 0x2257c3,
- 0x2ea8c5,
- 0x31e505,
- 0x373c86,
- 0x2102c5,
- 0x2d3584,
- 0x20bb42,
- 0x2e4a83,
- 0x37108a,
- 0x3a20c3,
- 0x39fd49,
- 0x308706,
- 0x214008,
- 0x28a806,
- 0x220a87,
- 0x2e4ec8,
- 0x2ea6c8,
- 0x319c83,
- 0x295483,
- 0x275889,
- 0x2f3383,
- 0x344686,
- 0x24f646,
- 0x314a86,
- 0x3a8b09,
- 0x2eaac4,
- 0x2112c3,
- 0x2da885,
- 0x347249,
- 0x2249c3,
- 0x319b44,
- 0x36cb04,
- 0x39e084,
- 0x2b43c6,
- 0x20b4c3,
- 0x20b4c8,
- 0x2513c8,
- 0x2f8e06,
- 0x2f9a0b,
- 0x2f9d48,
- 0x2f9f4b,
- 0x2fc689,
- 0x2fb947,
- 0x2fcb08,
- 0x2fd6c3,
- 0x22e886,
- 0x20f747,
- 0x2969c5,
- 0x348889,
- 0x263b4d,
- 0x213e51,
- 0x232d85,
+ 0x880c8,
+ 0x22a807,
+ 0x364288,
+ 0x24f843,
+ 0x21d184,
+ 0x2226cb,
+ 0x259145,
+ 0x24b188,
+ 0x2f2ec9,
+ 0x25a203,
+ 0x22d183,
+ 0x205348,
+ 0x2ee787,
+ 0x24fe46,
+ 0x2343c3,
+ 0x24f947,
+ 0x21eb03,
+ 0x339b06,
+ 0x202243,
+ 0x22f9c7,
+ 0x33a6c7,
+ 0x390e87,
+ 0x31e885,
+ 0x209403,
+ 0x205dcb,
+ 0x36b4c8,
+ 0x227548,
+ 0x33b1c6,
+ 0x367989,
+ 0x335b07,
+ 0x2f9145,
+ 0x339444,
+ 0x3478c8,
+ 0x23d54a,
+ 0x23d789,
+ 0x346f03,
+ 0x2696c5,
+ 0x21bb83,
+ 0x3ad706,
+ 0x387704,
+ 0x2fdec8,
+ 0x38748b,
+ 0x346dc5,
+ 0x2b7006,
+ 0x2b8e85,
+ 0x2b9608,
+ 0x2ba287,
+ 0x206cc7,
+ 0x317b87,
+ 0x294544,
+ 0x30a5c7,
+ 0x294546,
+ 0x211003,
+ 0x2c2088,
+ 0x268383,
+ 0x2cab08,
+ 0x2d3f45,
+ 0x3251c8,
+ 0x2345c7,
+ 0x238483,
+ 0x2447c3,
+ 0x287dc4,
+ 0x323647,
+ 0x208fc3,
+ 0x33a78b,
+ 0x205003,
+ 0x268344,
+ 0x2e9d48,
+ 0x2264c3,
+ 0x2f3d45,
+ 0x311145,
+ 0x3250c6,
+ 0x2117c5,
+ 0x2d4304,
+ 0x202002,
+ 0x2e69c3,
+ 0x374c0a,
+ 0x3a1583,
+ 0x306709,
+ 0x30a2c6,
+ 0x204e48,
+ 0x289406,
+ 0x214347,
+ 0x2db948,
+ 0x39a588,
+ 0x2ebd43,
+ 0x293d03,
+ 0x272c09,
+ 0x2f4c83,
+ 0x2d8d06,
+ 0x254386,
+ 0x39f7c6,
+ 0x3a1e09,
+ 0x2fd784,
+ 0x20e3c3,
+ 0x2d6d05,
+ 0x349589,
+ 0x206dc3,
+ 0x35a244,
+ 0x2f2ac4,
+ 0x36fc84,
+ 0x35f906,
+ 0x3b4303,
+ 0x3b4308,
+ 0x256a08,
+ 0x39db86,
+ 0x2f8f4b,
+ 0x2f9288,
+ 0x2f948b,
+ 0x2fb949,
+ 0x2fa987,
+ 0x2fbdc8,
+ 0x2fc983,
+ 0x22ad86,
+ 0x3a9247,
+ 0x295245,
+ 0x34b789,
+ 0x33530d,
+ 0x204c91,
+ 0x22eb85,
0x200882,
- 0x204a82,
- 0x258403,
- 0x230743,
- 0x2afc84,
- 0x2d9d43,
- 0x202503,
- 0x219bc3,
- 0x249943,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x230c43,
- 0x249943,
- 0x2257c3,
- 0x29ca83,
- 0x2161c3,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x201104,
- 0x230c43,
- 0x249943,
- 0x2257c3,
- 0x21ce42,
+ 0x216582,
+ 0x22d183,
+ 0x2343c3,
+ 0x22d684,
+ 0x21eb03,
+ 0x202243,
+ 0x211003,
+ 0x238483,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x2348c3,
+ 0x238483,
+ 0x2264c3,
+ 0x265903,
+ 0x217643,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x201604,
+ 0x2348c3,
+ 0x238483,
+ 0x2264c3,
+ 0x221e42,
0x200141,
0x200882,
0x200001,
- 0x312542,
- 0x894c8,
- 0x21b385,
+ 0x313b02,
+ 0x880c8,
+ 0x220045,
0x200481,
- 0x58403,
+ 0x2d183,
0x200741,
0x200081,
- 0x201181,
- 0x233302,
- 0x368c84,
- 0x381103,
+ 0x200c81,
+ 0x2333c2,
+ 0x36e144,
+ 0x383043,
0x2007c1,
0x200901,
0x200041,
0x2001c1,
- 0x390647,
- 0x2bda4f,
- 0x2d0986,
+ 0x2dda87,
+ 0x2b8f8f,
+ 0x2cacc6,
0x2000c1,
- 0x25a446,
+ 0x25b806,
0x200341,
- 0x200cc1,
- 0x347b0e,
- 0x200e81,
- 0x2257c3,
0x200ac1,
- 0x26c8c5,
- 0x20bb42,
- 0x23d1c5,
- 0x200c01,
+ 0x341ece,
+ 0x201501,
+ 0x2264c3,
+ 0x2014c1,
+ 0x260e05,
+ 0x202002,
+ 0x241f85,
+ 0x200b81,
0x200241,
0x200a01,
- 0x201582,
+ 0x203e42,
0x2002c1,
- 0x203701,
- 0x203fc1,
+ 0x204701,
+ 0x20dec1,
0x200781,
0x200641,
- 0x894c8,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x20f0c3,
- 0x258403,
- 0x2d9d43,
- 0x8b2c8,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x14d7f48,
- 0x894c8,
- 0x3f5c4,
- 0x894c8,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x249943,
- 0x2257c3,
- 0x203803,
- 0x894c8,
- 0x258403,
- 0x230743,
- 0x2afc84,
- 0x2257c3,
- 0x293485,
- 0x328204,
- 0x258403,
- 0x249943,
- 0x2257c3,
- 0x27a8a,
- 0x204a82,
- 0x258403,
- 0x22f209,
- 0x230743,
- 0x237cc9,
- 0x2d9d43,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x2dfbc8,
- 0x214507,
- 0x2e82c5,
+ 0x880c8,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x21ca03,
+ 0x22d183,
+ 0x21eb03,
+ 0x89ec8,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x14da788,
+ 0x880c8,
+ 0x441c4,
+ 0x880c8,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x238483,
+ 0x2264c3,
+ 0x204803,
+ 0x880c8,
+ 0x22d183,
+ 0x2343c3,
+ 0x22d684,
+ 0x2264c3,
+ 0x28fb85,
+ 0x27f304,
+ 0x22d183,
+ 0x238483,
+ 0x2264c3,
+ 0xa014a,
+ 0x216582,
+ 0x22d183,
+ 0x2326c9,
+ 0x2343c3,
+ 0x23af09,
+ 0x21eb03,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x2e24c8,
+ 0x2100c7,
+ 0x2e9cc5,
0x200707,
- 0x33fe0b,
- 0x37d448,
- 0x33f2c9,
- 0x225a07,
- 0x204288,
- 0x337f06,
- 0x233d47,
- 0x22c848,
- 0x339086,
- 0x3234c7,
- 0x236e89,
- 0x386ac9,
- 0x2b6f86,
- 0x2b8c85,
- 0x2c4208,
- 0x248e83,
- 0x2cb048,
- 0x230947,
- 0x209a43,
- 0x3333c7,
- 0x2102c5,
- 0x2daf88,
- 0x3554c5,
- 0x295483,
- 0x2c7b89,
- 0x2aaa47,
- 0x319b44,
- 0x36cb04,
- 0x2f9a0b,
- 0x2f9d48,
- 0x2fb947,
- 0x258403,
- 0x230743,
- 0x2095c3,
- 0x2257c3,
- 0x225dc3,
- 0x2d9d43,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
+ 0x366a4b,
+ 0x365188,
+ 0x340a89,
+ 0x22a807,
+ 0x205348,
+ 0x339b06,
+ 0x33a6c7,
+ 0x227548,
+ 0x33b1c6,
+ 0x335b07,
+ 0x23d789,
+ 0x37c409,
+ 0x2b7006,
+ 0x2b7e45,
+ 0x2c2088,
+ 0x268383,
+ 0x2cab08,
+ 0x2345c7,
+ 0x208fc3,
+ 0x326387,
+ 0x2117c5,
+ 0x2dc608,
+ 0x310205,
+ 0x293d03,
+ 0x33b9c9,
+ 0x2aa9c7,
+ 0x35a244,
+ 0x2f2ac4,
+ 0x2f8f4b,
+ 0x2f9288,
+ 0x2fa987,
+ 0x22d183,
+ 0x2343c3,
+ 0x211cc3,
+ 0x2264c3,
+ 0x21e503,
+ 0x21eb03,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x653cb,
0x200882,
- 0x204a82,
- 0x2257c3,
- 0x894c8,
+ 0x216582,
+ 0x2264c3,
+ 0x880c8,
0x200882,
- 0x204a82,
- 0x2095c2,
- 0x201042,
+ 0x216582,
+ 0x201f82,
+ 0x200a82,
0x200342,
- 0x249943,
- 0x2016c2,
+ 0x238483,
+ 0x201502,
0x200882,
- 0x323743,
- 0x204a82,
- 0x258403,
- 0x230743,
- 0x2095c2,
- 0x2d9d43,
- 0x202503,
- 0x219bc3,
- 0x2021c4,
- 0x249943,
- 0x2174c3,
- 0x2257c3,
- 0x2eaac4,
- 0x224043,
- 0x2d9d43,
- 0x204a82,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x219bc3,
- 0x249943,
- 0x202883,
- 0x2257c3,
- 0x39c207,
- 0x258403,
- 0x251547,
- 0x2f0c46,
- 0x219443,
- 0x20e8c3,
- 0x2d9d43,
- 0x21bbc3,
- 0x201104,
- 0x286104,
- 0x2d3646,
- 0x2284c3,
- 0x249943,
- 0x2257c3,
- 0x293485,
- 0x20cd04,
- 0x318b43,
- 0x223643,
- 0x2be287,
- 0x2f5545,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x21fd82,
- 0x374b43,
- 0x27bc83,
- 0x323743,
- 0x55e58403,
- 0x201e02,
- 0x230743,
- 0x2099c3,
- 0x2d9d43,
- 0x201104,
- 0x265743,
- 0x2aed03,
- 0x219bc3,
- 0x2021c4,
- 0x56205702,
- 0x249943,
- 0x2257c3,
- 0x22f903,
- 0x242103,
- 0x21ce42,
- 0x224043,
- 0x894c8,
- 0x2d9d43,
- 0x2ee604,
- 0x323743,
- 0x204a82,
- 0x258403,
- 0x232ec4,
- 0x230743,
- 0x2d9d43,
- 0x201104,
- 0x202503,
- 0x30f384,
- 0x30ac84,
- 0x2ccc86,
- 0x2021c4,
- 0x249943,
- 0x2257c3,
- 0x219683,
- 0x26cc46,
- 0x1d94b,
- 0x1f186,
- 0x23e8a,
- 0xfd78a,
- 0x894c8,
- 0x3a3d84,
- 0x258403,
- 0x323704,
- 0x230743,
- 0x244f04,
- 0x2d9d43,
- 0x254943,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x32538b,
- 0x39de8a,
- 0x3b1c4c,
+ 0x323ac3,
+ 0x216582,
+ 0x22d183,
+ 0x2343c3,
+ 0x201f82,
+ 0x21eb03,
+ 0x202243,
+ 0x211003,
+ 0x212444,
+ 0x238483,
+ 0x21ab43,
+ 0x2264c3,
+ 0x2fd784,
+ 0x223ec3,
+ 0x21eb03,
+ 0x216582,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x211003,
+ 0x238483,
+ 0x2025c3,
+ 0x2264c3,
+ 0x39bd47,
+ 0x22d183,
+ 0x256b87,
+ 0x2edfc6,
+ 0x219203,
+ 0x206ac3,
+ 0x21eb03,
+ 0x220883,
+ 0x201604,
+ 0x284804,
+ 0x2d43c6,
+ 0x20bac3,
+ 0x238483,
+ 0x2264c3,
+ 0x28fb85,
+ 0x20d4c4,
+ 0x31a083,
+ 0x217a03,
+ 0x2bcdc7,
+ 0x20b445,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x219f02,
+ 0x380383,
+ 0x2b2c83,
+ 0x323ac3,
+ 0x5822d183,
+ 0x22b782,
+ 0x2343c3,
+ 0x208f43,
+ 0x21eb03,
+ 0x201604,
+ 0x36b683,
+ 0x280b03,
+ 0x211003,
+ 0x212444,
+ 0x58606bc2,
+ 0x238483,
+ 0x2264c3,
+ 0x232dc3,
+ 0x245483,
+ 0x221e42,
+ 0x223ec3,
+ 0x880c8,
+ 0x21eb03,
+ 0x307e44,
+ 0x323ac3,
+ 0x216582,
+ 0x22d183,
+ 0x2374c4,
+ 0x2343c3,
+ 0x21eb03,
+ 0x201604,
+ 0x202243,
+ 0x2f5d44,
+ 0x307b04,
+ 0x2cc5c6,
+ 0x212444,
+ 0x238483,
+ 0x2264c3,
+ 0x21bd03,
+ 0x26a8c6,
+ 0x1737cb,
+ 0x1e1c6,
+ 0x23d0a,
+ 0xfcb8a,
+ 0x880c8,
+ 0x3a8204,
+ 0x22d183,
+ 0x323a84,
+ 0x2343c3,
+ 0x247b84,
+ 0x21eb03,
+ 0x251283,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x32248b,
+ 0x39d94a,
+ 0x3b298c,
0x200882,
- 0x204a82,
- 0x2095c2,
- 0x2a8f85,
- 0x201104,
- 0x202242,
- 0x219bc3,
- 0x30ac84,
- 0x201cc2,
- 0x2016c2,
- 0x2057c2,
- 0x21ce42,
- 0x123743,
- 0x2ec0c9,
- 0x24f4c8,
- 0x35c349,
- 0x233b89,
- 0x2411ca,
- 0x24954a,
- 0x20b782,
- 0x219fc2,
- 0x4a82,
- 0x258403,
- 0x207802,
- 0x23b646,
- 0x351c82,
- 0x200d02,
- 0x3a004e,
- 0x2705ce,
- 0x27a987,
- 0x325e87,
- 0x26fc02,
- 0x230743,
- 0x2d9d43,
- 0x203542,
- 0x201042,
- 0x29e90f,
- 0x214082,
- 0x2400c7,
- 0x339287,
- 0x2503c7,
- 0x26a14c,
- 0x27090c,
- 0x204704,
- 0x26abca,
- 0x2953c2,
- 0x20a482,
- 0x2b1384,
- 0x222942,
- 0x2bc382,
- 0x270b44,
- 0x2175c2,
- 0x2120c2,
- 0x339107,
- 0x224945,
- 0x2326c2,
- 0x29e884,
- 0x36ecc2,
- 0x2cee08,
- 0x249943,
- 0x3a9008,
- 0x208fc2,
- 0x231c05,
- 0x3a92c6,
- 0x2257c3,
- 0x209d02,
- 0x2dbd07,
- 0xbb42,
- 0x26ff05,
- 0x394505,
- 0x203ec2,
- 0x225742,
- 0x31710a,
- 0x26760a,
- 0x219b82,
- 0x2fbf44,
- 0x2013c2,
- 0x27cc48,
+ 0x216582,
+ 0x201f82,
+ 0x2a9c05,
+ 0x201604,
+ 0x206742,
+ 0x211003,
+ 0x307b04,
+ 0x205902,
+ 0x201502,
+ 0x217642,
+ 0x221e42,
+ 0x123ac3,
+ 0x357309,
+ 0x254208,
+ 0x301189,
+ 0x33a509,
+ 0x35bd8a,
+ 0x23808a,
+ 0x20cc82,
+ 0x21dec2,
+ 0x16582,
+ 0x22d183,
+ 0x200bc2,
+ 0x2402c6,
+ 0x354502,
+ 0x202982,
+ 0x3861ce,
+ 0x21bc4e,
+ 0x278107,
+ 0x32fe47,
+ 0x26b302,
+ 0x2343c3,
+ 0x21eb03,
+ 0x202842,
+ 0x200a82,
+ 0x23d1cf,
+ 0x204ec2,
+ 0x33b3c7,
+ 0x24cf87,
+ 0x256107,
+ 0x26204c,
+ 0x268b4c,
+ 0x2057c4,
+ 0x2696ca,
+ 0x21bb82,
+ 0x209682,
+ 0x2b2684,
+ 0x215bc2,
+ 0x2bb4c2,
+ 0x268d84,
+ 0x21ac42,
+ 0x20b402,
+ 0x33b247,
+ 0x233285,
0x20a242,
- 0x22dec8,
- 0x2f61c7,
- 0x2f64c9,
- 0x26ff82,
- 0x2fc8c5,
- 0x24f985,
- 0x2c154b,
- 0x2c228c,
- 0x22e188,
- 0x2fcc88,
- 0x242f82,
- 0x20cfc2,
+ 0x23d144,
+ 0x372e82,
+ 0x2cea08,
+ 0x238483,
+ 0x3a2308,
+ 0x203082,
+ 0x235885,
+ 0x3a25c6,
+ 0x2264c3,
+ 0x206a42,
+ 0x2dd0c7,
+ 0x2002,
+ 0x26ccc5,
+ 0x393e85,
+ 0x2166c2,
+ 0x226442,
+ 0x31864a,
+ 0x26404a,
+ 0x210fc2,
+ 0x376c04,
+ 0x201a02,
+ 0x38e588,
+ 0x204cc2,
+ 0x2fd448,
+ 0x2f64c7,
+ 0x2f67c9,
+ 0x26cd42,
+ 0x2fbb85,
+ 0x2546c5,
+ 0x2148cb,
+ 0x2bfdcc,
+ 0x22f848,
+ 0x2fbf48,
+ 0x260dc2,
+ 0x20d782,
0x200882,
- 0x894c8,
- 0x204a82,
- 0x258403,
- 0x2095c2,
- 0x201cc2,
- 0x2016c2,
- 0x2257c3,
- 0x2057c2,
+ 0x880c8,
+ 0x216582,
+ 0x22d183,
+ 0x201f82,
+ 0x205902,
+ 0x201502,
+ 0x2264c3,
+ 0x217642,
0x200882,
- 0x58204a82,
- 0x586d9d43,
- 0x332283,
- 0x202242,
- 0x249943,
- 0x39a3c3,
- 0x2257c3,
- 0x2d8843,
- 0x26fc46,
- 0x16161c3,
- 0x894c8,
- 0x555c5,
- 0x65b07,
- 0x58e00182,
- 0x59200dc2,
- 0x59603442,
- 0x59a00f82,
- 0x59e0dec2,
- 0x5a201742,
- 0x5a604a82,
- 0x5aa06082,
- 0x5ae1dd82,
- 0x5b201842,
- 0x2705c3,
- 0xb444,
- 0x2017c3,
- 0x5b616342,
- 0x5ba022c2,
- 0x44c07,
- 0x5be2c282,
- 0x5c200902,
- 0x5c60b642,
- 0x5ca0b9c2,
- 0x5ce04542,
- 0x5d201042,
- 0xba545,
- 0x222383,
- 0x31ca44,
- 0x5d622942,
- 0x5da34082,
- 0x5de00102,
- 0x77a0b,
- 0x5e200982,
- 0x5ea0a582,
- 0x5ee02242,
- 0x5f200342,
- 0x5f653702,
- 0x5fa08f82,
- 0x5fe0dc02,
- 0x60207a42,
- 0x60605702,
- 0x60a00cc2,
- 0x60e01cc2,
- 0x61227982,
- 0x6160d302,
- 0x61a3d982,
- 0x132d84,
- 0x319c43,
- 0x61e092c2,
- 0x62213e02,
- 0x62601ac2,
- 0x62a02102,
- 0x62e016c2,
- 0x63200d82,
- 0xda747,
- 0x63605fc2,
- 0x63a024c2,
- 0x63e057c2,
- 0x64205202,
- 0xe9f0c,
- 0x6461f6c2,
- 0x64a712c2,
- 0x64e00f02,
+ 0x5a616582,
+ 0x5aa1eb03,
+ 0x332683,
+ 0x206742,
+ 0x238483,
+ 0x364e83,
+ 0x2264c3,
+ 0x2db083,
+ 0x26b346,
+ 0x1617643,
+ 0x880c8,
+ 0x51f05,
+ 0xa7dcd,
+ 0x5f007,
+ 0x5b200182,
+ 0x5b601002,
+ 0x5ba04802,
+ 0x5be01842,
+ 0x5c2108c2,
+ 0x5c602ec2,
+ 0x16e747,
+ 0x5ca16582,
+ 0x5ce30542,
+ 0x5d21e582,
+ 0x5d600f82,
+ 0x21bc43,
+ 0x1b4284,
+ 0x20ddc3,
+ 0x5da18fc2,
+ 0x5de038c2,
+ 0x47887,
+ 0x5e214b82,
+ 0x5e600902,
+ 0x5ea02ac2,
+ 0x5ee082c2,
+ 0x5f205602,
+ 0x5f600a82,
+ 0xb97c5,
+ 0x226743,
+ 0x30ec04,
+ 0x5fa15bc2,
+ 0x5fe16c82,
+ 0x60200102,
+ 0x7508b,
+ 0x60600982,
+ 0x60e09782,
+ 0x61206742,
+ 0x61600342,
+ 0x61a50042,
+ 0x61e03042,
+ 0x6220e842,
+ 0x62600e02,
+ 0x62a06bc2,
+ 0x62e01302,
+ 0x63205902,
+ 0x6361d302,
+ 0x63a04242,
+ 0x63e425c2,
+ 0x133184,
+ 0x371183,
+ 0x64206602,
+ 0x64613942,
+ 0x64a06942,
+ 0x64e03742,
0x65201502,
- 0x656049c2,
- 0x65a41342,
- 0x65e03702,
- 0x6620eb42,
- 0x66673282,
- 0x66a736c2,
+ 0x65607a82,
+ 0x65547,
+ 0x65a07442,
+ 0x65e07482,
+ 0x66217642,
+ 0x6660a442,
+ 0xeb58c,
+ 0x66a24982,
+ 0x66e6f2c2,
+ 0x6721dcc2,
+ 0x67603dc2,
+ 0x67a2d742,
+ 0x67e1eb82,
+ 0x68204702,
+ 0x68606f42,
+ 0x68a71282,
+ 0x68e15ac2,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x75803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x27da43,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x5e665743,
- 0x27da43,
- 0x2fc344,
- 0x24f3c6,
- 0x2e4b43,
+ 0x60b6b683,
+ 0x275803,
+ 0x377004,
+ 0x254106,
+ 0x2e6a83,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x27da43,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x27da43,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
- 0x265743,
- 0x27da43,
+ 0x36b683,
+ 0x275803,
0x200482,
0x200482,
- 0x265743,
- 0x27da43,
- 0x67258403,
- 0x230743,
- 0x365d83,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x894c8,
- 0x204a82,
- 0x258403,
- 0x249943,
- 0x2257c3,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x2054c4,
- 0x204a82,
- 0x258403,
- 0x356443,
- 0x230743,
- 0x2446c4,
- 0x2095c3,
- 0x2d9d43,
- 0x201104,
- 0x202503,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x244443,
- 0x2e82c5,
- 0x27c343,
- 0x224043,
- 0x204a82,
- 0x258403,
- 0x265743,
- 0x249943,
- 0x2257c3,
+ 0x36b683,
+ 0x275803,
+ 0x6962d183,
+ 0x2343c3,
+ 0x2a0fc3,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x880c8,
+ 0x216582,
+ 0x22d183,
+ 0x238483,
+ 0x2264c3,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x245dc4,
+ 0x216582,
+ 0x22d183,
+ 0x308703,
+ 0x2343c3,
+ 0x247344,
+ 0x211cc3,
+ 0x21eb03,
+ 0x201604,
+ 0x202243,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x215cc3,
+ 0x2e9cc5,
+ 0x241403,
+ 0x223ec3,
+ 0x216582,
+ 0x22d183,
+ 0x36b683,
+ 0x238483,
+ 0x2264c3,
0x200882,
- 0x323743,
- 0x894c8,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x2e0006,
- 0x201104,
- 0x202503,
- 0x2021c4,
- 0x249943,
- 0x2257c3,
- 0x219683,
- 0x258403,
- 0x230743,
- 0x249943,
- 0x2257c3,
- 0x258403,
- 0x1f186,
- 0x230743,
- 0x2d9d43,
- 0xd0d86,
- 0x249943,
- 0x2257c3,
- 0x307288,
- 0x30a189,
- 0x31a149,
- 0x32adc8,
- 0x37ab88,
- 0x37ab89,
- 0x33305,
+ 0x323ac3,
+ 0x880c8,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x231ac6,
+ 0x201604,
+ 0x202243,
+ 0x212444,
+ 0x238483,
+ 0x2264c3,
+ 0x21bd03,
+ 0x22d183,
+ 0x2343c3,
+ 0x238483,
+ 0x2264c3,
+ 0x22d183,
+ 0x1e1c6,
+ 0x2343c3,
+ 0x21eb03,
+ 0xd1906,
+ 0x238483,
+ 0x2264c3,
+ 0x308a48,
+ 0x30b989,
+ 0x31bcc9,
+ 0x326c48,
+ 0x37efc8,
+ 0x37efc9,
+ 0x333c5,
0x200882,
- 0x2f5385,
- 0x22eb43,
- 0x69e04a82,
- 0x230743,
- 0x2d9d43,
- 0x225847,
- 0x206f43,
- 0x219bc3,
- 0x249943,
- 0x209583,
- 0x20dd83,
- 0x202883,
- 0x2257c3,
- 0x236286,
- 0x201582,
- 0x224043,
- 0x894c8,
+ 0x20b285,
+ 0x231b43,
+ 0x6c216582,
+ 0x2343c3,
+ 0x21eb03,
+ 0x22f647,
+ 0x206003,
+ 0x211003,
+ 0x238483,
+ 0x201f43,
+ 0x210783,
+ 0x2025c3,
+ 0x2264c3,
+ 0x3a5946,
+ 0x203e42,
+ 0x223ec3,
+ 0x880c8,
0x200882,
- 0x323743,
- 0x204a82,
- 0x258403,
- 0x230743,
- 0x2d9d43,
- 0x201104,
- 0x219bc3,
- 0x249943,
- 0x2257c3,
- 0x2161c3,
+ 0x323ac3,
+ 0x216582,
+ 0x22d183,
+ 0x2343c3,
+ 0x21eb03,
+ 0x201604,
+ 0x211003,
+ 0x238483,
+ 0x2264c3,
+ 0x217643,
+ 0x14fa806,
}
// children is the list of nodes' children, the parent's wildcard bit and the
@@ -8562,429 +8636,439 @@ var children = [...]uint32{
0x40000000,
0x50000000,
0x60000000,
- 0x1858610,
- 0x185c616,
- 0x187c617,
- 0x19d861f,
- 0x19ec676,
- 0x1a0067b,
- 0x1a10680,
- 0x1a2c684,
- 0x1a3068b,
- 0x1a4868c,
- 0x1a6c692,
- 0x1a7069b,
- 0x1a8869c,
- 0x1a8c6a2,
- 0x1aa86a3,
- 0x1aac6aa,
- 0x1af46ab,
- 0x1af86bd,
- 0x1b186be,
- 0x1b2c6c6,
- 0x1b306cb,
- 0x1b606cc,
- 0x1b7c6d8,
- 0x1ba46df,
- 0x1bac6e9,
- 0x1bb06eb,
- 0x1c446ec,
- 0x1c58711,
- 0x1c6c716,
- 0x1c9871b,
- 0x1ca8726,
- 0x1cbc72a,
- 0x1ce072f,
- 0x1df8738,
- 0x1dfc77e,
- 0x1e1077f,
- 0x1e24784,
- 0x1e2c789,
- 0x1e3c78b,
- 0x1e4078f,
- 0x1e58790,
- 0x1ea0796,
- 0x1eb47a8,
- 0x1eb87ad,
- 0x1ebc7ae,
- 0x1ec47af,
- 0x1f007b1,
- 0x61f047c0,
- 0x1f187c1,
- 0x1f1c7c6,
- 0x1f2c7c7,
- 0x1fdc7cb,
- 0x1fe07f7,
- 0x21fe87f8,
- 0x21fec7fa,
- 0x1ff07fb,
- 0x20247fc,
- 0x2028809,
- 0x245880a,
- 0x224a8916,
- 0x224ac92a,
- 0x24d492b,
- 0x24dc935,
- 0x224e0937,
- 0x24e8938,
- 0x224f893a,
- 0x224fc93e,
- 0x250893f,
- 0x250c942,
- 0x22510943,
- 0x252c944,
- 0x254494b,
- 0x2548951,
- 0x2558952,
- 0x2560956,
- 0x22594958,
- 0x2598965,
- 0x25a8966,
- 0x25d496a,
- 0x25ec975,
- 0x260097b,
- 0x2628980,
- 0x264898a,
- 0x2678992,
- 0x26a099e,
- 0x26a49a8,
- 0x26c89a9,
- 0x26cc9b2,
- 0x26e09b3,
- 0x26e49b8,
- 0x26e89b9,
- 0x27089ba,
- 0x270c9c2,
- 0x271c9c3,
- 0x27909c7,
- 0x27ac9e4,
- 0x27b89eb,
- 0x27cc9ee,
- 0x27e49f3,
- 0x27f89f9,
- 0x28109fe,
- 0x2828a04,
- 0x2840a0a,
- 0x285ca10,
- 0x2874a17,
- 0x28d4a1d,
- 0x28eca35,
- 0x2900a3b,
- 0x2944a40,
- 0x29c4a51,
- 0x29f0a71,
- 0x29f4a7c,
- 0x29fca7d,
- 0x2a1ca7f,
- 0x2a20a87,
- 0x2a3ca88,
- 0x2a44a8f,
- 0x2a78a91,
- 0x2ab0a9e,
- 0x2ab4aac,
- 0x2af0aad,
- 0x2b08abc,
- 0x2b2cac2,
- 0x2b4cacb,
- 0x3110ad3,
- 0x311cc44,
- 0x313cc47,
- 0x32f8c4f,
- 0x33c8cbe,
- 0x3438cf2,
- 0x3490d0e,
- 0x3578d24,
- 0x35d0d5e,
- 0x360cd74,
- 0x3708d83,
- 0x37d4dc2,
- 0x386cdf5,
- 0x38fce1b,
- 0x3960e3f,
- 0x3b98e58,
- 0x3c50ee6,
- 0x3d1cf14,
- 0x3d68f47,
- 0x3df0f5a,
- 0x3e2cf7c,
- 0x3e7cf8b,
- 0x3ef4f9f,
- 0x63ef8fbd,
- 0x63efcfbe,
- 0x63f00fbf,
- 0x3f7cfc0,
- 0x3fe0fdf,
- 0x405cff8,
- 0x40d5017,
- 0x4155035,
- 0x41c1055,
- 0x42ed070,
- 0x43450bb,
- 0x643490d1,
- 0x43e10d2,
- 0x44690f8,
- 0x44b511a,
- 0x451d12d,
- 0x45c5147,
- 0x468d171,
- 0x46f51a3,
- 0x48091bd,
- 0x6480d202,
- 0x64811203,
- 0x486d204,
- 0x48c921b,
- 0x4959232,
- 0x49d5256,
- 0x4a19275,
- 0x4afd286,
- 0x4b312bf,
- 0x4b912cc,
- 0x4c052e4,
- 0x4c8d301,
- 0x4ccd323,
- 0x4d3d333,
- 0x64d4134f,
- 0x64d45350,
- 0x24d49351,
- 0x4d61352,
- 0x4d7d358,
- 0x4dc135f,
- 0x4dd1370,
- 0x4de9374,
- 0x4e6137a,
- 0x4e75398,
- 0x4e8d39d,
- 0x4eb13a3,
- 0x4eb53ac,
- 0x4ebd3ad,
- 0x4ed13af,
- 0x4eed3b4,
- 0x4ef13bb,
- 0x4ef93bc,
- 0x4f353be,
+ 0x185c611,
+ 0x1860617,
+ 0x1880618,
+ 0x19dc620,
+ 0x19f0677,
+ 0x1a0467c,
+ 0x1a14681,
+ 0x1a30685,
+ 0x1a3468c,
+ 0x1a4c68d,
+ 0x1a70693,
+ 0x1a7469c,
+ 0x1a8c69d,
+ 0x1a906a3,
+ 0x1a946a4,
+ 0x1ab86a5,
+ 0x1abc6ae,
+ 0x21ac46af,
+ 0x1b0c6b1,
+ 0x1b106c3,
+ 0x1b306c4,
+ 0x1b446cc,
+ 0x1b486d1,
+ 0x1b786d2,
+ 0x1b946de,
+ 0x1bbc6e5,
+ 0x1bc86ef,
+ 0x1bcc6f2,
+ 0x1c606f3,
+ 0x1c74718,
+ 0x1c8871d,
+ 0x1cb8722,
+ 0x1cc872e,
+ 0x1cdc732,
+ 0x1d00737,
+ 0x1e18740,
+ 0x1e1c786,
+ 0x1e88787,
+ 0x1e9c7a2,
+ 0x1eb07a7,
+ 0x1eb87ac,
+ 0x1ec87ae,
+ 0x1ecc7b2,
+ 0x1ee47b3,
+ 0x1f2c7b9,
+ 0x1f447cb,
+ 0x1f487d1,
+ 0x1f4c7d2,
+ 0x1f547d3,
+ 0x1f907d5,
+ 0x61f947e4,
+ 0x1fa87e5,
+ 0x1fac7ea,
+ 0x1fb07eb,
+ 0x1fc07ec,
+ 0x20707f0,
+ 0x207481c,
+ 0x2207c81d,
+ 0x2208081f,
+ 0x2084820,
+ 0x20b8821,
+ 0x20bc82e,
+ 0x24f482f,
+ 0x2254493d,
+ 0x22548951,
+ 0x2570952,
+ 0x257895c,
+ 0x2257c95e,
+ 0x258495f,
+ 0x22594961,
+ 0x22598965,
+ 0x25a4966,
+ 0x225a8969,
+ 0x25ac96a,
+ 0x225b096b,
+ 0x25cc96c,
+ 0x25e4973,
+ 0x25e8979,
+ 0x25f897a,
+ 0x260097e,
+ 0x22634980,
+ 0x263898d,
+ 0x264898e,
+ 0x267c992,
+ 0x269499f,
+ 0x26a89a5,
+ 0x26d09aa,
+ 0x26f09b4,
+ 0x27209bc,
+ 0x27489c8,
+ 0x274c9d2,
+ 0x27709d3,
+ 0x27749dc,
+ 0x27889dd,
+ 0x278c9e2,
+ 0x27909e3,
+ 0x27b09e4,
+ 0x27c09ec,
+ 0x27d09f0,
+ 0x27d49f4,
+ 0x28489f5,
+ 0x2864a12,
+ 0x2870a19,
+ 0x2884a1c,
+ 0x289ca21,
+ 0x28b0a27,
+ 0x28c8a2c,
+ 0x28e0a32,
+ 0x28f8a38,
+ 0x2914a3e,
+ 0x292ca45,
+ 0x298ca4b,
+ 0x29a4a63,
+ 0x29a8a69,
+ 0x29bca6a,
+ 0x2a00a6f,
+ 0x2a80a80,
+ 0x2aacaa0,
+ 0x2ab0aab,
+ 0x2ab8aac,
+ 0x2ad8aae,
+ 0x2adcab6,
+ 0x2afcab7,
+ 0x2b04abf,
+ 0x2b3cac1,
+ 0x2b78acf,
+ 0x2b7cade,
+ 0x2bbcadf,
+ 0x2bd4aef,
+ 0x2bf8af5,
+ 0x2c18afe,
+ 0x31dcb06,
+ 0x31e8c77,
+ 0x3208c7a,
+ 0x33c4c82,
+ 0x3494cf1,
+ 0x3504d25,
+ 0x355cd41,
+ 0x3644d57,
+ 0x369cd91,
+ 0x36d8da7,
+ 0x37d4db6,
+ 0x38a0df5,
+ 0x3938e28,
+ 0x39c8e4e,
+ 0x3a2ce72,
+ 0x3c64e8b,
+ 0x3d1cf19,
+ 0x3de8f47,
+ 0x3e34f7a,
+ 0x3ebcf8d,
+ 0x3ef8faf,
+ 0x3f48fbe,
+ 0x3fc0fd2,
+ 0x63fc4ff0,
+ 0x63fc8ff1,
+ 0x63fccff2,
+ 0x4048ff3,
+ 0x40ad012,
+ 0x412902b,
+ 0x41a104a,
+ 0x4221068,
+ 0x428d088,
+ 0x43b90a3,
+ 0x44110ee,
+ 0x64415104,
+ 0x44ad105,
+ 0x453512b,
+ 0x458114d,
+ 0x45e9160,
+ 0x469117a,
+ 0x47591a4,
+ 0x47c11d6,
+ 0x48d51f0,
+ 0x648d9235,
+ 0x648dd236,
+ 0x4939237,
+ 0x499524e,
+ 0x4a25265,
+ 0x4aa1289,
+ 0x4ae52a8,
+ 0x4bc92b9,
+ 0x4bfd2f2,
+ 0x4c5d2ff,
+ 0x4cd1317,
+ 0x4d59334,
+ 0x4d99356,
+ 0x4e09366,
+ 0x64e0d382,
+ 0x64e11383,
+ 0x24e15384,
+ 0x4e2d385,
+ 0x4e4938b,
+ 0x4e8d392,
+ 0x4e9d3a3,
+ 0x4eb53a7,
+ 0x4f2d3ad,
+ 0x4f353cb,
0x4f493cd,
- 0x4f513d2,
- 0x4f593d4,
- 0x4f5d3d6,
- 0x4f813d7,
- 0x4fa53e0,
- 0x4fbd3e9,
- 0x4fc13ef,
- 0x4fc93f0,
- 0x4fcd3f2,
- 0x50213f3,
- 0x5045408,
- 0x5065411,
- 0x5081419,
- 0x5091420,
- 0x50a5424,
- 0x50a9429,
- 0x50b142a,
- 0x50c542c,
- 0x50d5431,
- 0x50d9435,
- 0x50f5436,
- 0x598543d,
- 0x59bd661,
- 0x59e966f,
- 0x5a0167a,
- 0x5a21680,
- 0x65a25688,
- 0x5a69689,
- 0x5a7169a,
- 0x25a7569c,
- 0x25a7969d,
- 0x5a7d69e,
- 0x5b9d69f,
- 0x25ba16e7,
- 0x25ba96e8,
- 0x25bb16ea,
- 0x25bbd6ec,
- 0x5bc16ef,
- 0x5be96f0,
- 0x5c116fa,
- 0x5c15704,
- 0x25c4d705,
- 0x5c5d713,
- 0x67b5717,
- 0x67b99ed,
- 0x67bd9ee,
- 0x267c19ef,
- 0x67c59f0,
- 0x267c99f1,
- 0x67cd9f2,
- 0x267d99f3,
- 0x67dd9f6,
- 0x67e19f7,
- 0x267e59f8,
- 0x67e99f9,
- 0x267f19fa,
- 0x67f59fc,
- 0x67f99fd,
- 0x268099fe,
- 0x680da02,
- 0x6811a03,
- 0x6815a04,
- 0x6819a05,
- 0x2681da06,
- 0x6821a07,
- 0x6825a08,
- 0x6829a09,
- 0x682da0a,
- 0x26835a0b,
- 0x6839a0d,
- 0x683da0e,
- 0x6841a0f,
- 0x26845a10,
- 0x6849a11,
- 0x26851a12,
- 0x26855a14,
- 0x6871a15,
- 0x687da1c,
- 0x68bda1f,
+ 0x4f613d2,
+ 0x4f893d8,
+ 0x4f8d3e2,
+ 0x4f953e3,
+ 0x4fa93e5,
+ 0x4fc53ea,
+ 0x4fc93f1,
+ 0x4fd13f2,
+ 0x500d3f4,
+ 0x5021403,
+ 0x5029408,
+ 0x503140a,
+ 0x503540c,
+ 0x505940d,
+ 0x507d416,
+ 0x509541f,
+ 0x5099425,
+ 0x50a1426,
+ 0x50a5428,
+ 0x50f9429,
+ 0x511d43e,
+ 0x513d447,
+ 0x515944f,
+ 0x5169456,
+ 0x517d45a,
+ 0x518145f,
+ 0x5189460,
+ 0x519d462,
+ 0x51ad467,
+ 0x51b146b,
+ 0x51cd46c,
+ 0x5a5d473,
+ 0x5a95697,
+ 0x5ac16a5,
+ 0x5ad96b0,
+ 0x5af96b6,
+ 0x5b196be,
+ 0x5b5d6c6,
+ 0x5b656d7,
+ 0x25b696d9,
+ 0x25b6d6da,
+ 0x5b716db,
+ 0x5c956dc,
+ 0x25c99725,
+ 0x25ca1726,
+ 0x25ca9728,
+ 0x25cb572a,
+ 0x5cb972d,
+ 0x5ce172e,
+ 0x5d09738,
+ 0x5d0d742,
+ 0x25d45743,
+ 0x5d59751,
+ 0x68b1756,
+ 0x68b5a2c,
+ 0x68b9a2d,
+ 0x268bda2e,
0x68c1a2f,
- 0x68e5a30,
- 0x6a29a39,
- 0x26a31a8a,
- 0x26a35a8c,
- 0x26a39a8d,
- 0x6a41a8e,
- 0x6b1da90,
- 0x6b21ac7,
- 0x6b4dac8,
- 0x6b6dad3,
- 0x6b79adb,
- 0x6b99ade,
- 0x6bd1ae6,
- 0x6e69af4,
- 0x6f25b9a,
- 0x6f39bc9,
- 0x6f6dbce,
- 0x6f99bdb,
- 0x6fb5be6,
- 0x6fd9bed,
- 0x6ff1bf6,
- 0x700dbfc,
- 0x7031c03,
- 0x7041c0c,
- 0x7071c10,
- 0x708dc1c,
- 0x7299c23,
- 0x72bdca6,
- 0x72ddcaf,
- 0x72f1cb7,
- 0x7305cbc,
- 0x7325cc1,
- 0x73c9cc9,
- 0x73e5cf2,
- 0x7401cf9,
- 0x7405d00,
- 0x7409d01,
- 0x740dd02,
- 0x7421d03,
- 0x7441d08,
- 0x744dd10,
- 0x7451d13,
- 0x7481d14,
- 0x7501d20,
- 0x7515d40,
+ 0x268c5a30,
+ 0x68c9a31,
+ 0x268d5a32,
+ 0x68d9a35,
+ 0x68dda36,
+ 0x268e1a37,
+ 0x68e5a38,
+ 0x268eda39,
+ 0x68f1a3b,
+ 0x68f5a3c,
+ 0x26905a3d,
+ 0x6909a41,
+ 0x690da42,
+ 0x6911a43,
+ 0x6915a44,
+ 0x26919a45,
+ 0x691da46,
+ 0x6921a47,
+ 0x6925a48,
+ 0x6929a49,
+ 0x26931a4a,
+ 0x6935a4c,
+ 0x6939a4d,
+ 0x693da4e,
+ 0x26941a4f,
+ 0x6945a50,
+ 0x2694da51,
+ 0x26951a53,
+ 0x696da54,
+ 0x6979a5b,
+ 0x69b9a5e,
+ 0x69bda6e,
+ 0x69e1a6f,
+ 0x6b31a78,
+ 0x26b39acc,
+ 0x26b3dace,
+ 0x26b41acf,
+ 0x6b49ad0,
+ 0x6c25ad2,
+ 0x6c29b09,
+ 0x6c55b0a,
+ 0x6c75b15,
+ 0x6c81b1d,
+ 0x6ca1b20,
+ 0x6cd9b28,
+ 0x6f71b36,
+ 0x702dbdc,
+ 0x7041c0b,
+ 0x7075c10,
+ 0x70a5c1d,
+ 0x70c1c29,
+ 0x70e5c30,
+ 0x7101c39,
+ 0x711dc40,
+ 0x7141c47,
+ 0x7151c50,
+ 0x7185c54,
+ 0x71a1c61,
+ 0x73adc68,
+ 0x73d1ceb,
+ 0x73f1cf4,
+ 0x7405cfc,
+ 0x7419d01,
+ 0x7439d06,
+ 0x74ddd0e,
+ 0x74f9d37,
+ 0x7515d3e,
0x7519d45,
- 0x7531d46,
- 0x753dd4c,
- 0x7541d4f,
- 0x755dd50,
- 0x7599d57,
- 0x759dd66,
- 0x75bdd67,
- 0x760dd6f,
- 0x7625d83,
- 0x7679d89,
- 0x767dd9e,
- 0x7681d9f,
- 0x76c5da0,
- 0x76d5db1,
- 0x770ddb5,
- 0x773ddc3,
- 0x7879dcf,
- 0x789de1e,
- 0x78c9e27,
- 0x78d1e32,
- 0x78d5e34,
- 0x79e1e35,
+ 0x751dd46,
+ 0x7521d47,
+ 0x7535d48,
+ 0x7555d4d,
+ 0x7561d55,
+ 0x7565d58,
+ 0x7595d59,
+ 0x7615d65,
+ 0x7629d85,
+ 0x762dd8a,
+ 0x7645d8b,
+ 0x7649d91,
+ 0x7655d92,
+ 0x7659d95,
+ 0x7675d96,
+ 0x76b1d9d,
+ 0x76b5dac,
+ 0x76d5dad,
+ 0x7725db5,
+ 0x773ddc9,
+ 0x7791dcf,
+ 0x7795de4,
+ 0x7799de5,
+ 0x77ddde6,
+ 0x77eddf7,
+ 0x7825dfb,
+ 0x7855e09,
+ 0x7991e15,
+ 0x79b5e64,
+ 0x79e1e6d,
0x79ede78,
- 0x79f9e7b,
- 0x7a05e7e,
- 0x7a11e81,
- 0x7a1de84,
- 0x7a29e87,
- 0x7a35e8a,
- 0x7a41e8d,
- 0x7a4de90,
- 0x7a59e93,
- 0x7a65e96,
- 0x7a71e99,
- 0x7a7de9c,
- 0x7a85e9f,
- 0x7a91ea1,
- 0x7a9dea4,
- 0x7aa9ea7,
- 0x7ab5eaa,
- 0x7ac1ead,
- 0x7acdeb0,
- 0x7ad9eb3,
- 0x7ae5eb6,
- 0x7af1eb9,
- 0x7afdebc,
- 0x7b09ebf,
- 0x7b15ec2,
- 0x7b21ec5,
- 0x7b2dec8,
- 0x7b39ecb,
- 0x7b45ece,
- 0x7b51ed1,
- 0x7b59ed4,
- 0x7b65ed6,
- 0x7b71ed9,
- 0x7b7dedc,
- 0x7b89edf,
- 0x7b95ee2,
- 0x7ba1ee5,
- 0x7badee8,
- 0x7bb9eeb,
- 0x7bc5eee,
- 0x7bd1ef1,
- 0x7bddef4,
- 0x7be9ef7,
- 0x7bf5efa,
- 0x7bfdefd,
- 0x7c09eff,
- 0x7c15f02,
- 0x7c21f05,
- 0x7c2df08,
- 0x7c39f0b,
- 0x7c45f0e,
- 0x7c51f11,
- 0x7c5df14,
- 0x7c61f17,
- 0x7c6df18,
- 0x7c85f1b,
- 0x7c89f21,
- 0x7c99f22,
- 0x7cb1f26,
- 0x7cf5f2c,
- 0x7d09f3d,
- 0x7d3df42,
- 0x7d4df4f,
- 0x7d69f53,
- 0x7d81f5a,
- 0x7d85f60,
- 0x27dc9f61,
- 0x7dcdf72,
- 0x7df9f73,
+ 0x79f1e7b,
+ 0x7b01e7c,
+ 0x7b0dec0,
+ 0x7b19ec3,
+ 0x7b25ec6,
+ 0x7b31ec9,
+ 0x7b3decc,
+ 0x7b49ecf,
+ 0x7b55ed2,
+ 0x7b61ed5,
+ 0x7b6ded8,
+ 0x7b79edb,
+ 0x7b85ede,
+ 0x7b91ee1,
+ 0x7b9dee4,
+ 0x7ba5ee7,
+ 0x7bb1ee9,
+ 0x7bbdeec,
+ 0x7bc9eef,
+ 0x7bd5ef2,
+ 0x7be1ef5,
+ 0x7bedef8,
+ 0x7bf9efb,
+ 0x7c05efe,
+ 0x7c11f01,
+ 0x7c1df04,
+ 0x7c29f07,
+ 0x7c35f0a,
+ 0x7c41f0d,
+ 0x7c4df10,
+ 0x7c59f13,
+ 0x7c65f16,
+ 0x7c71f19,
+ 0x7c79f1c,
+ 0x7c85f1e,
+ 0x7c91f21,
+ 0x7c9df24,
+ 0x7ca9f27,
+ 0x7cb5f2a,
+ 0x7cc1f2d,
+ 0x7ccdf30,
+ 0x7cd9f33,
+ 0x7ce5f36,
+ 0x7cf1f39,
+ 0x7cfdf3c,
+ 0x7d09f3f,
+ 0x7d15f42,
+ 0x7d1df45,
+ 0x7d29f47,
+ 0x7d35f4a,
+ 0x7d41f4d,
+ 0x7d4df50,
+ 0x7d59f53,
+ 0x7d65f56,
+ 0x7d71f59,
+ 0x7d7df5c,
+ 0x7d81f5f,
+ 0x7d8df60,
+ 0x7da5f63,
+ 0x7da9f69,
+ 0x7db9f6a,
+ 0x7dd1f6e,
+ 0x7e15f74,
+ 0x7e29f85,
+ 0x7e5df8a,
+ 0x7e6df97,
+ 0x7e89f9b,
+ 0x7ea1fa2,
+ 0x7ea5fa8,
+ 0x27ee9fa9,
+ 0x7eedfba,
+ 0x7f19fbb,
+ 0x7f1dfc6,
}
-// max children 424 (capacity 511)
-// max text offset 27866 (capacity 32767)
+// max children 434 (capacity 511)
+// max text offset 27930 (capacity 32767)
// max text length 36 (capacity 63)
-// max hi 8062 (capacity 16383)
-// max lo 8051 (capacity 16383)
+// max hi 8135 (capacity 16383)
+// max lo 8134 (capacity 16383)
diff --git a/vendor/golang.org/x/net/publicsuffix/table_test.go b/vendor/golang.org/x/net/publicsuffix/table_test.go
index 9e921e718..5433f3b17 100644
--- a/vendor/golang.org/x/net/publicsuffix/table_test.go
+++ b/vendor/golang.org/x/net/publicsuffix/table_test.go
@@ -3914,8 +3914,15 @@ var rules = [...]string{
"edu.my",
"mil.my",
"name.my",
- "*.mz",
- "!teledata.mz",
+ "mz",
+ "ac.mz",
+ "adv.mz",
+ "co.mz",
+ "edu.mz",
+ "gov.mz",
+ "mil.mz",
+ "net.mz",
+ "org.mz",
"na",
"info.na",
"pro.na",
@@ -5842,7 +5849,6 @@ var rules = [...]string{
"lib.co.us",
"lib.ct.us",
"lib.dc.us",
- "lib.de.us",
"lib.fl.us",
"lib.ga.us",
"lib.gu.us",
@@ -6080,7 +6086,6 @@ var rules = [...]string{
"afamilycompany",
"afl",
"africa",
- "africamagic",
"agakhan",
"agency",
"aig",
@@ -6316,6 +6321,7 @@ var rules = [...]string{
"dabur",
"dad",
"dance",
+ "data",
"date",
"dating",
"datsun",
@@ -6348,6 +6354,7 @@ var rules = [...]string{
"diy",
"dnp",
"docs",
+ "doctor",
"dodge",
"dog",
"doha",
@@ -6355,7 +6362,6 @@ var rules = [...]string{
"dot",
"download",
"drive",
- "dstv",
"dtv",
"dubai",
"duck",
@@ -6364,9 +6370,11 @@ var rules = [...]string{
"dupont",
"durban",
"dvag",
+ "dvr",
"dwg",
"earth",
"eat",
+ "eco",
"edeka",
"education",
"email",
@@ -6428,7 +6436,6 @@ var rules = [...]string{
"flir",
"florist",
"flowers",
- "flsmidth",
"fly",
"foo",
"food",
@@ -6493,12 +6500,12 @@ var rules = [...]string{
"google",
"gop",
"got",
- "gotv",
"grainger",
"graphics",
"gratis",
"green",
"gripe",
+ "grocery",
"group",
"guardian",
"gucci",
@@ -6620,7 +6627,6 @@ var rules = [...]string{
"krd",
"kred",
"kuokgroup",
- "kyknet",
"kyoto",
"lacaixa",
"ladbrokes",
@@ -6689,6 +6695,7 @@ var rules = [...]string{
"man",
"management",
"mango",
+ "map",
"market",
"marketing",
"markets",
@@ -6709,6 +6716,7 @@ var rules = [...]string{
"men",
"menu",
"meo",
+ "merckmsd",
"metlife",
"miami",
"microsoft",
@@ -6719,7 +6727,7 @@ var rules = [...]string{
"mlb",
"mls",
"mma",
- "mnet",
+ "mobile",
"mobily",
"moda",
"moe",
@@ -6742,14 +6750,11 @@ var rules = [...]string{
"mtn",
"mtpc",
"mtr",
- "multichoice",
"mutual",
"mutuelle",
- "mzansimagic",
"nab",
"nadex",
"nagoya",
- "naspers",
"nationwide",
"natura",
"navy",
@@ -6821,12 +6826,13 @@ var rules = [...]string{
"party",
"passagens",
"pay",
- "payu",
"pccw",
"pet",
"pfizer",
"pharmacy",
+ "phd",
"philips",
+ "phone",
"photo",
"photography",
"photos",
@@ -6872,6 +6878,7 @@ var rules = [...]string{
"quest",
"qvc",
"racing",
+ "radio",
"raid",
"read",
"realestate",
@@ -6946,6 +6953,7 @@ var rules = [...]string{
"scjohnson",
"scor",
"scot",
+ "search",
"seat",
"secure",
"security",
@@ -7017,7 +7025,6 @@ var rules = [...]string{
"study",
"style",
"sucks",
- "supersport",
"supplies",
"supply",
"support",
@@ -7284,6 +7291,7 @@ var rules = [...]string{
"beep.pl",
"*.compute.estate",
"*.alces.network",
+ "*.alwaysdata.net",
"cloudfront.net",
"compute.amazonaws.com",
"ap-northeast-1.compute.amazonaws.com",
@@ -7330,6 +7338,7 @@ var rules = [...]string{
"myfritz.net",
"backplaneapp.io",
"betainabox.com",
+ "bnr.la",
"boxfuse.io",
"browsersafetymark.io",
"mycd.eu",
@@ -7379,6 +7388,17 @@ var rules = [...]string{
"r.cdn77.net",
"rsc.cdn77.org",
"ssl.origin.cdn77-secure.org",
+ "cloudns.asia",
+ "cloudns.biz",
+ "cloudns.club",
+ "cloudns.cc",
+ "cloudns.eu",
+ "cloudns.in",
+ "cloudns.info",
+ "cloudns.org",
+ "cloudns.pro",
+ "cloudns.pw",
+ "cloudns.us",
"co.nl",
"co.no",
"*.platform.sh",
@@ -7758,6 +7778,9 @@ var rules = [...]string{
"fbxos.fr",
"freebox-os.fr",
"freeboxos.fr",
+ "futuremailing.at",
+ "*.ex.ortsinfo.at",
+ "*.kunden.ortsinfo.at",
"service.gov.uk",
"github.io",
"githubusercontent.com",
@@ -7768,6 +7791,8 @@ var rules = [...]string{
"*.githubcloudusercontent.com",
"gitlab.io",
"ro.com",
+ "ro.im",
+ "shop.ro",
"goip.de",
"*.0emm.com",
"appspot.com",
@@ -7850,6 +7875,7 @@ var rules = [...]string{
"googleapis.com",
"googlecode.com",
"pagespeedmobilizer.com",
+ "publishproxy.com",
"withgoogle.com",
"withyoutube.com",
"hashbang.sh",
@@ -7860,6 +7886,40 @@ var rules = [...]string{
"iki.fi",
"biz.at",
"info.at",
+ "ac.leg.br",
+ "al.leg.br",
+ "am.leg.br",
+ "ap.leg.br",
+ "ba.leg.br",
+ "ce.leg.br",
+ "df.leg.br",
+ "es.leg.br",
+ "go.leg.br",
+ "ma.leg.br",
+ "mg.leg.br",
+ "ms.leg.br",
+ "mt.leg.br",
+ "pa.leg.br",
+ "pb.leg.br",
+ "pe.leg.br",
+ "pi.leg.br",
+ "pr.leg.br",
+ "rj.leg.br",
+ "rn.leg.br",
+ "ro.leg.br",
+ "rr.leg.br",
+ "rs.leg.br",
+ "sc.leg.br",
+ "se.leg.br",
+ "sp.leg.br",
+ "to.leg.br",
+ "*.triton.zone",
+ "*.cns.joyent.com",
+ "js.org",
+ "keymachine.de",
+ "knightpoint.systems",
+ "co.krd",
+ "edu.krd",
"*.magentosite.cloud",
"meteorapp.com",
"eu.meteorapp.com",
@@ -7960,6 +8020,7 @@ var rules = [...]string{
"zapto.org",
"nyc.mn",
"nid.io",
+ "opencraft.hosting",
"operaunite.com",
"outsystemscloud.com",
"ownprovider.com",
@@ -7977,6 +8038,7 @@ var rules = [...]string{
"mypep.link",
"xen.prgmr.com",
"priv.at",
+ "protonet.io",
"chirurgiens-dentistes-en-france.fr",
"qa2.com",
"dev-myqnapcloud.com",
@@ -7986,6 +8048,9 @@ var rules = [...]string{
"rackmaze.net",
"rhcloud.com",
"hzc.io",
+ "wellbeingzone.eu",
+ "ptplus.fit",
+ "wellbeingzone.co.uk",
"sandcats.io",
"logoip.de",
"logoip.com",
@@ -8017,6 +8082,7 @@ var rules = [...]string{
"i234.me",
"myds.me",
"synology.me",
+ "taifun-dns.de",
"gda.pl",
"gdansk.pl",
"gdynia.pl",
@@ -8024,12 +8090,17 @@ var rules = [...]string{
"sopot.pl",
"bloxcms.com",
"townnews-staging.com",
+ "*.transurl.be",
+ "*.transurl.eu",
+ "*.transurl.nl",
"tuxfamily.org",
"hk.com",
"hk.org",
"ltd.hk",
"inc.hk",
+ "lib.de.us",
"router.management",
+ "wmflabs.org",
"yolasite.com",
"za.net",
"za.org",
@@ -8066,7 +8137,6 @@ var nodeLabels = [...]string{
"afamilycompany",
"afl",
"africa",
- "africamagic",
"ag",
"agakhan",
"agency",
@@ -8359,6 +8429,7 @@ var nodeLabels = [...]string{
"dabur",
"dad",
"dance",
+ "data",
"date",
"dating",
"datsun",
@@ -8396,6 +8467,7 @@ var nodeLabels = [...]string{
"dnp",
"do",
"docs",
+ "doctor",
"dodge",
"dog",
"doha",
@@ -8403,7 +8475,6 @@ var nodeLabels = [...]string{
"dot",
"download",
"drive",
- "dstv",
"dtv",
"dubai",
"duck",
@@ -8412,11 +8483,13 @@ var nodeLabels = [...]string{
"dupont",
"durban",
"dvag",
+ "dvr",
"dwg",
"dz",
"earth",
"eat",
"ec",
+ "eco",
"edeka",
"edu",
"education",
@@ -8488,7 +8561,6 @@ var nodeLabels = [...]string{
"flir",
"florist",
"flowers",
- "flsmidth",
"fly",
"fm",
"fo",
@@ -8567,7 +8639,6 @@ var nodeLabels = [...]string{
"google",
"gop",
"got",
- "gotv",
"gov",
"gp",
"gq",
@@ -8577,6 +8648,7 @@ var nodeLabels = [...]string{
"gratis",
"green",
"gripe",
+ "grocery",
"group",
"gs",
"gt",
@@ -8736,7 +8808,6 @@ var nodeLabels = [...]string{
"kuokgroup",
"kw",
"ky",
- "kyknet",
"kyoto",
"kz",
"la",
@@ -8818,6 +8889,7 @@ var nodeLabels = [...]string{
"man",
"management",
"mango",
+ "map",
"market",
"marketing",
"markets",
@@ -8841,6 +8913,7 @@ var nodeLabels = [...]string{
"men",
"menu",
"meo",
+ "merckmsd",
"metlife",
"mg",
"mh",
@@ -8858,9 +8931,9 @@ var nodeLabels = [...]string{
"mm",
"mma",
"mn",
- "mnet",
"mo",
"mobi",
+ "mobile",
"mobily",
"moda",
"moe",
@@ -8889,7 +8962,6 @@ var nodeLabels = [...]string{
"mtpc",
"mtr",
"mu",
- "multichoice",
"museum",
"mutual",
"mutuelle",
@@ -8898,13 +8970,11 @@ var nodeLabels = [...]string{
"mx",
"my",
"mz",
- "mzansimagic",
"na",
"nab",
"nadex",
"nagoya",
"name",
- "naspers",
"nationwide",
"natura",
"navy",
@@ -8991,7 +9061,6 @@ var nodeLabels = [...]string{
"party",
"passagens",
"pay",
- "payu",
"pccw",
"pe",
"pet",
@@ -9000,7 +9069,9 @@ var nodeLabels = [...]string{
"pg",
"ph",
"pharmacy",
+ "phd",
"philips",
+ "phone",
"photo",
"photography",
"photos",
@@ -9058,6 +9129,7 @@ var nodeLabels = [...]string{
"quest",
"qvc",
"racing",
+ "radio",
"raid",
"re",
"read",
@@ -9142,6 +9214,7 @@ var nodeLabels = [...]string{
"scot",
"sd",
"se",
+ "search",
"seat",
"secure",
"security",
@@ -9225,7 +9298,6 @@ var nodeLabels = [...]string{
"style",
"su",
"sucks",
- "supersport",
"supplies",
"supply",
"support",
@@ -9735,14 +9807,19 @@ var nodeLabels = [...]string{
"uri",
"urn",
"gov",
+ "cloudns",
"ac",
"biz",
"co",
+ "futuremailing",
"gv",
"info",
"or",
+ "ortsinfo",
"priv",
"blogspot",
+ "ex",
+ "kunden",
"act",
"asn",
"com",
@@ -9807,6 +9884,7 @@ var nodeLabels = [...]string{
"tv",
"ac",
"blogspot",
+ "transurl",
"gov",
"0",
"1",
@@ -9855,6 +9933,7 @@ var nodeLabels = [...]string{
"edu",
"or",
"org",
+ "cloudns",
"dscloud",
"dyndns",
"for-better",
@@ -9955,6 +10034,33 @@ var nodeLabels = [...]string{
"wiki",
"zlg",
"blogspot",
+ "ac",
+ "al",
+ "am",
+ "ap",
+ "ba",
+ "ce",
+ "df",
+ "es",
+ "go",
+ "ma",
+ "mg",
+ "ms",
+ "mt",
+ "pa",
+ "pb",
+ "pe",
+ "pi",
+ "pr",
+ "rj",
+ "rn",
+ "ro",
+ "rr",
+ "rs",
+ "sc",
+ "se",
+ "sp",
+ "to",
"com",
"edu",
"gov",
@@ -9996,6 +10102,7 @@ var nodeLabels = [...]string{
"qc",
"sk",
"yk",
+ "cloudns",
"fantasyleague",
"ftpaccess",
"game-server",
@@ -10027,6 +10134,7 @@ var nodeLabels = [...]string{
"gov",
"mil",
"magentosite",
+ "cloudns",
"co",
"com",
"gov",
@@ -10287,6 +10395,7 @@ var nodeLabels = [...]string{
"isa-geek",
"isa-hockeynut",
"issmarterthanyou",
+ "joyent",
"jpn",
"kr",
"likes-pie",
@@ -10315,6 +10424,7 @@ var nodeLabels = [...]string{
"pgfog",
"point2this",
"prgmr",
+ "publishproxy",
"qa2",
"qc",
"quicksytes",
@@ -10406,6 +10516,7 @@ var nodeLabels = [...]string{
"api",
"ext",
"gist",
+ "cns",
"eu",
"xen",
"ac",
@@ -10453,9 +10564,11 @@ var nodeLabels = [...]string{
"goip",
"isteingeek",
"istmein",
+ "keymachine",
"lebtimnetz",
"leitungsen",
"logoip",
+ "taifun-dns",
"traeumtgerade",
"biz",
"blogspot",
@@ -10534,11 +10647,15 @@ var nodeLabels = [...]string{
"name",
"net",
"org",
+ "cloudns",
"mycd",
+ "transurl",
+ "wellbeingzone",
"aland",
"blogspot",
"dy",
"iki",
+ "ptplus",
"aeroport",
"assedic",
"asso",
@@ -10655,6 +10772,7 @@ var nodeLabels = [...]string{
"mil",
"net",
"org",
+ "opencraft",
"blogspot",
"com",
"from",
@@ -10737,12 +10855,14 @@ var nodeLabels = [...]string{
"com",
"net",
"org",
+ "ro",
"tt",
"tv",
"ltd",
"plc",
"ac",
"blogspot",
+ "cloudns",
"co",
"edu",
"firm",
@@ -10756,6 +10876,7 @@ var nodeLabels = [...]string{
"res",
"barrel-of-knowledge",
"barrell-of-knowledge",
+ "cloudns",
"dvrcam",
"dyndns",
"for-our",
@@ -10782,6 +10903,7 @@ var nodeLabels = [...]string{
"ngrok",
"nid",
"pantheonsite",
+ "protonet",
"sandcats",
"spacekit",
"com",
@@ -13052,6 +13174,8 @@ var nodeLabels = [...]string{
"sc",
"seoul",
"ulsan",
+ "co",
+ "edu",
"com",
"edu",
"gov",
@@ -13063,6 +13187,7 @@ var nodeLabels = [...]string{
"mil",
"net",
"org",
+ "bnr",
"c",
"com",
"edu",
@@ -13804,7 +13929,14 @@ var nodeLabels = [...]string{
"name",
"net",
"org",
- "teledata",
+ "ac",
+ "adv",
+ "co",
+ "edu",
+ "gov",
+ "mil",
+ "net",
+ "org",
"ca",
"cc",
"co",
@@ -13827,6 +13959,7 @@ var nodeLabels = [...]string{
"forgot",
"forgot",
"asso",
+ "alwaysdata",
"at-band-camp",
"azure-mobile",
"azurewebsites",
@@ -13946,6 +14079,7 @@ var nodeLabels = [...]string{
"blogspot",
"bv",
"co",
+ "transurl",
"virtueeldomein",
"aa",
"aarborte",
@@ -14758,6 +14892,7 @@ var nodeLabels = [...]string{
"cdn77",
"cdn77-secure",
"certmgr",
+ "cloudns",
"collegefan",
"couchpotatofries",
"dnsalias",
@@ -14803,6 +14938,7 @@ var nodeLabels = [...]string{
"is-very-nice",
"is-very-sweet",
"isa-geek",
+ "js",
"kicks-ass",
"misconfused",
"mlbfan",
@@ -14828,6 +14964,7 @@ var nodeLabels = [...]string{
"ufcfan",
"us",
"webhop",
+ "wmflabs",
"za",
"zapto",
"c",
@@ -15172,6 +15309,7 @@ var nodeLabels = [...]string{
"acct",
"avocat",
"bar",
+ "cloudns",
"cpa",
"eng",
"jur",
@@ -15195,6 +15333,7 @@ var nodeLabels = [...]string{
"org",
"publ",
"belau",
+ "cloudns",
"co",
"ed",
"go",
@@ -15229,6 +15368,7 @@ var nodeLabels = [...]string{
"nt",
"org",
"rec",
+ "shop",
"store",
"tm",
"www",
@@ -15536,6 +15676,7 @@ var nodeLabels = [...]string{
"mil",
"net",
"org",
+ "knightpoint",
"ac",
"co",
"org",
@@ -15768,6 +15909,7 @@ var nodeLabels = [...]string{
"sch",
"blogspot",
"no-ip",
+ "wellbeingzone",
"service",
"ak",
"al",
@@ -15775,6 +15917,7 @@ var nodeLabels = [...]string{
"as",
"az",
"ca",
+ "cloudns",
"co",
"ct",
"dc",
@@ -16098,4 +16241,5 @@ var nodeLabels = [...]string{
"net",
"org",
"sch",
+ "triton",
}
diff --git a/vendor/golang.org/x/net/trace/trace.go b/vendor/golang.org/x/net/trace/trace.go
index d860fccf9..ecd766eb7 100644
--- a/vendor/golang.org/x/net/trace/trace.go
+++ b/vendor/golang.org/x/net/trace/trace.go
@@ -91,7 +91,7 @@ var DebugUseAfterFinish = false
// It returns two bools; the first indicates whether the page may be viewed at all,
// and the second indicates whether sensitive events will be shown.
//
-// AuthRequest may be replaced by a program to customise its authorisation requirements.
+// AuthRequest may be replaced by a program to customize its authorization requirements.
//
// The default AuthRequest function returns (true, true) if and only if the request
// comes from localhost/127.0.0.1/[::1].
@@ -333,7 +333,8 @@ func New(family, title string) Trace {
tr.ref()
tr.Family, tr.Title = family, title
tr.Start = time.Now()
- tr.events = make([]event, 0, maxEventsPerTrace)
+ tr.maxEvents = maxEventsPerTrace
+ tr.events = tr.eventsBuf[:0]
activeMu.RLock()
s := activeTraces[tr.Family]
@@ -650,8 +651,8 @@ type event struct {
Elapsed time.Duration // since previous event in trace
NewDay bool // whether this event is on a different day to the previous event
Recyclable bool // whether this event was passed via LazyLog
- What interface{} // string or fmt.Stringer
Sensitive bool // whether this event contains sensitive information
+ What interface{} // string or fmt.Stringer
}
// WhenString returns a string representation of the elapsed time of the event.
@@ -692,14 +693,17 @@ type trace struct {
IsError bool
// Append-only sequence of events (modulo discards).
- mu sync.RWMutex
- events []event
+ mu sync.RWMutex
+ events []event
+ maxEvents int
refs int32 // how many buckets this is in
recycler func(interface{})
disc discarded // scratch space to avoid allocation
finishStack []byte // where finish was called, if DebugUseAfterFinish is set
+
+ eventsBuf [4]event // preallocated buffer in case we only log a few events
}
func (tr *trace) reset() {
@@ -711,11 +715,15 @@ func (tr *trace) reset() {
tr.traceID = 0
tr.spanID = 0
tr.IsError = false
+ tr.maxEvents = 0
tr.events = nil
tr.refs = 0
tr.recycler = nil
tr.disc = 0
tr.finishStack = nil
+ for i := range tr.eventsBuf {
+ tr.eventsBuf[i] = event{}
+ }
}
// delta returns the elapsed time since the last event or the trace start,
@@ -744,7 +752,7 @@ func (tr *trace) addEvent(x interface{}, recyclable, sensitive bool) {
and very unlikely to be the fault of this code.
The most likely scenario is that some code elsewhere is using
- a requestz.Trace after its Finish method is called.
+ a trace.Trace after its Finish method is called.
You can temporarily set the DebugUseAfterFinish var
to help discover where that is; do not leave that var set,
since it makes this package much less efficient.
@@ -753,11 +761,11 @@ func (tr *trace) addEvent(x interface{}, recyclable, sensitive bool) {
e := event{When: time.Now(), What: x, Recyclable: recyclable, Sensitive: sensitive}
tr.mu.Lock()
e.Elapsed, e.NewDay = tr.delta(e.When)
- if len(tr.events) < cap(tr.events) {
+ if len(tr.events) < tr.maxEvents {
tr.events = append(tr.events, e)
} else {
// Discard the middle events.
- di := int((cap(tr.events) - 1) / 2)
+ di := int((tr.maxEvents - 1) / 2)
if d, ok := tr.events[di].What.(*discarded); ok {
(*d)++
} else {
@@ -777,7 +785,7 @@ func (tr *trace) addEvent(x interface{}, recyclable, sensitive bool) {
go tr.recycler(tr.events[di+1].What)
}
copy(tr.events[di+1:], tr.events[di+2:])
- tr.events[cap(tr.events)-1] = e
+ tr.events[tr.maxEvents-1] = e
}
tr.mu.Unlock()
}
@@ -803,7 +811,7 @@ func (tr *trace) SetTraceInfo(traceID, spanID uint64) {
func (tr *trace) SetMaxEvents(m int) {
// Always keep at least three events: first, discarded count, last.
if len(tr.events) == 0 && m > 3 {
- tr.events = make([]event, 0, m)
+ tr.maxEvents = m
}
}
diff --git a/vendor/golang.org/x/net/trace/trace_test.go b/vendor/golang.org/x/net/trace/trace_test.go
index 14d7c237a..c6aad86c2 100644
--- a/vendor/golang.org/x/net/trace/trace_test.go
+++ b/vendor/golang.org/x/net/trace/trace_test.go
@@ -69,3 +69,96 @@ func TestAuthRequest(t *testing.T) {
}
}
}
+
+func benchmarkTrace(b *testing.B, maxEvents, numEvents int) {
+ numSpans := (b.N + numEvents + 1) / numEvents
+
+ for i := 0; i < numSpans; i++ {
+ tr := New("test", "test")
+ tr.SetMaxEvents(maxEvents)
+ for j := 0; j < numEvents; j++ {
+ tr.LazyPrintf("%d", j)
+ }
+ tr.Finish()
+ }
+}
+
+func BenchmarkTrace_Default_2(b *testing.B) {
+ benchmarkTrace(b, 0, 2)
+}
+
+func BenchmarkTrace_Default_10(b *testing.B) {
+ benchmarkTrace(b, 0, 10)
+}
+
+func BenchmarkTrace_Default_100(b *testing.B) {
+ benchmarkTrace(b, 0, 100)
+}
+
+func BenchmarkTrace_Default_1000(b *testing.B) {
+ benchmarkTrace(b, 0, 1000)
+}
+
+func BenchmarkTrace_Default_10000(b *testing.B) {
+ benchmarkTrace(b, 0, 10000)
+}
+
+func BenchmarkTrace_10_2(b *testing.B) {
+ benchmarkTrace(b, 10, 2)
+}
+
+func BenchmarkTrace_10_10(b *testing.B) {
+ benchmarkTrace(b, 10, 10)
+}
+
+func BenchmarkTrace_10_100(b *testing.B) {
+ benchmarkTrace(b, 10, 100)
+}
+
+func BenchmarkTrace_10_1000(b *testing.B) {
+ benchmarkTrace(b, 10, 1000)
+}
+
+func BenchmarkTrace_10_10000(b *testing.B) {
+ benchmarkTrace(b, 10, 10000)
+}
+
+func BenchmarkTrace_100_2(b *testing.B) {
+ benchmarkTrace(b, 100, 2)
+}
+
+func BenchmarkTrace_100_10(b *testing.B) {
+ benchmarkTrace(b, 100, 10)
+}
+
+func BenchmarkTrace_100_100(b *testing.B) {
+ benchmarkTrace(b, 100, 100)
+}
+
+func BenchmarkTrace_100_1000(b *testing.B) {
+ benchmarkTrace(b, 100, 1000)
+}
+
+func BenchmarkTrace_100_10000(b *testing.B) {
+ benchmarkTrace(b, 100, 10000)
+}
+
+func BenchmarkTrace_1000_2(b *testing.B) {
+ benchmarkTrace(b, 1000, 2)
+}
+
+func BenchmarkTrace_1000_10(b *testing.B) {
+ benchmarkTrace(b, 1000, 10)
+}
+
+func BenchmarkTrace_1000_100(b *testing.B) {
+ benchmarkTrace(b, 1000, 100)
+}
+
+func BenchmarkTrace_1000_1000(b *testing.B) {
+ benchmarkTrace(b, 1000, 1000)
+}
+
+func BenchmarkTrace_1000_10000(b *testing.B) {
+ benchmarkTrace(b, 1000, 10000)
+}
diff --git a/vendor/golang.org/x/net/webdav/file.go b/vendor/golang.org/x/net/webdav/file.go
index 3d95c6cba..748118dd3 100644
--- a/vendor/golang.org/x/net/webdav/file.go
+++ b/vendor/golang.org/x/net/webdav/file.go
@@ -14,6 +14,8 @@ import (
"strings"
"sync"
"time"
+
+ "golang.org/x/net/context"
)
// slashClean is equivalent to but slightly more efficient than
@@ -36,11 +38,11 @@ func slashClean(name string) string {
// might apply". In particular, whether or not renaming a file or directory
// overwriting another existing file or directory is an error is OS-dependent.
type FileSystem interface {
- Mkdir(name string, perm os.FileMode) error
- OpenFile(name string, flag int, perm os.FileMode) (File, error)
- RemoveAll(name string) error
- Rename(oldName, newName string) error
- Stat(name string) (os.FileInfo, error)
+ Mkdir(ctx context.Context, name string, perm os.FileMode) error
+ OpenFile(ctx context.Context, name string, flag int, perm os.FileMode) (File, error)
+ RemoveAll(ctx context.Context, name string) error
+ Rename(ctx context.Context, oldName, newName string) error
+ Stat(ctx context.Context, name string) (os.FileInfo, error)
}
// A File is returned by a FileSystem's OpenFile method and can be served by a
@@ -76,14 +78,14 @@ func (d Dir) resolve(name string) string {
return filepath.Join(dir, filepath.FromSlash(slashClean(name)))
}
-func (d Dir) Mkdir(name string, perm os.FileMode) error {
+func (d Dir) Mkdir(ctx context.Context, name string, perm os.FileMode) error {
if name = d.resolve(name); name == "" {
return os.ErrNotExist
}
return os.Mkdir(name, perm)
}
-func (d Dir) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
+func (d Dir) OpenFile(ctx context.Context, name string, flag int, perm os.FileMode) (File, error) {
if name = d.resolve(name); name == "" {
return nil, os.ErrNotExist
}
@@ -94,7 +96,7 @@ func (d Dir) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
return f, nil
}
-func (d Dir) RemoveAll(name string) error {
+func (d Dir) RemoveAll(ctx context.Context, name string) error {
if name = d.resolve(name); name == "" {
return os.ErrNotExist
}
@@ -105,7 +107,7 @@ func (d Dir) RemoveAll(name string) error {
return os.RemoveAll(name)
}
-func (d Dir) Rename(oldName, newName string) error {
+func (d Dir) Rename(ctx context.Context, oldName, newName string) error {
if oldName = d.resolve(oldName); oldName == "" {
return os.ErrNotExist
}
@@ -119,7 +121,7 @@ func (d Dir) Rename(oldName, newName string) error {
return os.Rename(oldName, newName)
}
-func (d Dir) Stat(name string) (os.FileInfo, error) {
+func (d Dir) Stat(ctx context.Context, name string) (os.FileInfo, error) {
if name = d.resolve(name); name == "" {
return nil, os.ErrNotExist
}
@@ -237,7 +239,7 @@ func (fs *memFS) find(op, fullname string) (parent *memFSNode, frag string, err
return parent, frag, err
}
-func (fs *memFS) Mkdir(name string, perm os.FileMode) error {
+func (fs *memFS) Mkdir(ctx context.Context, name string, perm os.FileMode) error {
fs.mu.Lock()
defer fs.mu.Unlock()
@@ -260,7 +262,7 @@ func (fs *memFS) Mkdir(name string, perm os.FileMode) error {
return nil
}
-func (fs *memFS) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
+func (fs *memFS) OpenFile(ctx context.Context, name string, flag int, perm os.FileMode) (File, error) {
fs.mu.Lock()
defer fs.mu.Unlock()
@@ -314,7 +316,7 @@ func (fs *memFS) OpenFile(name string, flag int, perm os.FileMode) (File, error)
}, nil
}
-func (fs *memFS) RemoveAll(name string) error {
+func (fs *memFS) RemoveAll(ctx context.Context, name string) error {
fs.mu.Lock()
defer fs.mu.Unlock()
@@ -330,7 +332,7 @@ func (fs *memFS) RemoveAll(name string) error {
return nil
}
-func (fs *memFS) Rename(oldName, newName string) error {
+func (fs *memFS) Rename(ctx context.Context, oldName, newName string) error {
fs.mu.Lock()
defer fs.mu.Unlock()
@@ -381,7 +383,7 @@ func (fs *memFS) Rename(oldName, newName string) error {
return nil
}
-func (fs *memFS) Stat(name string) (os.FileInfo, error) {
+func (fs *memFS) Stat(ctx context.Context, name string) (os.FileInfo, error) {
fs.mu.Lock()
defer fs.mu.Unlock()
@@ -599,9 +601,9 @@ func (f *memFile) Write(p []byte) (int, error) {
// moveFiles moves files and/or directories from src to dst.
//
// See section 9.9.4 for when various HTTP status codes apply.
-func moveFiles(fs FileSystem, src, dst string, overwrite bool) (status int, err error) {
+func moveFiles(ctx context.Context, fs FileSystem, src, dst string, overwrite bool) (status int, err error) {
created := false
- if _, err := fs.Stat(dst); err != nil {
+ if _, err := fs.Stat(ctx, dst); err != nil {
if !os.IsNotExist(err) {
return http.StatusForbidden, err
}
@@ -611,13 +613,13 @@ func moveFiles(fs FileSystem, src, dst string, overwrite bool) (status int, err
// and the Overwrite header is "T", then prior to performing the move,
// the server must perform a DELETE with "Depth: infinity" on the
// destination resource.
- if err := fs.RemoveAll(dst); err != nil {
+ if err := fs.RemoveAll(ctx, dst); err != nil {
return http.StatusForbidden, err
}
} else {
return http.StatusPreconditionFailed, os.ErrExist
}
- if err := fs.Rename(src, dst); err != nil {
+ if err := fs.Rename(ctx, src, dst); err != nil {
return http.StatusForbidden, err
}
if created {
@@ -650,7 +652,7 @@ func copyProps(dst, src File) error {
// copyFiles copies files and/or directories from src to dst.
//
// See section 9.8.5 for when various HTTP status codes apply.
-func copyFiles(fs FileSystem, src, dst string, overwrite bool, depth int, recursion int) (status int, err error) {
+func copyFiles(ctx context.Context, fs FileSystem, src, dst string, overwrite bool, depth int, recursion int) (status int, err error) {
if recursion == 1000 {
return http.StatusInternalServerError, errRecursionTooDeep
}
@@ -659,7 +661,7 @@ func copyFiles(fs FileSystem, src, dst string, overwrite bool, depth int, recurs
// TODO: section 9.8.3 says that "Note that an infinite-depth COPY of /A/
// into /A/B/ could lead to infinite recursion if not handled correctly."
- srcFile, err := fs.OpenFile(src, os.O_RDONLY, 0)
+ srcFile, err := fs.OpenFile(ctx, src, os.O_RDONLY, 0)
if err != nil {
if os.IsNotExist(err) {
return http.StatusNotFound, err
@@ -677,7 +679,7 @@ func copyFiles(fs FileSystem, src, dst string, overwrite bool, depth int, recurs
srcPerm := srcStat.Mode() & os.ModePerm
created := false
- if _, err := fs.Stat(dst); err != nil {
+ if _, err := fs.Stat(ctx, dst); err != nil {
if os.IsNotExist(err) {
created = true
} else {
@@ -687,13 +689,13 @@ func copyFiles(fs FileSystem, src, dst string, overwrite bool, depth int, recurs
if !overwrite {
return http.StatusPreconditionFailed, os.ErrExist
}
- if err := fs.RemoveAll(dst); err != nil && !os.IsNotExist(err) {
+ if err := fs.RemoveAll(ctx, dst); err != nil && !os.IsNotExist(err) {
return http.StatusForbidden, err
}
}
if srcStat.IsDir() {
- if err := fs.Mkdir(dst, srcPerm); err != nil {
+ if err := fs.Mkdir(ctx, dst, srcPerm); err != nil {
return http.StatusForbidden, err
}
if depth == infiniteDepth {
@@ -705,7 +707,7 @@ func copyFiles(fs FileSystem, src, dst string, overwrite bool, depth int, recurs
name := c.Name()
s := path.Join(src, name)
d := path.Join(dst, name)
- cStatus, cErr := copyFiles(fs, s, d, overwrite, depth, recursion)
+ cStatus, cErr := copyFiles(ctx, fs, s, d, overwrite, depth, recursion)
if cErr != nil {
// TODO: MultiStatus.
return cStatus, cErr
@@ -714,7 +716,7 @@ func copyFiles(fs FileSystem, src, dst string, overwrite bool, depth int, recurs
}
} else {
- dstFile, err := fs.OpenFile(dst, os.O_RDWR|os.O_CREATE|os.O_TRUNC, srcPerm)
+ dstFile, err := fs.OpenFile(ctx, dst, os.O_RDWR|os.O_CREATE|os.O_TRUNC, srcPerm)
if err != nil {
if os.IsNotExist(err) {
return http.StatusConflict, err
@@ -747,7 +749,7 @@ func copyFiles(fs FileSystem, src, dst string, overwrite bool, depth int, recurs
// Allowed values for depth are 0, 1 or infiniteDepth. For each visited node,
// walkFS calls walkFn. If a visited file system node is a directory and
// walkFn returns filepath.SkipDir, walkFS will skip traversal of this node.
-func walkFS(fs FileSystem, depth int, name string, info os.FileInfo, walkFn filepath.WalkFunc) error {
+func walkFS(ctx context.Context, fs FileSystem, depth int, name string, info os.FileInfo, walkFn filepath.WalkFunc) error {
// This implementation is based on Walk's code in the standard path/filepath package.
err := walkFn(name, info, nil)
if err != nil {
@@ -764,7 +766,7 @@ func walkFS(fs FileSystem, depth int, name string, info os.FileInfo, walkFn file
}
// Read directory names.
- f, err := fs.OpenFile(name, os.O_RDONLY, 0)
+ f, err := fs.OpenFile(ctx, name, os.O_RDONLY, 0)
if err != nil {
return walkFn(name, info, err)
}
@@ -776,13 +778,13 @@ func walkFS(fs FileSystem, depth int, name string, info os.FileInfo, walkFn file
for _, fileInfo := range fileInfos {
filename := path.Join(name, fileInfo.Name())
- fileInfo, err := fs.Stat(filename)
+ fileInfo, err := fs.Stat(ctx, filename)
if err != nil {
if err := walkFn(filename, fileInfo, err); err != nil && err != filepath.SkipDir {
return err
}
} else {
- err = walkFS(fs, depth, filename, fileInfo, walkFn)
+ err = walkFS(ctx, fs, depth, filename, fileInfo, walkFn)
if err != nil {
if !fileInfo.IsDir() || err != filepath.SkipDir {
return err
diff --git a/vendor/golang.org/x/net/webdav/file_go1.6.go b/vendor/golang.org/x/net/webdav/file_go1.6.go
new file mode 100644
index 000000000..fa387700d
--- /dev/null
+++ b/vendor/golang.org/x/net/webdav/file_go1.6.go
@@ -0,0 +1,17 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build !go1.7
+
+package webdav
+
+import (
+ "net/http"
+
+ "golang.org/x/net/context"
+)
+
+func getContext(r *http.Request) context.Context {
+ return context.Background()
+}
diff --git a/vendor/golang.org/x/net/webdav/file_go1.7.go b/vendor/golang.org/x/net/webdav/file_go1.7.go
new file mode 100644
index 000000000..d1c3de832
--- /dev/null
+++ b/vendor/golang.org/x/net/webdav/file_go1.7.go
@@ -0,0 +1,16 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build go1.7
+
+package webdav
+
+import (
+ "context"
+ "net/http"
+)
+
+func getContext(r *http.Request) context.Context {
+ return r.Context()
+}
diff --git a/vendor/golang.org/x/net/webdav/file_test.go b/vendor/golang.org/x/net/webdav/file_test.go
index cbd0240ab..bfd96e193 100644
--- a/vendor/golang.org/x/net/webdav/file_test.go
+++ b/vendor/golang.org/x/net/webdav/file_test.go
@@ -18,6 +18,8 @@ import (
"strconv"
"strings"
"testing"
+
+ "golang.org/x/net/context"
)
func TestSlashClean(t *testing.T) {
@@ -195,13 +197,15 @@ func TestWalk(t *testing.T) {
}},
}
+ ctx := context.Background()
+
for _, tc := range testCases {
fs := NewMemFS().(*memFS)
parts := strings.Split(tc.dir, "/")
for p := 2; p < len(parts); p++ {
d := strings.Join(parts[:p], "/")
- if err := fs.Mkdir(d, 0666); err != nil {
+ if err := fs.Mkdir(ctx, d, 0666); err != nil {
t.Errorf("tc.dir=%q: mkdir: %q: %v", tc.dir, d, err)
}
}
@@ -231,14 +235,14 @@ func TestWalk(t *testing.T) {
// analogous to the Unix find command.
//
// The returned strings are not guaranteed to be in any particular order.
-func find(ss []string, fs FileSystem, name string) ([]string, error) {
- stat, err := fs.Stat(name)
+func find(ctx context.Context, ss []string, fs FileSystem, name string) ([]string, error) {
+ stat, err := fs.Stat(ctx, name)
if err != nil {
return nil, err
}
ss = append(ss, name)
if stat.IsDir() {
- f, err := fs.OpenFile(name, os.O_RDONLY, 0)
+ f, err := fs.OpenFile(ctx, name, os.O_RDONLY, 0)
if err != nil {
return nil, err
}
@@ -248,7 +252,7 @@ func find(ss []string, fs FileSystem, name string) ([]string, error) {
return nil, err
}
for _, c := range children {
- ss, err = find(ss, fs, path.Join(name, c.Name()))
+ ss, err = find(ctx, ss, fs, path.Join(name, c.Name()))
if err != nil {
return nil, err
}
@@ -403,6 +407,8 @@ func testFS(t *testing.T, fs FileSystem) {
"copy__ o=F d=∞ /d/y /d/x want errExist",
}
+ ctx := context.Background()
+
for i, tc := range testCases {
tc = strings.TrimSpace(tc)
j := strings.IndexByte(tc, ' ')
@@ -420,7 +426,7 @@ func testFS(t *testing.T, fs FileSystem) {
if len(parts) != 4 || parts[2] != "want" {
t.Fatalf("test case #%d %q: invalid write", i, tc)
}
- f, opErr := fs.OpenFile(parts[0], os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
+ f, opErr := fs.OpenFile(ctx, parts[0], os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
if got := errStr(opErr); got != parts[3] {
t.Fatalf("test case #%d %q: OpenFile: got %q (%v), want %q", i, tc, got, opErr, parts[3])
}
@@ -434,7 +440,7 @@ func testFS(t *testing.T, fs FileSystem) {
}
case "find":
- got, err := find(nil, fs, "/")
+ got, err := find(ctx, nil, fs, "/")
if err != nil {
t.Fatalf("test case #%d %q: find: %v", i, tc, err)
}
@@ -464,17 +470,17 @@ func testFS(t *testing.T, fs FileSystem) {
if parts[1] == "d=∞" {
depth = infiniteDepth
}
- _, opErr = copyFiles(fs, parts[2], parts[3], parts[0] == "o=T", depth, 0)
+ _, opErr = copyFiles(ctx, fs, parts[2], parts[3], parts[0] == "o=T", depth, 0)
case "mk-dir":
- opErr = fs.Mkdir(parts[0], 0777)
+ opErr = fs.Mkdir(ctx, parts[0], 0777)
case "move__":
- _, opErr = moveFiles(fs, parts[1], parts[2], parts[0] == "o=T")
+ _, opErr = moveFiles(ctx, fs, parts[1], parts[2], parts[0] == "o=T")
case "rm-all":
- opErr = fs.RemoveAll(parts[0])
+ opErr = fs.RemoveAll(ctx, parts[0])
case "stat":
var stat os.FileInfo
fileName := parts[0]
- if stat, opErr = fs.Stat(fileName); opErr == nil {
+ if stat, opErr = fs.Stat(ctx, fileName); opErr == nil {
if stat.IsDir() {
got = "dir"
} else {
@@ -526,9 +532,10 @@ func TestMemFS(t *testing.T) {
}
func TestMemFSRoot(t *testing.T) {
+ ctx := context.Background()
fs := NewMemFS()
for i := 0; i < 5; i++ {
- stat, err := fs.Stat("/")
+ stat, err := fs.Stat(ctx, "/")
if err != nil {
t.Fatalf("i=%d: Stat: %v", i, err)
}
@@ -536,7 +543,7 @@ func TestMemFSRoot(t *testing.T) {
t.Fatalf("i=%d: Stat.IsDir is false, want true", i)
}
- f, err := fs.OpenFile("/", os.O_RDONLY, 0)
+ f, err := fs.OpenFile(ctx, "/", os.O_RDONLY, 0)
if err != nil {
t.Fatalf("i=%d: OpenFile: %v", i, err)
}
@@ -553,19 +560,20 @@ func TestMemFSRoot(t *testing.T) {
t.Fatalf("i=%d: Write: got nil error, want non-nil", i)
}
- if err := fs.Mkdir(fmt.Sprintf("/dir%d", i), 0777); err != nil {
+ if err := fs.Mkdir(ctx, fmt.Sprintf("/dir%d", i), 0777); err != nil {
t.Fatalf("i=%d: Mkdir: %v", i, err)
}
}
}
func TestMemFileReaddir(t *testing.T) {
+ ctx := context.Background()
fs := NewMemFS()
- if err := fs.Mkdir("/foo", 0777); err != nil {
+ if err := fs.Mkdir(ctx, "/foo", 0777); err != nil {
t.Fatalf("Mkdir: %v", err)
}
readdir := func(count int) ([]os.FileInfo, error) {
- f, err := fs.OpenFile("/foo", os.O_RDONLY, 0)
+ f, err := fs.OpenFile(ctx, "/foo", os.O_RDONLY, 0)
if err != nil {
t.Fatalf("OpenFile: %v", err)
}
@@ -649,9 +657,11 @@ func TestMemFile(t *testing.T) {
"seek cur -99 want err",
}
+ ctx := context.Background()
+
const filename = "/foo"
fs := NewMemFS()
- f, err := fs.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
+ f, err := fs.OpenFile(ctx, filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
if err != nil {
t.Fatalf("OpenFile: %v", err)
}
@@ -745,7 +755,7 @@ func TestMemFile(t *testing.T) {
}
case "wantData":
- g, err := fs.OpenFile(filename, os.O_RDONLY, 0666)
+ g, err := fs.OpenFile(ctx, filename, os.O_RDONLY, 0666)
if err != nil {
t.Fatalf("test case #%d %q: OpenFile: %v", i, tc, err)
}
@@ -771,7 +781,7 @@ func TestMemFile(t *testing.T) {
if err != nil {
t.Fatalf("test case #%d %q: invalid size %q", i, tc, arg)
}
- fi, err := fs.Stat(filename)
+ fi, err := fs.Stat(ctx, filename)
if err != nil {
t.Fatalf("test case #%d %q: Stat: %v", i, tc, err)
}
@@ -789,8 +799,9 @@ func TestMemFileWriteAllocs(t *testing.T) {
if runtime.Compiler == "gccgo" {
t.Skip("gccgo allocates here")
}
+ ctx := context.Background()
fs := NewMemFS()
- f, err := fs.OpenFile("/xxx", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
+ f, err := fs.OpenFile(ctx, "/xxx", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
if err != nil {
t.Fatalf("OpenFile: %v", err)
}
@@ -812,6 +823,7 @@ func TestMemFileWriteAllocs(t *testing.T) {
}
func BenchmarkMemFileWrite(b *testing.B) {
+ ctx := context.Background()
fs := NewMemFS()
xxx := make([]byte, 1024)
for i := range xxx {
@@ -820,7 +832,7 @@ func BenchmarkMemFileWrite(b *testing.B) {
b.ResetTimer()
for i := 0; i < b.N; i++ {
- f, err := fs.OpenFile("/xxx", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
+ f, err := fs.OpenFile(ctx, "/xxx", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
if err != nil {
b.Fatalf("OpenFile: %v", err)
}
@@ -830,16 +842,17 @@ func BenchmarkMemFileWrite(b *testing.B) {
if err := f.Close(); err != nil {
b.Fatalf("Close: %v", err)
}
- if err := fs.RemoveAll("/xxx"); err != nil {
+ if err := fs.RemoveAll(ctx, "/xxx"); err != nil {
b.Fatalf("RemoveAll: %v", err)
}
}
}
func TestCopyMoveProps(t *testing.T) {
+ ctx := context.Background()
fs := NewMemFS()
create := func(name string) error {
- f, err := fs.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
+ f, err := fs.OpenFile(ctx, name, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
if err != nil {
return err
}
@@ -851,7 +864,7 @@ func TestCopyMoveProps(t *testing.T) {
return cErr
}
patch := func(name string, patches ...Proppatch) error {
- f, err := fs.OpenFile(name, os.O_RDWR, 0666)
+ f, err := fs.OpenFile(ctx, name, os.O_RDWR, 0666)
if err != nil {
return err
}
@@ -863,7 +876,7 @@ func TestCopyMoveProps(t *testing.T) {
return cErr
}
props := func(name string) (map[xml.Name]Property, error) {
- f, err := fs.OpenFile(name, os.O_RDWR, 0666)
+ f, err := fs.OpenFile(ctx, name, os.O_RDWR, 0666)
if err != nil {
return nil, err
}
@@ -901,10 +914,10 @@ func TestCopyMoveProps(t *testing.T) {
if err := patch("/src", Proppatch{Props: []Property{p0, p1}}); err != nil {
t.Fatalf("patch /src +p0 +p1: %v", err)
}
- if _, err := copyFiles(fs, "/src", "/tmp", true, infiniteDepth, 0); err != nil {
+ if _, err := copyFiles(ctx, fs, "/src", "/tmp", true, infiniteDepth, 0); err != nil {
t.Fatalf("copyFiles /src /tmp: %v", err)
}
- if _, err := moveFiles(fs, "/tmp", "/dst", true); err != nil {
+ if _, err := moveFiles(ctx, fs, "/tmp", "/dst", true); err != nil {
t.Fatalf("moveFiles /tmp /dst: %v", err)
}
if err := patch("/src", Proppatch{Props: []Property{p0}, Remove: true}); err != nil {
@@ -1099,6 +1112,7 @@ func TestWalkFS(t *testing.T) {
"/a/b/z",
},
}}
+ ctx := context.Background()
for _, tc := range testCases {
fs, err := buildTestFS(tc.buildfs)
if err != nil {
@@ -1115,11 +1129,11 @@ func TestWalkFS(t *testing.T) {
got = append(got, path)
return nil
}
- fi, err := fs.Stat(tc.startAt)
+ fi, err := fs.Stat(ctx, tc.startAt)
if err != nil {
t.Fatalf("%s: cannot stat: %v", tc.desc, err)
}
- err = walkFS(fs, tc.depth, tc.startAt, fi, traceFn)
+ err = walkFS(ctx, fs, tc.depth, tc.startAt, fi, traceFn)
if err != nil {
t.Errorf("%s:\ngot error %v, want nil", tc.desc, err)
continue
@@ -1136,23 +1150,24 @@ func TestWalkFS(t *testing.T) {
func buildTestFS(buildfs []string) (FileSystem, error) {
// TODO: Could this be merged with the build logic in TestFS?
+ ctx := context.Background()
fs := NewMemFS()
for _, b := range buildfs {
op := strings.Split(b, " ")
switch op[0] {
case "mkdir":
- err := fs.Mkdir(op[1], os.ModeDir|0777)
+ err := fs.Mkdir(ctx, op[1], os.ModeDir|0777)
if err != nil {
return nil, err
}
case "touch":
- f, err := fs.OpenFile(op[1], os.O_RDWR|os.O_CREATE, 0666)
+ f, err := fs.OpenFile(ctx, op[1], os.O_RDWR|os.O_CREATE, 0666)
if err != nil {
return nil, err
}
f.Close()
case "write":
- f, err := fs.OpenFile(op[1], os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
+ f, err := fs.OpenFile(ctx, op[1], os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
if err != nil {
return nil, err
}
diff --git a/vendor/golang.org/x/net/webdav/internal/xml/example_test.go b/vendor/golang.org/x/net/webdav/internal/xml/example_test.go
index becedd583..21b48dea5 100644
--- a/vendor/golang.org/x/net/webdav/internal/xml/example_test.go
+++ b/vendor/golang.org/x/net/webdav/internal/xml/example_test.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/webdav/internal/xml/marshal_test.go b/vendor/golang.org/x/net/webdav/internal/xml/marshal_test.go
index 5dc78e748..226cfd013 100644
--- a/vendor/golang.org/x/net/webdav/internal/xml/marshal_test.go
+++ b/vendor/golang.org/x/net/webdav/internal/xml/marshal_test.go
@@ -1868,7 +1868,7 @@ func TestRace9796(t *testing.T) {
for i := 0; i < 2; i++ {
wg.Add(1)
go func() {
- Marshal(B{[]A{A{}}})
+ Marshal(B{[]A{{}}})
wg.Done()
}()
}
diff --git a/vendor/golang.org/x/net/webdav/internal/xml/read.go b/vendor/golang.org/x/net/webdav/internal/xml/read.go
index 75b9f2ba1..3ece08c49 100644
--- a/vendor/golang.org/x/net/webdav/internal/xml/read.go
+++ b/vendor/golang.org/x/net/webdav/internal/xml/read.go
@@ -1,4 +1,4 @@
-// Copyright 2009 The Go Authors. All rights reserved.
+// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/webdav/internal/xml/typeinfo.go b/vendor/golang.org/x/net/webdav/internal/xml/typeinfo.go
index c9a6421f2..fdde288bc 100644
--- a/vendor/golang.org/x/net/webdav/internal/xml/typeinfo.go
+++ b/vendor/golang.org/x/net/webdav/internal/xml/typeinfo.go
@@ -1,4 +1,4 @@
-// Copyright 2011 The Go Authors. All rights reserved.
+// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/webdav/internal/xml/xml_test.go b/vendor/golang.org/x/net/webdav/internal/xml/xml_test.go
index 312a7c98a..af4cf8ea8 100644
--- a/vendor/golang.org/x/net/webdav/internal/xml/xml_test.go
+++ b/vendor/golang.org/x/net/webdav/internal/xml/xml_test.go
@@ -1,4 +1,4 @@
-// Copyright 2009 The Go Authors. All rights reserved.
+// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/webdav/prop.go b/vendor/golang.org/x/net/webdav/prop.go
index 145946637..e36a3b31d 100644
--- a/vendor/golang.org/x/net/webdav/prop.go
+++ b/vendor/golang.org/x/net/webdav/prop.go
@@ -5,6 +5,7 @@
package webdav
import (
+ "bytes"
"encoding/xml"
"fmt"
"io"
@@ -13,6 +14,8 @@ import (
"os"
"path/filepath"
"strconv"
+
+ "golang.org/x/net/context"
)
// Proppatch describes a property update instruction as defined in RFC 4918.
@@ -100,23 +103,23 @@ type DeadPropsHolder interface {
var liveProps = map[xml.Name]struct {
// findFn implements the propfind function of this property. If nil,
// it indicates a hidden property.
- findFn func(FileSystem, LockSystem, string, os.FileInfo) (string, error)
+ findFn func(context.Context, FileSystem, LockSystem, string, os.FileInfo) (string, error)
// dir is true if the property applies to directories.
dir bool
}{
- xml.Name{Space: "DAV:", Local: "resourcetype"}: {
+ {Space: "DAV:", Local: "resourcetype"}: {
findFn: findResourceType,
dir: true,
},
- xml.Name{Space: "DAV:", Local: "displayname"}: {
+ {Space: "DAV:", Local: "displayname"}: {
findFn: findDisplayName,
dir: true,
},
- xml.Name{Space: "DAV:", Local: "getcontentlength"}: {
+ {Space: "DAV:", Local: "getcontentlength"}: {
findFn: findContentLength,
dir: false,
},
- xml.Name{Space: "DAV:", Local: "getlastmodified"}: {
+ {Space: "DAV:", Local: "getlastmodified"}: {
findFn: findLastModified,
// http://webdav.org/specs/rfc4918.html#PROPERTY_getlastmodified
// suggests that getlastmodified should only apply to GETable
@@ -127,19 +130,19 @@ var liveProps = map[xml.Name]struct {
// See golang.org/issue/15334.
dir: true,
},
- xml.Name{Space: "DAV:", Local: "creationdate"}: {
+ {Space: "DAV:", Local: "creationdate"}: {
findFn: nil,
dir: false,
},
- xml.Name{Space: "DAV:", Local: "getcontentlanguage"}: {
+ {Space: "DAV:", Local: "getcontentlanguage"}: {
findFn: nil,
dir: false,
},
- xml.Name{Space: "DAV:", Local: "getcontenttype"}: {
+ {Space: "DAV:", Local: "getcontenttype"}: {
findFn: findContentType,
dir: false,
},
- xml.Name{Space: "DAV:", Local: "getetag"}: {
+ {Space: "DAV:", Local: "getetag"}: {
findFn: findETag,
// findETag implements ETag as the concatenated hex values of a file's
// modification time and size. This is not a reliable synchronization
@@ -150,8 +153,8 @@ var liveProps = map[xml.Name]struct {
// TODO: The lockdiscovery property requires LockSystem to list the
// active locks on a resource.
- xml.Name{Space: "DAV:", Local: "lockdiscovery"}: {},
- xml.Name{Space: "DAV:", Local: "supportedlock"}: {
+ {Space: "DAV:", Local: "lockdiscovery"}: {},
+ {Space: "DAV:", Local: "supportedlock"}: {
findFn: findSupportedLock,
dir: true,
},
@@ -163,8 +166,8 @@ var liveProps = map[xml.Name]struct {
//
// Each Propstat has a unique status and each property name will only be part
// of one Propstat element.
-func props(fs FileSystem, ls LockSystem, name string, pnames []xml.Name) ([]Propstat, error) {
- f, err := fs.OpenFile(name, os.O_RDONLY, 0)
+func props(ctx context.Context, fs FileSystem, ls LockSystem, name string, pnames []xml.Name) ([]Propstat, error) {
+ f, err := fs.OpenFile(ctx, name, os.O_RDONLY, 0)
if err != nil {
return nil, err
}
@@ -193,7 +196,7 @@ func props(fs FileSystem, ls LockSystem, name string, pnames []xml.Name) ([]Prop
}
// Otherwise, it must either be a live property or we don't know it.
if prop := liveProps[pn]; prop.findFn != nil && (prop.dir || !isDir) {
- innerXML, err := prop.findFn(fs, ls, name, fi)
+ innerXML, err := prop.findFn(ctx, fs, ls, name, fi)
if err != nil {
return nil, err
}
@@ -211,8 +214,8 @@ func props(fs FileSystem, ls LockSystem, name string, pnames []xml.Name) ([]Prop
}
// Propnames returns the property names defined for resource name.
-func propnames(fs FileSystem, ls LockSystem, name string) ([]xml.Name, error) {
- f, err := fs.OpenFile(name, os.O_RDONLY, 0)
+func propnames(ctx context.Context, fs FileSystem, ls LockSystem, name string) ([]xml.Name, error) {
+ f, err := fs.OpenFile(ctx, name, os.O_RDONLY, 0)
if err != nil {
return nil, err
}
@@ -251,8 +254,8 @@ func propnames(fs FileSystem, ls LockSystem, name string) ([]xml.Name, error) {
// returned if they are named in 'include'.
//
// See http://www.webdav.org/specs/rfc4918.html#METHOD_PROPFIND
-func allprop(fs FileSystem, ls LockSystem, name string, include []xml.Name) ([]Propstat, error) {
- pnames, err := propnames(fs, ls, name)
+func allprop(ctx context.Context, fs FileSystem, ls LockSystem, name string, include []xml.Name) ([]Propstat, error) {
+ pnames, err := propnames(ctx, fs, ls, name)
if err != nil {
return nil, err
}
@@ -266,12 +269,12 @@ func allprop(fs FileSystem, ls LockSystem, name string, include []xml.Name) ([]P
pnames = append(pnames, pn)
}
}
- return props(fs, ls, name, pnames)
+ return props(ctx, fs, ls, name, pnames)
}
// Patch patches the properties of resource name. The return values are
// constrained in the same manner as DeadPropsHolder.Patch.
-func patch(fs FileSystem, ls LockSystem, name string, patches []Proppatch) ([]Propstat, error) {
+func patch(ctx context.Context, fs FileSystem, ls LockSystem, name string, patches []Proppatch) ([]Propstat, error) {
conflict := false
loop:
for _, patch := range patches {
@@ -302,7 +305,7 @@ loop:
return makePropstats(pstatForbidden, pstatFailedDep), nil
}
- f, err := fs.OpenFile(name, os.O_RDWR, 0)
+ f, err := fs.OpenFile(ctx, name, os.O_RDWR, 0)
if err != nil {
return nil, err
}
@@ -333,31 +336,51 @@ loop:
return []Propstat{pstat}, nil
}
-func findResourceType(fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) {
+func escapeXML(s string) string {
+ for i := 0; i < len(s); i++ {
+ // As an optimization, if s contains only ASCII letters, digits or a
+ // few special characters, the escaped value is s itself and we don't
+ // need to allocate a buffer and convert between string and []byte.
+ switch c := s[i]; {
+ case c == ' ' || c == '_' ||
+ ('+' <= c && c <= '9') || // Digits as well as + , - . and /
+ ('A' <= c && c <= 'Z') ||
+ ('a' <= c && c <= 'z'):
+ continue
+ }
+ // Otherwise, go through the full escaping process.
+ var buf bytes.Buffer
+ xml.EscapeText(&buf, []byte(s))
+ return buf.String()
+ }
+ return s
+}
+
+func findResourceType(ctx context.Context, fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) {
if fi.IsDir() {
return `<D:collection xmlns:D="DAV:"/>`, nil
}
return "", nil
}
-func findDisplayName(fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) {
+func findDisplayName(ctx context.Context, fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) {
if slashClean(name) == "/" {
// Hide the real name of a possibly prefixed root directory.
return "", nil
}
- return fi.Name(), nil
+ return escapeXML(fi.Name()), nil
}
-func findContentLength(fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) {
+func findContentLength(ctx context.Context, fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) {
return strconv.FormatInt(fi.Size(), 10), nil
}
-func findLastModified(fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) {
+func findLastModified(ctx context.Context, fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) {
return fi.ModTime().Format(http.TimeFormat), nil
}
-func findContentType(fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) {
- f, err := fs.OpenFile(name, os.O_RDONLY, 0)
+func findContentType(ctx context.Context, fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) {
+ f, err := fs.OpenFile(ctx, name, os.O_RDONLY, 0)
if err != nil {
return "", err
}
@@ -379,14 +402,14 @@ func findContentType(fs FileSystem, ls LockSystem, name string, fi os.FileInfo)
return ctype, err
}
-func findETag(fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) {
+func findETag(ctx context.Context, fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) {
// The Apache http 2.4 web server by default concatenates the
// modification time and size of a file. We replicate the heuristic
// with nanosecond granularity.
return fmt.Sprintf(`"%x%x"`, fi.ModTime().UnixNano(), fi.Size()), nil
}
-func findSupportedLock(fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) {
+func findSupportedLock(ctx context.Context, fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) {
return `` +
`<D:lockentry xmlns:D="DAV:">` +
`<D:lockscope><D:exclusive/></D:lockscope>` +
diff --git a/vendor/golang.org/x/net/webdav/prop_test.go b/vendor/golang.org/x/net/webdav/prop_test.go
index 0834dc9f1..57d0e826f 100644
--- a/vendor/golang.org/x/net/webdav/prop_test.go
+++ b/vendor/golang.org/x/net/webdav/prop_test.go
@@ -12,13 +12,16 @@ import (
"reflect"
"sort"
"testing"
+
+ "golang.org/x/net/context"
)
func TestMemPS(t *testing.T) {
+ ctx := context.Background()
// calcProps calculates the getlastmodified and getetag DAV: property
// values in pstats for resource name in file-system fs.
calcProps := func(name string, fs FileSystem, ls LockSystem, pstats []Propstat) error {
- fi, err := fs.Stat(name)
+ fi, err := fs.Stat(ctx, name)
if err != nil {
return err
}
@@ -32,7 +35,7 @@ func TestMemPS(t *testing.T) {
if fi.IsDir() {
continue
}
- etag, err := findETag(fs, ls, name, fi)
+ etag, err := findETag(ctx, fs, ls, name, fi)
if err != nil {
return err
}
@@ -519,7 +522,7 @@ func TestMemPS(t *testing.T) {
var propstats []Propstat
switch op.op {
case "propname":
- pnames, err := propnames(fs, ls, op.name)
+ pnames, err := propnames(ctx, fs, ls, op.name)
if err != nil {
t.Errorf("%s: got error %v, want nil", desc, err)
continue
@@ -531,11 +534,11 @@ func TestMemPS(t *testing.T) {
}
continue
case "allprop":
- propstats, err = allprop(fs, ls, op.name, op.pnames)
+ propstats, err = allprop(ctx, fs, ls, op.name, op.pnames)
case "propfind":
- propstats, err = props(fs, ls, op.name, op.pnames)
+ propstats, err = props(ctx, fs, ls, op.name, op.pnames)
case "proppatch":
- propstats, err = patch(fs, ls, op.name, op.patches)
+ propstats, err = patch(ctx, fs, ls, op.name, op.patches)
default:
t.Fatalf("%s: %s not implemented", desc, op.op)
}
@@ -588,8 +591,8 @@ type noDeadPropsFS struct {
FileSystem
}
-func (fs noDeadPropsFS) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
- f, err := fs.FileSystem.OpenFile(name, flag, perm)
+func (fs noDeadPropsFS) OpenFile(ctx context.Context, name string, flag int, perm os.FileMode) (File, error) {
+ f, err := fs.FileSystem.OpenFile(ctx, name, flag, perm)
if err != nil {
return nil, err
}
diff --git a/vendor/golang.org/x/net/webdav/webdav.go b/vendor/golang.org/x/net/webdav/webdav.go
index 4ce09728b..7b56687fc 100644
--- a/vendor/golang.org/x/net/webdav/webdav.go
+++ b/vendor/golang.org/x/net/webdav/webdav.go
@@ -174,8 +174,9 @@ func (h *Handler) handleOptions(w http.ResponseWriter, r *http.Request) (status
if err != nil {
return status, err
}
+ ctx := getContext(r)
allow := "OPTIONS, LOCK, PUT, MKCOL"
- if fi, err := h.FileSystem.Stat(reqPath); err == nil {
+ if fi, err := h.FileSystem.Stat(ctx, reqPath); err == nil {
if fi.IsDir() {
allow = "OPTIONS, LOCK, DELETE, PROPPATCH, COPY, MOVE, UNLOCK, PROPFIND"
} else {
@@ -196,7 +197,8 @@ func (h *Handler) handleGetHeadPost(w http.ResponseWriter, r *http.Request) (sta
return status, err
}
// TODO: check locks for read-only access??
- f, err := h.FileSystem.OpenFile(reqPath, os.O_RDONLY, 0)
+ ctx := getContext(r)
+ f, err := h.FileSystem.OpenFile(ctx, reqPath, os.O_RDONLY, 0)
if err != nil {
return http.StatusNotFound, err
}
@@ -208,7 +210,7 @@ func (h *Handler) handleGetHeadPost(w http.ResponseWriter, r *http.Request) (sta
if fi.IsDir() {
return http.StatusMethodNotAllowed, nil
}
- etag, err := findETag(h.FileSystem, h.LockSystem, reqPath, fi)
+ etag, err := findETag(ctx, h.FileSystem, h.LockSystem, reqPath, fi)
if err != nil {
return http.StatusInternalServerError, err
}
@@ -229,18 +231,20 @@ func (h *Handler) handleDelete(w http.ResponseWriter, r *http.Request) (status i
}
defer release()
+ ctx := getContext(r)
+
// TODO: return MultiStatus where appropriate.
// "godoc os RemoveAll" says that "If the path does not exist, RemoveAll
// returns nil (no error)." WebDAV semantics are that it should return a
// "404 Not Found". We therefore have to Stat before we RemoveAll.
- if _, err := h.FileSystem.Stat(reqPath); err != nil {
+ if _, err := h.FileSystem.Stat(ctx, reqPath); err != nil {
if os.IsNotExist(err) {
return http.StatusNotFound, err
}
return http.StatusMethodNotAllowed, err
}
- if err := h.FileSystem.RemoveAll(reqPath); err != nil {
+ if err := h.FileSystem.RemoveAll(ctx, reqPath); err != nil {
return http.StatusMethodNotAllowed, err
}
return http.StatusNoContent, nil
@@ -258,8 +262,9 @@ func (h *Handler) handlePut(w http.ResponseWriter, r *http.Request) (status int,
defer release()
// TODO(rost): Support the If-Match, If-None-Match headers? See bradfitz'
// comments in http.checkEtag.
+ ctx := getContext(r)
- f, err := h.FileSystem.OpenFile(reqPath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
+ f, err := h.FileSystem.OpenFile(ctx, reqPath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
if err != nil {
return http.StatusNotFound, err
}
@@ -276,7 +281,7 @@ func (h *Handler) handlePut(w http.ResponseWriter, r *http.Request) (status int,
if closeErr != nil {
return http.StatusMethodNotAllowed, closeErr
}
- etag, err := findETag(h.FileSystem, h.LockSystem, reqPath, fi)
+ etag, err := findETag(ctx, h.FileSystem, h.LockSystem, reqPath, fi)
if err != nil {
return http.StatusInternalServerError, err
}
@@ -295,10 +300,12 @@ func (h *Handler) handleMkcol(w http.ResponseWriter, r *http.Request) (status in
}
defer release()
+ ctx := getContext(r)
+
if r.ContentLength > 0 {
return http.StatusUnsupportedMediaType, nil
}
- if err := h.FileSystem.Mkdir(reqPath, 0777); err != nil {
+ if err := h.FileSystem.Mkdir(ctx, reqPath, 0777); err != nil {
if os.IsNotExist(err) {
return http.StatusConflict, err
}
@@ -337,6 +344,8 @@ func (h *Handler) handleCopyMove(w http.ResponseWriter, r *http.Request) (status
return http.StatusForbidden, errDestinationEqualsSource
}
+ ctx := getContext(r)
+
if r.Method == "COPY" {
// Section 7.5.1 says that a COPY only needs to lock the destination,
// not both destination and source. Strictly speaking, this is racy,
@@ -360,7 +369,7 @@ func (h *Handler) handleCopyMove(w http.ResponseWriter, r *http.Request) (status
return http.StatusBadRequest, errInvalidDepth
}
}
- return copyFiles(h.FileSystem, src, dst, r.Header.Get("Overwrite") != "F", depth, 0)
+ return copyFiles(ctx, h.FileSystem, src, dst, r.Header.Get("Overwrite") != "F", depth, 0)
}
release, status, err := h.confirmLocks(r, src, dst)
@@ -377,7 +386,7 @@ func (h *Handler) handleCopyMove(w http.ResponseWriter, r *http.Request) (status
return http.StatusBadRequest, errInvalidDepth
}
}
- return moveFiles(h.FileSystem, src, dst, r.Header.Get("Overwrite") == "T")
+ return moveFiles(ctx, h.FileSystem, src, dst, r.Header.Get("Overwrite") == "T")
}
func (h *Handler) handleLock(w http.ResponseWriter, r *http.Request) (retStatus int, retErr error) {
@@ -390,6 +399,7 @@ func (h *Handler) handleLock(w http.ResponseWriter, r *http.Request) (retStatus
return status, err
}
+ ctx := getContext(r)
token, ld, now, created := "", LockDetails{}, time.Now(), false
if li == (lockInfo{}) {
// An empty lockInfo means to refresh the lock.
@@ -447,8 +457,8 @@ func (h *Handler) handleLock(w http.ResponseWriter, r *http.Request) (retStatus
}()
// Create the resource if it didn't previously exist.
- if _, err := h.FileSystem.Stat(reqPath); err != nil {
- f, err := h.FileSystem.OpenFile(reqPath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
+ if _, err := h.FileSystem.Stat(ctx, reqPath); err != nil {
+ f, err := h.FileSystem.OpenFile(ctx, reqPath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
if err != nil {
// TODO: detect missing intermediate dirs and return http.StatusConflict?
return http.StatusInternalServerError, err
@@ -501,7 +511,8 @@ func (h *Handler) handlePropfind(w http.ResponseWriter, r *http.Request) (status
if err != nil {
return status, err
}
- fi, err := h.FileSystem.Stat(reqPath)
+ ctx := getContext(r)
+ fi, err := h.FileSystem.Stat(ctx, reqPath)
if err != nil {
if os.IsNotExist(err) {
return http.StatusNotFound, err
@@ -528,7 +539,7 @@ func (h *Handler) handlePropfind(w http.ResponseWriter, r *http.Request) (status
}
var pstats []Propstat
if pf.Propname != nil {
- pnames, err := propnames(h.FileSystem, h.LockSystem, reqPath)
+ pnames, err := propnames(ctx, h.FileSystem, h.LockSystem, reqPath)
if err != nil {
return err
}
@@ -538,9 +549,9 @@ func (h *Handler) handlePropfind(w http.ResponseWriter, r *http.Request) (status
}
pstats = append(pstats, pstat)
} else if pf.Allprop != nil {
- pstats, err = allprop(h.FileSystem, h.LockSystem, reqPath, pf.Prop)
+ pstats, err = allprop(ctx, h.FileSystem, h.LockSystem, reqPath, pf.Prop)
} else {
- pstats, err = props(h.FileSystem, h.LockSystem, reqPath, pf.Prop)
+ pstats, err = props(ctx, h.FileSystem, h.LockSystem, reqPath, pf.Prop)
}
if err != nil {
return err
@@ -548,7 +559,7 @@ func (h *Handler) handlePropfind(w http.ResponseWriter, r *http.Request) (status
return mw.write(makePropstatResponse(path.Join(h.Prefix, reqPath), pstats))
}
- walkErr := walkFS(h.FileSystem, depth, reqPath, fi, walkFn)
+ walkErr := walkFS(ctx, h.FileSystem, depth, reqPath, fi, walkFn)
closeErr := mw.close()
if walkErr != nil {
return http.StatusInternalServerError, walkErr
@@ -570,7 +581,9 @@ func (h *Handler) handleProppatch(w http.ResponseWriter, r *http.Request) (statu
}
defer release()
- if _, err := h.FileSystem.Stat(reqPath); err != nil {
+ ctx := getContext(r)
+
+ if _, err := h.FileSystem.Stat(ctx, reqPath); err != nil {
if os.IsNotExist(err) {
return http.StatusNotFound, err
}
@@ -580,7 +593,7 @@ func (h *Handler) handleProppatch(w http.ResponseWriter, r *http.Request) (statu
if err != nil {
return status, err
}
- pstats, err := patch(h.FileSystem, h.LockSystem, reqPath, patches)
+ pstats, err := patch(ctx, h.FileSystem, h.LockSystem, reqPath, patches)
if err != nil {
return http.StatusInternalServerError, err
}
diff --git a/vendor/golang.org/x/net/webdav/webdav_test.go b/vendor/golang.org/x/net/webdav/webdav_test.go
index b068aab32..25e0d5421 100644
--- a/vendor/golang.org/x/net/webdav/webdav_test.go
+++ b/vendor/golang.org/x/net/webdav/webdav_test.go
@@ -18,6 +18,8 @@ import (
"sort"
"strings"
"testing"
+
+ "golang.org/x/net/context"
)
// TODO: add tests to check XML responses with the expected prefix path
@@ -48,7 +50,7 @@ func TestPrefix(t *testing.T) {
req.Header.Add(headers[0], headers[1])
headers = headers[2:]
}
- res, err := http.DefaultClient.Do(req)
+ res, err := http.DefaultTransport.RoundTrip(req)
if err != nil {
return nil, err
}
@@ -65,6 +67,7 @@ func TestPrefix(t *testing.T) {
"/a/b/",
"/a/b/c/",
}
+ ctx := context.Background()
for _, prefix := range prefixes {
fs := NewMemFS()
h := &Handler{
@@ -183,7 +186,7 @@ func TestPrefix(t *testing.T) {
continue
}
- got, err := find(nil, fs, "/")
+ got, err := find(ctx, nil, fs, "/")
if err != nil {
t.Errorf("prefix=%-9q find: %v", prefix, err)
continue
@@ -202,57 +205,110 @@ func TestPrefix(t *testing.T) {
}
}
+func TestEscapeXML(t *testing.T) {
+ // These test cases aren't exhaustive, and there is more than one way to
+ // escape e.g. a quot (as "&#34;" or "&quot;") or an apos. We presume that
+ // the encoding/xml package tests xml.EscapeText more thoroughly. This test
+ // here is just a sanity check for this package's escapeXML function, and
+ // its attempt to provide a fast path (and avoid a bytes.Buffer allocation)
+ // when escaping filenames is obviously a no-op.
+ testCases := map[string]string{
+ "": "",
+ " ": " ",
+ "&": "&amp;",
+ "*": "*",
+ "+": "+",
+ ",": ",",
+ "-": "-",
+ ".": ".",
+ "/": "/",
+ "0": "0",
+ "9": "9",
+ ":": ":",
+ "<": "&lt;",
+ ">": "&gt;",
+ "A": "A",
+ "_": "_",
+ "a": "a",
+ "~": "~",
+ "\u0201": "\u0201",
+ "&amp;": "&amp;amp;",
+ "foo&<b/ar>baz": "foo&amp;&lt;b/ar&gt;baz",
+ }
+
+ for in, want := range testCases {
+ if got := escapeXML(in); got != want {
+ t.Errorf("in=%q: got %q, want %q", in, got, want)
+ }
+ }
+}
+
func TestFilenameEscape(t *testing.T) {
- re := regexp.MustCompile(`<D:href>([^<]*)</D:href>`)
- do := func(method, urlStr string) (string, error) {
+ hrefRe := regexp.MustCompile(`<D:href>([^<]*)</D:href>`)
+ displayNameRe := regexp.MustCompile(`<D:displayname>([^<]*)</D:displayname>`)
+ do := func(method, urlStr string) (string, string, error) {
req, err := http.NewRequest(method, urlStr, nil)
if err != nil {
- return "", err
+ return "", "", err
}
res, err := http.DefaultClient.Do(req)
if err != nil {
- return "", err
+ return "", "", err
}
defer res.Body.Close()
b, err := ioutil.ReadAll(res.Body)
if err != nil {
- return "", err
+ return "", "", err
+ }
+ hrefMatch := hrefRe.FindStringSubmatch(string(b))
+ if len(hrefMatch) != 2 {
+ return "", "", errors.New("D:href not found")
}
- m := re.FindStringSubmatch(string(b))
- if len(m) != 2 {
- return "", errors.New("D:href not found")
+ displayNameMatch := displayNameRe.FindStringSubmatch(string(b))
+ if len(displayNameMatch) != 2 {
+ return "", "", errors.New("D:displayname not found")
}
- return m[1], nil
+ return hrefMatch[1], displayNameMatch[1], nil
}
testCases := []struct {
- name, want string
+ name, wantHref, wantDisplayName string
}{{
- name: `/foo%bar`,
- want: `/foo%25bar`,
+ name: `/foo%bar`,
+ wantHref: `/foo%25bar`,
+ wantDisplayName: `foo%bar`,
}, {
- name: `/こんにちわ世界`,
- want: `/%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%82%8F%E4%B8%96%E7%95%8C`,
+ name: `/こんにちわ世界`,
+ wantHref: `/%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%82%8F%E4%B8%96%E7%95%8C`,
+ wantDisplayName: `こんにちわ世界`,
}, {
- name: `/Program Files/`,
- want: `/Program%20Files`,
+ name: `/Program Files/`,
+ wantHref: `/Program%20Files`,
+ wantDisplayName: `Program Files`,
}, {
- name: `/go+lang`,
- want: `/go+lang`,
+ name: `/go+lang`,
+ wantHref: `/go+lang`,
+ wantDisplayName: `go+lang`,
}, {
- name: `/go&lang`,
- want: `/go&amp;lang`,
+ name: `/go&lang`,
+ wantHref: `/go&amp;lang`,
+ wantDisplayName: `go&amp;lang`,
+ }, {
+ name: `/go<lang`,
+ wantHref: `/go%3Clang`,
+ wantDisplayName: `go&lt;lang`,
}}
+ ctx := context.Background()
fs := NewMemFS()
for _, tc := range testCases {
if strings.HasSuffix(tc.name, "/") {
- if err := fs.Mkdir(tc.name, 0755); err != nil {
+ if err := fs.Mkdir(ctx, tc.name, 0755); err != nil {
t.Fatalf("name=%q: Mkdir: %v", tc.name, err)
}
} else {
- f, err := fs.OpenFile(tc.name, os.O_CREATE, 0644)
+ f, err := fs.OpenFile(ctx, tc.name, os.O_CREATE, 0644)
if err != nil {
t.Fatalf("name=%q: OpenFile: %v", tc.name, err)
}
@@ -273,13 +329,16 @@ func TestFilenameEscape(t *testing.T) {
for _, tc := range testCases {
u.Path = tc.name
- got, err := do("PROPFIND", u.String())
+ gotHref, gotDisplayName, err := do("PROPFIND", u.String())
if err != nil {
t.Errorf("name=%q: PROPFIND: %v", tc.name, err)
continue
}
- if got != tc.want {
- t.Errorf("name=%q: got %q, want %q", tc.name, got, tc.want)
+ if gotHref != tc.wantHref {
+ t.Errorf("name=%q: got href %q, want %q", tc.name, gotHref, tc.wantHref)
+ }
+ if gotDisplayName != tc.wantDisplayName {
+ t.Errorf("name=%q: got dispayname %q, want %q", tc.name, gotDisplayName, tc.wantDisplayName)
}
}
}
diff --git a/vendor/golang.org/x/net/websocket/client.go b/vendor/golang.org/x/net/websocket/client.go
index 20d1e1e38..69a4ac7ee 100644
--- a/vendor/golang.org/x/net/websocket/client.go
+++ b/vendor/golang.org/x/net/websocket/client.go
@@ -6,7 +6,6 @@ package websocket
import (
"bufio"
- "crypto/tls"
"io"
"net"
"net/http"
@@ -87,20 +86,14 @@ func DialConfig(config *Config) (ws *Conn, err error) {
if config.Origin == nil {
return nil, &DialError{config, ErrBadWebSocketOrigin}
}
- switch config.Location.Scheme {
- case "ws":
- client, err = net.Dial("tcp", parseAuthority(config.Location))
-
- case "wss":
- client, err = tls.Dial("tcp", parseAuthority(config.Location), config.TlsConfig)
-
- default:
- err = ErrBadScheme
+ dialer := config.Dialer
+ if dialer == nil {
+ dialer = &net.Dialer{}
}
+ client, err = dialWithDialer(dialer, config)
if err != nil {
goto Error
}
-
ws, err = NewClient(config, client)
if err != nil {
client.Close()
diff --git a/vendor/golang.org/x/net/websocket/dial.go b/vendor/golang.org/x/net/websocket/dial.go
new file mode 100644
index 000000000..2dab943a4
--- /dev/null
+++ b/vendor/golang.org/x/net/websocket/dial.go
@@ -0,0 +1,24 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package websocket
+
+import (
+ "crypto/tls"
+ "net"
+)
+
+func dialWithDialer(dialer *net.Dialer, config *Config) (conn net.Conn, err error) {
+ switch config.Location.Scheme {
+ case "ws":
+ conn, err = dialer.Dial("tcp", parseAuthority(config.Location))
+
+ case "wss":
+ conn, err = tls.DialWithDialer(dialer, "tcp", parseAuthority(config.Location), config.TlsConfig)
+
+ default:
+ err = ErrBadScheme
+ }
+ return
+}
diff --git a/vendor/golang.org/x/net/websocket/dial_test.go b/vendor/golang.org/x/net/websocket/dial_test.go
new file mode 100644
index 000000000..aa03e30dd
--- /dev/null
+++ b/vendor/golang.org/x/net/websocket/dial_test.go
@@ -0,0 +1,43 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package websocket
+
+import (
+ "crypto/tls"
+ "fmt"
+ "log"
+ "net"
+ "net/http/httptest"
+ "testing"
+ "time"
+)
+
+// This test depend on Go 1.3+ because in earlier versions the Dialer won't be
+// used in TLS connections and a timeout won't be triggered.
+func TestDialConfigTLSWithDialer(t *testing.T) {
+ tlsServer := httptest.NewTLSServer(nil)
+ tlsServerAddr := tlsServer.Listener.Addr().String()
+ log.Print("Test TLS WebSocket server listening on ", tlsServerAddr)
+ defer tlsServer.Close()
+ config, _ := NewConfig(fmt.Sprintf("wss://%s/echo", tlsServerAddr), "http://localhost")
+ config.Dialer = &net.Dialer{
+ Deadline: time.Now().Add(-time.Minute),
+ }
+ config.TlsConfig = &tls.Config{
+ InsecureSkipVerify: true,
+ }
+ _, err := DialConfig(config)
+ dialerr, ok := err.(*DialError)
+ if !ok {
+ t.Fatalf("DialError expected, got %#v", err)
+ }
+ neterr, ok := dialerr.Err.(*net.OpError)
+ if !ok {
+ t.Fatalf("net.OpError error expected, got %#v", dialerr.Err)
+ }
+ if !neterr.Timeout() {
+ t.Fatalf("expected timeout error, got %#v", neterr)
+ }
+}
diff --git a/vendor/golang.org/x/net/websocket/websocket.go b/vendor/golang.org/x/net/websocket/websocket.go
index 9412191de..a7731d9c9 100644
--- a/vendor/golang.org/x/net/websocket/websocket.go
+++ b/vendor/golang.org/x/net/websocket/websocket.go
@@ -32,6 +32,8 @@ const (
PingFrame = 9
PongFrame = 10
UnknownFrame = 255
+
+ DefaultMaxPayloadBytes = 32 << 20 // 32MB
)
// ProtocolError represents WebSocket protocol errors.
@@ -58,6 +60,10 @@ var (
ErrNotSupported = &ProtocolError{"not supported"}
)
+// ErrFrameTooLarge is returned by Codec's Receive method if payload size
+// exceeds limit set by Conn.MaxPayloadBytes
+var ErrFrameTooLarge = errors.New("websocket: frame payload size exceeds limit")
+
// Addr is an implementation of net.Addr for WebSocket.
type Addr struct {
*url.URL
@@ -86,6 +92,9 @@ type Config struct {
// Additional header fields to be sent in WebSocket opening handshake.
Header http.Header
+ // Dialer used when opening websocket connections.
+ Dialer *net.Dialer
+
handshakeData map[string]string
}
@@ -163,6 +172,10 @@ type Conn struct {
frameHandler
PayloadType byte
defaultCloseStatus int
+
+ // MaxPayloadBytes limits the size of frame payload received over Conn
+ // by Codec's Receive method. If zero, DefaultMaxPayloadBytes is used.
+ MaxPayloadBytes int
}
// Read implements the io.Reader interface:
@@ -299,7 +312,12 @@ func (cd Codec) Send(ws *Conn, v interface{}) (err error) {
return err
}
-// Receive receives single frame from ws, unmarshaled by cd.Unmarshal and stores in v.
+// Receive receives single frame from ws, unmarshaled by cd.Unmarshal and stores
+// in v. The whole frame payload is read to an in-memory buffer; max size of
+// payload is defined by ws.MaxPayloadBytes. If frame payload size exceeds
+// limit, ErrFrameTooLarge is returned; in this case frame is not read off wire
+// completely. The next call to Receive would read and discard leftover data of
+// previous oversized frame before processing next frame.
func (cd Codec) Receive(ws *Conn, v interface{}) (err error) {
ws.rio.Lock()
defer ws.rio.Unlock()
@@ -322,6 +340,19 @@ again:
if frame == nil {
goto again
}
+ maxPayloadBytes := ws.MaxPayloadBytes
+ if maxPayloadBytes == 0 {
+ maxPayloadBytes = DefaultMaxPayloadBytes
+ }
+ if hf, ok := frame.(*hybiFrameReader); ok && hf.header.Length > int64(maxPayloadBytes) {
+ // payload size exceeds limit, no need to call Unmarshal
+ //
+ // set frameReader to current oversized frame so that
+ // the next call to this function can drain leftover
+ // data before processing the next frame
+ ws.frameReader = frame
+ return ErrFrameTooLarge
+ }
payloadType := frame.PayloadType()
data, err := ioutil.ReadAll(frame)
if err != nil {
diff --git a/vendor/golang.org/x/net/websocket/websocket_test.go b/vendor/golang.org/x/net/websocket/websocket_test.go
index 05b7e5356..2054ce85a 100644
--- a/vendor/golang.org/x/net/websocket/websocket_test.go
+++ b/vendor/golang.org/x/net/websocket/websocket_test.go
@@ -6,6 +6,7 @@ package websocket
import (
"bytes"
+ "crypto/rand"
"fmt"
"io"
"log"
@@ -357,6 +358,26 @@ func TestDialConfigBadVersion(t *testing.T) {
}
}
+func TestDialConfigWithDialer(t *testing.T) {
+ once.Do(startServer)
+ config := newConfig(t, "/echo")
+ config.Dialer = &net.Dialer{
+ Deadline: time.Now().Add(-time.Minute),
+ }
+ _, err := DialConfig(config)
+ dialerr, ok := err.(*DialError)
+ if !ok {
+ t.Fatalf("DialError expected, got %#v", err)
+ }
+ neterr, ok := dialerr.Err.(*net.OpError)
+ if !ok {
+ t.Fatalf("net.OpError error expected, got %#v", dialerr.Err)
+ }
+ if !neterr.Timeout() {
+ t.Fatalf("expected timeout error, got %#v", neterr)
+ }
+}
+
func TestSmallBuffer(t *testing.T) {
// http://code.google.com/p/go/issues/detail?id=1145
// Read should be able to handle reading a fragment of a frame.
@@ -585,3 +606,60 @@ func TestCtrlAndData(t *testing.T) {
}
}
}
+
+func TestCodec_ReceiveLimited(t *testing.T) {
+ const limit = 2048
+ var payloads [][]byte
+ for _, size := range []int{
+ 1024,
+ 2048,
+ 4096, // receive of this message would be interrupted due to limit
+ 2048, // this one is to make sure next receive recovers discarding leftovers
+ } {
+ b := make([]byte, size)
+ rand.Read(b)
+ payloads = append(payloads, b)
+ }
+ handlerDone := make(chan struct{})
+ limitedHandler := func(ws *Conn) {
+ defer close(handlerDone)
+ ws.MaxPayloadBytes = limit
+ defer ws.Close()
+ for i, p := range payloads {
+ t.Logf("payload #%d (size %d, exceeds limit: %v)", i, len(p), len(p) > limit)
+ var recv []byte
+ err := Message.Receive(ws, &recv)
+ switch err {
+ case nil:
+ case ErrFrameTooLarge:
+ if len(p) <= limit {
+ t.Fatalf("unexpected frame size limit: expected %d bytes of payload having limit at %d", len(p), limit)
+ }
+ continue
+ default:
+ t.Fatalf("unexpected error: %v (want either nil or ErrFrameTooLarge)", err)
+ }
+ if len(recv) > limit {
+ t.Fatalf("received %d bytes of payload having limit at %d", len(recv), limit)
+ }
+ if !bytes.Equal(p, recv) {
+ t.Fatalf("received payload differs:\ngot:\t%v\nwant:\t%v", recv, p)
+ }
+ }
+ }
+ server := httptest.NewServer(Handler(limitedHandler))
+ defer server.CloseClientConnections()
+ defer server.Close()
+ addr := server.Listener.Addr().String()
+ ws, err := Dial("ws://"+addr+"/", "", "http://localhost/")
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer ws.Close()
+ for i, p := range payloads {
+ if err := Message.Send(ws, p); err != nil {
+ t.Fatalf("payload #%d (size %d): %v", i, len(p), err)
+ }
+ }
+ <-handlerDone
+}
diff --git a/vendor/golang.org/x/net/xsrftoken/xsrf.go b/vendor/golang.org/x/net/xsrftoken/xsrf.go
index 8d2187872..881bf199f 100644
--- a/vendor/golang.org/x/net/xsrftoken/xsrf.go
+++ b/vendor/golang.org/x/net/xsrftoken/xsrf.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
diff --git a/vendor/golang.org/x/net/xsrftoken/xsrf_test.go b/vendor/golang.org/x/net/xsrftoken/xsrf_test.go
index 9933f8671..6c8e7d9b5 100644
--- a/vendor/golang.org/x/net/xsrftoken/xsrf_test.go
+++ b/vendor/golang.org/x/net/xsrftoken/xsrf_test.go
@@ -1,4 +1,4 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.