package main import ( "bytes" "compress/gzip" "fmt" "html/template" "io" "log" "net" "net/http" "os" "sort" "strconv" "strings" "sync" "time" "inet.af/netaddr" "github.com/lemmi/closer" "git.freifunk-franken.de/jkimmel/abbel/capture" "git.freifunk-franken.de/jkimmel/abbel/tlv" ) var ( startTime = time.Now() ) type route struct { Dst netaddr.IPPrefix Counter uint UnreachableDuration time.Duration UnreachableSince time.Time ReachableSince time.Time Hostname string } func (r route) DurationUntilRounded(t time.Time) time.Duration { return r.DurationUntil(t).Round(time.Second) } func (r route) DurationUntil(t time.Time) time.Duration { ret := r.UnreachableDuration if !r.UnreachableSince.IsZero() { ret += t.Sub(r.UnreachableSince) } return ret } func (r route) Downtime(now time.Time) float64 { return float64(r.DurationUntil(now)) / float64(now.Sub(startTime)) * 100 } func (r route) Noise(now time.Time) bool { return r.UnreachableSince.IsZero() && r.Counter <= uint(now.Sub(startTime).Hours())+10 && r.Downtime(now) < 0.5 } func (r route) String() string { now := time.Now() return fmt.Sprintf("%44s %5d %2.3f%% %s", r.Dst, r.Counter, r.Downtime(now), r.DurationUntil(now)) } type routeStats struct { sync.Mutex stats map[netaddr.IPPrefix]*route } func newRouteStats() *routeStats { return &routeStats{ stats: make(map[netaddr.IPPrefix]*route), } } func (rs *routeStats) add(prefix netaddr.IPPrefix) { rs.Lock() defer rs.Unlock() r := rs.stats[prefix] if r == nil { r = &route{Dst: prefix} go func(r *route, rs *routeStats) { names, err := net.LookupAddr(r.Dst.IP().String()) if err != nil || len(names) == 0 { return } if strings.HasSuffix(names[0], ".rdns.f3netze.de.") { return } rs.Lock() r.Hostname = strings.TrimRight(names[0], ".") rs.Unlock() }(r, rs) } if r.UnreachableSince.IsZero() { r.UnreachableSince = time.Now() r.ReachableSince = time.Time{} r.Counter++ } rs.stats[prefix] = r } func (rs *routeStats) del(prefix netaddr.IPPrefix) { rs.Lock() defer rs.Unlock() r := rs.stats[prefix] if r == nil { return } if !r.UnreachableSince.IsZero() { r.UnreachableDuration += time.Since(r.UnreachableSince) r.UnreachableSince = time.Time{} r.ReachableSince = time.Now() } rs.stats[prefix] = r } func (rs *routeStats) getAll() []route { ret := make([]route, 0, len(rs.stats)) rs.Lock() defer rs.Unlock() for _, v := range rs.stats { ret = append(ret, *v) } return ret } func (rs *routeStats) getLongest() []route { ret := rs.getAll() t := time.Now() sort.Slice(ret, func(i, j int) bool { id := ret[i].Downtime(t) jd := ret[j].Downtime(t) if ret[i].Counter != ret[j].Counter && (id == jd || (id < 0.5 && jd < 0.5)) { return ret[i].Counter > ret[j].Counter } return id > jd }) return ret } func monitor(done <-chan struct{}, rs *routeStats) error { conn, err := capture.FromInterface("any") if err != nil { return err } go func() { <-done closer.Do(conn) }() buf := [4096]byte{} var s tlv.PacketDecoder for { b, src, ifindex, err := conn.ReadFrom(buf[:]) if err != nil { fmt.Println("Skipping packet:", err) continue } s.Reset(b, src, ifindex) for s.Scan() { switch t := s.TLV().(type) { case tlv.Update: if t.Metric == 0xffff { rs.add(t.Prefix) } else { rs.del(t.Prefix) } } } } } func render(w io.Writer, rs []route) error { const tmplHTML = ` FFF Wall-of-not-so-reachable-networks

FFF Wall-of-not-so-reachable-networks

Start:{{ .Start.Format "2006-01-02 15:04:05" }}
Update:{{ .Now.Format "2006-01-02 15:04:05" }}
Show All {{- $now := .Now -}} {{- range .R }} {{- end}}
Net Hostname Downtime
Counts rel abs

{{.Dst.String}} {{with .Hostname}}{{.}}{{end}} {{.Counter}} {{.Downtime $now | printf "%.3f%%"}} {{.DurationUntilRounded $now}}
` data := struct { Now time.Time Start time.Time R []route }{ time.Now(), startTime, rs, } t := template.Must(template.New("main").Parse(tmplHTML)) return t.Execute(w, data) } func compress(cw io.Writer, cr io.Reader, err error) error { if err != nil { return err } gzw, err := gzip.NewWriterLevel(cw, gzip.BestCompression) if err != nil { return err } if _, err = io.Copy(gzw, cr); err != nil { return err } return gzw.Close() } func acceptGzip(h http.Header) bool { for _, s := range strings.Split(h.Get("Accept-Encoding"), ",") { if strings.TrimSpace(s) == "gzip" { return true } } return false } func cachedRender(rs *routeStats) http.HandlerFunc { var m sync.Mutex var timestamp time.Time var content bytes.Buffer var compressed bytes.Buffer return func(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodGet { http.Error(w, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed) return } if strings.TrimLeft(r.URL.Path, "/") == "favicon.ico" { w.Header().Add("Cache-Control", "max-age=300") w.Header().Set("Content-Length", strconv.FormatInt(int64(len(favico)), 10)) http.ServeContent(w, r, r.URL.Path, startTime, bytes.NewReader(favico)) return } if r.URL.Path != "/" { http.NotFound(w, r) return } var err error m.Lock() if time.Since(timestamp) > 5*time.Second { content.Reset() compressed.Reset() err = render(&content, rs.getLongest()) err = compress(&compressed, bytes.NewReader(content.Bytes()), err) timestamp = time.Now() } m.Unlock() if err != nil { fmt.Fprintln(os.Stderr, err) fmt.Fprintln(w, err) return } w.Header().Add("Cache-Control", "max-age=5") w.Header().Add("Content-Type", "text/html; charset=utf-8") c := content if acceptGzip(r.Header) { c = compressed w.Header().Add("Content-Encoding", "gzip") } w.Header().Set("Content-Length", strconv.FormatInt(int64(c.Len()), 10)) http.ServeContent(w, r, "/", timestamp, bytes.NewReader(c.Bytes())) } } func main() { rs := newRouteStats() done := make(chan struct{}) go monitor(done, rs) log.Fatal(http.ListenAndServe(":8080", cachedRender(rs))) } var favico = []byte{ 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x20, 0x22, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0xb0, 0x11, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x0a, 0x01, 0x01, 0x01, 0x01, 0x23, 0x01, 0x01, 0x01, 0x53, 0x01, 0x01, 0x01, 0x6f, 0x01, 0x01, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x87, 0x01, 0x01, 0x01, 0x86, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x76, 0x01, 0x01, 0x01, 0x64, 0x01, 0x01, 0x01, 0x4e, 0x01, 0x01, 0x01, 0x2e, 0x01, 0x01, 0x01, 0x0d, 0x08, 0x08, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x46, 0x01, 0x01, 0x01, 0xd0, 0x01, 0x01, 0x01, 0xed, 0x01, 0x01, 0x01, 0xb1, 0x01, 0x01, 0x01, 0x8e, 0x01, 0x01, 0x01, 0x7b, 0x01, 0x01, 0x01, 0x73, 0x01, 0x01, 0x01, 0x75, 0x01, 0x01, 0x01, 0x7c, 0x01, 0x01, 0x01, 0x8b, 0x01, 0x01, 0x01, 0xa2, 0x01, 0x01, 0x01, 0xc2, 0x01, 0x01, 0x01, 0xeb, 0x01, 0x01, 0x01, 0xfc, 0x01, 0x01, 0x01, 0xde, 0x01, 0x01, 0x01, 0xb0, 0x01, 0x01, 0x01, 0x74, 0x01, 0x01, 0x01, 0x2a, 0x0c, 0x0c, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0x48, 0x01, 0x01, 0x01, 0xf4, 0x01, 0x01, 0x01, 0x66, 0x02, 0x02, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x1c, 0x01, 0x01, 0x01, 0x54, 0x01, 0x01, 0x01, 0x9e, 0x01, 0x01, 0x01, 0xed, 0x01, 0x01, 0x01, 0xff, 0x01, 0x01, 0x01, 0xcd, 0x01, 0x01, 0x01, 0x50, 0x11, 0x11, 0x11, 0x01, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0xc8, 0x01, 0x01, 0x01, 0x67, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x08, 0x01, 0x01, 0x01, 0x5d, 0x01, 0x01, 0x01, 0xdb, 0x01, 0x01, 0x01, 0xff, 0x01, 0x01, 0x01, 0x88, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0xf6, 0x02, 0x02, 0x02, 0x0f, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x02, 0x02, 0x02, 0x09, 0x01, 0x01, 0x01, 0xa8, 0x01, 0x01, 0x01, 0xfe, 0x02, 0x02, 0x02, 0x19, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0xf0, 0x01, 0x01, 0x01, 0x0c, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x03, 0x03, 0x03, 0x07, 0x01, 0x01, 0x01, 0xe7, 0x02, 0x02, 0x02, 0x22, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0xbc, 0x01, 0x01, 0x01, 0x57, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x35, 0x01, 0x01, 0x01, 0x46, 0x01, 0x01, 0x01, 0x3e, 0x01, 0x01, 0x01, 0x14, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x09, 0x02, 0x02, 0x02, 0x0a, 0x0e, 0x0e, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x53, 0x53, 0x53, 0x00, 0x01, 0x01, 0x01, 0xbe, 0x04, 0x04, 0x04, 0x03, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0x3f, 0x01, 0x01, 0x01, 0xe1, 0x01, 0x01, 0x01, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x12, 0x01, 0x01, 0x01, 0xa0, 0x01, 0x01, 0x01, 0xef, 0x01, 0x01, 0x01, 0xc2, 0x01, 0x01, 0x01, 0xac, 0x01, 0x01, 0x01, 0xba, 0x01, 0x01, 0x01, 0xdb, 0x01, 0x01, 0x01, 0xd2, 0x01, 0x01, 0x01, 0xa9, 0x01, 0x01, 0x01, 0xaa, 0x01, 0x01, 0x01, 0xd3, 0x01, 0x01, 0x01, 0xf3, 0x01, 0x01, 0x01, 0xf6, 0x01, 0x01, 0x01, 0xd3, 0x01, 0x01, 0x01, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x5f, 0x01, 0x01, 0x01, 0x83, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x55, 0x01, 0x01, 0x01, 0xdb, 0x01, 0x01, 0x01, 0x89, 0x01, 0x01, 0x01, 0xd9, 0x01, 0x01, 0x01, 0x81, 0x02, 0x02, 0x02, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x21, 0x01, 0x01, 0x01, 0x92, 0x01, 0x01, 0x01, 0x8f, 0x01, 0x01, 0x01, 0x73, 0x01, 0x01, 0x01, 0x70, 0x01, 0x01, 0x01, 0x8f, 0x01, 0x01, 0x01, 0xe4, 0x01, 0x01, 0x01, 0xff, 0x01, 0x01, 0x01, 0xba, 0x01, 0x01, 0x01, 0xab, 0x04, 0x04, 0x04, 0x06, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x0f, 0x01, 0x01, 0x01, 0x9a, 0x01, 0x01, 0x01, 0x6e, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x12, 0x01, 0x01, 0x01, 0xec, 0x01, 0x01, 0x01, 0x74, 0x0e, 0x0e, 0x0e, 0x01, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0x78, 0x01, 0x01, 0x01, 0x30, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0xcb, 0x01, 0x01, 0x01, 0x2a, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0x38, 0x01, 0x01, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0x4f, 0x01, 0x01, 0x01, 0x75, 0x01, 0x01, 0x01, 0x96, 0x01, 0x01, 0x01, 0xa0, 0x01, 0x01, 0x01, 0x6f, 0x01, 0x01, 0x01, 0x5a, 0x01, 0x01, 0x01, 0x91, 0x01, 0x01, 0x01, 0xa0, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x7d, 0x01, 0x01, 0x01, 0x93, 0x01, 0x01, 0x01, 0x33, 0x01, 0x01, 0x01, 0x18, 0x01, 0x01, 0x01, 0x21, 0x01, 0x01, 0x01, 0x3d, 0x01, 0x01, 0x01, 0x58, 0x01, 0x01, 0x01, 0x49, 0x03, 0x03, 0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x47, 0x01, 0x01, 0x01, 0xef, 0x01, 0x01, 0x01, 0xf6, 0x01, 0x01, 0x01, 0x34, 0x0c, 0x0c, 0x0c, 0x01, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x2b, 0x01, 0x01, 0x01, 0x79, 0x01, 0x01, 0x01, 0x8f, 0x01, 0x01, 0x01, 0x85, 0x01, 0x01, 0x01, 0x69, 0x01, 0x01, 0x01, 0x4f, 0x01, 0x01, 0x01, 0x69, 0x01, 0x01, 0x01, 0xb9, 0x01, 0x01, 0x01, 0x22, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0x49, 0x01, 0x01, 0x01, 0xff, 0x01, 0x01, 0x01, 0x37, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x1d, 0x01, 0x01, 0x01, 0xbf, 0x01, 0x01, 0x01, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0xd9, 0x01, 0x01, 0x01, 0x30, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x14, 0x14, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0x75, 0x01, 0x01, 0x01, 0x46, 0x13, 0x13, 0x13, 0x01, 0x01, 0x01, 0x01, 0xc2, 0x02, 0x02, 0x02, 0x05, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0x92, 0x01, 0x01, 0x01, 0x12, 0x01, 0x01, 0x01, 0x56, 0x01, 0x01, 0x01, 0x39, 0x01, 0x01, 0x01, 0xae, 0x01, 0x01, 0x01, 0x22, 0x01, 0x01, 0x01, 0x84, 0x01, 0x01, 0x01, 0x5f, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0xbf, 0x01, 0x01, 0x01, 0x6a, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x8e, 0x01, 0x01, 0x01, 0xc1, 0x01, 0x01, 0x01, 0xaf, 0x01, 0x01, 0x01, 0x54, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x02, 0x02, 0x02, 0x0e, 0x01, 0x01, 0x01, 0xba, 0x01, 0x01, 0x01, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x03, 0x03, 0x03, 0x04, 0x01, 0x01, 0x01, 0x74, 0x01, 0x01, 0x01, 0xd9, 0x01, 0x01, 0x01, 0x3f, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0x64, 0x03, 0x03, 0x03, 0x07, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0x7c, 0x01, 0x01, 0x01, 0xac, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x23, 0x23, 0x23, 0x00, 0x01, 0x01, 0x01, 0xba, 0x01, 0x01, 0x01, 0x2e, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0x98, 0x01, 0x01, 0x01, 0x58, 0x01, 0x01, 0x01, 0x95, 0x01, 0x01, 0x01, 0x2e, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0x77, 0x01, 0x01, 0x01, 0xa4, 0x19, 0x19, 0x19, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x01, 0x01, 0x01, 0x1c, 0x01, 0x01, 0x01, 0xa6, 0x01, 0x01, 0x01, 0xa7, 0x02, 0x02, 0x02, 0x0e, 0x02, 0x02, 0x02, 0x10, 0x01, 0x01, 0x01, 0xe2, 0x01, 0x01, 0x01, 0x0b, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x02, 0x02, 0x02, 0x12, 0x01, 0x01, 0x01, 0xd8, 0x03, 0x03, 0x03, 0x04, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x5b, 0x01, 0x01, 0x01, 0x95, 0x01, 0x01, 0x01, 0x21, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x02, 0x03, 0x03, 0x03, 0x04, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x07, 0xff, 0xfc, 0x00, 0x00, 0x7f, 0xf8, 0x7f, 0xe0, 0x1f, 0xf9, 0xff, 0xfc, 0x1f, 0xf9, 0xff, 0xff, 0x0f, 0xf9, 0xff, 0xff, 0x8f, 0xf9, 0xe0, 0xf1, 0xcf, 0xf8, 0x80, 0x00, 0x9f, 0xfc, 0x0f, 0x00, 0x1f, 0xfe, 0x3f, 0xfc, 0x3f, 0xff, 0x3f, 0xfe, 0x7f, 0xff, 0x3f, 0x00, 0xff, 0xff, 0x80, 0x20, 0xff, 0xff, 0xc0, 0x11, 0xff, 0xff, 0xff, 0x89, 0xff, 0xff, 0xff, 0xc1, 0xff, 0xff, 0xfc, 0x03, 0xff, 0xff, 0xfc, 0x07, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xf8, 0x67, 0xff, 0xff, 0xf8, 0xe7, 0xff, 0xff, 0xf8, 0x4f, 0xff, 0xff, 0xf8, 0x0f, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, }