diff --git a/bookbrowser.go b/bookbrowser.go index 9e6f36d3..5d511180 100644 --- a/bookbrowser.go +++ b/bookbrowser.go @@ -9,9 +9,9 @@ import ( "strings" "syscall" + _ "github.com/geek1011/BookBrowser/formats/epub" + _ "github.com/geek1011/BookBrowser/formats/pdf" "github.com/geek1011/BookBrowser/modules/server" - - _ "github.com/geek1011/BookBrowser/formats/all" "github.com/geek1011/BookBrowser/modules/sigusr" "github.com/geek1011/BookBrowser/modules/util" "github.com/urfave/cli" @@ -121,7 +121,7 @@ func main() { s := server.NewServer(addr, bookdir, tempdir, curversion, true, nocovers) s.RefreshBookIndex() - if len(*s.Books) == 0 { + if len(s.Indexer.BookList()) == 0 { log.Fatalln("Fatal error: no books found") } diff --git a/booklist/authorlist.go b/booklist/authorlist.go new file mode 100644 index 00000000..748b08b5 --- /dev/null +++ b/booklist/authorlist.go @@ -0,0 +1,30 @@ +package booklist + +import "sort" + +type AuthorList []struct{ Name, ID string } + +func (bl BookList) Authors() *AuthorList { + authors := AuthorList{} + done := map[string]bool{} + for _, b := range bl { + if b.Author == "" { + continue + } + + if done[b.AuthorID()] { + continue + } + authors = append(authors, struct{ Name, ID string }{b.Author, b.AuthorID()}) + done[b.AuthorID()] = true + } + return &authors +} + +func (al AuthorList) Sorted(less func(a, b struct{ Name, ID string }) bool) AuthorList { + nal := al[:] + sort.SliceStable(nal, func(i, j int) bool { + return less(al[i], al[j]) + }) + return nal +} diff --git a/booklist/book.go b/booklist/book.go new file mode 100644 index 00000000..2b7c607c --- /dev/null +++ b/booklist/book.go @@ -0,0 +1,40 @@ +package booklist + +import ( + "crypto/sha1" + "fmt" + "path/filepath" + "strings" + "time" +) + +type Book struct { + Hash string + FilePath string + FileSize int64 + ModTime time.Time + + HasCover bool + Title string + Author string + Description string + Series string + SeriesIndex float64 + Publisher string +} + +func (b *Book) ID() string { + return b.Hash[:10] +} + +func (b *Book) AuthorID() string { + return fmt.Sprintf("%x", sha1.Sum([]byte(b.Author)))[:10] +} + +func (b *Book) SeriesID() string { + return fmt.Sprintf("%x", sha1.Sum([]byte(b.Series)))[:10] +} + +func (b *Book) FileType() string { + return strings.Replace(strings.ToLower(filepath.Ext(b.FilePath)), ".", "", -1) +} diff --git a/booklist/booklist.go b/booklist/booklist.go new file mode 100644 index 00000000..f59a22b0 --- /dev/null +++ b/booklist/booklist.go @@ -0,0 +1,128 @@ +package booklist + +import ( + "sort" + "strings" +) + +type BookList []*Book + +func (bl BookList) Sorted(less func(a, b *Book) bool) BookList { + nbl := bl[:] + sort.SliceStable(nbl, func(i, j int) bool { + return less(bl[i], bl[j]) + }) + return nbl +} + +func (bl BookList) Filtered(fn func(b *Book) bool) BookList { + nbl := BookList{} + for _, b := range bl { + if fn(b) { + nbl = append(nbl, b) + } + } + return nbl +} + +func (bl BookList) Skip(n int) BookList { + if n >= len(bl) { + return BookList{} + } + return bl[n:] +} + +func (bl BookList) Take(n int) BookList { + if n > len(bl) { + return bl + } + return bl[:n] +} + +// SortBy sorts by sort, and returns a sorted copy. If sorter is invalid, it returns the original list. +// +// sort can be: +// - author-asc +// - author-desc +// - title-asc +// - title-desc +// - series-asc +// - series-desc +// - seriesindex-asc +// - seriesindex-desc +// - modified-desc +func (l BookList) SortBy(sort string) (nl BookList, sorted bool) { + sort = strings.ToLower(sort) + + nb := l[:] + + switch sort { + case "author-asc": + nb = nb.Sorted(func(a, b *Book) bool { + if a.Author != "" && b.Author != "" { + return a.Author < b.Author + } + return false + }) + break + case "author-desc": + nb = nb.Sorted(func(a, b *Book) bool { + if a.Author != "" && b.Author != "" { + return a.Author > b.Author + } + return false + }) + break + case "title-asc": + nb = nb.Sorted(func(a, b *Book) bool { + return a.Title < b.Title + }) + break + case "title-desc": + nb = nb.Sorted(func(a, b *Book) bool { + return a.Title > b.Title + }) + break + case "series-asc": + nb = nb.Sorted(func(a, b *Book) bool { + if a.Series != "" && b.Series != "" { + return a.Series < b.Series + } + return false + }) + break + case "series-desc": + nb = nb.Sorted(func(a, b *Book) bool { + if a.Series != "" && b.Series != "" { + return a.Series > b.Series + } + return false + }) + break + case "seriesindex-asc": + nb = nb.Sorted(func(a, b *Book) bool { + if a.Series != "" && b.Series != "" { + return a.SeriesIndex < b.SeriesIndex + } + return false + }) + break + case "seriesindex-desc": + nb = nb.Sorted(func(a, b *Book) bool { + if a.Series != "" && b.Series != "" { + return a.SeriesIndex > b.SeriesIndex + } + return false + }) + break + case "modified-desc": + nb = nb.Sorted(func(a, b *Book) bool { + return a.ModTime.Unix() > b.ModTime.Unix() + }) + break + default: + return nb, false + } + + return nb, true +} diff --git a/booklist/serieslist.go b/booklist/serieslist.go new file mode 100644 index 00000000..a3b55aa8 --- /dev/null +++ b/booklist/serieslist.go @@ -0,0 +1,30 @@ +package booklist + +import "sort" + +type SeriesList []struct{ Name, ID string } + +func (bl BookList) Series() *SeriesList { + series := SeriesList{} + done := map[string]bool{} + for _, b := range bl { + if b.Series == "" { + continue + } + + if done[b.SeriesID()] { + continue + } + series = append(series, struct{ Name, ID string }{b.Series, b.SeriesID()}) + done[b.SeriesID()] = true + } + return &series +} + +func (sl SeriesList) Sorted(less func(a, b struct{ Name, ID string }) bool) SeriesList { + nsl := sl[:] + sort.SliceStable(nsl, func(i, j int) bool { + return less(sl[i], sl[j]) + }) + return nsl +} diff --git a/formats/all/all.go b/formats/all/all.go deleted file mode 100644 index 56e0ff13..00000000 --- a/formats/all/all.go +++ /dev/null @@ -1,7 +0,0 @@ -package all - -import ( - // All the imported formats register themselves with the RegisterFormat func. - _ "github.com/geek1011/BookBrowser/formats/epub" - _ "github.com/geek1011/BookBrowser/formats/pdf" -) diff --git a/formats/all/all_test.go b/formats/all/all_test.go deleted file mode 100644 index f8d441bd..00000000 --- a/formats/all/all_test.go +++ /dev/null @@ -1,12 +0,0 @@ -package all - -import ( - "testing" - - "github.com/geek1011/BookBrowser/formats" - "github.com/stretchr/testify/assert" -) - -func TestFormats(t *testing.T) { - assert.Equal(t, 2, len(formats.Formats), "should be two formats registered") -} diff --git a/formats/epub/epub.go b/formats/epub/epub.go index bedecd8f..fd7b033c 100644 --- a/formats/epub/epub.go +++ b/formats/epub/epub.go @@ -2,64 +2,115 @@ package epub import ( "archive/zip" - "errors" + "crypto/sha1" "fmt" "image" - "image/gif" - "image/jpeg" - "image/png" + _ "image/gif" + _ "image/png" + "io" "os" "path/filepath" "strconv" - "time" - "golang.org/x/tools/godoc/vfs/zipfs" + "github.com/geek1011/BookBrowser/booklist" + "github.com/geek1011/BookBrowser/formats" "github.com/beevik/etree" - "github.com/geek1011/BookBrowser/formats" - "github.com/geek1011/BookBrowser/models" + "github.com/pkg/errors" + "golang.org/x/tools/godoc/vfs/zipfs" ) -func indexer(filename string) (book *models.Book, cover image.Image, err error) { +type epub struct { + hascover bool + book *booklist.Book + coverpath *string +} + +func (e *epub) Book() *booklist.Book { + return e.book +} + +func (e *epub) HasCover() bool { + return e.coverpath != nil +} + +func (e *epub) GetCover() (i image.Image, err error) { defer func() { if r := recover(); r != nil { - book = nil - cover = nil - err = fmt.Errorf("Unknown error parsing book. Skipping. Error: %s", r) + err = errors.New("panic while decoding cover image") } }() - var title string - var author string - var seriesName string - var seriesIndex float64 - var publisher string - var description string - var hasCover bool - var modtime time.Time - var coverTmp image.Image + zr, err := zip.OpenReader(e.book.FilePath) + if err != nil { + return nil, errors.Wrap(err, "error opening epub as zip") + } + defer zr.Close() - if file, err := os.Stat(filename); err == nil { - modtime = file.ModTime() + zfs := zipfs.New(zr, "epub") + + cr, err := zfs.Open(*e.coverpath) + if err != nil { + return nil, errors.Wrapf(err, "could not open cover '%s'", *e.coverpath) } + defer cr.Close() + + i, _, err = image.Decode(cr) + if err != nil { + return nil, errors.Wrap(err, "error decoding image") + } + + return i, nil +} + +func load(filename string) (formats.BookInfo, error) { + e := &epub{book: &booklist.Book{}, hascover: false} + + f, err := os.Open(filename) + if err != nil { + return nil, err + } + + fi, err := f.Stat() + if err != nil { + f.Close() + return nil, errors.Wrapf(err, "could not stat book") + } + e.book.FilePath = filename + e.book.FileSize = fi.Size() + e.book.ModTime = fi.ModTime() + + s := sha1.New() + i, err := io.Copy(s, f) + if err == nil && i != fi.Size() { + err = errors.New("could not read whole file") + } + if err != nil { + f.Close() + return nil, errors.Wrap(err, "could not hash book") + } + e.book.Hash = fmt.Sprintf("%x", s.Sum(nil)) + + f.Close() zr, err := zip.OpenReader(filename) if err != nil { - return nil, nil, err + return nil, errors.Wrap(err, "error opening epub as zip") } + defer zr.Close() zfs := zipfs.New(zr, "epub") rsk, err := zfs.Open("/META-INF/container.xml") if err != nil { - return nil, nil, err + return nil, errors.Wrap(err, "error reading container.xml") } defer rsk.Close() container := etree.NewDocument() _, err = container.ReadFrom(rsk) if err != nil { - return nil, nil, err + return nil, errors.Wrap(err, "error parsing container.xml") } rootfile := "" @@ -68,101 +119,70 @@ func indexer(filename string) (book *models.Book, cover image.Image, err error) } if rootfile == "" { - return nil, nil, errors.New("Cannot parse container") + return nil, errors.Wrap(err, "could not find rootfile in container.xml") } + opfdir := filepath.Dir(rootfile) + rrsk, err := zfs.Open("/" + rootfile) if err != nil { - return nil, nil, err + return nil, errors.Wrap(err, "error reading rootfile") } defer rrsk.Close() - opfdir := filepath.Dir(rootfile) - opf := etree.NewDocument() _, err = opf.ReadFrom(rrsk) if err != nil { - return nil, nil, err + return nil, errors.Wrap(err, "error parsing rootfile") } - title = filepath.Base(filename) - for _, e := range opf.FindElements("//title") { - title = e.Text() + e.book.Title = filepath.Base(e.book.FilePath) + for _, el := range opf.FindElements("//title") { + e.book.Title = el.Text() break } - for _, e := range opf.FindElements("//creator") { - author = e.Text() + for _, el := range opf.FindElements("//creator") { + e.book.Author = el.Text() break } - for _, e := range opf.FindElements("//publisher") { - publisher = e.Text() + for _, el := range opf.FindElements("//publisher") { + e.book.Publisher = el.Text() break } - for _, e := range opf.FindElements("//description") { - description = e.Text() + for _, el := range opf.FindElements("//description") { + e.book.Description = el.Text() break } - for _, e := range opf.FindElements("//meta[@name='calibre:series']") { - seriesName = e.SelectAttrValue("content", "") - break + for _, el := range opf.FindElements("//meta[@name='calibre:series']") { + s := el.SelectAttrValue("content", "") + e.book.Series = s } - for _, e := range opf.FindElements("//meta[@name='calibre:series_index']") { - i, err := strconv.ParseFloat(e.SelectAttrValue("content", "0"), 64) - if err == nil { - seriesIndex = i + + if e.book.Series != "" { + for _, el := range opf.FindElements("//meta[@name='calibre:series_index']") { + i, _ := strconv.ParseFloat(el.SelectAttrValue("content", "0"), 64) + e.book.SeriesIndex = i break } } - for _, e := range opf.FindElements("//meta[@name='cover']") { - coverid := e.SelectAttrValue("content", "") + for _, el := range opf.FindElements("//meta[@name='cover']") { + coverid := el.SelectAttrValue("content", "") if coverid != "" { for _, f := range opf.FindElements("//[@id='" + coverid + "']") { coverPath := f.SelectAttrValue("href", "") if coverPath != "" { - cr, err := zfs.Open("/" + opfdir + "/" + coverPath) - if err != nil { - continue - } - defer cr.Close() - - ext := filepath.Ext(coverPath) - if ext == ".jpeg" { - ext = ".jpg" - } - - switch ext { - case ".jpg": - coverTmp, err = jpeg.Decode(cr) - if err != nil { - continue - } - case ".gif": - coverTmp, err = gif.Decode(cr) - if err != nil { - continue - } - case ".png": - coverTmp, err = png.Decode(cr) - if err != nil { - continue - } - } - - hasCover = true + coverPath = "/" + opfdir + "/" + coverPath + e.coverpath = &coverPath } } break } } - return models.NewBook(title, author, publisher, seriesName, seriesIndex, description, filename, hasCover, modtime, "epub"), coverTmp, nil + return e, nil } func init() { - formats.RegisterFormat(&formats.Format{ - Glob: "**/*.epub", - Extension: ".epub", - Indexer: indexer, - }) + formats.Register("epub", load) } diff --git a/formats/epub/epub_test.epub b/formats/epub/epub_test.epub deleted file mode 100644 index ea49f338..00000000 Binary files a/formats/epub/epub_test.epub and /dev/null differ diff --git a/formats/epub/epub_test.go b/formats/epub/epub_test.go deleted file mode 100644 index 00cbfefc..00000000 --- a/formats/epub/epub_test.go +++ /dev/null @@ -1,24 +0,0 @@ -package epub - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestEPUBMetadata(t *testing.T) { - book, cover, err := indexer("epub_test.epub") - assert.Nil(t, err, "should not error when loading book") - - assert.NotNil(t, book, "book should not be nil") - assert.NotNil(t, cover, "should return a cover") - assert.Equal(t, "BookBrowser Test Book 1", book.Title, "title") - assert.Equal(t, "Patrick G", book.Author.Name, "author") - assert.Equal(t, "Patrick G", book.Publisher, "publisher") - assert.Equal(t, "

This is a test book for BookBrowser, a ebook content server.

", book.Description, "description") - assert.Equal(t, "epub", book.FileType, "filetype") - assert.True(t, book.HasCover, "should have a cover") - assert.Equal(t, "Test Series", book.Series.Name, "series name") - assert.Equal(t, float64(1), book.Series.Index, "series index") - assert.Equal(t, "a611744562", book.ID, "book id") -} diff --git a/formats/formats.go b/formats/formats.go index b55eb082..2d277dc7 100644 --- a/formats/formats.go +++ b/formats/formats.go @@ -2,34 +2,43 @@ package formats import ( "image" + "path/filepath" + "strings" - "github.com/geek1011/BookBrowser/models" + "github.com/geek1011/BookBrowser/booklist" + + "github.com/pkg/errors" ) -// IndexerFunc is a function which takes a filename and returns a Book and a Cover, if it is present. -type IndexerFunc func(filename string) (book *models.Book, cover image.Image, err error) +var formats = map[string]func(filename string) (BookInfo, error){} -// Format represents a handler for an ebook format. -type Format struct { - Glob string - Extension string // Needs to include the leading period. Also used as the unique identifier. - Indexer IndexerFunc +type BookInfo interface { + Book() *booklist.Book + HasCover() bool + GetCover() (image.Image, error) } -// FormatList represents a list of formats. -type FormatList []*Format - -// Formats is the list of registered formats. -var Formats FormatList +func Register(ext string, load func(filename string) (BookInfo, error)) { + ext = strings.ToLower(ext) + if _, ok := formats[ext]; ok { + panic("attempted to register existing format " + ext) + } + formats[ext] = load +} -// RegisterFormat adds a format to the Formats list. -// This function does not do anything if there is already a format with the given extension. -func RegisterFormat(f *Format) { - for _, i := range Formats { - if i.Extension == f.Extension { - return - } +func Load(filename string) (BookInfo, error) { + ext := strings.Replace(filepath.Ext(filename), ".", "", 1) + load, ok := formats[strings.ToLower(ext)] + if !ok { + return nil, errors.Errorf("could not load format %s", ext) } + return load(filename) +} - Formats = append(Formats, f) +func GetExts() []string { + exts := []string{} + for ext := range formats { + exts = append(exts, ext) + } + return exts } diff --git a/formats/formats_test.go b/formats/formats_test.go deleted file mode 100644 index 9e5fd2c5..00000000 --- a/formats/formats_test.go +++ /dev/null @@ -1,25 +0,0 @@ -package formats - -import ( - "image" - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/geek1011/BookBrowser/models" -) - -func TestRegisterFormat(t *testing.T) { - l := len(Formats) - - RegisterFormat(&Format{ - Glob: "**/*.test", - Extension: "test", - Indexer: func(filename string) (*models.Book, image.Image, error) { - return nil, nil, nil - }, - }) - l++ - - assert.Equal(t, l, len(Formats), "number of formats should have increased by one") -} diff --git a/formats/pdf/pdf.go b/formats/pdf/pdf.go index 6c614b3a..6fe2b8a7 100644 --- a/formats/pdf/pdf.go +++ b/formats/pdf/pdf.go @@ -1,89 +1,120 @@ package pdf import ( + "crypto/sha1" "fmt" "image" + "io" "io/ioutil" - "log" "os" "path/filepath" "runtime/debug" - "time" "github.com/beevik/etree" + "github.com/geek1011/BookBrowser/booklist" "github.com/geek1011/BookBrowser/formats" - "github.com/geek1011/BookBrowser/models" "github.com/geek1011/BookBrowser/modules/util" + "github.com/pkg/errors" ) -func indexer(filename string) (book *models.Book, cover image.Image, err error) { +type pdf struct { + book *booklist.Book +} + +func (e *pdf) Book() *booklist.Book { + return e.book +} + +func (e *pdf) HasCover() bool { + return false +} + +func (e *pdf) GetCover() (i image.Image, err error) { + return nil, errors.New("no cover") +} + +func load(filename string) (bi formats.BookInfo, ferr error) { defer func() { if r := recover(); r != nil { - book = nil - cover = nil - err = fmt.Errorf("Unknown error parsing book. Skipping. Error: %s", r) + bi = nil + ferr = fmt.Errorf("unknown error: %s", r) } }() - var title string - var author string - var modtime time.Time + p := &pdf{book: &booklist.Book{}} - if file, err := os.Stat(filename); err == nil { - modtime = file.ModTime() + f, err := os.Open(filename) + if err != nil { + return nil, err } + fi, err := f.Stat() + if err != nil { + f.Close() + return nil, errors.Wrapf(err, "could not stat book") + } + p.book.FilePath = filename + p.book.FileSize = fi.Size() + p.book.ModTime = fi.ModTime() + + s := sha1.New() + i, err := io.Copy(s, f) + if err == nil && i != fi.Size() { + err = errors.New("could not read whole file") + } + if err != nil { + f.Close() + return nil, errors.Wrap(err, "could not hash book") + } + p.book.Hash = fmt.Sprintf("%x", s.Sum(nil)) + + f.Close() + c, err := ioutil.ReadFile(filename) if err != nil { - log.Fatal(err) + return nil, err } - s := string(c) + str := string(c) c = []byte{} - s = util.StringBetween(s, "") - s = util.StringAfter(s, ">") + str = util.StringBetween(str, "") + str = util.StringAfter(str, ">") xmp := etree.NewDocument() - err = xmp.ReadFromString(s) + err = xmp.ReadFromString(str) if err != nil { - return nil, nil, err + return nil, err } - title = filepath.Base(filename) + p.book.Title = filepath.Base(filename) for _, e := range xmp.FindElements("//format") { // Make sure it is a pdf, not another piece of embedded RDF metadata if e.Text() != "application/pdf" { - s = "" + str = "" debug.FreeOSMemory() - - return models.NewBook(title, author, "", "", 0, "", filename, false, modtime, "pdf"), nil, nil + return p, nil } break } for _, e := range xmp.FindElements("//title/Alt/li") { - title = e.Text() + p.book.Title = e.Text() break } for _, e := range xmp.FindElements("//creator/Seq/li") { - author = e.Text() + p.book.Author = e.Text() break } - s = "" + str = "" debug.FreeOSMemory() - var coverTmp image.Image - return models.NewBook(title, author, "", "", 0, "", filename, false, modtime, "pdf"), coverTmp, nil + return p, nil } func init() { - formats.RegisterFormat(&formats.Format{ - Glob: "**/*.pdf", - Extension: ".pdf", - Indexer: indexer, - }) + formats.Register("pdf", load) } diff --git a/formats/pdf/pdf_test.go b/formats/pdf/pdf_test.go index daa9cb66..e83cb779 100644 --- a/formats/pdf/pdf_test.go +++ b/formats/pdf/pdf_test.go @@ -7,11 +7,10 @@ import ( ) func TestEPUBMetadata(t *testing.T) { - book, cover, err := indexer("pdf_test.pdf") + pdf, err := load("pdf_test.pdf") assert.Nil(t, err, "should not error when loading book") - assert.NotNil(t, book, "book should not be nil") - assert.Nil(t, cover, "should not return a cover") + assert.NotNil(t, pdf, "pdf should not be nil") // TODO: Finish rest of tests } diff --git a/indexer/indexer.go b/indexer/indexer.go new file mode 100644 index 00000000..3fbbd82a --- /dev/null +++ b/indexer/indexer.go @@ -0,0 +1,170 @@ +package indexer + +import ( + "fmt" + "image/jpeg" + "log" + "os" + "path/filepath" + "sync" + + "github.com/geek1011/BookBrowser/booklist" + "github.com/geek1011/BookBrowser/formats" + + zglob "github.com/mattn/go-zglob" + "github.com/nfnt/resize" + "github.com/pkg/errors" +) + +type Indexer struct { + Verbose bool + Progress float64 + coverpath *string + paths []string + exts []string + booklist booklist.BookList + mu sync.Mutex + indMu sync.Mutex +} + +func New(paths []string, coverpath *string, exts []string) (*Indexer, error) { + for i := range paths { + p, err := filepath.Abs(paths[i]) + if err != nil { + return nil, errors.Wrap(err, "error resolving path") + } + paths[i] = p + } + + cp := (*string)(nil) + if coverpath != nil { + p, err := filepath.Abs(*coverpath) + if err != nil { + return nil, errors.Wrap(err, "error resolving cover path") + } + cp = &p + } + + return &Indexer{paths: paths, coverpath: cp, exts: exts}, nil +} + +func (i *Indexer) Refresh() ([]error, error) { + i.indMu.Lock() + defer i.indMu.Unlock() + + defer func() { + i.Progress = 0 + }() + + errs := []error{} + + if len(i.paths) < 1 { + return errs, errors.New("no paths to index") + } + + booklist := booklist.BookList{} + seen := map[string]bool{} + + filenames := []string{} + for _, path := range i.paths { + for _, ext := range i.exts { + l, err := zglob.Glob(filepath.Join(path, "**", fmt.Sprintf("*.%s", ext))) + if l != nil { + filenames = append(filenames, l...) + } + if err != nil { + errs = append(errs, errors.Wrapf(err, "error scanning '%s' for type '%s'", path, ext)) + if i.Verbose { + log.Printf("Error: %v", errs[len(errs)-1]) + } + } + } + } + + for fi, filepath := range filenames { + if i.Verbose { + log.Printf("Indexing %s", filepath) + } + + book, err := i.getBook(filepath) + if err != nil { + errs = append(errs, errors.Wrapf(err, "error reading book '%s'", filepath)) + if i.Verbose { + log.Printf("--> Error: %v", errs[len(errs)-1]) + } + continue + } + if !seen[book.ID()] { + booklist = append(booklist, book) + seen[book.ID()] = true + } + + i.Progress = float64(fi+1) / float64(len(filenames)) + } + + i.mu.Lock() + i.booklist = booklist + i.mu.Unlock() + + return errs, nil +} + +func (i *Indexer) BookList() booklist.BookList { + i.mu.Lock() + defer i.mu.Unlock() + return i.booklist +} + +func (i *Indexer) getBook(filename string) (*booklist.Book, error) { + // TODO: caching + bi, err := formats.Load(filename) + if err != nil { + return nil, errors.Wrap(err, "error loading book") + } + + b := bi.Book() + b.HasCover = false + if i.coverpath != nil && bi.HasCover() { + coverpath := filepath.Join(*i.coverpath, fmt.Sprintf("%s.jpg", b.ID())) + thumbpath := filepath.Join(*i.coverpath, fmt.Sprintf("%s_thumb.jpg", b.ID())) + + _, err := os.Stat(coverpath) + _, errt := os.Stat(thumbpath) + if err != nil || errt != nil { + i, err := bi.GetCover() + if err != nil { + return nil, errors.Wrap(err, "error getting cover") + } + + f, err := os.Create(coverpath) + if err != nil { + return nil, errors.Wrap(err, "could not create cover file") + } + defer f.Close() + + err = jpeg.Encode(f, i, nil) + if err != nil { + os.Remove(coverpath) + return nil, errors.Wrap(err, "could not write cover file") + } + + ti := resize.Thumbnail(400, 400, i, resize.Bicubic) + + tf, err := os.Create(thumbpath) + if err != nil { + return nil, errors.Wrap(err, "could not create cover thumbnail file") + } + defer tf.Close() + + err = jpeg.Encode(tf, ti, nil) + if err != nil { + os.Remove(coverpath) + return nil, errors.Wrap(err, "could not write cover thumbnail file") + } + } + + b.HasCover = true + } + + return b, nil +} diff --git a/models/book.go b/models/book.go deleted file mode 100644 index 619e2385..00000000 --- a/models/book.go +++ /dev/null @@ -1,104 +0,0 @@ -package models - -import ( - "crypto/sha1" - "encoding/hex" - "io" - "time" - - "github.com/geek1011/BookBrowser/modules/util" -) - -// NameID represents a name and an id -type NameID interface { - GetName() string - GetID() string -} - -// Series represents a book series -type Series struct { - Name string `json:"name,omitempty"` - ID string `json:"id,omitempty"` - Index float64 `json:"index,omitempty"` -} - -// GetName gets the name of the Series -func (s *Series) GetName() string { - return s.Name -} - -// GetID gets the id of the Series -func (s *Series) GetID() string { - return s.ID -} - -// Author represents a book author -type Author struct { - Name string `json:"name,omitempty"` - ID string `json:"id,omitempty"` -} - -// GetName gets the name of the Author -func (a *Author) GetName() string { - return a.Name -} - -// GetID gets the id of the Author -func (a *Author) GetID() string { - return a.ID -} - -// Book is a book. -type Book struct { - ID string `json:"id"` - Title string `json:"title"` - Author *Author `json:"author,omitempty"` - Publisher string `json:"publisher,omitempty"` - Description string `json:"description,omitempty"` - Series *Series `json:"series,omitempty"` - Filepath string `json:"filepath"` - HasCover bool `json:"hascover"` - ModTime time.Time `json:"modtime,omitempty"` - FileType string `json:"filetype,omitempty"` // Does not include leading period -} - -// NewBook creates a new book -func NewBook(title, author, publisher, seriesName string, seriesIndex float64, description, filepath string, hascover bool, modtime time.Time, filetype string) *Book { - book := &Book{ - Title: util.FixString(title), - Author: &Author{ - Name: util.FixString(author), - }, - Publisher: util.FixString(publisher), - Description: util.FixString(description), - Series: &Series{ - Name: util.FixString(seriesName), - Index: seriesIndex, - }, - Filepath: filepath, - HasCover: hascover, - ModTime: modtime, - FileType: filetype, - } - - id := sha1.New() - io.WriteString(id, book.Author.Name) // If empty, then it hashes an empty string to retain compatibility with old BookBrowser versions - book.Author.ID = hex.EncodeToString(id.Sum(nil))[:10] - io.WriteString(id, book.Series.Name) // If empty, then it hashes an empty string to retain compatibility with old BookBrowser versions - io.WriteString(id, book.Title) - book.ID = hex.EncodeToString(id.Sum(nil))[:10] - - id = sha1.New() - io.WriteString(id, book.Series.Name) - book.Series.ID = hex.EncodeToString(id.Sum(nil))[:10] - - if seriesName == "" { - book.Series = nil - } - - if author == "" { - book.Author = nil - } - - return book -} diff --git a/modules/booklist/booklist.go b/modules/booklist/booklist.go deleted file mode 100644 index 9b90c437..00000000 --- a/modules/booklist/booklist.go +++ /dev/null @@ -1,413 +0,0 @@ -package booklist - -import ( - "fmt" - "image" - "image/jpeg" - "log" - "math" - "os" - "path/filepath" - "runtime/debug" - "sort" - "strings" - - "github.com/bamiaux/rez" - "github.com/geek1011/BookBrowser/formats" - "github.com/geek1011/BookBrowser/models" - "github.com/geek1011/BookBrowser/modules/util" - zglob "github.com/mattn/go-zglob" -) - -// BookList represents a list of Books -type BookList []*models.Book - -// IndexerError represents a indexer error. -type IndexerError struct { - Filename string - Error error -} - -// NewBookListFromDir creates a BookList from a directory of books. -func NewBookListFromDir(dir, coverOutDir string, verbose, nocovers bool) (*BookList, []*IndexerError) { - errors := []*IndexerError{} - books := BookList{} - - filenames := map[string][]string{} - for _, format := range formats.Formats { - matches, err := zglob.Glob(filepath.Join(dir, format.Glob)) - if err != nil { - errors = append(errors, &IndexerError{ - Filename: format.Glob, - Error: fmt.Errorf("error getting list of matched filenames for format %s: %v", format.Extension, err), - }) - - if verbose { - log.Printf("Error getting matches for %s: %v", format.Glob, err) - } - - continue - } - - filenames[format.Extension] = matches - } - - total := 0 - for _, i := range filenames { - total += len(i) - } - - current := 0 - for _, format := range formats.Formats { - for _, filename := range filenames[format.Extension] { - current++ - - if verbose { - log.Printf("[%v/%v] Indexing %s", current, total, filename) - } - - book, cover, err := format.Indexer(filename) - if err != nil { - errors = append(errors, &IndexerError{ - Filename: filename, - Error: err, - }) - - if verbose { - log.Printf("[%v/%v] Error indexing %s: %v", current, total, filename, err) - } - - continue - } - - if !nocovers && book.HasCover && cover != nil { - coverPath := filepath.Join(coverOutDir, book.ID+".jpg") - thumbPath := filepath.Join(coverOutDir, book.ID+"_thumb.jpg") - - if !(util.Exists(coverPath) && util.Exists(thumbPath)) { - err = makeThumbs(coverPath, thumbPath, cover); - if err != nil { - continue - } - } - - book.HasCover = true - } - - if nocovers { - book.HasCover = false - } - - books = append(books, book) - } - } - - debug.FreeOSMemory() - return &books, errors -} - -func makeThumbs(coverPath string, thumbPath string, cover image.Image) error { - coverFile, err := os.Create(coverPath) - if err != nil { - return nil - } - defer coverFile.Close() - - err = jpeg.Encode(coverFile, cover, nil) - if err != nil { - return nil - } - - coverBounds := cover.Bounds() - coverWidth := coverBounds.Dx() - coverHeight := coverBounds.Dy() - - if coverWidth <= 200 { - return nil - } - - // Scale to fit in 200x900 - scale := math.Min(float64(200.0/float64(coverWidth)), float64(900.0/float64(coverHeight))) - - // Scale and round down - coverWidth = int(float64(coverWidth) * scale) - coverHeight = int(float64(coverHeight) * scale) - - r := image.Rect(0, 0, coverWidth, coverHeight) - var thumb image.Image - switch t := cover.(type) { - case *image.YCbCr: - thumb = image.NewYCbCr(r, t.SubsampleRatio) - case *image.RGBA: - thumb = image.NewRGBA(r) - case *image.NRGBA: - thumb = image.NewNRGBA(r) - case *image.Gray: - thumb = image.NewGray(r) - default: - return nil - } - - // rez.NewLanczos(2.0) is faster, but slower - err = rez.Convert(thumb, cover, rez.NewBicubicFilter()) - if err != nil { - fmt.Println(coverWidth, coverHeight, scale, err) - return err - } - - thumbFile, err := os.Create(thumbPath) - if err != nil { - return err - } - defer thumbFile.Close() - - err = jpeg.Encode(thumbFile, thumb, nil) - if err != nil { - return err - } - - return nil -} - -// Sorted returns a copy of the BookList sorted by the function -func (l *BookList) Sorted(sorter func(a, b *models.Book) bool) BookList { - // Make a copy - sorted := make(BookList, len(*l)) - copy(sorted, *l) - // Sort the copy - sort.Slice(sorted, func(i, j int) bool { - return sorter(sorted[i], sorted[j]) - }) - return sorted -} - -// Filtered returns a copy of the BookList filtered by the function -func (l *BookList) Filtered(filterer func(a *models.Book) bool) *BookList { - filtered := BookList{} - for _, a := range *l { - if filterer(a) { - filtered = append(filtered, a) - } - } - - return &filtered -} - -// AuthorList is a list of authors -type AuthorList []*models.Author - -// SeriesList is a list of series -type SeriesList []*models.Series - -// GetAuthors gets the authors in a BookList -func (l *BookList) GetAuthors() *AuthorList { - authors := AuthorList{} - done := map[string]bool{} - for _, b := range *l { - if b.Author == nil { - continue - } - - if done[b.Author.ID] { - continue - } - authors = append(authors, b.Author) - done[b.Author.ID] = true - } - return &authors -} - -// Sorted returns a copy of the AuthorList sorted by the function -func (l *AuthorList) Sorted(sorter func(a, b *models.Author) bool) *AuthorList { - // Make a copy - sorted := make(AuthorList, len(*l)) - copy(sorted, *l) - // Sort the copy - sort.Slice(sorted, func(i, j int) bool { - return sorter(sorted[i], sorted[j]) - }) - return &sorted -} - -// Filtered returns a copy of the AuthorList filtered by the function -func (l *AuthorList) Filtered(filterer func(a *models.Author) bool) *AuthorList { - filtered := AuthorList{} - for _, a := range *l { - if filterer(a) { - filtered = append(filtered, a) - } - } - - return &filtered -} - -// GetSeries gets the series in a BookList -func (l *BookList) GetSeries() *SeriesList { - series := SeriesList{} - done := map[string]bool{} - for _, b := range *l { - if b.Series == nil { - continue - } - - if done[b.Series.ID] { - continue - } - series = append(series, b.Series) - done[b.Series.ID] = true - } - - return &series -} - -// Sorted returns a copy of the SeriesList sorted by the function -func (l *SeriesList) Sorted(sorter func(a, b *models.Series) bool) *SeriesList { - // Make a copy - sorted := make(SeriesList, len(*l)) - copy(sorted, *l) - // Sort the copy - sort.Slice(sorted, func(i, j int) bool { - return sorter(sorted[i], sorted[j]) - }) - return &sorted -} - -// Filtered returns a copy of the SeriesList filtered by the function -func (l *SeriesList) Filtered(filterer func(a *models.Series) bool) *SeriesList { - filtered := SeriesList{} - for _, a := range *l { - if filterer(a) { - filtered = append(filtered, a) - } - } - - return &filtered -} - -// HasBook checks whether a book with an id exists -func (l *BookList) HasBook(id string) bool { - exists := false - for _, b := range *l { - if b.ID == id { - exists = true - } - } - return exists -} - -// HasAuthor checks whether an author with an id exists -func (l *BookList) HasAuthor(id string) bool { - exists := false - for _, b := range *l { - if b.Author == nil { - continue - } - - if b.Author.ID == id { - exists = true - } - } - return exists -} - -// HasSeries checks whether a series with an id exists -func (l *BookList) HasSeries(id string) bool { - exists := false - for _, b := range *l { - if b.Series == nil { - continue - } - if b.Series.ID == id { - exists = true - } - } - return exists -} - -// SortBy sorts by sort, and returns a sorted copy. If sorter is invalid, it returns the original list. -// -// sort can be: -// - author-asc -// - author-desc -// - title-asc -// - title-desc -// - series-asc -// - series-desc -// - seriesindex-asc -// - seriesindex-desc -// - modified-desc -func (l *BookList) SortBy(sort string) (nl *BookList, sorted bool) { - sort = strings.ToLower(sort) - - nb := *l - - switch sort { - case "author-asc": - nb = nb.Sorted(func(a, b *models.Book) bool { - if a.Author != nil && b.Author != nil { - return a.Author.Name < b.Author.Name - } - return false - }) - break - case "author-desc": - nb = nb.Sorted(func(a, b *models.Book) bool { - if a.Author != nil && b.Author != nil { - return a.Author.Name > b.Author.Name - } - return false - }) - break - case "title-asc": - nb = nb.Sorted(func(a, b *models.Book) bool { - return a.Title < b.Title - }) - break - case "title-desc": - nb = nb.Sorted(func(a, b *models.Book) bool { - return a.Title > b.Title - }) - break - case "series-asc": - nb = nb.Sorted(func(a, b *models.Book) bool { - if a.Series != nil && b.Series != nil { - return a.Series.Name < b.Series.Name - } - return false - }) - break - case "series-desc": - nb = nb.Sorted(func(a, b *models.Book) bool { - if a.Series != nil && b.Series != nil { - return a.Series.Name > b.Series.Name - } - return false - }) - break - case "seriesindex-asc": - nb = nb.Sorted(func(a, b *models.Book) bool { - if a.Series != nil && b.Series != nil { - return a.Series.Index < b.Series.Index - } - return false - }) - break - case "seriesindex-desc": - nb = nb.Sorted(func(a, b *models.Book) bool { - if a.Series != nil && b.Series != nil { - return a.Series.Index > b.Series.Index - } - return false - }) - break - case "modified-desc": - nb = nb.Sorted(func(a, b *models.Book) bool { - return a.ModTime.Unix() > b.ModTime.Unix() - }) - break - default: - return &nb, false - } - - return &nb, true -} diff --git a/modules/booklist/booklist_test.go b/modules/booklist/booklist_test.go deleted file mode 100644 index 805b3fd9..00000000 --- a/modules/booklist/booklist_test.go +++ /dev/null @@ -1,3 +0,0 @@ -package booklist - -// TODO \ No newline at end of file diff --git a/modules/server/bindata.go b/modules/server/bindata.go index 541dc402..65952009 100644 --- a/modules/server/bindata.go +++ b/modules/server/bindata.go @@ -538,7 +538,7 @@ func publicStaticListHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/list.html", size: 14129, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/list.html", size: 14129, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -558,7 +558,7 @@ func publicStaticNocoverJpg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/nocover.jpg", size: 7971, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/nocover.jpg", size: 7971, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -578,7 +578,7 @@ func publicStaticNormalizeCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/normalize.css", size: 7719, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/normalize.css", size: 7719, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -598,7 +598,7 @@ func publicStaticPicomodalJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/picomodal.js", size: 5525, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/picomodal.js", size: 5525, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -618,7 +618,7 @@ func publicStaticReaderEpubReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/epub/README.md", size: 211, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/epub/README.md", size: 211, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -638,7 +638,7 @@ func publicStaticReaderEpubEpubjsEpubMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/epub/epubjs/epub.min.js", size: 103166, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/epub/epubjs/epub.min.js", size: 103166, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -658,7 +658,7 @@ func publicStaticReaderEpubEpubjsHooksMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/epub/epubjs/hooks.min.js", size: 4290, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/epub/epubjs/hooks.min.js", size: 4290, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -678,7 +678,7 @@ func publicStaticReaderEpubEpubjsLibsHammerMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/epub/epubjs/libs/hammer.min.js", size: 19756, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/epub/epubjs/libs/hammer.min.js", size: 19756, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -698,7 +698,7 @@ func publicStaticReaderEpubEpubjsLibsLocalforageMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/epub/epubjs/libs/localforage.min.js", size: 25282, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/epub/epubjs/libs/localforage.min.js", size: 25282, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -718,7 +718,7 @@ func publicStaticReaderEpubEpubjsLibsLocalforageMinMap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/epub/epubjs/libs/localforage.min.map", size: 31339, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/epub/epubjs/libs/localforage.min.map", size: 31339, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -738,7 +738,7 @@ func publicStaticReaderEpubEpubjsLibsZipMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/epub/epubjs/libs/zip.min.js", size: 76985, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/epub/epubjs/libs/zip.min.js", size: 76985, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -758,7 +758,7 @@ func publicStaticReaderEpubEpubjsLibsZipMinMap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/epub/epubjs/libs/zip.min.map", size: 37804, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/epub/epubjs/libs/zip.min.map", size: 37804, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -778,7 +778,7 @@ func publicStaticReaderEpubIconIco() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/epub/icon.ico", size: 130980, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/epub/icon.ico", size: 130980, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -798,7 +798,7 @@ func publicStaticReaderEpubIconPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/epub/icon.png", size: 10404, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/epub/icon.png", size: 10404, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -818,7 +818,7 @@ func publicStaticReaderEpubIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/epub/index.html", size: 15095, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/epub/index.html", size: 15095, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -838,7 +838,7 @@ func publicStaticReaderEpubScriptJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/epub/script.js", size: 29009, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/epub/script.js", size: 29009, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -858,7 +858,7 @@ func publicStaticReaderEpubStyleCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/epub/style.css", size: 10454, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/epub/style.css", size: 10454, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -878,7 +878,7 @@ func publicStaticReaderPdfLicense() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/LICENSE", size: 10174, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/LICENSE", size: 10174, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -898,7 +898,7 @@ func publicStaticReaderPdfApiDraftAnnotationborderstyleHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/AnnotationBorderStyle.html", size: 10032, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/AnnotationBorderStyle.html", size: 10032, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -918,7 +918,7 @@ func publicStaticReaderPdfApiDraftAnnotationfactoryHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/AnnotationFactory.html", size: 5615, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/AnnotationFactory.html", size: 5615, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -938,7 +938,7 @@ func publicStaticReaderPdfApiDraftPdfdatarangetransportHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/PDFDataRangeTransport.html", size: 4193, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/PDFDataRangeTransport.html", size: 4193, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -958,7 +958,7 @@ func publicStaticReaderPdfApiDraftPdfdocumentloadingtaskHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/PDFDocumentLoadingTask.html", size: 18528, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/PDFDocumentLoadingTask.html", size: 18528, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -978,7 +978,7 @@ func publicStaticReaderPdfApiDraftPdfdocumentproxyHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/PDFDocumentProxy.html", size: 18881, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/PDFDocumentProxy.html", size: 18881, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -998,7 +998,7 @@ func publicStaticReaderPdfApiDraftPdfjsHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/PDFJS.html", size: 20557, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/PDFJS.html", size: 20557, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1018,7 +1018,7 @@ func publicStaticReaderPdfApiDraftPdfpageproxyHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/PDFPageProxy.html", size: 17121, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/PDFPageProxy.html", size: 17121, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1038,7 +1038,7 @@ func publicStaticReaderPdfApiDraftPdfworkerHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/PDFWorker.html", size: 4013, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/PDFWorker.html", size: 4013, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1058,7 +1058,7 @@ func publicStaticReaderPdfApiDraftPageviewportHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/PageViewport.html", size: 11037, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/PageViewport.html", size: 11037, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1078,7 +1078,7 @@ func publicStaticReaderPdfApiDraftRendertaskHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/RenderTask.html", size: 6686, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/RenderTask.html", size: 6686, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1098,7 +1098,7 @@ func publicStaticReaderPdfApiDraftCore_annotationJsHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/core_annotation.js.html", size: 35154, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/core_annotation.js.html", size: 35154, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1118,7 +1118,7 @@ func publicStaticReaderPdfApiDraftDisplay_apiJsHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/display_api.js.html", size: 83440, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/display_api.js.html", size: 83440, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1138,7 +1138,7 @@ func publicStaticReaderPdfApiDraftDisplay_globalJsHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/display_global.js.html", size: 12652, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/display_global.js.html", size: 12652, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1158,7 +1158,7 @@ func publicStaticReaderPdfApiDraftDoc_helperJsHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/doc_helper.js.html", size: 3610, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/doc_helper.js.html", size: 3610, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1178,7 +1178,7 @@ func publicStaticReaderPdfApiDraftExternalPromiseHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/external-Promise.html", size: 3027, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/external-Promise.html", size: 3027, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1198,7 +1198,7 @@ func publicStaticReaderPdfApiDraftFontsOpensansBoldWebfontEot() (*asset, error) return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Bold-webfont.eot", size: 19544, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Bold-webfont.eot", size: 19544, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1218,7 +1218,7 @@ func publicStaticReaderPdfApiDraftFontsOpensansBoldWebfontSvg() (*asset, error) return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Bold-webfont.svg", size: 118259, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Bold-webfont.svg", size: 118259, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1238,7 +1238,7 @@ func publicStaticReaderPdfApiDraftFontsOpensansBoldWebfontWoff() (*asset, error) return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Bold-webfont.woff", size: 22432, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Bold-webfont.woff", size: 22432, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1258,7 +1258,7 @@ func publicStaticReaderPdfApiDraftFontsOpensansBolditalicWebfontEot() (*asset, e return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-BoldItalic-webfont.eot", size: 20133, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-BoldItalic-webfont.eot", size: 20133, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1278,7 +1278,7 @@ func publicStaticReaderPdfApiDraftFontsOpensansBolditalicWebfontSvg() (*asset, e return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-BoldItalic-webfont.svg", size: 121112, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-BoldItalic-webfont.svg", size: 121112, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1298,7 +1298,7 @@ func publicStaticReaderPdfApiDraftFontsOpensansBolditalicWebfontWoff() (*asset, return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-BoldItalic-webfont.woff", size: 23048, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-BoldItalic-webfont.woff", size: 23048, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1318,7 +1318,7 @@ func publicStaticReaderPdfApiDraftFontsOpensansItalicWebfontEot() (*asset, error return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Italic-webfont.eot", size: 20265, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Italic-webfont.eot", size: 20265, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1338,7 +1338,7 @@ func publicStaticReaderPdfApiDraftFontsOpensansItalicWebfontSvg() (*asset, error return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Italic-webfont.svg", size: 122495, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Italic-webfont.svg", size: 122495, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1358,7 +1358,7 @@ func publicStaticReaderPdfApiDraftFontsOpensansItalicWebfontWoff() (*asset, erro return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Italic-webfont.woff", size: 23188, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Italic-webfont.woff", size: 23188, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1378,7 +1378,7 @@ func publicStaticReaderPdfApiDraftFontsOpensansLightWebfontEot() (*asset, error) return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Light-webfont.eot", size: 19514, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Light-webfont.eot", size: 19514, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1398,7 +1398,7 @@ func publicStaticReaderPdfApiDraftFontsOpensansLightWebfontSvg() (*asset, error) return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Light-webfont.svg", size: 117270, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Light-webfont.svg", size: 117270, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1418,7 +1418,7 @@ func publicStaticReaderPdfApiDraftFontsOpensansLightWebfontWoff() (*asset, error return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Light-webfont.woff", size: 22248, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Light-webfont.woff", size: 22248, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1438,7 +1438,7 @@ func publicStaticReaderPdfApiDraftFontsOpensansLightitalicWebfontEot() (*asset, return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-LightItalic-webfont.eot", size: 20535, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-LightItalic-webfont.eot", size: 20535, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1458,7 +1458,7 @@ func publicStaticReaderPdfApiDraftFontsOpensansLightitalicWebfontSvg() (*asset, return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-LightItalic-webfont.svg", size: 122968, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-LightItalic-webfont.svg", size: 122968, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1478,7 +1478,7 @@ func publicStaticReaderPdfApiDraftFontsOpensansLightitalicWebfontWoff() (*asset, return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-LightItalic-webfont.woff", size: 23400, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-LightItalic-webfont.woff", size: 23400, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1498,7 +1498,7 @@ func publicStaticReaderPdfApiDraftFontsOpensansRegularWebfontEot() (*asset, erro return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Regular-webfont.eot", size: 19836, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Regular-webfont.eot", size: 19836, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1518,7 +1518,7 @@ func publicStaticReaderPdfApiDraftFontsOpensansRegularWebfontSvg() (*asset, erro return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Regular-webfont.svg", size: 119399, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Regular-webfont.svg", size: 119399, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1538,7 +1538,7 @@ func publicStaticReaderPdfApiDraftFontsOpensansRegularWebfontWoff() (*asset, err return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Regular-webfont.woff", size: 22660, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/fonts/OpenSans-Regular-webfont.woff", size: 22660, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1558,7 +1558,7 @@ func publicStaticReaderPdfApiDraftGlobalHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/global.html", size: 43265, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/global.html", size: 43265, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1578,7 +1578,7 @@ func publicStaticReaderPdfApiDraftIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/index.html", size: 2156, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/index.html", size: 2156, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1598,7 +1598,7 @@ func publicStaticReaderPdfApiDraftScriptsLinenumberJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/scripts/linenumber.js", size: 674, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/scripts/linenumber.js", size: 674, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1618,7 +1618,7 @@ func publicStaticReaderPdfApiDraftScriptsPrettifyApacheLicense20Txt() (*asset, e return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/scripts/prettify/Apache-License-2.0.txt", size: 11358, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/scripts/prettify/Apache-License-2.0.txt", size: 11358, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1638,7 +1638,7 @@ func publicStaticReaderPdfApiDraftScriptsPrettifyLangCssJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/scripts/prettify/lang-css.js", size: 861, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/scripts/prettify/lang-css.js", size: 861, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1658,7 +1658,7 @@ func publicStaticReaderPdfApiDraftScriptsPrettifyPrettifyJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/scripts/prettify/prettify.js", size: 13632, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/scripts/prettify/prettify.js", size: 13632, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1678,7 +1678,7 @@ func publicStaticReaderPdfApiDraftShared_utilJsHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/shared_util.js.html", size: 50127, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/shared_util.js.html", size: 50127, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1698,7 +1698,7 @@ func publicStaticReaderPdfApiDraftStylesJsdocDefaultCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/styles/jsdoc-default.css", size: 5972, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/styles/jsdoc-default.css", size: 5972, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1718,7 +1718,7 @@ func publicStaticReaderPdfApiDraftStylesPrettifyJsdocCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/styles/prettify-jsdoc.css", size: 1535, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/styles/prettify-jsdoc.css", size: 1535, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1738,7 +1738,7 @@ func publicStaticReaderPdfApiDraftStylesPrettifyTomorrowCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/styles/prettify-tomorrow.css", size: 2026, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/draft/styles/prettify-tomorrow.css", size: 2026, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1758,7 +1758,7 @@ func publicStaticReaderPdfApiIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/api/index.html", size: 2346, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/api/index.html", size: 2346, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1778,7 +1778,7 @@ func publicStaticReaderPdfCssBootstrapMinCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/css/bootstrap.min.css", size: 99961, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/css/bootstrap.min.css", size: 99961, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1798,7 +1798,7 @@ func publicStaticReaderPdfCssMainCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/css/main.css", size: 2605, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/css/main.css", size: 2605, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1818,7 +1818,7 @@ func publicStaticReaderPdfExamplesIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/examples/index.html", size: 6819, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/examples/index.html", size: 6819, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1838,7 +1838,7 @@ func publicStaticReaderPdfExtensionsFirefoxInstallRdf() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/extensions/firefox/install.rdf", size: 9547, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/extensions/firefox/install.rdf", size: 9547, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1858,7 +1858,7 @@ func publicStaticReaderPdfExtensionsFirefoxPdfJsXpi() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/extensions/firefox/pdf.js.xpi", size: 1942093, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/extensions/firefox/pdf.js.xpi", size: 1942093, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1878,7 +1878,7 @@ func publicStaticReaderPdfExtensionsFirefoxUpdateRdf() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/extensions/firefox/update.rdf", size: 1569, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/extensions/firefox/update.rdf", size: 1569, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1898,7 +1898,7 @@ func publicStaticReaderPdfFeaturesIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/features/index.html", size: 6258, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/features/index.html", size: 6258, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1918,7 +1918,7 @@ func publicStaticReaderPdfFeaturesTestsJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/features/tests.js", size: 21327, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/features/tests.js", size: 21327, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1938,7 +1938,7 @@ func publicStaticReaderPdfFeaturesWorkerStubJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/features/worker-stub.js", size: 1209, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/features/worker-stub.js", size: 1209, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1958,7 +1958,7 @@ func publicStaticReaderPdfGetting_startedIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/getting_started/index.html", size: 7555, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/getting_started/index.html", size: 7555, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1978,7 +1978,7 @@ func publicStaticReaderPdfImagesFaviconIco() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/images/favicon.ico", size: 32988, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/images/favicon.ico", size: 32988, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1998,7 +1998,7 @@ func publicStaticReaderPdfImagesLogoSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/images/logo.svg", size: 3263, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/images/logo.svg", size: 3263, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2018,7 +2018,7 @@ func publicStaticReaderPdfIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/index.html", size: 2598, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/index.html", size: 2598, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2038,7 +2038,7 @@ func publicStaticReaderPdfJsBootstrapMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/js/bootstrap.min.js", size: 29110, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/js/bootstrap.min.js", size: 29110, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2058,7 +2058,7 @@ func publicStaticReaderPdfJsJquery210MinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/js/jquery-2.1.0.min.js", size: 83615, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/js/jquery-2.1.0.min.js", size: 83615, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2078,7 +2078,7 @@ func publicStaticReaderPdfWebCmaps78EucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/78-EUC-H.bcmap", size: 2404, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/78-EUC-H.bcmap", size: 2404, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2098,7 +2098,7 @@ func publicStaticReaderPdfWebCmaps78EucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/78-EUC-V.bcmap", size: 173, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/78-EUC-V.bcmap", size: 173, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2118,7 +2118,7 @@ func publicStaticReaderPdfWebCmaps78HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/78-H.bcmap", size: 2379, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/78-H.bcmap", size: 2379, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2138,7 +2138,7 @@ func publicStaticReaderPdfWebCmaps78RksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/78-RKSJ-H.bcmap", size: 2398, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/78-RKSJ-H.bcmap", size: 2398, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2158,7 +2158,7 @@ func publicStaticReaderPdfWebCmaps78RksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/78-RKSJ-V.bcmap", size: 173, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/78-RKSJ-V.bcmap", size: 173, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2178,7 +2178,7 @@ func publicStaticReaderPdfWebCmaps78VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/78-V.bcmap", size: 169, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/78-V.bcmap", size: 169, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2198,7 +2198,7 @@ func publicStaticReaderPdfWebCmaps78msRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/78ms-RKSJ-H.bcmap", size: 2651, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/78ms-RKSJ-H.bcmap", size: 2651, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2218,7 +2218,7 @@ func publicStaticReaderPdfWebCmaps78msRksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/78ms-RKSJ-V.bcmap", size: 290, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/78ms-RKSJ-V.bcmap", size: 290, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2238,7 +2238,7 @@ func publicStaticReaderPdfWebCmaps83pvRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/83pv-RKSJ-H.bcmap", size: 905, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/83pv-RKSJ-H.bcmap", size: 905, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2258,7 +2258,7 @@ func publicStaticReaderPdfWebCmaps90msRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/90ms-RKSJ-H.bcmap", size: 721, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/90ms-RKSJ-H.bcmap", size: 721, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2278,7 +2278,7 @@ func publicStaticReaderPdfWebCmaps90msRksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/90ms-RKSJ-V.bcmap", size: 290, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/90ms-RKSJ-V.bcmap", size: 290, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2298,7 +2298,7 @@ func publicStaticReaderPdfWebCmaps90mspRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/90msp-RKSJ-H.bcmap", size: 715, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/90msp-RKSJ-H.bcmap", size: 715, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2318,7 +2318,7 @@ func publicStaticReaderPdfWebCmaps90mspRksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/90msp-RKSJ-V.bcmap", size: 291, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/90msp-RKSJ-V.bcmap", size: 291, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2338,7 +2338,7 @@ func publicStaticReaderPdfWebCmaps90pvRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/90pv-RKSJ-H.bcmap", size: 982, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/90pv-RKSJ-H.bcmap", size: 982, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2358,7 +2358,7 @@ func publicStaticReaderPdfWebCmaps90pvRksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/90pv-RKSJ-V.bcmap", size: 260, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/90pv-RKSJ-V.bcmap", size: 260, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2378,7 +2378,7 @@ func publicStaticReaderPdfWebCmapsAddHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Add-H.bcmap", size: 2419, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Add-H.bcmap", size: 2419, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2398,7 +2398,7 @@ func publicStaticReaderPdfWebCmapsAddRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Add-RKSJ-H.bcmap", size: 2413, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Add-RKSJ-H.bcmap", size: 2413, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2418,7 +2418,7 @@ func publicStaticReaderPdfWebCmapsAddRksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Add-RKSJ-V.bcmap", size: 287, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Add-RKSJ-V.bcmap", size: 287, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2438,7 +2438,7 @@ func publicStaticReaderPdfWebCmapsAddVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Add-V.bcmap", size: 282, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Add-V.bcmap", size: 282, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2458,7 +2458,7 @@ func publicStaticReaderPdfWebCmapsAdobeCns10Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-CNS1-0.bcmap", size: 317, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-CNS1-0.bcmap", size: 317, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2478,7 +2478,7 @@ func publicStaticReaderPdfWebCmapsAdobeCns11Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-CNS1-1.bcmap", size: 371, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-CNS1-1.bcmap", size: 371, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2498,7 +2498,7 @@ func publicStaticReaderPdfWebCmapsAdobeCns12Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-CNS1-2.bcmap", size: 376, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-CNS1-2.bcmap", size: 376, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2518,7 +2518,7 @@ func publicStaticReaderPdfWebCmapsAdobeCns13Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-CNS1-3.bcmap", size: 401, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-CNS1-3.bcmap", size: 401, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2538,7 +2538,7 @@ func publicStaticReaderPdfWebCmapsAdobeCns14Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-CNS1-4.bcmap", size: 405, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-CNS1-4.bcmap", size: 405, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2558,7 +2558,7 @@ func publicStaticReaderPdfWebCmapsAdobeCns15Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-CNS1-5.bcmap", size: 406, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-CNS1-5.bcmap", size: 406, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2578,7 +2578,7 @@ func publicStaticReaderPdfWebCmapsAdobeCns16Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-CNS1-6.bcmap", size: 406, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-CNS1-6.bcmap", size: 406, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2598,7 +2598,7 @@ func publicStaticReaderPdfWebCmapsAdobeCns1Ucs2Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-CNS1-UCS2.bcmap", size: 41193, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-CNS1-UCS2.bcmap", size: 41193, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2618,7 +2618,7 @@ func publicStaticReaderPdfWebCmapsAdobeGb10Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-GB1-0.bcmap", size: 217, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-GB1-0.bcmap", size: 217, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2638,7 +2638,7 @@ func publicStaticReaderPdfWebCmapsAdobeGb11Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-GB1-1.bcmap", size: 250, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-GB1-1.bcmap", size: 250, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2658,7 +2658,7 @@ func publicStaticReaderPdfWebCmapsAdobeGb12Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-GB1-2.bcmap", size: 465, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-GB1-2.bcmap", size: 465, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2678,7 +2678,7 @@ func publicStaticReaderPdfWebCmapsAdobeGb13Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-GB1-3.bcmap", size: 470, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-GB1-3.bcmap", size: 470, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2698,7 +2698,7 @@ func publicStaticReaderPdfWebCmapsAdobeGb14Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-GB1-4.bcmap", size: 601, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-GB1-4.bcmap", size: 601, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2718,7 +2718,7 @@ func publicStaticReaderPdfWebCmapsAdobeGb15Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-GB1-5.bcmap", size: 625, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-GB1-5.bcmap", size: 625, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2738,7 +2738,7 @@ func publicStaticReaderPdfWebCmapsAdobeGb1Ucs2Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-GB1-UCS2.bcmap", size: 33974, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-GB1-UCS2.bcmap", size: 33974, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2758,7 +2758,7 @@ func publicStaticReaderPdfWebCmapsAdobeJapan10Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Japan1-0.bcmap", size: 225, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Japan1-0.bcmap", size: 225, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2778,7 +2778,7 @@ func publicStaticReaderPdfWebCmapsAdobeJapan11Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Japan1-1.bcmap", size: 226, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Japan1-1.bcmap", size: 226, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2798,7 +2798,7 @@ func publicStaticReaderPdfWebCmapsAdobeJapan12Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Japan1-2.bcmap", size: 233, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Japan1-2.bcmap", size: 233, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2818,7 +2818,7 @@ func publicStaticReaderPdfWebCmapsAdobeJapan13Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Japan1-3.bcmap", size: 242, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Japan1-3.bcmap", size: 242, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2838,7 +2838,7 @@ func publicStaticReaderPdfWebCmapsAdobeJapan14Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Japan1-4.bcmap", size: 337, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Japan1-4.bcmap", size: 337, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2858,7 +2858,7 @@ func publicStaticReaderPdfWebCmapsAdobeJapan15Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Japan1-5.bcmap", size: 430, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Japan1-5.bcmap", size: 430, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2878,7 +2878,7 @@ func publicStaticReaderPdfWebCmapsAdobeJapan16Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Japan1-6.bcmap", size: 485, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Japan1-6.bcmap", size: 485, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2898,7 +2898,7 @@ func publicStaticReaderPdfWebCmapsAdobeJapan1Ucs2Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Japan1-UCS2.bcmap", size: 40951, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Japan1-UCS2.bcmap", size: 40951, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2918,7 +2918,7 @@ func publicStaticReaderPdfWebCmapsAdobeKorea10Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Korea1-0.bcmap", size: 241, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Korea1-0.bcmap", size: 241, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2938,7 +2938,7 @@ func publicStaticReaderPdfWebCmapsAdobeKorea11Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Korea1-1.bcmap", size: 386, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Korea1-1.bcmap", size: 386, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2958,7 +2958,7 @@ func publicStaticReaderPdfWebCmapsAdobeKorea12Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Korea1-2.bcmap", size: 391, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Korea1-2.bcmap", size: 391, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2978,7 +2978,7 @@ func publicStaticReaderPdfWebCmapsAdobeKorea1Ucs2Bcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Korea1-UCS2.bcmap", size: 23293, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Adobe-Korea1-UCS2.bcmap", size: 23293, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2998,7 +2998,7 @@ func publicStaticReaderPdfWebCmapsB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/B5-H.bcmap", size: 1086, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/B5-H.bcmap", size: 1086, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3018,7 +3018,7 @@ func publicStaticReaderPdfWebCmapsB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/B5-V.bcmap", size: 142, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/B5-V.bcmap", size: 142, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3038,7 +3038,7 @@ func publicStaticReaderPdfWebCmapsB5pcHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/B5pc-H.bcmap", size: 1099, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/B5pc-H.bcmap", size: 1099, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3058,7 +3058,7 @@ func publicStaticReaderPdfWebCmapsB5pcVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/B5pc-V.bcmap", size: 144, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/B5pc-V.bcmap", size: 144, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3078,7 +3078,7 @@ func publicStaticReaderPdfWebCmapsCnsEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/CNS-EUC-H.bcmap", size: 1780, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/CNS-EUC-H.bcmap", size: 1780, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3098,7 +3098,7 @@ func publicStaticReaderPdfWebCmapsCnsEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/CNS-EUC-V.bcmap", size: 1920, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/CNS-EUC-V.bcmap", size: 1920, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3118,7 +3118,7 @@ func publicStaticReaderPdfWebCmapsCns1HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/CNS1-H.bcmap", size: 706, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/CNS1-H.bcmap", size: 706, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3138,7 +3138,7 @@ func publicStaticReaderPdfWebCmapsCns1VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/CNS1-V.bcmap", size: 143, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/CNS1-V.bcmap", size: 143, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3158,7 +3158,7 @@ func publicStaticReaderPdfWebCmapsCns2HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/CNS2-H.bcmap", size: 504, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/CNS2-H.bcmap", size: 504, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3178,7 +3178,7 @@ func publicStaticReaderPdfWebCmapsCns2VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/CNS2-V.bcmap", size: 93, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/CNS2-V.bcmap", size: 93, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3198,7 +3198,7 @@ func publicStaticReaderPdfWebCmapsEthkB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/ETHK-B5-H.bcmap", size: 4426, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/ETHK-B5-H.bcmap", size: 4426, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3218,7 +3218,7 @@ func publicStaticReaderPdfWebCmapsEthkB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/ETHK-B5-V.bcmap", size: 158, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/ETHK-B5-V.bcmap", size: 158, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3238,7 +3238,7 @@ func publicStaticReaderPdfWebCmapsEtenB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/ETen-B5-H.bcmap", size: 1125, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/ETen-B5-H.bcmap", size: 1125, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3258,7 +3258,7 @@ func publicStaticReaderPdfWebCmapsEtenB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/ETen-B5-V.bcmap", size: 158, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/ETen-B5-V.bcmap", size: 158, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3278,7 +3278,7 @@ func publicStaticReaderPdfWebCmapsEtenmsB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/ETenms-B5-H.bcmap", size: 101, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/ETenms-B5-H.bcmap", size: 101, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3298,7 +3298,7 @@ func publicStaticReaderPdfWebCmapsEtenmsB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/ETenms-B5-V.bcmap", size: 172, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/ETenms-B5-V.bcmap", size: 172, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3318,7 +3318,7 @@ func publicStaticReaderPdfWebCmapsEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/EUC-H.bcmap", size: 578, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/EUC-H.bcmap", size: 578, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3338,7 +3338,7 @@ func publicStaticReaderPdfWebCmapsEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/EUC-V.bcmap", size: 170, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/EUC-V.bcmap", size: 170, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3358,7 +3358,7 @@ func publicStaticReaderPdfWebCmapsExtHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Ext-H.bcmap", size: 2536, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Ext-H.bcmap", size: 2536, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3378,7 +3378,7 @@ func publicStaticReaderPdfWebCmapsExtRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Ext-RKSJ-H.bcmap", size: 2542, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Ext-RKSJ-H.bcmap", size: 2542, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3398,7 +3398,7 @@ func publicStaticReaderPdfWebCmapsExtRksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Ext-RKSJ-V.bcmap", size: 218, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Ext-RKSJ-V.bcmap", size: 218, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3418,7 +3418,7 @@ func publicStaticReaderPdfWebCmapsExtVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Ext-V.bcmap", size: 215, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Ext-V.bcmap", size: 215, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3438,7 +3438,7 @@ func publicStaticReaderPdfWebCmapsGbEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GB-EUC-H.bcmap", size: 549, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GB-EUC-H.bcmap", size: 549, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3458,7 +3458,7 @@ func publicStaticReaderPdfWebCmapsGbEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GB-EUC-V.bcmap", size: 179, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GB-EUC-V.bcmap", size: 179, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3478,7 +3478,7 @@ func publicStaticReaderPdfWebCmapsGbHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GB-H.bcmap", size: 528, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GB-H.bcmap", size: 528, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3498,7 +3498,7 @@ func publicStaticReaderPdfWebCmapsGbVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GB-V.bcmap", size: 175, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GB-V.bcmap", size: 175, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3518,7 +3518,7 @@ func publicStaticReaderPdfWebCmapsGbkEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBK-EUC-H.bcmap", size: 14692, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBK-EUC-H.bcmap", size: 14692, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3538,7 +3538,7 @@ func publicStaticReaderPdfWebCmapsGbkEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBK-EUC-V.bcmap", size: 180, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBK-EUC-V.bcmap", size: 180, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3558,7 +3558,7 @@ func publicStaticReaderPdfWebCmapsGbk2kHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBK2K-H.bcmap", size: 19662, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBK2K-H.bcmap", size: 19662, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3578,7 +3578,7 @@ func publicStaticReaderPdfWebCmapsGbk2kVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBK2K-V.bcmap", size: 219, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBK2K-V.bcmap", size: 219, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3598,7 +3598,7 @@ func publicStaticReaderPdfWebCmapsGbkpEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBKp-EUC-H.bcmap", size: 14686, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBKp-EUC-H.bcmap", size: 14686, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3618,7 +3618,7 @@ func publicStaticReaderPdfWebCmapsGbkpEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBKp-EUC-V.bcmap", size: 181, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBKp-EUC-V.bcmap", size: 181, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3638,7 +3638,7 @@ func publicStaticReaderPdfWebCmapsGbtEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBT-EUC-H.bcmap", size: 7290, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBT-EUC-H.bcmap", size: 7290, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3658,7 +3658,7 @@ func publicStaticReaderPdfWebCmapsGbtEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBT-EUC-V.bcmap", size: 180, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBT-EUC-V.bcmap", size: 180, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3678,7 +3678,7 @@ func publicStaticReaderPdfWebCmapsGbtHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBT-H.bcmap", size: 7269, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBT-H.bcmap", size: 7269, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3698,7 +3698,7 @@ func publicStaticReaderPdfWebCmapsGbtVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBT-V.bcmap", size: 176, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBT-V.bcmap", size: 176, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3718,7 +3718,7 @@ func publicStaticReaderPdfWebCmapsGbtpcEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBTpc-EUC-H.bcmap", size: 7298, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBTpc-EUC-H.bcmap", size: 7298, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3738,7 +3738,7 @@ func publicStaticReaderPdfWebCmapsGbtpcEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBTpc-EUC-V.bcmap", size: 182, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBTpc-EUC-V.bcmap", size: 182, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3758,7 +3758,7 @@ func publicStaticReaderPdfWebCmapsGbpcEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBpc-EUC-H.bcmap", size: 557, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBpc-EUC-H.bcmap", size: 557, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3778,7 +3778,7 @@ func publicStaticReaderPdfWebCmapsGbpcEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBpc-EUC-V.bcmap", size: 181, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/GBpc-EUC-V.bcmap", size: 181, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3798,7 +3798,7 @@ func publicStaticReaderPdfWebCmapsHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/H.bcmap", size: 553, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/H.bcmap", size: 553, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3818,7 +3818,7 @@ func publicStaticReaderPdfWebCmapsHkdlaB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKdla-B5-H.bcmap", size: 2654, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKdla-B5-H.bcmap", size: 2654, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3838,7 +3838,7 @@ func publicStaticReaderPdfWebCmapsHkdlaB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKdla-B5-V.bcmap", size: 148, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKdla-B5-V.bcmap", size: 148, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3858,7 +3858,7 @@ func publicStaticReaderPdfWebCmapsHkdlbB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKdlb-B5-H.bcmap", size: 2414, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKdlb-B5-H.bcmap", size: 2414, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3878,7 +3878,7 @@ func publicStaticReaderPdfWebCmapsHkdlbB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKdlb-B5-V.bcmap", size: 148, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKdlb-B5-V.bcmap", size: 148, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3898,7 +3898,7 @@ func publicStaticReaderPdfWebCmapsHkgccsB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKgccs-B5-H.bcmap", size: 2292, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKgccs-B5-H.bcmap", size: 2292, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3918,7 +3918,7 @@ func publicStaticReaderPdfWebCmapsHkgccsB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKgccs-B5-V.bcmap", size: 149, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKgccs-B5-V.bcmap", size: 149, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3938,7 +3938,7 @@ func publicStaticReaderPdfWebCmapsHkm314B5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKm314-B5-H.bcmap", size: 1772, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKm314-B5-H.bcmap", size: 1772, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3958,7 +3958,7 @@ func publicStaticReaderPdfWebCmapsHkm314B5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKm314-B5-V.bcmap", size: 149, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKm314-B5-V.bcmap", size: 149, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3978,7 +3978,7 @@ func publicStaticReaderPdfWebCmapsHkm471B5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKm471-B5-H.bcmap", size: 2171, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKm471-B5-H.bcmap", size: 2171, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3998,7 +3998,7 @@ func publicStaticReaderPdfWebCmapsHkm471B5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKm471-B5-V.bcmap", size: 149, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKm471-B5-V.bcmap", size: 149, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4018,7 +4018,7 @@ func publicStaticReaderPdfWebCmapsHkscsB5HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKscs-B5-H.bcmap", size: 4437, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKscs-B5-H.bcmap", size: 4437, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4038,7 +4038,7 @@ func publicStaticReaderPdfWebCmapsHkscsB5VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKscs-B5-V.bcmap", size: 159, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/HKscs-B5-V.bcmap", size: 159, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4058,7 +4058,7 @@ func publicStaticReaderPdfWebCmapsHankakuBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Hankaku.bcmap", size: 132, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Hankaku.bcmap", size: 132, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4078,7 +4078,7 @@ func publicStaticReaderPdfWebCmapsHiraganaBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Hiragana.bcmap", size: 124, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Hiragana.bcmap", size: 124, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4098,7 +4098,7 @@ func publicStaticReaderPdfWebCmapsKscEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSC-EUC-H.bcmap", size: 1848, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSC-EUC-H.bcmap", size: 1848, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4118,7 +4118,7 @@ func publicStaticReaderPdfWebCmapsKscEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSC-EUC-V.bcmap", size: 164, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSC-EUC-V.bcmap", size: 164, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4138,7 +4138,7 @@ func publicStaticReaderPdfWebCmapsKscHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSC-H.bcmap", size: 1831, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSC-H.bcmap", size: 1831, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4158,7 +4158,7 @@ func publicStaticReaderPdfWebCmapsKscJohabHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSC-Johab-H.bcmap", size: 16791, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSC-Johab-H.bcmap", size: 16791, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4178,7 +4178,7 @@ func publicStaticReaderPdfWebCmapsKscJohabVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSC-Johab-V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSC-Johab-V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4198,7 +4198,7 @@ func publicStaticReaderPdfWebCmapsKscVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSC-V.bcmap", size: 160, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSC-V.bcmap", size: 160, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4218,7 +4218,7 @@ func publicStaticReaderPdfWebCmapsKscmsUhcHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSCms-UHC-H.bcmap", size: 2787, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSCms-UHC-H.bcmap", size: 2787, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4238,7 +4238,7 @@ func publicStaticReaderPdfWebCmapsKscmsUhcHwHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSCms-UHC-HW-H.bcmap", size: 2789, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSCms-UHC-HW-H.bcmap", size: 2789, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4258,7 +4258,7 @@ func publicStaticReaderPdfWebCmapsKscmsUhcHwVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSCms-UHC-HW-V.bcmap", size: 169, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSCms-UHC-HW-V.bcmap", size: 169, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4278,7 +4278,7 @@ func publicStaticReaderPdfWebCmapsKscmsUhcVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSCms-UHC-V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSCms-UHC-V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4298,7 +4298,7 @@ func publicStaticReaderPdfWebCmapsKscpcEucHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSCpc-EUC-H.bcmap", size: 2024, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSCpc-EUC-H.bcmap", size: 2024, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4318,7 +4318,7 @@ func publicStaticReaderPdfWebCmapsKscpcEucVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSCpc-EUC-V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/KSCpc-EUC-V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4338,7 +4338,7 @@ func publicStaticReaderPdfWebCmapsKatakanaBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Katakana.bcmap", size: 100, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Katakana.bcmap", size: 100, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4358,7 +4358,7 @@ func publicStaticReaderPdfWebCmapsLicense() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/LICENSE", size: 2080, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/LICENSE", size: 2080, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4378,7 +4378,7 @@ func publicStaticReaderPdfWebCmapsNwpHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/NWP-H.bcmap", size: 2765, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/NWP-H.bcmap", size: 2765, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4398,7 +4398,7 @@ func publicStaticReaderPdfWebCmapsNwpVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/NWP-V.bcmap", size: 252, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/NWP-V.bcmap", size: 252, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4418,7 +4418,7 @@ func publicStaticReaderPdfWebCmapsRksjHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/RKSJ-H.bcmap", size: 534, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/RKSJ-H.bcmap", size: 534, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4438,7 +4438,7 @@ func publicStaticReaderPdfWebCmapsRksjVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/RKSJ-V.bcmap", size: 170, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/RKSJ-V.bcmap", size: 170, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4458,7 +4458,7 @@ func publicStaticReaderPdfWebCmapsRomanBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Roman.bcmap", size: 96, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/Roman.bcmap", size: 96, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4478,7 +4478,7 @@ func publicStaticReaderPdfWebCmapsUnicnsUcs2HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniCNS-UCS2-H.bcmap", size: 48280, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniCNS-UCS2-H.bcmap", size: 48280, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4498,7 +4498,7 @@ func publicStaticReaderPdfWebCmapsUnicnsUcs2VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniCNS-UCS2-V.bcmap", size: 156, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniCNS-UCS2-V.bcmap", size: 156, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4518,7 +4518,7 @@ func publicStaticReaderPdfWebCmapsUnicnsUtf16HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniCNS-UTF16-H.bcmap", size: 50419, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniCNS-UTF16-H.bcmap", size: 50419, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4538,7 +4538,7 @@ func publicStaticReaderPdfWebCmapsUnicnsUtf16VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniCNS-UTF16-V.bcmap", size: 156, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniCNS-UTF16-V.bcmap", size: 156, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4558,7 +4558,7 @@ func publicStaticReaderPdfWebCmapsUnicnsUtf32HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniCNS-UTF32-H.bcmap", size: 52679, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniCNS-UTF32-H.bcmap", size: 52679, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4578,7 +4578,7 @@ func publicStaticReaderPdfWebCmapsUnicnsUtf32VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniCNS-UTF32-V.bcmap", size: 160, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniCNS-UTF32-V.bcmap", size: 160, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4598,7 +4598,7 @@ func publicStaticReaderPdfWebCmapsUnicnsUtf8HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniCNS-UTF8-H.bcmap", size: 53629, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniCNS-UTF8-H.bcmap", size: 53629, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4618,7 +4618,7 @@ func publicStaticReaderPdfWebCmapsUnicnsUtf8VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniCNS-UTF8-V.bcmap", size: 157, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniCNS-UTF8-V.bcmap", size: 157, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4638,7 +4638,7 @@ func publicStaticReaderPdfWebCmapsUnigbUcs2HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniGB-UCS2-H.bcmap", size: 43366, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniGB-UCS2-H.bcmap", size: 43366, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4658,7 +4658,7 @@ func publicStaticReaderPdfWebCmapsUnigbUcs2VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniGB-UCS2-V.bcmap", size: 193, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniGB-UCS2-V.bcmap", size: 193, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4678,7 +4678,7 @@ func publicStaticReaderPdfWebCmapsUnigbUtf16HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniGB-UTF16-H.bcmap", size: 44086, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniGB-UTF16-H.bcmap", size: 44086, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4698,7 +4698,7 @@ func publicStaticReaderPdfWebCmapsUnigbUtf16VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniGB-UTF16-V.bcmap", size: 178, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniGB-UTF16-V.bcmap", size: 178, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4718,7 +4718,7 @@ func publicStaticReaderPdfWebCmapsUnigbUtf32HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniGB-UTF32-H.bcmap", size: 45738, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniGB-UTF32-H.bcmap", size: 45738, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4738,7 +4738,7 @@ func publicStaticReaderPdfWebCmapsUnigbUtf32VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniGB-UTF32-V.bcmap", size: 182, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniGB-UTF32-V.bcmap", size: 182, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4758,7 +4758,7 @@ func publicStaticReaderPdfWebCmapsUnigbUtf8HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniGB-UTF8-H.bcmap", size: 46837, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniGB-UTF8-H.bcmap", size: 46837, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4778,7 +4778,7 @@ func publicStaticReaderPdfWebCmapsUnigbUtf8VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniGB-UTF8-V.bcmap", size: 181, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniGB-UTF8-V.bcmap", size: 181, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4798,7 +4798,7 @@ func publicStaticReaderPdfWebCmapsUnijisUcs2HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS-UCS2-H.bcmap", size: 25439, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS-UCS2-H.bcmap", size: 25439, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4818,7 +4818,7 @@ func publicStaticReaderPdfWebCmapsUnijisUcs2HwHBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS-UCS2-HW-H.bcmap", size: 119, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS-UCS2-HW-H.bcmap", size: 119, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4838,7 +4838,7 @@ func publicStaticReaderPdfWebCmapsUnijisUcs2HwVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS-UCS2-HW-V.bcmap", size: 680, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS-UCS2-HW-V.bcmap", size: 680, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4858,7 +4858,7 @@ func publicStaticReaderPdfWebCmapsUnijisUcs2VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS-UCS2-V.bcmap", size: 664, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS-UCS2-V.bcmap", size: 664, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4878,7 +4878,7 @@ func publicStaticReaderPdfWebCmapsUnijisUtf16HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS-UTF16-H.bcmap", size: 39443, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS-UTF16-H.bcmap", size: 39443, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4898,7 +4898,7 @@ func publicStaticReaderPdfWebCmapsUnijisUtf16VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS-UTF16-V.bcmap", size: 643, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS-UTF16-V.bcmap", size: 643, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4918,7 +4918,7 @@ func publicStaticReaderPdfWebCmapsUnijisUtf32HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS-UTF32-H.bcmap", size: 40539, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS-UTF32-H.bcmap", size: 40539, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4938,7 +4938,7 @@ func publicStaticReaderPdfWebCmapsUnijisUtf32VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS-UTF32-V.bcmap", size: 677, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS-UTF32-V.bcmap", size: 677, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4958,7 +4958,7 @@ func publicStaticReaderPdfWebCmapsUnijisUtf8HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS-UTF8-H.bcmap", size: 41695, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS-UTF8-H.bcmap", size: 41695, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4978,7 +4978,7 @@ func publicStaticReaderPdfWebCmapsUnijisUtf8VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS-UTF8-V.bcmap", size: 678, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS-UTF8-V.bcmap", size: 678, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4998,7 +4998,7 @@ func publicStaticReaderPdfWebCmapsUnijis2004Utf16HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS2004-UTF16-H.bcmap", size: 39534, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS2004-UTF16-H.bcmap", size: 39534, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5018,7 +5018,7 @@ func publicStaticReaderPdfWebCmapsUnijis2004Utf16VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS2004-UTF16-V.bcmap", size: 647, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS2004-UTF16-V.bcmap", size: 647, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5038,7 +5038,7 @@ func publicStaticReaderPdfWebCmapsUnijis2004Utf32HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS2004-UTF32-H.bcmap", size: 40630, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS2004-UTF32-H.bcmap", size: 40630, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5058,7 +5058,7 @@ func publicStaticReaderPdfWebCmapsUnijis2004Utf32VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS2004-UTF32-V.bcmap", size: 681, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS2004-UTF32-V.bcmap", size: 681, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5078,7 +5078,7 @@ func publicStaticReaderPdfWebCmapsUnijis2004Utf8HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS2004-UTF8-H.bcmap", size: 41779, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS2004-UTF8-H.bcmap", size: 41779, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5098,7 +5098,7 @@ func publicStaticReaderPdfWebCmapsUnijis2004Utf8VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS2004-UTF8-V.bcmap", size: 682, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJIS2004-UTF8-V.bcmap", size: 682, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5118,7 +5118,7 @@ func publicStaticReaderPdfWebCmapsUnijisproUcs2HwVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJISPro-UCS2-HW-V.bcmap", size: 705, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJISPro-UCS2-HW-V.bcmap", size: 705, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5138,7 +5138,7 @@ func publicStaticReaderPdfWebCmapsUnijisproUcs2VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJISPro-UCS2-V.bcmap", size: 689, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJISPro-UCS2-V.bcmap", size: 689, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5158,7 +5158,7 @@ func publicStaticReaderPdfWebCmapsUnijisproUtf8VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJISPro-UTF8-V.bcmap", size: 726, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJISPro-UTF8-V.bcmap", size: 726, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5178,7 +5178,7 @@ func publicStaticReaderPdfWebCmapsUnijisx0213Utf32HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJISX0213-UTF32-H.bcmap", size: 40517, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJISX0213-UTF32-H.bcmap", size: 40517, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5198,7 +5198,7 @@ func publicStaticReaderPdfWebCmapsUnijisx0213Utf32VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJISX0213-UTF32-V.bcmap", size: 684, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJISX0213-UTF32-V.bcmap", size: 684, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5218,7 +5218,7 @@ func publicStaticReaderPdfWebCmapsUnijisx02132004Utf32HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJISX02132004-UTF32-H.bcmap", size: 40608, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJISX02132004-UTF32-H.bcmap", size: 40608, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5238,7 +5238,7 @@ func publicStaticReaderPdfWebCmapsUnijisx02132004Utf32VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJISX02132004-UTF32-V.bcmap", size: 688, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniJISX02132004-UTF32-V.bcmap", size: 688, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5258,7 +5258,7 @@ func publicStaticReaderPdfWebCmapsUniksUcs2HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniKS-UCS2-H.bcmap", size: 25783, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniKS-UCS2-H.bcmap", size: 25783, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5278,7 +5278,7 @@ func publicStaticReaderPdfWebCmapsUniksUcs2VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniKS-UCS2-V.bcmap", size: 178, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniKS-UCS2-V.bcmap", size: 178, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5298,7 +5298,7 @@ func publicStaticReaderPdfWebCmapsUniksUtf16HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniKS-UTF16-H.bcmap", size: 26327, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniKS-UTF16-H.bcmap", size: 26327, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5318,7 +5318,7 @@ func publicStaticReaderPdfWebCmapsUniksUtf16VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniKS-UTF16-V.bcmap", size: 164, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniKS-UTF16-V.bcmap", size: 164, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5338,7 +5338,7 @@ func publicStaticReaderPdfWebCmapsUniksUtf32HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniKS-UTF32-H.bcmap", size: 26451, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniKS-UTF32-H.bcmap", size: 26451, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5358,7 +5358,7 @@ func publicStaticReaderPdfWebCmapsUniksUtf32VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniKS-UTF32-V.bcmap", size: 168, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniKS-UTF32-V.bcmap", size: 168, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5378,7 +5378,7 @@ func publicStaticReaderPdfWebCmapsUniksUtf8HBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniKS-UTF8-H.bcmap", size: 27790, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniKS-UTF8-H.bcmap", size: 27790, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5398,7 +5398,7 @@ func publicStaticReaderPdfWebCmapsUniksUtf8VBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniKS-UTF8-V.bcmap", size: 169, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/UniKS-UTF8-V.bcmap", size: 169, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5418,7 +5418,7 @@ func publicStaticReaderPdfWebCmapsVBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/V.bcmap", size: 166, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5438,7 +5438,7 @@ func publicStaticReaderPdfWebCmapsWpSymbolBcmap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/WP-Symbol.bcmap", size: 179, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/cmaps/WP-Symbol.bcmap", size: 179, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5458,7 +5458,7 @@ func publicStaticReaderPdfWebCompressedTracemonkeyPldi09Pdf() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/compressed.tracemonkey-pldi-09.pdf", size: 1016315, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/compressed.tracemonkey-pldi-09.pdf", size: 1016315, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5478,7 +5478,7 @@ func publicStaticReaderPdfWebDebuggerJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/debugger.js", size: 19332, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/debugger.js", size: 19332, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5498,7 +5498,7 @@ func publicStaticReaderPdfWebImagesAnnotationCheckSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/annotation-check.svg", size: 415, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/annotation-check.svg", size: 415, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5518,7 +5518,7 @@ func publicStaticReaderPdfWebImagesAnnotationCommentSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/annotation-comment.svg", size: 883, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/annotation-comment.svg", size: 883, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5538,7 +5538,7 @@ func publicStaticReaderPdfWebImagesAnnotationHelpSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/annotation-help.svg", size: 2168, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/annotation-help.svg", size: 2168, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5558,7 +5558,7 @@ func publicStaticReaderPdfWebImagesAnnotationInsertSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/annotation-insert.svg", size: 408, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/annotation-insert.svg", size: 408, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5578,7 +5578,7 @@ func publicStaticReaderPdfWebImagesAnnotationKeySvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/annotation-key.svg", size: 1452, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/annotation-key.svg", size: 1452, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5598,7 +5598,7 @@ func publicStaticReaderPdfWebImagesAnnotationNewparagraphSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/annotation-newparagraph.svg", size: 426, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/annotation-newparagraph.svg", size: 426, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5618,7 +5618,7 @@ func publicStaticReaderPdfWebImagesAnnotationNoiconSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/annotation-noicon.svg", size: 158, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/annotation-noicon.svg", size: 158, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5638,7 +5638,7 @@ func publicStaticReaderPdfWebImagesAnnotationNoteSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/annotation-note.svg", size: 1041, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/annotation-note.svg", size: 1041, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5658,7 +5658,7 @@ func publicStaticReaderPdfWebImagesAnnotationParagraphSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/annotation-paragraph.svg", size: 1143, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/annotation-paragraph.svg", size: 1143, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5678,7 +5678,7 @@ func publicStaticReaderPdfWebImagesFindbarbuttonNextRtlPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/findbarButton-next-rtl.png", size: 199, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/findbarButton-next-rtl.png", size: 199, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5698,7 +5698,7 @@ func publicStaticReaderPdfWebImagesFindbarbuttonNextRtl2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/findbarButton-next-rtl@2x.png", size: 304, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/findbarButton-next-rtl@2x.png", size: 304, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5718,7 +5718,7 @@ func publicStaticReaderPdfWebImagesFindbarbuttonNextPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/findbarButton-next.png", size: 193, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/findbarButton-next.png", size: 193, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5738,7 +5738,7 @@ func publicStaticReaderPdfWebImagesFindbarbuttonNext2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/findbarButton-next@2x.png", size: 296, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/findbarButton-next@2x.png", size: 296, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5758,7 +5758,7 @@ func publicStaticReaderPdfWebImagesFindbarbuttonPreviousRtlPng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/findbarButton-previous-rtl.png", size: 193, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/findbarButton-previous-rtl.png", size: 193, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5778,7 +5778,7 @@ func publicStaticReaderPdfWebImagesFindbarbuttonPreviousRtl2xPng() (*asset, erro return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/findbarButton-previous-rtl@2x.png", size: 296, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/findbarButton-previous-rtl@2x.png", size: 296, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5798,7 +5798,7 @@ func publicStaticReaderPdfWebImagesFindbarbuttonPreviousPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/findbarButton-previous.png", size: 199, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/findbarButton-previous.png", size: 199, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5818,7 +5818,7 @@ func publicStaticReaderPdfWebImagesFindbarbuttonPrevious2xPng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/findbarButton-previous@2x.png", size: 304, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/findbarButton-previous@2x.png", size: 304, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5838,7 +5838,7 @@ func publicStaticReaderPdfWebImagesGrabCur() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/grab.cur", size: 326, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/grab.cur", size: 326, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5858,7 +5858,7 @@ func publicStaticReaderPdfWebImagesGrabbingCur() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/grabbing.cur", size: 326, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/grabbing.cur", size: 326, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5878,7 +5878,7 @@ func publicStaticReaderPdfWebImagesLoadingIconGif() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/loading-icon.gif", size: 2545, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/loading-icon.gif", size: 2545, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5898,7 +5898,7 @@ func publicStaticReaderPdfWebImagesLoadingSmallPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/loading-small.png", size: 7402, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/loading-small.png", size: 7402, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5918,7 +5918,7 @@ func publicStaticReaderPdfWebImagesLoadingSmall2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/loading-small@2x.png", size: 16131, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/loading-small@2x.png", size: 16131, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5938,7 +5938,7 @@ func publicStaticReaderPdfWebImagesSecondarytoolbarbuttonDocumentpropertiesPng() return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-documentProperties.png", size: 403, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-documentProperties.png", size: 403, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5958,7 +5958,7 @@ func publicStaticReaderPdfWebImagesSecondarytoolbarbuttonDocumentproperties2xPng return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-documentProperties@2x.png", size: 933, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-documentProperties@2x.png", size: 933, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5978,7 +5978,7 @@ func publicStaticReaderPdfWebImagesSecondarytoolbarbuttonFirstpagePng() (*asset, return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-firstPage.png", size: 179, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-firstPage.png", size: 179, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -5998,7 +5998,7 @@ func publicStaticReaderPdfWebImagesSecondarytoolbarbuttonFirstpage2xPng() (*asse return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-firstPage@2x.png", size: 266, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-firstPage@2x.png", size: 266, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6018,7 +6018,7 @@ func publicStaticReaderPdfWebImagesSecondarytoolbarbuttonHandtoolPng() (*asset, return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-handTool.png", size: 301, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-handTool.png", size: 301, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6038,7 +6038,7 @@ func publicStaticReaderPdfWebImagesSecondarytoolbarbuttonHandtool2xPng() (*asset return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-handTool@2x.png", size: 583, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-handTool@2x.png", size: 583, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6058,7 +6058,7 @@ func publicStaticReaderPdfWebImagesSecondarytoolbarbuttonLastpagePng() (*asset, return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-lastPage.png", size: 175, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-lastPage.png", size: 175, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6078,7 +6078,7 @@ func publicStaticReaderPdfWebImagesSecondarytoolbarbuttonLastpage2xPng() (*asset return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-lastPage@2x.png", size: 276, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-lastPage@2x.png", size: 276, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6098,7 +6098,7 @@ func publicStaticReaderPdfWebImagesSecondarytoolbarbuttonRotateccwPng() (*asset, return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-rotateCcw.png", size: 360, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-rotateCcw.png", size: 360, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6118,7 +6118,7 @@ func publicStaticReaderPdfWebImagesSecondarytoolbarbuttonRotateccw2xPng() (*asse return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-rotateCcw@2x.png", size: 731, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-rotateCcw@2x.png", size: 731, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6138,7 +6138,7 @@ func publicStaticReaderPdfWebImagesSecondarytoolbarbuttonRotatecwPng() (*asset, return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-rotateCw.png", size: 359, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-rotateCw.png", size: 359, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6158,7 +6158,7 @@ func publicStaticReaderPdfWebImagesSecondarytoolbarbuttonRotatecw2xPng() (*asset return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-rotateCw@2x.png", size: 714, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-rotateCw@2x.png", size: 714, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6178,7 +6178,7 @@ func publicStaticReaderPdfWebImagesSecondarytoolbarbuttonSelecttoolPng() (*asset return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-selectTool.png", size: 461, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-selectTool.png", size: 461, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6198,7 +6198,7 @@ func publicStaticReaderPdfWebImagesSecondarytoolbarbuttonSelecttool2xPng() (*ass return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-selectTool@2x.png", size: 1067, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/secondaryToolbarButton-selectTool@2x.png", size: 1067, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6218,7 +6218,7 @@ func publicStaticReaderPdfWebImagesShadowPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/shadow.png", size: 290, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/shadow.png", size: 290, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6238,7 +6238,7 @@ func publicStaticReaderPdfWebImagesTexturePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/texture.png", size: 2417, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/texture.png", size: 2417, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6258,7 +6258,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonBookmarkPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-bookmark.png", size: 174, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-bookmark.png", size: 174, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6278,7 +6278,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonBookmark2xPng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-bookmark@2x.png", size: 260, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-bookmark@2x.png", size: 260, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6298,7 +6298,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonDownloadPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-download.png", size: 259, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-download.png", size: 259, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6318,7 +6318,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonDownload2xPng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-download@2x.png", size: 425, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-download@2x.png", size: 425, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6338,7 +6338,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonMenuarrowsPng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-menuArrows.png", size: 107, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-menuArrows.png", size: 107, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6358,7 +6358,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonMenuarrows2xPng() (*asset, error return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-menuArrows@2x.png", size: 152, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-menuArrows@2x.png", size: 152, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6378,7 +6378,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonOpenfilePng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-openFile.png", size: 295, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-openFile.png", size: 295, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6398,7 +6398,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonOpenfile2xPng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-openFile@2x.png", size: 550, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-openFile@2x.png", size: 550, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6418,7 +6418,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonPagedownRtlPng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-pageDown-rtl.png", size: 242, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-pageDown-rtl.png", size: 242, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6438,7 +6438,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonPagedownRtl2xPng() (*asset, erro return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-pageDown-rtl@2x.png", size: 398, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-pageDown-rtl@2x.png", size: 398, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6458,7 +6458,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonPagedownPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-pageDown.png", size: 238, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-pageDown.png", size: 238, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6478,7 +6478,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonPagedown2xPng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-pageDown@2x.png", size: 396, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-pageDown@2x.png", size: 396, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6498,7 +6498,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonPageupRtlPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-pageUp-rtl.png", size: 245, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-pageUp-rtl.png", size: 245, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6518,7 +6518,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonPageupRtl2xPng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-pageUp-rtl@2x.png", size: 405, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-pageUp-rtl@2x.png", size: 405, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6538,7 +6538,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonPageupPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-pageUp.png", size: 246, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-pageUp.png", size: 246, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6558,7 +6558,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonPageup2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-pageUp@2x.png", size: 403, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-pageUp@2x.png", size: 403, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6578,7 +6578,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonPresentationmodePng() (*asset, e return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-presentationMode.png", size: 321, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-presentationMode.png", size: 321, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6598,7 +6598,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonPresentationmode2xPng() (*asset, return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-presentationMode@2x.png", size: 586, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-presentationMode@2x.png", size: 586, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6618,7 +6618,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonPrintPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-print.png", size: 257, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-print.png", size: 257, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6638,7 +6638,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonPrint2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-print@2x.png", size: 464, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-print@2x.png", size: 464, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6658,7 +6658,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonSearchPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-search.png", size: 309, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-search.png", size: 309, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6678,7 +6678,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonSearch2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-search@2x.png", size: 653, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-search@2x.png", size: 653, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6698,7 +6698,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonSecondarytoolbartoggleRtlPng() ( return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-secondaryToolbarToggle-rtl.png", size: 246, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-secondaryToolbarToggle-rtl.png", size: 246, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6718,7 +6718,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonSecondarytoolbartoggleRtl2xPng() return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png", size: 456, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png", size: 456, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6738,7 +6738,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonSecondarytoolbartogglePng() (*as return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-secondaryToolbarToggle.png", size: 243, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-secondaryToolbarToggle.png", size: 243, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6758,7 +6758,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonSecondarytoolbartoggle2xPng() (* return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-secondaryToolbarToggle@2x.png", size: 458, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-secondaryToolbarToggle@2x.png", size: 458, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6778,7 +6778,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonSidebartoggleRtlPng() (*asset, e return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-sidebarToggle-rtl.png", size: 225, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-sidebarToggle-rtl.png", size: 225, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6798,7 +6798,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonSidebartoggleRtl2xPng() (*asset, return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-sidebarToggle-rtl@2x.png", size: 344, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-sidebarToggle-rtl@2x.png", size: 344, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6818,7 +6818,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonSidebartogglePng() (*asset, erro return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-sidebarToggle.png", size: 225, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-sidebarToggle.png", size: 225, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6838,7 +6838,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonSidebartoggle2xPng() (*asset, er return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-sidebarToggle@2x.png", size: 331, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-sidebarToggle@2x.png", size: 331, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6858,7 +6858,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonViewattachmentsPng() (*asset, er return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-viewAttachments.png", size: 384, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-viewAttachments.png", size: 384, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6878,7 +6878,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonViewattachments2xPng() (*asset, return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-viewAttachments@2x.png", size: 859, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-viewAttachments@2x.png", size: 859, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6898,7 +6898,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonViewoutlineRtlPng() (*asset, err return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-viewOutline-rtl.png", size: 177, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-viewOutline-rtl.png", size: 177, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6918,7 +6918,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonViewoutlineRtl2xPng() (*asset, e return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-viewOutline-rtl@2x.png", size: 394, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-viewOutline-rtl@2x.png", size: 394, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6938,7 +6938,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonViewoutlinePng() (*asset, error) return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-viewOutline.png", size: 178, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-viewOutline.png", size: 178, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6958,7 +6958,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonViewoutline2xPng() (*asset, erro return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-viewOutline@2x.png", size: 331, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-viewOutline@2x.png", size: 331, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6978,7 +6978,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonViewthumbnailPng() (*asset, erro return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-viewThumbnail.png", size: 185, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-viewThumbnail.png", size: 185, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -6998,7 +6998,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonViewthumbnail2xPng() (*asset, er return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-viewThumbnail@2x.png", size: 219, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-viewThumbnail@2x.png", size: 219, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7018,7 +7018,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonZoominPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-zoomIn.png", size: 136, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-zoomIn.png", size: 136, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7038,7 +7038,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonZoomin2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-zoomIn@2x.png", size: 160, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-zoomIn@2x.png", size: 160, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7058,7 +7058,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonZoomoutPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-zoomOut.png", size: 88, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-zoomOut.png", size: 88, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7078,7 +7078,7 @@ func publicStaticReaderPdfWebImagesToolbarbuttonZoomout2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-zoomOut@2x.png", size: 109, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/toolbarButton-zoomOut@2x.png", size: 109, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7098,7 +7098,7 @@ func publicStaticReaderPdfWebImagesTreeitemCollapsedRtlPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/treeitem-collapsed-rtl.png", size: 143, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/treeitem-collapsed-rtl.png", size: 143, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7118,7 +7118,7 @@ func publicStaticReaderPdfWebImagesTreeitemCollapsedRtl2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/treeitem-collapsed-rtl@2x.png", size: 167, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/treeitem-collapsed-rtl@2x.png", size: 167, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7138,7 +7138,7 @@ func publicStaticReaderPdfWebImagesTreeitemCollapsedPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/treeitem-collapsed.png", size: 128, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/treeitem-collapsed.png", size: 128, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7158,7 +7158,7 @@ func publicStaticReaderPdfWebImagesTreeitemCollapsed2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/treeitem-collapsed@2x.png", size: 149, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/treeitem-collapsed@2x.png", size: 149, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7178,7 +7178,7 @@ func publicStaticReaderPdfWebImagesTreeitemExpandedPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/treeitem-expanded.png", size: 125, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/treeitem-expanded.png", size: 125, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7198,7 +7198,7 @@ func publicStaticReaderPdfWebImagesTreeitemExpanded2xPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/images/treeitem-expanded@2x.png", size: 172, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/images/treeitem-expanded@2x.png", size: 172, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7218,7 +7218,7 @@ func publicStaticReaderPdfWebLocaleAchViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ach/viewer.properties", size: 7110, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ach/viewer.properties", size: 7110, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7238,7 +7238,7 @@ func publicStaticReaderPdfWebLocaleAfViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/af/viewer.properties", size: 7727, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/af/viewer.properties", size: 7727, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7258,7 +7258,7 @@ func publicStaticReaderPdfWebLocaleAkViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ak/viewer.properties", size: 5504, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ak/viewer.properties", size: 5504, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7278,7 +7278,7 @@ func publicStaticReaderPdfWebLocaleAnViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/an/viewer.properties", size: 7855, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/an/viewer.properties", size: 7855, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7298,7 +7298,7 @@ func publicStaticReaderPdfWebLocaleArViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ar/viewer.properties", size: 9005, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ar/viewer.properties", size: 9005, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7318,7 +7318,7 @@ func publicStaticReaderPdfWebLocaleAsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/as/viewer.properties", size: 9976, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/as/viewer.properties", size: 9976, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7338,7 +7338,7 @@ func publicStaticReaderPdfWebLocaleAstViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ast/viewer.properties", size: 7529, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ast/viewer.properties", size: 7529, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7358,7 +7358,7 @@ func publicStaticReaderPdfWebLocaleAzViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/az/viewer.properties", size: 8092, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/az/viewer.properties", size: 8092, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7378,7 +7378,7 @@ func publicStaticReaderPdfWebLocaleBeViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/be/viewer.properties", size: 9826, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/be/viewer.properties", size: 9826, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7398,7 +7398,7 @@ func publicStaticReaderPdfWebLocaleBgViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/bg/viewer.properties", size: 10347, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/bg/viewer.properties", size: 10347, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7418,7 +7418,7 @@ func publicStaticReaderPdfWebLocaleBnBdViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/bn-BD/viewer.properties", size: 11000, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/bn-BD/viewer.properties", size: 11000, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7438,7 +7438,7 @@ func publicStaticReaderPdfWebLocaleBnInViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/bn-IN/viewer.properties", size: 11075, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/bn-IN/viewer.properties", size: 11075, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7458,7 +7458,7 @@ func publicStaticReaderPdfWebLocaleBrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/br/viewer.properties", size: 8036, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/br/viewer.properties", size: 8036, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7478,7 +7478,7 @@ func publicStaticReaderPdfWebLocaleBsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/bs/viewer.properties", size: 7738, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/bs/viewer.properties", size: 7738, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7498,7 +7498,7 @@ func publicStaticReaderPdfWebLocaleCaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ca/viewer.properties", size: 8082, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ca/viewer.properties", size: 8082, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7518,7 +7518,7 @@ func publicStaticReaderPdfWebLocaleCsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/cs/viewer.properties", size: 8006, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/cs/viewer.properties", size: 8006, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7538,7 +7538,7 @@ func publicStaticReaderPdfWebLocaleCsbViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/csb/viewer.properties", size: 4832, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/csb/viewer.properties", size: 4832, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7558,7 +7558,7 @@ func publicStaticReaderPdfWebLocaleCyViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/cy/viewer.properties", size: 7743, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/cy/viewer.properties", size: 7743, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7578,7 +7578,7 @@ func publicStaticReaderPdfWebLocaleDaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/da/viewer.properties", size: 7718, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/da/viewer.properties", size: 7718, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7598,7 +7598,7 @@ func publicStaticReaderPdfWebLocaleDeViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/de/viewer.properties", size: 8083, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/de/viewer.properties", size: 8083, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7618,7 +7618,7 @@ func publicStaticReaderPdfWebLocaleElViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/el/viewer.properties", size: 10255, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/el/viewer.properties", size: 10255, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7638,7 +7638,7 @@ func publicStaticReaderPdfWebLocaleEnGbViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/en-GB/viewer.properties", size: 7201, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/en-GB/viewer.properties", size: 7201, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7658,7 +7658,7 @@ func publicStaticReaderPdfWebLocaleEnUsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/en-US/viewer.properties", size: 7539, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/en-US/viewer.properties", size: 7539, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7678,7 +7678,7 @@ func publicStaticReaderPdfWebLocaleEnZaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/en-ZA/viewer.properties", size: 6977, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/en-ZA/viewer.properties", size: 6977, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7698,7 +7698,7 @@ func publicStaticReaderPdfWebLocaleEoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/eo/viewer.properties", size: 7881, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/eo/viewer.properties", size: 7881, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7718,7 +7718,7 @@ func publicStaticReaderPdfWebLocaleEsArViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/es-AR/viewer.properties", size: 7943, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/es-AR/viewer.properties", size: 7943, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7738,7 +7738,7 @@ func publicStaticReaderPdfWebLocaleEsClViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/es-CL/viewer.properties", size: 8098, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/es-CL/viewer.properties", size: 8098, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7758,7 +7758,7 @@ func publicStaticReaderPdfWebLocaleEsEsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/es-ES/viewer.properties", size: 5451, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/es-ES/viewer.properties", size: 5451, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7778,7 +7778,7 @@ func publicStaticReaderPdfWebLocaleEsMxViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/es-MX/viewer.properties", size: 8042, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/es-MX/viewer.properties", size: 8042, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7798,7 +7798,7 @@ func publicStaticReaderPdfWebLocaleEtViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/et/viewer.properties", size: 7497, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/et/viewer.properties", size: 7497, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7818,7 +7818,7 @@ func publicStaticReaderPdfWebLocaleEuViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/eu/viewer.properties", size: 7999, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/eu/viewer.properties", size: 7999, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7838,7 +7838,7 @@ func publicStaticReaderPdfWebLocaleFaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/fa/viewer.properties", size: 9199, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/fa/viewer.properties", size: 9199, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7858,7 +7858,7 @@ func publicStaticReaderPdfWebLocaleFfViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ff/viewer.properties", size: 7699, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ff/viewer.properties", size: 7699, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7878,7 +7878,7 @@ func publicStaticReaderPdfWebLocaleFiViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/fi/viewer.properties", size: 7894, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/fi/viewer.properties", size: 7894, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7898,7 +7898,7 @@ func publicStaticReaderPdfWebLocaleFrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/fr/viewer.properties", size: 8288, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/fr/viewer.properties", size: 8288, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7918,7 +7918,7 @@ func publicStaticReaderPdfWebLocaleFyNlViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/fy-NL/viewer.properties", size: 7765, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/fy-NL/viewer.properties", size: 7765, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7938,7 +7938,7 @@ func publicStaticReaderPdfWebLocaleGaIeViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ga-IE/viewer.properties", size: 8216, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ga-IE/viewer.properties", size: 8216, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7958,7 +7958,7 @@ func publicStaticReaderPdfWebLocaleGdViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/gd/viewer.properties", size: 8053, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/gd/viewer.properties", size: 8053, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7978,7 +7978,7 @@ func publicStaticReaderPdfWebLocaleGlViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/gl/viewer.properties", size: 7203, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/gl/viewer.properties", size: 7203, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -7998,7 +7998,7 @@ func publicStaticReaderPdfWebLocaleGuInViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/gu-IN/viewer.properties", size: 9388, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/gu-IN/viewer.properties", size: 9388, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8018,7 +8018,7 @@ func publicStaticReaderPdfWebLocaleHeViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/he/viewer.properties", size: 8569, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/he/viewer.properties", size: 8569, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8038,7 +8038,7 @@ func publicStaticReaderPdfWebLocaleHiInViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/hi-IN/viewer.properties", size: 10435, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/hi-IN/viewer.properties", size: 10435, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8058,7 +8058,7 @@ func publicStaticReaderPdfWebLocaleHrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/hr/viewer.properties", size: 7599, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/hr/viewer.properties", size: 7599, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8078,7 +8078,7 @@ func publicStaticReaderPdfWebLocaleHuViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/hu/viewer.properties", size: 8308, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/hu/viewer.properties", size: 8308, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8098,7 +8098,7 @@ func publicStaticReaderPdfWebLocaleHyAmViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/hy-AM/viewer.properties", size: 9485, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/hy-AM/viewer.properties", size: 9485, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8118,7 +8118,7 @@ func publicStaticReaderPdfWebLocaleIdViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/id/viewer.properties", size: 7820, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/id/viewer.properties", size: 7820, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8138,7 +8138,7 @@ func publicStaticReaderPdfWebLocaleIsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/is/viewer.properties", size: 7713, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/is/viewer.properties", size: 7713, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8158,7 +8158,7 @@ func publicStaticReaderPdfWebLocaleItViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/it/viewer.properties", size: 5498, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/it/viewer.properties", size: 5498, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8178,7 +8178,7 @@ func publicStaticReaderPdfWebLocaleJaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ja/viewer.properties", size: 8754, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ja/viewer.properties", size: 8754, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8198,7 +8198,7 @@ func publicStaticReaderPdfWebLocaleKaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ka/viewer.properties", size: 11924, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ka/viewer.properties", size: 11924, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8218,7 +8218,7 @@ func publicStaticReaderPdfWebLocaleKkViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/kk/viewer.properties", size: 9786, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/kk/viewer.properties", size: 9786, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8238,7 +8238,7 @@ func publicStaticReaderPdfWebLocaleKmViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/km/viewer.properties", size: 11829, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/km/viewer.properties", size: 11829, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8258,7 +8258,7 @@ func publicStaticReaderPdfWebLocaleKnViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/kn/viewer.properties", size: 10480, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/kn/viewer.properties", size: 10480, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8278,7 +8278,7 @@ func publicStaticReaderPdfWebLocaleKoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ko/viewer.properties", size: 8124, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ko/viewer.properties", size: 8124, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8298,7 +8298,7 @@ func publicStaticReaderPdfWebLocaleKuViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ku/viewer.properties", size: 6325, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ku/viewer.properties", size: 6325, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8318,7 +8318,7 @@ func publicStaticReaderPdfWebLocaleLgViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/lg/viewer.properties", size: 4510, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/lg/viewer.properties", size: 4510, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8338,7 +8338,7 @@ func publicStaticReaderPdfWebLocaleLijViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/lij/viewer.properties", size: 7812, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/lij/viewer.properties", size: 7812, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8358,7 +8358,7 @@ func publicStaticReaderPdfWebLocaleLocaleProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/locale.properties", size: 4314, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/locale.properties", size: 4314, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8378,7 +8378,7 @@ func publicStaticReaderPdfWebLocaleLtViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/lt/viewer.properties", size: 8150, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/lt/viewer.properties", size: 8150, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8398,7 +8398,7 @@ func publicStaticReaderPdfWebLocaleLvViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/lv/viewer.properties", size: 7643, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/lv/viewer.properties", size: 7643, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8418,7 +8418,7 @@ func publicStaticReaderPdfWebLocaleMaiViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/mai/viewer.properties", size: 9447, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/mai/viewer.properties", size: 9447, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8438,7 +8438,7 @@ func publicStaticReaderPdfWebLocaleMkViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/mk/viewer.properties", size: 6967, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/mk/viewer.properties", size: 6967, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8458,7 +8458,7 @@ func publicStaticReaderPdfWebLocaleMlViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ml/viewer.properties", size: 11880, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ml/viewer.properties", size: 11880, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8478,7 +8478,7 @@ func publicStaticReaderPdfWebLocaleMnViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/mn/viewer.properties", size: 3557, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/mn/viewer.properties", size: 3557, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8498,7 +8498,7 @@ func publicStaticReaderPdfWebLocaleMrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/mr/viewer.properties", size: 11126, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/mr/viewer.properties", size: 11126, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8518,7 +8518,7 @@ func publicStaticReaderPdfWebLocaleMsViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ms/viewer.properties", size: 7756, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ms/viewer.properties", size: 7756, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8538,7 +8538,7 @@ func publicStaticReaderPdfWebLocaleMyViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/my/viewer.properties", size: 11533, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/my/viewer.properties", size: 11533, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8558,7 +8558,7 @@ func publicStaticReaderPdfWebLocaleNbNoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/nb-NO/viewer.properties", size: 7666, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/nb-NO/viewer.properties", size: 7666, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8578,7 +8578,7 @@ func publicStaticReaderPdfWebLocaleNlViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/nl/viewer.properties", size: 7935, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/nl/viewer.properties", size: 7935, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8598,7 +8598,7 @@ func publicStaticReaderPdfWebLocaleNnNoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/nn-NO/viewer.properties", size: 7633, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/nn-NO/viewer.properties", size: 7633, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8618,7 +8618,7 @@ func publicStaticReaderPdfWebLocaleNsoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/nso/viewer.properties", size: 5610, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/nso/viewer.properties", size: 5610, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8638,7 +8638,7 @@ func publicStaticReaderPdfWebLocaleOcViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/oc/viewer.properties", size: 7579, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/oc/viewer.properties", size: 7579, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8658,7 +8658,7 @@ func publicStaticReaderPdfWebLocaleOrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/or/viewer.properties", size: 10397, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/or/viewer.properties", size: 10397, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8678,7 +8678,7 @@ func publicStaticReaderPdfWebLocalePaInViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/pa-IN/viewer.properties", size: 9570, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/pa-IN/viewer.properties", size: 9570, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8698,7 +8698,7 @@ func publicStaticReaderPdfWebLocalePlViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/pl/viewer.properties", size: 5419, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/pl/viewer.properties", size: 5419, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8718,7 +8718,7 @@ func publicStaticReaderPdfWebLocalePtBrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/pt-BR/viewer.properties", size: 8095, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/pt-BR/viewer.properties", size: 8095, mode: os.FileMode(420), modTime: time.Unix(1525312472, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8738,7 +8738,7 @@ func publicStaticReaderPdfWebLocalePtPtViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/pt-PT/viewer.properties", size: 8028, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/pt-PT/viewer.properties", size: 8028, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8758,7 +8758,7 @@ func publicStaticReaderPdfWebLocaleRmViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/rm/viewer.properties", size: 8285, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/rm/viewer.properties", size: 8285, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8778,7 +8778,7 @@ func publicStaticReaderPdfWebLocaleRoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ro/viewer.properties", size: 7922, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ro/viewer.properties", size: 7922, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8798,7 +8798,7 @@ func publicStaticReaderPdfWebLocaleRuViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ru/viewer.properties", size: 9942, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ru/viewer.properties", size: 9942, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8818,7 +8818,7 @@ func publicStaticReaderPdfWebLocaleRwViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/rw/viewer.properties", size: 3488, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/rw/viewer.properties", size: 3488, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8838,7 +8838,7 @@ func publicStaticReaderPdfWebLocaleSahViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/sah/viewer.properties", size: 8401, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/sah/viewer.properties", size: 8401, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8858,7 +8858,7 @@ func publicStaticReaderPdfWebLocaleSiViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/si/viewer.properties", size: 9674, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/si/viewer.properties", size: 9674, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8878,7 +8878,7 @@ func publicStaticReaderPdfWebLocaleSkViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/sk/viewer.properties", size: 8209, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/sk/viewer.properties", size: 8209, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8898,7 +8898,7 @@ func publicStaticReaderPdfWebLocaleSlViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/sl/viewer.properties", size: 7884, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/sl/viewer.properties", size: 7884, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8918,7 +8918,7 @@ func publicStaticReaderPdfWebLocaleSonViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/son/viewer.properties", size: 7445, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/son/viewer.properties", size: 7445, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8938,7 +8938,7 @@ func publicStaticReaderPdfWebLocaleSqViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/sq/viewer.properties", size: 7827, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/sq/viewer.properties", size: 7827, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8958,7 +8958,7 @@ func publicStaticReaderPdfWebLocaleSrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/sr/viewer.properties", size: 9837, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/sr/viewer.properties", size: 9837, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8978,7 +8978,7 @@ func publicStaticReaderPdfWebLocaleSvSeViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/sv-SE/viewer.properties", size: 7623, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/sv-SE/viewer.properties", size: 7623, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -8998,7 +8998,7 @@ func publicStaticReaderPdfWebLocaleSwViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/sw/viewer.properties", size: 5268, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/sw/viewer.properties", size: 5268, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9018,7 +9018,7 @@ func publicStaticReaderPdfWebLocaleTaViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ta/viewer.properties", size: 12215, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ta/viewer.properties", size: 12215, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9038,7 +9038,7 @@ func publicStaticReaderPdfWebLocaleTaLkViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ta-LK/viewer.properties", size: 3495, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ta-LK/viewer.properties", size: 3495, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9058,7 +9058,7 @@ func publicStaticReaderPdfWebLocaleTeViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/te/viewer.properties", size: 10834, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/te/viewer.properties", size: 10834, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9078,7 +9078,7 @@ func publicStaticReaderPdfWebLocaleThViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/th/viewer.properties", size: 10447, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/th/viewer.properties", size: 10447, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9098,7 +9098,7 @@ func publicStaticReaderPdfWebLocaleTlViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/tl/viewer.properties", size: 4024, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/tl/viewer.properties", size: 4024, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9118,7 +9118,7 @@ func publicStaticReaderPdfWebLocaleTnViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/tn/viewer.properties", size: 3630, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/tn/viewer.properties", size: 3630, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9138,7 +9138,7 @@ func publicStaticReaderPdfWebLocaleTrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/tr/viewer.properties", size: 7868, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/tr/viewer.properties", size: 7868, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9158,7 +9158,7 @@ func publicStaticReaderPdfWebLocaleUkViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/uk/viewer.properties", size: 9779, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/uk/viewer.properties", size: 9779, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9178,7 +9178,7 @@ func publicStaticReaderPdfWebLocaleUrViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ur/viewer.properties", size: 8413, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/ur/viewer.properties", size: 8413, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9198,7 +9198,7 @@ func publicStaticReaderPdfWebLocaleViViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/vi/viewer.properties", size: 7712, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/vi/viewer.properties", size: 7712, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9218,7 +9218,7 @@ func publicStaticReaderPdfWebLocaleWoViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/wo/viewer.properties", size: 4913, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/wo/viewer.properties", size: 4913, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9238,7 +9238,7 @@ func publicStaticReaderPdfWebLocaleXhViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/xh/viewer.properties", size: 7884, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/xh/viewer.properties", size: 7884, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9258,7 +9258,7 @@ func publicStaticReaderPdfWebLocaleZhCnViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/zh-CN/viewer.properties", size: 7427, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/zh-CN/viewer.properties", size: 7427, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9278,7 +9278,7 @@ func publicStaticReaderPdfWebLocaleZhTwViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/zh-TW/viewer.properties", size: 7526, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/zh-TW/viewer.properties", size: 7526, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9298,7 +9298,7 @@ func publicStaticReaderPdfWebLocaleZuViewerProperties() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/zu/viewer.properties", size: 5672, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/locale/zu/viewer.properties", size: 5672, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9318,7 +9318,7 @@ func publicStaticReaderPdfWebViewerCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/viewer.css", size: 51850, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/viewer.css", size: 51850, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9338,7 +9338,7 @@ func publicStaticReaderPdfWebViewerHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/viewer.html", size: 19123, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/viewer.html", size: 19123, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9358,7 +9358,7 @@ func publicStaticReaderPdfWebViewerJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/viewer.js", size: 346397, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/viewer.js", size: 346397, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9378,7 +9378,7 @@ func publicStaticReaderPdfWebViewerJsMap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/reader/pdf/web/viewer.js.map", size: 558617, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/reader/pdf/web/viewer.js.map", size: 558617, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9398,7 +9398,7 @@ func publicStaticStyleCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/style.css", size: 11783, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/style.css", size: 11783, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9418,7 +9418,7 @@ func publicStaticUpdaterJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/updater.js", size: 5156, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/updater.js", size: 5156, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9438,7 +9438,7 @@ func publicStaticViewJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/static/view.js", size: 999, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/static/view.js", size: 999, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9458,7 +9458,7 @@ func publicTemplatesAuthorTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/templates/author.tmpl", size: 22, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/templates/author.tmpl", size: 22, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9478,7 +9478,7 @@ func publicTemplatesAuthorsTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/templates/authors.tmpl", size: 134, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/templates/authors.tmpl", size: 134, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9498,12 +9498,12 @@ func publicTemplatesBaseTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/templates/base.tmpl", size: 3033, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/templates/base.tmpl", size: 3033, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _publicTemplatesBookTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x53\xc1\x92\xdb\x2a\x10\xbc\xef\x57\xcc\xe3\x9d\x57\xfc\x80\xad\x54\x12\x57\x2a\x7b\xc9\x21\x71\xee\xc1\x62\x64\x93\x45\x40\x00\x5b\x49\xb1\xfc\x7b\x0a\x24\xcb\xc8\x2b\xef\x1e\x72\x4c\x7c\x31\x45\xf7\xf4\xb4\x66\x9a\x10\x7a\xe1\x0f\x50\xbd\xd3\xfa\x31\xc6\xbb\x15\x17\x27\x68\x24\x73\x6e\x4d\x9c\x50\x7b\x89\xf7\x3b\xad\x1f\x49\x7d\x07\x00\x50\xa2\x8d\x3e\xa1\x1d\xef\xd3\x2f\x04\xd1\x42\xf5\x91\xb9\xf7\x09\x88\x71\x02\x56\xa2\xdb\x83\xb3\xcd\x9a\xd0\x5c\xe3\x68\x08\xd5\xc3\x26\xc6\xea\xbb\xd9\x13\x60\xd2\x2f\x89\xa1\x74\xb8\x2c\xe2\x3c\xf3\xa2\xa1\x4a\xe7\xa2\x97\x45\x14\x2f\x35\x0a\xf7\xbb\xa3\xf7\x5a\xb9\x82\x9d\x19\x0c\x0e\x16\xdb\x35\xa1\x5c\xf7\x4a\x6a\xc6\x27\xaf\x21\x54\x1f\x84\xc4\xed\x2f\x83\x31\x92\xb9\x0c\x9c\xd9\xa4\xde\x8c\x27\x08\x01\xa6\x02\x78\x82\xad\xfe\x6a\x0c\x5a\x88\x71\x45\xd9\xbc\x69\x1e\x1c\xfe\x28\xe8\x04\xcd\x71\x47\x0a\xe7\xa3\xb7\x79\x53\x8b\x8c\x93\xb3\xdf\x71\x28\xe9\x0e\x2d\x4d\xf5\xf4\xff\xff\x5e\xfb\x8a\xfa\x33\x32\xbe\xe0\x27\x8f\x6d\xc9\x97\xe1\xed\x9f\xd8\x32\xbc\xa5\x3d\xee\xe8\x49\x60\x8f\xb6\x3a\xf8\x4e\xbe\x69\x85\xc4\xf5\x2b\x46\xbf\xbd\xec\xf4\xb2\x60\xca\xc5\x69\x4c\x6a\x71\x2c\xd6\xde\xa1\x67\xc5\xce\x4b\xc8\x0b\x2f\x91\xd4\x21\x54\xdb\x74\x4a\x8b\x9a\x24\x86\x66\xc3\x43\x79\x7b\xf4\x07\x3d\xcb\xf7\x14\x1a\x96\xa1\x29\xdf\x53\x4a\x86\xfb\xac\xfd\x89\x75\x78\x95\x81\xcb\xbc\x87\x06\x5f\xd0\x0a\x74\x37\x72\xeb\x32\x78\x33\xb6\x03\xfc\xcc\x80\x62\x1d\x5e\xb5\x87\xfb\xb9\x84\x33\x4c\x9d\xe9\x42\x71\xfc\x99\xf9\x0f\xe9\x94\x0a\x12\x5c\x2f\x0d\xfa\x59\x62\xaa\x0d\xba\xc6\x0a\xe3\x85\x56\x37\x3e\x82\x5f\x18\xe4\x7a\xa3\x65\x39\x3c\x81\x65\xfd\xf2\x82\x17\xf7\xff\xef\x81\xff\x6d\x0f\x7c\xfc\x1b\x89\xbf\x03\x00\x00\xff\xff\xd3\xf9\x70\xb0\xcd\x06\x00\x00") +var _publicTemplatesBookTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x53\xcb\x92\xd3\x30\x10\xbc\xef\x57\x0c\xe2\xbc\xd6\x0f\x24\xa6\x80\x14\xc5\x5e\x21\xdc\x51\xac\x71\x22\x56\x91\x84\xa4\xd8\x50\x5a\xfd\x3b\x25\xf9\x11\x19\x9c\xdd\x03\x47\xc8\x25\xb2\xa7\xbb\xd5\x33\xd3\x0e\xa1\x17\xfe\x04\xd5\x3b\xad\x1f\x63\xbc\xdb\x70\xd1\x41\x23\x99\x73\x5b\xe2\x84\x3a\x4a\xbc\x3f\x68\xfd\x48\xea\x3b\x00\x80\xb2\xda\xe8\x0e\xed\xf8\x3e\xfd\x42\x10\x2d\x54\x1f\x99\x7b\x9f\x0a\x31\xce\x85\x8d\x38\x1f\xc1\xd9\x66\x4b\x68\xe6\x38\x1a\x42\xf5\xb0\x8b\xb1\xfa\x66\x8e\x04\x98\xf4\x6b\x62\x28\x1d\xae\x8b\x38\xcf\xbc\x68\xa8\xd2\x99\xf4\xbc\x88\xe2\xa5\x46\xe1\xfe\x70\xf1\x5e\x2b\x57\xa0\x33\x82\xc1\xc9\x62\xbb\x25\x94\xeb\x5e\x49\xcd\xf8\xec\x35\x84\xea\x83\x90\xb8\xff\x69\x30\x46\xb2\x94\x81\x09\x4d\xea\xdd\x78\x82\x10\x60\x26\xc0\x13\xec\xf5\x17\x63\xd0\x42\x8c\x1b\xca\x96\x97\xe6\xc1\xe1\xf7\x02\x4e\xd0\x5c\x0e\xa4\x70\x3e\x7a\x5b\x5e\x6a\x91\x71\x32\xf9\x1d\x87\x92\xde\xa1\xa5\x89\x4f\x5f\xbf\x7a\xa9\x8b\xfa\x13\x32\xbe\xe2\x27\x8f\x6d\xcd\x97\xe1\xed\xdf\xd8\x32\xbc\xa5\x3d\x1e\x68\x27\xb0\x47\x5b\x9d\xfc\x59\xbe\x69\x85\xc4\xed\x0b\x46\xbf\x3e\xef\xf4\xba\x60\xca\x45\x37\x26\xb5\x38\x16\x6b\x3f\xa3\x67\xc5\xce\xcb\x92\x17\x5e\x22\xa9\x43\xa8\xf6\xe9\x94\x16\x35\x4b\x5c\xf3\xfd\xf6\xe2\x4f\x7a\x91\xee\x39\x32\x2c\x97\x72\xba\x07\x54\x6a\x64\x4e\xca\x50\xcd\xfa\x93\xc6\xa2\x9f\xc5\xd4\xab\xcf\x68\x05\xba\x1b\xd9\x75\xb9\x78\x33\xba\x43\x39\xd9\x18\x54\x16\x36\x14\x3b\x0f\x4d\x4e\x37\x24\x13\x70\xbf\x94\x72\x86\xa9\x89\x20\x14\xc7\x1f\x05\xe3\x21\x3d\x27\x5a\x02\xd5\x6b\xa3\xff\xb3\x9b\x1d\xba\xc6\x0a\xe3\x85\x56\x37\x5a\xe2\x57\x04\xf9\x7d\xc7\x25\x1d\x9e\xc0\xb2\x7e\x7d\xe5\xab\x89\xf8\xff\xc9\xff\x6b\x9f\xfc\xf8\x37\x02\x7f\x05\x00\x00\xff\xff\x54\x45\x20\x49\xdf\x06\x00\x00") func publicTemplatesBookTmplBytes() ([]byte, error) { return bindataRead( @@ -9518,12 +9518,12 @@ func publicTemplatesBookTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/templates/book.tmpl", size: 1741, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/templates/book.tmpl", size: 1759, mode: os.FileMode(420), modTime: time.Unix(1534202003, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _publicTemplatesBooksTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x93\xcf\x6e\xc2\x30\x0c\xc6\xef\x3c\x85\x95\x3b\xed\x0b\x00\xd2\xfe\x1c\xc6\x85\xcb\x76\x9f\x4c\x6b\x68\xb6\x36\x41\x89\x5b\x26\x45\x79\xf7\x29\x29\x44\xa1\x1d\xa3\x27\xcb\xfe\xfc\xfb\x6c\xb7\x5d\xd5\x72\x80\xaa\x45\x6b\xd7\xa2\xea\x8d\x21\xc5\xcb\x41\xd2\x19\xf6\x5a\x7f\x5b\xa8\xd0\xd4\x56\x6c\x16\x00\x00\xce\x19\x54\x47\x82\xe2\x39\x94\xbc\x8f\xc9\xbc\x3f\xb4\x5c\xb4\xb1\x84\xd0\x18\x3a\xac\x45\x19\x59\xa5\x73\xc5\xf6\xd5\x7b\x91\xec\xf4\x40\x26\xd3\x8f\x1e\xf2\x00\xc5\x1b\xda\x97\x50\xbc\x78\x24\xa0\xec\x8e\x60\x4d\xb5\x16\x65\xec\x4d\xc8\x4f\x6e\xfa\x6e\x5f\x7c\x9d\x8e\x02\xb0\xe5\x7b\x68\x6a\x2d\xdd\x47\x5a\x46\x96\x55\xa9\x74\x6c\x7e\x0c\x53\x75\xc6\x5a\x95\x98\x2d\x9e\xdd\xa4\x23\xc6\x49\xef\xa3\xbb\xb0\xe4\x96\xc4\xc6\xb9\xe2\x23\x44\xde\xdf\xc0\x47\xf7\xb3\xe4\x06\x8a\xa7\x9e\x1b\x3d\xbb\x52\xc2\x63\x2c\xcf\x0d\xc6\x7c\x74\xd8\x61\xf7\xb7\x41\x5c\x2f\x19\xbd\x93\x91\x64\xa7\x46\xd9\x9a\x36\x0a\x26\x8b\xde\x4e\x33\x4a\x66\xc3\x28\xec\xe8\xbf\x51\xc2\xb3\x9c\x63\xed\x09\xd5\x15\x21\x55\x4d\x3f\x91\xb1\x0d\x51\x80\x84\xf2\xe4\xea\x65\x2d\x87\x47\x2f\x31\x49\xb2\xf0\xaa\xba\xa4\x16\xf1\x13\x55\x9a\xd3\x7f\x00\x3b\xcd\x70\xd0\xbd\xaa\xaf\xda\xdf\x00\x00\x00\xff\xff\x87\xaa\x63\x9b\x55\x03\x00\x00") +var _publicTemplatesBooksTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x93\x4d\x6e\xc3\x20\x10\x85\xf7\x39\xc5\x88\x7d\xec\x0b\x24\x91\xfa\xb3\x68\x36\xdd\xb4\xfb\x6a\x62\x26\x09\xad\x0d\x11\x60\xb7\x12\xe2\xee\x15\x60\x53\xec\x34\x4a\x56\x84\x79\xf3\xbd\x99\x87\xbc\xe1\x62\x80\xa6\x45\x63\xb6\xac\xe9\xb5\x26\x69\xd7\x83\xa0\x6f\x38\x28\xf5\x65\xa0\x41\xcd\x0d\xdb\xad\x00\x00\x9c\xd3\x28\x4f\x04\xd5\x63\x28\x79\x1f\x2f\xcb\xfe\xd0\x32\x6a\x63\x09\xe1\xac\xe9\xb8\x65\x75\x64\xd5\xce\x55\xfb\x67\xef\x59\xb6\x53\x03\xe9\x42\x9f\x3c\xc4\x11\xaa\x17\x34\x4f\xa1\x38\x7a\x64\xa0\xe8\x4e\x60\x74\xb3\x65\x75\xec\xcd\xc8\x0f\x7b\xee\xbb\x43\xf5\x79\x39\x31\xc0\xd6\xde\x42\x53\x6b\xe8\x36\xd2\x58\xb4\xa2\xa9\xa5\x8a\xcd\xf7\x61\x92\x17\xac\x4d\x8d\xc5\xe2\x45\x26\x1d\x59\x5c\xf4\xde\xcb\xc5\x0a\xdb\x12\xdb\x39\x57\xbd\x87\x93\xf7\x33\xf8\x5f\x4a\x0f\xbd\x3d\xab\xab\x8c\x32\x1c\x63\x39\xe2\x93\x72\x66\x92\xaa\xd1\x65\xe2\xfc\x63\x13\x97\x1c\xed\xde\x48\x0b\x32\x4b\xbb\x62\x55\x13\x05\x8b\x65\xe7\x33\x25\x49\x18\x29\xd1\x66\x23\x49\xec\xd2\xda\x93\xd3\xd5\x40\xe1\xb7\xbe\xc6\x9b\x0b\xca\x09\x22\x24\xa7\x9f\x82\xb2\x0f\xff\x03\x2a\x88\x16\xef\x50\x73\x31\xdc\x7b\xd6\x2c\x29\x8e\x93\x6a\xbc\x5a\xc5\x7c\xa4\xb2\xf9\xcb\x80\x57\x65\xe1\xa8\x7a\xc9\x27\xed\x6f\x00\x00\x00\xff\xff\x12\x14\x44\xf6\x67\x03\x00\x00") func publicTemplatesBooksTmplBytes() ([]byte, error) { return bindataRead( @@ -9538,7 +9538,7 @@ func publicTemplatesBooksTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/templates/books.tmpl", size: 853, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/templates/books.tmpl", size: 871, mode: os.FileMode(420), modTime: time.Unix(1534201991, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9558,7 +9558,7 @@ func publicTemplatesNotfoundTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/templates/notfound.tmpl", size: 12, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/templates/notfound.tmpl", size: 12, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9578,7 +9578,7 @@ func publicTemplatesSearchTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/templates/search.tmpl", size: 259, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/templates/search.tmpl", size: 259, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9598,7 +9598,7 @@ func publicTemplatesSeriesTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/templates/series.tmpl", size: 22, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/templates/series.tmpl", size: 22, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -9618,7 +9618,7 @@ func publicTemplatesSeriessTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/templates/seriess.tmpl", size: 131, mode: os.FileMode(420), modTime: time.Unix(1523158121, 0)} + info := bindataFileInfo{name: "public/templates/seriess.tmpl", size: 131, mode: os.FileMode(420), modTime: time.Unix(1525312473, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/modules/server/server.go b/modules/server/server.go index 5f6f10cb..6f7f31cf 100644 --- a/modules/server/server.go +++ b/modules/server/server.go @@ -14,11 +14,11 @@ import ( "path/filepath" "runtime/debug" "strings" - "sync" "time" - "github.com/geek1011/BookBrowser/models" - "github.com/geek1011/BookBrowser/modules/booklist" + "github.com/geek1011/BookBrowser/booklist" + "github.com/geek1011/BookBrowser/formats" + "github.com/geek1011/BookBrowser/indexer" "github.com/geek1011/kepubify/kepub" "github.com/julienschmidt/httprouter" "github.com/unrolled/render" @@ -28,30 +28,38 @@ import ( // Server is a BookBrowser server. type Server struct { - Books *booklist.BookList - booksLock *sync.RWMutex - BookDir string - CoverDir string - NoCovers bool - Addr string - Verbose bool - router *httprouter.Router - render *render.Render - version string + Indexer *indexer.Indexer + BookDir string + CoverDir string + NoCovers bool + Addr string + Verbose bool + router *httprouter.Router + render *render.Render + version string } // NewServer creates a new BookBrowser server. It will not index the books automatically. func NewServer(addr, bookdir, coverdir, version string, verbose, nocovers bool) *Server { + i, err := indexer.New([]string{bookdir}, &coverdir, formats.GetExts()) + if err != nil { + panic(err) + } + i.Verbose = verbose + + if verbose { + log.Printf("Supported formats: %s", strings.Join(formats.GetExts(), ", ")) + } + s := &Server{ - Books: &booklist.BookList{}, - booksLock: &sync.RWMutex{}, - BookDir: bookdir, - Addr: addr, - CoverDir: coverdir, - NoCovers: nocovers, - Verbose: verbose, - router: httprouter.New(), - version: version, + Indexer: i, + BookDir: bookdir, + Addr: addr, + CoverDir: coverdir, + NoCovers: nocovers, + Verbose: verbose, + router: httprouter.New(), + version: version, } s.initRender() @@ -69,19 +77,17 @@ func (s *Server) printLog(format string, v ...interface{}) { // RefreshBookIndex refreshes the book index func (s *Server) RefreshBookIndex() error { - s.printLog("Locking book index\n") - s.booksLock.Lock() - defer s.printLog("Unlocking book index\n") - defer s.booksLock.Unlock() - - books, errs := booklist.NewBookListFromDir(s.BookDir, s.CoverDir, s.Verbose, s.NoCovers) + errs, err := s.Indexer.Refresh() + if err != nil { + log.Printf("Error indexing: %s", err) + return err + } if len(errs) != 0 { if s.Verbose { log.Printf("Indexing finished with %v errors", len(errs)) } } - s.Books = books debug.FreeOSMemory() return nil } @@ -150,9 +156,6 @@ func (s *Server) initRouter() { } func (s *Server) handleDownloads(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - s.booksLock.RLock() - defer s.booksLock.RUnlock() - w.Header().Set("Content-Type", "text/html") var buf bytes.Buffer buf.WriteString(` @@ -190,18 +193,18 @@ padding: 0; `) - sbl := s.Books.Sorted(func(a, b *models.Book) bool { + sbl := s.Indexer.BookList().Sorted(func(a, b *booklist.Book) bool { return a.Title < b.Title }) for _, b := range sbl { - if b.Author != nil && b.Series != nil { - buf.WriteString(fmt.Sprintf("%s - %s - %s (%v)", b.ID, b.FileType, b.Title, b.Author.Name, b.Series.Name, b.Series.Index)) - } else if b.Author != nil && b.Series == nil { - buf.WriteString(fmt.Sprintf("%s - %s", b.ID, b.FileType, b.Title, b.Author.Name)) - } else if b.Author == nil && b.Series != nil { - buf.WriteString(fmt.Sprintf("%s - %s (%v)", b.ID, b.FileType, b.Title, b.Series.Name, b.Series.Index)) - } else if b.Author == nil && b.Series == nil { - buf.WriteString(fmt.Sprintf("%s", b.ID, b.FileType, b.Title)) + if b.Author != "" && b.Series != "" { + buf.WriteString(fmt.Sprintf("%s - %s - %s (%v)", b.ID(), b.FileType(), b.Title, b.Author, b.Series, b.SeriesIndex)) + } else if b.Author != "" && b.Series != "" { + buf.WriteString(fmt.Sprintf("%s - %s", b.ID(), b.FileType(), b.Title, b.Author)) + } else if b.Author == "" && b.Series != "" { + buf.WriteString(fmt.Sprintf("%s - %s (%v)", b.ID(), b.FileType(), b.Title, b.Series, b.SeriesIndex)) + } else if b.Author == "" && b.Series == "" { + buf.WriteString(fmt.Sprintf("%s", b.ID(), b.FileType(), b.Title)) } } buf.WriteString(` @@ -212,9 +215,6 @@ padding: 0; } func (s *Server) handleDownload(w http.ResponseWriter, r *http.Request, p httprouter.Params) { - s.booksLock.RLock() - defer s.booksLock.RUnlock() - bid := p.ByName("filename") bid = strings.Replace(strings.Replace(bid, filepath.Ext(bid), "", 1), ".kepub", "", -1) iskepub := false @@ -222,10 +222,10 @@ func (s *Server) handleDownload(w http.ResponseWriter, r *http.Request, p httpro iskepub = true } - for _, b := range *s.Books { - if b.ID == bid { + for _, b := range s.Indexer.BookList() { + if b.ID() == bid { if !iskepub { - rd, err := os.Open(b.Filepath) + rd, err := os.Open(b.FilePath) if err != nil { w.WriteHeader(http.StatusInternalServerError) io.WriteString(w, "Error handling request") @@ -233,8 +233,8 @@ func (s *Server) handleDownload(w http.ResponseWriter, r *http.Request, p httpro return } - w.Header().Set("Content-Disposition", "attachment; filename="+url.PathEscape(b.Title)+"."+b.FileType) - switch b.FileType { + w.Header().Set("Content-Disposition", "attachment; filename="+url.PathEscape(b.Title)+"."+b.FileType()) + switch b.FileType() { case "epub": w.Header().Set("Content-Type", "application/epub+zip") case "pdf": @@ -248,7 +248,7 @@ func (s *Server) handleDownload(w http.ResponseWriter, r *http.Request, p httpro log.Printf("Error handling request for %s: %s\n", r.URL.Path, err) } } else { - if b.FileType != "epub" { + if b.FileType() != "epub" { w.WriteHeader(http.StatusNotFound) io.WriteString(w, "Not found") return @@ -262,7 +262,7 @@ func (s *Server) handleDownload(w http.ResponseWriter, r *http.Request, p httpro } defer os.RemoveAll(td) kepubf := filepath.Join(td, bid+".kepub.epub") - err = kepub.Kepubify(b.Filepath, kepubf, false) + err = kepub.Kepubify(b.FilePath, kepubf, false, nil, nil) if err != nil { w.WriteHeader(http.StatusInternalServerError) log.Printf("Error handling request for %s: %s\n", r.URL.Path, err) @@ -293,9 +293,6 @@ func (s *Server) handleDownload(w http.ResponseWriter, r *http.Request, p httpro } func (s *Server) handleAuthors(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - s.booksLock.RLock() - defer s.booksLock.RUnlock() - s.render.HTML(w, http.StatusOK, "authors", map[string]interface{}{ "CurVersion": s.version, "PageTitle": "Authors", @@ -303,26 +300,23 @@ func (s *Server) handleAuthors(w http.ResponseWriter, r *http.Request, _ httprou "ShowSearch": false, "ShowViewSelector": true, "Title": "Authors", - "Authors": s.Books.GetAuthors().Sorted(func(a, b *models.Author) bool { + "Authors": s.Indexer.BookList().Authors().Sorted(func(a, b struct{ Name, ID string }) bool { return a.Name < b.Name }), }) } func (s *Server) handleAuthor(w http.ResponseWriter, r *http.Request, p httprouter.Params) { - s.booksLock.RLock() - defer s.booksLock.RUnlock() - aname := "" - for _, author := range *s.Books.GetAuthors() { + for _, author := range *s.Indexer.BookList().Authors() { if author.ID == p.ByName("id") { aname = author.Name } } if aname != "" { - bl := s.Books.Filtered(func(book *models.Book) bool { - return book.Author != nil && book.Author.ID == p.ByName("id") + bl := s.Indexer.BookList().Filtered(func(book *booklist.Book) bool { + return book.Author != "" && book.AuthorID() == p.ByName("id") }) bl, _ = bl.SortBy("title-asc") bl, _ = bl.SortBy(r.URL.Query().Get("sort")) @@ -351,9 +345,6 @@ func (s *Server) handleAuthor(w http.ResponseWriter, r *http.Request, p httprout } func (s *Server) handleSeriess(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - s.booksLock.RLock() - defer s.booksLock.RUnlock() - s.render.HTML(w, http.StatusOK, "seriess", map[string]interface{}{ "CurVersion": s.version, "PageTitle": "Series", @@ -361,26 +352,23 @@ func (s *Server) handleSeriess(w http.ResponseWriter, r *http.Request, _ httprou "ShowSearch": false, "ShowViewSelector": true, "Title": "Series", - "Series": s.Books.GetSeries().Sorted(func(a, b *models.Series) bool { + "Series": s.Indexer.BookList().Series().Sorted(func(a, b struct{ Name, ID string }) bool { return a.Name < b.Name }), }) } func (s *Server) handleSeries(w http.ResponseWriter, r *http.Request, p httprouter.Params) { - s.booksLock.RLock() - defer s.booksLock.RUnlock() - sname := "" - for _, series := range *s.Books.GetSeries() { + for _, series := range *s.Indexer.BookList().Series() { if series.ID == p.ByName("id") { sname = series.Name } } if sname != "" { - bl := s.Books.Filtered(func(book *models.Book) bool { - return book.Series != nil && book.Series.ID == p.ByName("id") + bl := s.Indexer.BookList().Filtered(func(book *booklist.Book) bool { + return book.Series != "" && book.SeriesID() == p.ByName("id") }) bl, _ = bl.SortBy("seriesindex-asc") bl, _ = bl.SortBy(r.URL.Query().Get("sort")) @@ -392,10 +380,10 @@ func (s *Server) handleSeries(w http.ResponseWriter, r *http.Request, p httprout "ShowSearch": false, "ShowViewSelector": true, "Title": sname, - "Books": s.Books.Filtered(func(book *models.Book) bool { - return book.Series != nil && book.Series.ID == p.ByName("id") - }).Sorted(func(a, b *models.Book) bool { - return a.Series.Index < b.Series.Index + "Books": s.Indexer.BookList().Filtered(func(book *booklist.Book) bool { + return book.Series != "" && book.SeriesID() == p.ByName("id") + }).Sorted(func(a, b *booklist.Book) bool { + return a.SeriesIndex < b.SeriesIndex }), }) return @@ -413,10 +401,7 @@ func (s *Server) handleSeries(w http.ResponseWriter, r *http.Request, p httprout } func (s *Server) handleBooks(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - s.booksLock.RLock() - defer s.booksLock.RUnlock() - - bl, _ := s.Books.SortBy("modified-desc") + bl, _ := s.Indexer.BookList().SortBy("modified-desc") bl, _ = bl.SortBy(r.URL.Query().Get("sort")) s.render.HTML(w, http.StatusOK, "books", map[string]interface{}{ @@ -431,11 +416,8 @@ func (s *Server) handleBooks(w http.ResponseWriter, r *http.Request, _ httproute } func (s *Server) handleBook(w http.ResponseWriter, r *http.Request, p httprouter.Params) { - s.booksLock.RLock() - defer s.booksLock.RUnlock() - - for _, b := range *s.Books { - if b.ID == p.ByName("id") { + for _, b := range s.Indexer.BookList() { + if b.ID() == p.ByName("id") { s.render.HTML(w, http.StatusOK, "book", map[string]interface{}{ "CurVersion": s.version, "PageTitle": b.Title, @@ -461,18 +443,15 @@ func (s *Server) handleBook(w http.ResponseWriter, r *http.Request, p httprouter } func (s *Server) handleSearch(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - s.booksLock.RLock() - defer s.booksLock.RUnlock() - q := r.URL.Query().Get("q") ql := strings.ToLower(q) if len(q) != 0 { - bl := s.Books.Filtered(func(a *models.Book) bool { + bl := s.Indexer.BookList().Filtered(func(a *booklist.Book) bool { matches := false - matches = matches || a.Author != nil && strings.Contains(strings.ToLower(a.Author.Name), ql) + matches = matches || a.Author != "" && strings.Contains(strings.ToLower(a.Author), ql) matches = matches || strings.Contains(strings.ToLower(a.Title), ql) - matches = matches || a.Series != nil && strings.Contains(strings.ToLower(a.Series.Name), ql) + matches = matches || a.Series != "" && strings.Contains(strings.ToLower(a.Series), ql) return matches }) bl, _ = bl.SortBy("title-asc") @@ -503,17 +482,11 @@ func (s *Server) handleSearch(w http.ResponseWriter, r *http.Request, _ httprout } func (s *Server) handleBooksJSON(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - s.booksLock.RLock() - defer s.booksLock.RUnlock() - - s.render.JSON(w, http.StatusOK, s.Books) + s.render.JSON(w, http.StatusOK, s.Indexer.BookList()) } func (s *Server) handleRandom(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - s.booksLock.RLock() - defer s.booksLock.RUnlock() - rand.Seed(time.Now().UnixNano()) - n := rand.Int() % len(*s.Books) - http.Redirect(w, r, "/books/"+(*s.Books)[n].ID, http.StatusTemporaryRedirect) + n := rand.Int() % len(s.Indexer.BookList()) + http.Redirect(w, r, "/books/"+(s.Indexer.BookList())[n].ID(), http.StatusTemporaryRedirect) } diff --git a/public/templates/book.tmpl b/public/templates/book.tmpl index ba01d782..5ec32970 100644 --- a/public/templates/book.tmpl +++ b/public/templates/book.tmpl @@ -17,12 +17,12 @@
{{.Title}}
- {{with .Author}} - {{.Name}} - {{end}} {{with .Series}} + {{if .Author}} + {{.Author}} + {{end}} {{if .Series}}
- {{.Name}} - - {{.Index}} + {{.Series}} - + {{.SeriesIndex}}
{{end}} {{if .Description}}
diff --git a/public/templates/books.tmpl b/public/templates/books.tmpl index 1a4264ce..95e0c345 100644 --- a/public/templates/books.tmpl +++ b/public/templates/books.tmpl @@ -10,13 +10,13 @@
{{.Title}} - {{with .Author}} - {{.Name}} - {{end}} {{with .Series}} + {{if .Author}} + {{.Author}} + {{end}} {{if .Series}}
- {{.Name}} + {{.Series}} - - {{.Index}} + {{.SeriesIndex}}
{{end}}
diff --git a/vendor/github.com/geek1011/kepubify/LICENSE.md b/vendor/github.com/geek1011/kepubify/LICENSE.md index a790bcf6..2cb71040 100644 --- a/vendor/github.com/geek1011/kepubify/LICENSE.md +++ b/vendor/github.com/geek1011/kepubify/LICENSE.md @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2017 Patrick G +Copyright (c) 2018 Patrick G Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/vendor/github.com/geek1011/kepubify/kepub/content.go b/vendor/github.com/geek1011/kepubify/kepub/content.go index b78944fe..0e2e55e3 100644 --- a/vendor/github.com/geek1011/kepubify/kepub/content.go +++ b/vendor/github.com/geek1011/kepubify/kepub/content.go @@ -1,7 +1,6 @@ package kepub import ( - "bytes" "fmt" "os" "path/filepath" @@ -15,72 +14,121 @@ import ( ) func cleanFiles(basepath string) error { - _ = os.Remove(filepath.Join(basepath, "META-INF", "calibre_bookmarks.txt")) - _ = os.Remove(filepath.Join(basepath, "META-INF", "iTunesMetadata.plist")) - _ = os.Remove(filepath.Join(basepath, "iTunesMetadata.plist")) - _ = os.Remove(filepath.Join(basepath, "META-INF", "iTunesArtwork.plist")) - _ = os.Remove(filepath.Join(basepath, "iTunesArtwork.plist")) - _ = os.Remove(filepath.Join(basepath, "META-INF", ".DS_STORE")) - _ = os.Remove(filepath.Join(basepath, ".DS_STORE")) - _ = os.Remove(filepath.Join(basepath, "META-INF", "thumbs.db")) - _ = os.Remove(filepath.Join(basepath, "thumbs.db")) - return nil -} + toRemove := []string{ + "META-INF/calibre_bookmarks.txt", + "META-INF/iTunesMetadata.plist", + "META-INF/iTunesArtwork.plist", + "META-INF/.DS_STORE", + "META-INF/thumbs.db", + ".DS_STORE", + "thumbs.db", + "iTunesMetadata.plist", + "iTunesArtwork.plist", + } -// cleanOPF cleans up extra calibre metadata from the content.opf file -func cleanOPF(opftext *string) error { - calibreTimestampRe := regexp.MustCompile(``) - *opftext = calibreTimestampRe.ReplaceAllString(*opftext, "") + for _, file := range toRemove { + os.Remove(filepath.Join(basepath, file)) + } - calibreContributorRe := regexp.MustCompile(`calibre .+<\/dc:contributor>`) - *opftext = calibreContributorRe.ReplaceAllString(*opftext, "") + return nil +} +// processOPF cleans up extra calibre metadata from the content.opf file, and adds a reference to the cover image. +func processOPF(opfText *string) error { opf := etree.NewDocument() - err := opf.ReadFromString(*opftext) + err := opf.ReadFromString(*opfText) if err != nil { return err } - for _, e := range opf.FindElements("//meta[@name='cover']") { - coverid := e.SelectAttrValue("content", "") - if coverid != "" { - *opftext = strings.Replace(*opftext, `id="`+coverid+`"`, `id="`+coverid+`" properties="cover-image"`, -1) - } else { - *opftext = strings.Replace(*opftext, `id="cover"`, `id="cover" properties="cover-image"`, -1) + // Add properties="cover-image" to cover file item entry to enable the kobo + // to find the cover image. + for _, meta := range opf.FindElements("//meta[@name='cover']") { + coverID := meta.SelectAttrValue("content", "") + if coverID == "" { + coverID = "cover" + } + for _, item := range opf.FindElements("//[@id='" + coverID + "']") { + item.CreateAttr("properties", "cover-image") } } + + // Remove calibre:timestamp + for _, meta := range opf.FindElements("//meta[@name='calibre:timestamp']") { + meta.Parent().RemoveChild(meta) + } + + // Remove calibre contributor tag + for _, contributor := range opf.FindElements("//dc:contributor[@role='bkp']") { + contributor.Parent().RemoveChild(contributor) + } + + // Pretty print OPF + opf.Indent(4) + + // Write OPF + *opfText, err = opf.WriteToString() + if err != nil { + return err + } + return nil } // addDivs adds kobo divs. func addDivs(doc *goquery.Document) error { + // If there are more divs than ps, divs are probably being used as paragraphs, and adding the kobo divs will most likely break the book. if len(doc.Find("div").Nodes) > len(doc.Find("p").Nodes) { - // If there are more divs than ps, divs are probably being used as paragraphs, and adding the kobo divs will most likely break the book. return nil } + + // Add the kobo divs doc.Find("body>*").WrapAllHtml(`
`) doc.Find("body>*").WrapAllHtml(`
`) + return nil } +// createSpan creates a Kobo span +func createSpan(paragraph, segment int, text string) *html.Node { + // Create the span + span := &html.Node{ + Type: html.ElementNode, + Data: "span", + Attr: []html.Attribute{{ + Key: "class", + Val: "koboSpan", + }, { + Key: "id", + Val: fmt.Sprintf("kobo.%v.%v", paragraph, segment), + }}, + } + + // Add the text + span.AppendChild(&html.Node{ + Type: html.TextNode, + Data: text, + }) + + return span +} + +var sentencere = regexp.MustCompile(`((?ms).*?[\.\!\?\:]['"”’“…]?\s*)`) +var nbspre = regexp.MustCompile(`^\xa0+$`) + // addSpansToNode is a recursive helper function for addSpans. func addSpansToNode(node *html.Node, paragraph *int, segment *int) { - sentencere := regexp.MustCompile(`((?m).*?[\.\!\?\:]['"”’“…]?\s*)`) - - // Part 2 of hacky way of setting innerhtml of a textnode by double escaping everything, and deescaping once afterwards - newAttr := []html.Attribute{} - for _, a := range node.Attr { - a.Key = html.EscapeString(a.Key) - a.Val = html.EscapeString(a.Val) - newAttr = append(newAttr, a) + nextNodes := []*html.Node{} + for c := node.FirstChild; c != nil; c = c.NextSibling { + nextNodes = append(nextNodes, c) } - node.Attr = newAttr if node.Type == html.TextNode { if node.Parent.Data == "pre" { // Do not add spans to pre elements return } + *segment++ sentencesindexes := sentencere.FindAllStringIndex(node.Data, -1) @@ -99,20 +147,19 @@ func addSpansToNode(node *html.Node, paragraph *int, segment *int) { sentences = append(sentences, node.Data[lasti[1]:len(node.Data)]) } - var newhtml bytes.Buffer - - for _, sentence := range sentences { - if strings.TrimSpace(sentence) != "" { - newhtml.WriteString(fmt.Sprintf(`%s`, *paragraph, *segment, html.EscapeString(sentence))) + for i, sentence := range sentences { + // if only 1 space, don't remove the element (issue #14) (issue #21) + if (i == 0 && node.Data == " ") || (i == 0 && nbspre.MatchString(node.Data)) || strings.TrimSpace(sentence) != "" { + node.Parent.InsertBefore(createSpan(*paragraph, *segment, sentence), node) *segment++ } } - // Part 1 of hacky way of setting innerhtml of a textnode by double escaping everything, and deescaping once afterwards - node.Data = newhtml.String() + node.Parent.RemoveChild(node) return } + if node.Type != html.ElementNode { return } @@ -123,7 +170,8 @@ func addSpansToNode(node *html.Node, paragraph *int, segment *int) { *segment = 0 *paragraph++ } - for c := node.FirstChild; c != nil; c = c.NextSibling { + + for _, c := range nextNodes { addSpansToNode(c, paragraph, segment) } } @@ -150,10 +198,12 @@ func addSpans(doc *goquery.Document) error { return nil } -// openSelfClosingPs opens self-closing p tags. -func openSelfClosingPs(html *string) error { - re := regexp.MustCompile(`/]*/>`) - *html = re.ReplaceAllString(*html, `

`) +// addKoboStyles adds kobo styles. +func addKoboStyles(doc *goquery.Document) error { + s := doc.Find("head").First().AppendHtml(``) + if s.Length() != 1 { + return fmt.Errorf("could not append kobo styles") + } return nil } @@ -172,34 +222,60 @@ func smartenPunctuation(html *string) error { } // cleanHTML cleans up html for a kobo epub. -func cleanHTML(html *string) error { - emptyHeadingRe := regexp.MustCompile(`\s*`) - *html = emptyHeadingRe.ReplaceAllString(*html, "") - - msPRe := regexp.MustCompile(`\s*\s*<\/o:p>`) - *html = msPRe.ReplaceAllString(*html, " ") - - msStRe := regexp.MustCompile(`<\/?st1:\w+>`) - *html = msStRe.ReplaceAllString(*html, "") +func cleanHTML(doc *goquery.Document) error { + // Remove Adobe DRM tags + doc.Find(`meta[name="Adept.expected.resource"]`).Remove() + + // Remove empty MS tags + doc.Find(`o\:p`).FilterFunction(func(_ int, s *goquery.Selection) bool { + return strings.Trim(s.Text(), "\t \n") == "" + }).Remove() + + // Remove empty headings + doc.Find(`h1,h2,h3,h4,h5,h6`).FilterFunction(func(_ int, s *goquery.Selection) bool { + h, _ := s.Html() + return strings.Trim(h, "\t \n") == "" + }).Remove() + + // Remove MS tags + doc.Find(`*`).FilterFunction(func(_ int, s *goquery.Selection) bool { + return strings.HasPrefix(goquery.NodeName(s), "st1:") + }).Remove() + + // Open self closing p tags + doc.Find(`p`).Each(func(_ int, s *goquery.Selection) { + if s.Children().Length() == 0 && strings.Trim(s.Text(), "\n \t") == "" { + s.SetHtml("") + } + }) - // unicode replacement chars - *html = strings.Replace(*html, "�", "", -1) + doc.Find("svg").SetAttr("xmlns:xlink", "http://www.w3.org/1999/xlink") + doc.Find("svg a").RemoveAttr("xmlns:xlink") + doc.Find("svg image").RemoveAttr("xmlns:xlink") // Add type to style tags - *html = strings.Replace(*html, `", 1) + // Remove unicode replacement chars + h = strings.Replace(h, "�", "", -1) + + // Fix commented xml tag + h = strings.Replace(h, ``, ``, 1) + h = strings.Replace(h, ``, ``, 1) + + // Fix nbsps removed + h = strings.Replace(h, "\u00a0", " ", -1) + + if postHTML != nil { + if err := (*postHTML)(&h); err != nil { + return err + } + } *content = h diff --git a/vendor/github.com/geek1011/kepubify/kepub/epub.go b/vendor/github.com/geek1011/kepubify/kepub/epub.go index a7459197..10d250e1 100644 --- a/vendor/github.com/geek1011/kepubify/kepub/epub.go +++ b/vendor/github.com/geek1011/kepubify/kepub/epub.go @@ -165,7 +165,10 @@ func PackEPUB(src, dest string, overwritedest bool) error { return fmt.Errorf(`error getting relative path of "%s"`, path) } - if path == dest { + // Fix issue with path separators in zip on windows + relativePath = filepath.ToSlash(relativePath) + + if filepath.ToSlash(path) == filepath.ToSlash(dest) { // Skip if it is trying to pack itself return nil } @@ -175,7 +178,7 @@ func PackEPUB(src, dest string, overwritedest bool) error { return nil } - if path == filepath.Join(src, "mimetype") { + if filepath.ToSlash(path) == filepath.ToSlash(filepath.Join(src, "mimetype")) { // Skip if it is the mimetype file return nil } diff --git a/vendor/github.com/geek1011/kepubify/kepub/kepub.go b/vendor/github.com/geek1011/kepubify/kepub/kepub.go index ec064097..4923ee87 100644 --- a/vendor/github.com/geek1011/kepubify/kepub/kepub.go +++ b/vendor/github.com/geek1011/kepubify/kepub/kepub.go @@ -5,95 +5,104 @@ import ( "io/ioutil" "os" "path/filepath" + "runtime" + "sync" "time" + "github.com/PuerkitoBio/goquery" "github.com/beevik/etree" - "github.com/cheggaaa/pb" zglob "github.com/mattn/go-zglob" ) -// Kepubify converts a .epub into a .kepub.epub -func Kepubify(src, dest string, printlog bool) error { +// Kepubify converts a .epub into a .kepub.epub. +// It can also optionally run a postprocessor for each file on the goquery.Document, or the html string. +func Kepubify(src, dest string, verbose bool, postDoc *func(doc *goquery.Document) error, postHTML *func(h *string) error) error { td, err := ioutil.TempDir("", "kepubify") if err != nil { - return fmt.Errorf("Could not create temp dir: %s", err) + return fmt.Errorf("could not create temp dir: %s", err) } defer os.RemoveAll(td) - if printlog { - fmt.Println("Unpacking ePub.") + if verbose { + fmt.Printf(" Unpacking ePub\n") } UnpackEPUB(src, td, true) - if printlog { - fmt.Println() - } a, err := zglob.Glob(filepath.Join(td, "**", "*.html")) if err != nil { - return fmt.Errorf("Could not create find content files: %s", err) + return fmt.Errorf("could not create find content files: %s", err) } b, err := zglob.Glob(filepath.Join(td, "**", "*.xhtml")) if err != nil { - return fmt.Errorf("Could not create find content files: %s", err) + return fmt.Errorf("could not create find content files: %s", err) } c, err := zglob.Glob(filepath.Join(td, "**", "*.htm")) if err != nil { - return fmt.Errorf("Could not create find content files: %s", err) + return fmt.Errorf("could not create find content files: %s", err) } contentfiles := append(append(a, b...), c...) - if printlog { - fmt.Printf("Processing %v content files.\n", len(contentfiles)) - } - - var bar *pb.ProgressBar - - if printlog { - bar = pb.New(len(contentfiles)) - bar.SetRefreshRate(time.Millisecond * 60) - bar.SetMaxWidth(60) - bar.Format("[=> ]") - bar.Start() - } - - for _, cf := range contentfiles { - buf, err := ioutil.ReadFile(cf) - if err != nil { - return fmt.Errorf("Could not open content file \"%s\" for reading: %s", cf, err) - } - str := string(buf) - err = process(&str) - if err != nil { - return fmt.Errorf("Error processing content file \"%s\": %s", cf, err) - } - err = ioutil.WriteFile(cf, []byte(str), 0644) - if err != nil { - return fmt.Errorf("Error writing content file \"%s\": %s", cf, err) - } - time.Sleep(time.Millisecond * 5) - if printlog { - bar.Increment() - } - } - - if printlog { - bar.Finish() - fmt.Println() - - fmt.Println("Cleaning content.opf.") - fmt.Println() + if verbose { + fmt.Printf(" Processing %v content files\n ", len(contentfiles)) + } + + runtime.GOMAXPROCS(runtime.NumCPU() + 1) + wg := sync.WaitGroup{} + cerr := make(chan error, 1) + for _, f := range contentfiles { + wg.Add(1) + go func(cf string) { + defer wg.Done() + buf, err := ioutil.ReadFile(cf) + if err != nil { + select { + case cerr <- fmt.Errorf("Could not open content file \"%s\" for reading: %s", cf, err): // Put err in the channel unless it is full + default: + } + return + } + str := string(buf) + err = process(&str, postDoc, postHTML) + if err != nil { + select { + case cerr <- fmt.Errorf("Error processing content file \"%s\": %s", cf, err): // Put err in the channel unless it is full + default: + } + return + } + err = ioutil.WriteFile(cf, []byte(str), 0644) + if err != nil { + select { + case cerr <- fmt.Errorf("Error writing content file \"%s\": %s", cf, err): // Put err in the channel unless it is full + default: + } + return + } + if verbose { + fmt.Print(".") + } + time.Sleep(time.Millisecond * 5) + }(f) + } + wg.Wait() + if len(cerr) > 0 { + return <-cerr + } + + if verbose { + fmt.Printf("\n Cleaning content.opf\n") } rsk, err := os.Open(filepath.Join(td, "META-INF", "container.xml")) if err != nil { - return fmt.Errorf("Error parsing container.xml: %s", err) + return fmt.Errorf("error opening container.xml: %s", err) } defer rsk.Close() container := etree.NewDocument() _, err = container.ReadFrom(rsk) if err != nil { - return fmt.Errorf("Error parsing container.xml: %s", err) + return fmt.Errorf("error parsing container.xml: %s", err) } rootfile := "" @@ -101,35 +110,33 @@ func Kepubify(src, dest string, printlog bool) error { rootfile = e.SelectAttrValue("full-path", "") } if rootfile == "" { - return fmt.Errorf("Error parsing container.xml") + return fmt.Errorf("error parsing container.xml") } buf, err := ioutil.ReadFile(filepath.Join(td, rootfile)) if err != nil { - return fmt.Errorf("Error parsing content.opf: %s", err) + return fmt.Errorf("error parsing content.opf: %s", err) } opf := string(buf) - err = cleanOPF(&opf) + err = processOPF(&opf) if err != nil { - return fmt.Errorf("Error cleaning content.opf: %s", err) + return fmt.Errorf("error cleaning content.opf: %s", err) } err = ioutil.WriteFile(filepath.Join(td, rootfile), []byte(opf), 0644) if err != nil { - return fmt.Errorf("Error writing new content.opf: %s", err) + return fmt.Errorf("error writing new content.opf: %s", err) } - if printlog { - fmt.Println("Cleaning epub files.") - fmt.Println() + if verbose { + fmt.Printf(" Cleaning epub files\n") } cleanFiles(td) - if printlog { - fmt.Println("Packing ePub.") - fmt.Println() + if verbose { + fmt.Printf(" Packing ePub\n") } PackEPUB(td, dest, true) return nil diff --git a/vendor/github.com/nfnt/resize/LICENSE b/vendor/github.com/nfnt/resize/LICENSE new file mode 100644 index 00000000..7836cad5 --- /dev/null +++ b/vendor/github.com/nfnt/resize/LICENSE @@ -0,0 +1,13 @@ +Copyright (c) 2012, Jan Schlicht + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. diff --git a/vendor/github.com/nfnt/resize/README.md b/vendor/github.com/nfnt/resize/README.md new file mode 100644 index 00000000..372777d2 --- /dev/null +++ b/vendor/github.com/nfnt/resize/README.md @@ -0,0 +1,151 @@ +# This package is no longer being updated! Please look for alternatives if that bothers you. + +Resize +====== + +Image resizing for the [Go programming language](http://golang.org) with common interpolation methods. + +[![Build Status](https://travis-ci.org/nfnt/resize.svg)](https://travis-ci.org/nfnt/resize) + +Installation +------------ + +```bash +$ go get github.com/nfnt/resize +``` + +It's that easy! + +Usage +----- + +This package needs at least Go 1.1. Import package with + +```go +import "github.com/nfnt/resize" +``` + +The resize package provides 2 functions: + +* `resize.Resize` creates a scaled image with new dimensions (`width`, `height`) using the interpolation function `interp`. + If either `width` or `height` is set to 0, it will be set to an aspect ratio preserving value. +* `resize.Thumbnail` downscales an image preserving its aspect ratio to the maximum dimensions (`maxWidth`, `maxHeight`). + It will return the original image if original sizes are smaller than the provided dimensions. + +```go +resize.Resize(width, height uint, img image.Image, interp resize.InterpolationFunction) image.Image +resize.Thumbnail(maxWidth, maxHeight uint, img image.Image, interp resize.InterpolationFunction) image.Image +``` + +The provided interpolation functions are (from fast to slow execution time) + +- `NearestNeighbor`: [Nearest-neighbor interpolation](http://en.wikipedia.org/wiki/Nearest-neighbor_interpolation) +- `Bilinear`: [Bilinear interpolation](http://en.wikipedia.org/wiki/Bilinear_interpolation) +- `Bicubic`: [Bicubic interpolation](http://en.wikipedia.org/wiki/Bicubic_interpolation) +- `MitchellNetravali`: [Mitchell-Netravali interpolation](http://dl.acm.org/citation.cfm?id=378514) +- `Lanczos2`: [Lanczos resampling](http://en.wikipedia.org/wiki/Lanczos_resampling) with a=2 +- `Lanczos3`: [Lanczos resampling](http://en.wikipedia.org/wiki/Lanczos_resampling) with a=3 + +Which of these methods gives the best results depends on your use case. + +Sample usage: + +```go +package main + +import ( + "github.com/nfnt/resize" + "image/jpeg" + "log" + "os" +) + +func main() { + // open "test.jpg" + file, err := os.Open("test.jpg") + if err != nil { + log.Fatal(err) + } + + // decode jpeg into image.Image + img, err := jpeg.Decode(file) + if err != nil { + log.Fatal(err) + } + file.Close() + + // resize to width 1000 using Lanczos resampling + // and preserve aspect ratio + m := resize.Resize(1000, 0, img, resize.Lanczos3) + + out, err := os.Create("test_resized.jpg") + if err != nil { + log.Fatal(err) + } + defer out.Close() + + // write new image to file + jpeg.Encode(out, m, nil) +} +``` + +Caveats +------- + +* Optimized access routines are used for `image.RGBA`, `image.NRGBA`, `image.RGBA64`, `image.NRGBA64`, `image.YCbCr`, `image.Gray`, and `image.Gray16` types. All other image types are accessed in a generic way that will result in slow processing speed. +* JPEG images are stored in `image.YCbCr`. This image format stores data in a way that will decrease processing speed. A resize may be up to 2 times slower than with `image.RGBA`. + + +Downsizing Samples +------- + +Downsizing is not as simple as it might look like. Images have to be filtered before they are scaled down, otherwise aliasing might occur. +Filtering is highly subjective: Applying too much will blur the whole image, too little will make aliasing become apparent. +Resize tries to provide sane defaults that should suffice in most cases. + +### Artificial sample + +Original image +![Rings](http://nfnt.github.com/img/rings_lg_orig.png) + + + + + + + + + + + + + + +

Nearest-Neighbor

Bilinear

Bicubic

Mitchell-Netravali

Lanczos2

Lanczos3
+ +### Real-Life sample + +Original image +![Original](http://nfnt.github.com/img/IMG_3694_720.jpg) + + + + + + + + + + + + + + +

Nearest-Neighbor

Bilinear

Bicubic

Mitchell-Netravali

Lanczos2

Lanczos3
+ + +License +------- + +Copyright (c) 2012 Jan Schlicht +Resize is released under a MIT style license. diff --git a/vendor/github.com/nfnt/resize/converter.go b/vendor/github.com/nfnt/resize/converter.go new file mode 100644 index 00000000..f9c520d0 --- /dev/null +++ b/vendor/github.com/nfnt/resize/converter.go @@ -0,0 +1,438 @@ +/* +Copyright (c) 2012, Jan Schlicht + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. +*/ + +package resize + +import "image" + +// Keep value in [0,255] range. +func clampUint8(in int32) uint8 { + // casting a negative int to an uint will result in an overflown + // large uint. this behavior will be exploited here and in other functions + // to achieve a higher performance. + if uint32(in) < 256 { + return uint8(in) + } + if in > 255 { + return 255 + } + return 0 +} + +// Keep value in [0,65535] range. +func clampUint16(in int64) uint16 { + if uint64(in) < 65536 { + return uint16(in) + } + if in > 65535 { + return 65535 + } + return 0 +} + +func resizeGeneric(in image.Image, out *image.RGBA64, scale float64, coeffs []int32, offset []int, filterLength int) { + newBounds := out.Bounds() + maxX := in.Bounds().Dx() - 1 + + for x := newBounds.Min.X; x < newBounds.Max.X; x++ { + for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { + var rgba [4]int64 + var sum int64 + start := offset[y] + ci := y * filterLength + for i := 0; i < filterLength; i++ { + coeff := coeffs[ci+i] + if coeff != 0 { + xi := start + i + switch { + case xi < 0: + xi = 0 + case xi >= maxX: + xi = maxX + } + + r, g, b, a := in.At(xi+in.Bounds().Min.X, x+in.Bounds().Min.Y).RGBA() + + rgba[0] += int64(coeff) * int64(r) + rgba[1] += int64(coeff) * int64(g) + rgba[2] += int64(coeff) * int64(b) + rgba[3] += int64(coeff) * int64(a) + sum += int64(coeff) + } + } + + offset := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*8 + + value := clampUint16(rgba[0] / sum) + out.Pix[offset+0] = uint8(value >> 8) + out.Pix[offset+1] = uint8(value) + value = clampUint16(rgba[1] / sum) + out.Pix[offset+2] = uint8(value >> 8) + out.Pix[offset+3] = uint8(value) + value = clampUint16(rgba[2] / sum) + out.Pix[offset+4] = uint8(value >> 8) + out.Pix[offset+5] = uint8(value) + value = clampUint16(rgba[3] / sum) + out.Pix[offset+6] = uint8(value >> 8) + out.Pix[offset+7] = uint8(value) + } + } +} + +func resizeRGBA(in *image.RGBA, out *image.RGBA, scale float64, coeffs []int16, offset []int, filterLength int) { + newBounds := out.Bounds() + maxX := in.Bounds().Dx() - 1 + + for x := newBounds.Min.X; x < newBounds.Max.X; x++ { + row := in.Pix[x*in.Stride:] + for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { + var rgba [4]int32 + var sum int32 + start := offset[y] + ci := y * filterLength + for i := 0; i < filterLength; i++ { + coeff := coeffs[ci+i] + if coeff != 0 { + xi := start + i + switch { + case uint(xi) < uint(maxX): + xi *= 4 + case xi >= maxX: + xi = 4 * maxX + default: + xi = 0 + } + + rgba[0] += int32(coeff) * int32(row[xi+0]) + rgba[1] += int32(coeff) * int32(row[xi+1]) + rgba[2] += int32(coeff) * int32(row[xi+2]) + rgba[3] += int32(coeff) * int32(row[xi+3]) + sum += int32(coeff) + } + } + + xo := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*4 + + out.Pix[xo+0] = clampUint8(rgba[0] / sum) + out.Pix[xo+1] = clampUint8(rgba[1] / sum) + out.Pix[xo+2] = clampUint8(rgba[2] / sum) + out.Pix[xo+3] = clampUint8(rgba[3] / sum) + } + } +} + +func resizeNRGBA(in *image.NRGBA, out *image.RGBA, scale float64, coeffs []int16, offset []int, filterLength int) { + newBounds := out.Bounds() + maxX := in.Bounds().Dx() - 1 + + for x := newBounds.Min.X; x < newBounds.Max.X; x++ { + row := in.Pix[x*in.Stride:] + for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { + var rgba [4]int32 + var sum int32 + start := offset[y] + ci := y * filterLength + for i := 0; i < filterLength; i++ { + coeff := coeffs[ci+i] + if coeff != 0 { + xi := start + i + switch { + case uint(xi) < uint(maxX): + xi *= 4 + case xi >= maxX: + xi = 4 * maxX + default: + xi = 0 + } + + // Forward alpha-premultiplication + a := int32(row[xi+3]) + r := int32(row[xi+0]) * a + r /= 0xff + g := int32(row[xi+1]) * a + g /= 0xff + b := int32(row[xi+2]) * a + b /= 0xff + + rgba[0] += int32(coeff) * r + rgba[1] += int32(coeff) * g + rgba[2] += int32(coeff) * b + rgba[3] += int32(coeff) * a + sum += int32(coeff) + } + } + + xo := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*4 + + out.Pix[xo+0] = clampUint8(rgba[0] / sum) + out.Pix[xo+1] = clampUint8(rgba[1] / sum) + out.Pix[xo+2] = clampUint8(rgba[2] / sum) + out.Pix[xo+3] = clampUint8(rgba[3] / sum) + } + } +} + +func resizeRGBA64(in *image.RGBA64, out *image.RGBA64, scale float64, coeffs []int32, offset []int, filterLength int) { + newBounds := out.Bounds() + maxX := in.Bounds().Dx() - 1 + + for x := newBounds.Min.X; x < newBounds.Max.X; x++ { + row := in.Pix[x*in.Stride:] + for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { + var rgba [4]int64 + var sum int64 + start := offset[y] + ci := y * filterLength + for i := 0; i < filterLength; i++ { + coeff := coeffs[ci+i] + if coeff != 0 { + xi := start + i + switch { + case uint(xi) < uint(maxX): + xi *= 8 + case xi >= maxX: + xi = 8 * maxX + default: + xi = 0 + } + + rgba[0] += int64(coeff) * (int64(row[xi+0])<<8 | int64(row[xi+1])) + rgba[1] += int64(coeff) * (int64(row[xi+2])<<8 | int64(row[xi+3])) + rgba[2] += int64(coeff) * (int64(row[xi+4])<<8 | int64(row[xi+5])) + rgba[3] += int64(coeff) * (int64(row[xi+6])<<8 | int64(row[xi+7])) + sum += int64(coeff) + } + } + + xo := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*8 + + value := clampUint16(rgba[0] / sum) + out.Pix[xo+0] = uint8(value >> 8) + out.Pix[xo+1] = uint8(value) + value = clampUint16(rgba[1] / sum) + out.Pix[xo+2] = uint8(value >> 8) + out.Pix[xo+3] = uint8(value) + value = clampUint16(rgba[2] / sum) + out.Pix[xo+4] = uint8(value >> 8) + out.Pix[xo+5] = uint8(value) + value = clampUint16(rgba[3] / sum) + out.Pix[xo+6] = uint8(value >> 8) + out.Pix[xo+7] = uint8(value) + } + } +} + +func resizeNRGBA64(in *image.NRGBA64, out *image.RGBA64, scale float64, coeffs []int32, offset []int, filterLength int) { + newBounds := out.Bounds() + maxX := in.Bounds().Dx() - 1 + + for x := newBounds.Min.X; x < newBounds.Max.X; x++ { + row := in.Pix[x*in.Stride:] + for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { + var rgba [4]int64 + var sum int64 + start := offset[y] + ci := y * filterLength + for i := 0; i < filterLength; i++ { + coeff := coeffs[ci+i] + if coeff != 0 { + xi := start + i + switch { + case uint(xi) < uint(maxX): + xi *= 8 + case xi >= maxX: + xi = 8 * maxX + default: + xi = 0 + } + + // Forward alpha-premultiplication + a := int64(uint16(row[xi+6])<<8 | uint16(row[xi+7])) + r := int64(uint16(row[xi+0])<<8|uint16(row[xi+1])) * a + r /= 0xffff + g := int64(uint16(row[xi+2])<<8|uint16(row[xi+3])) * a + g /= 0xffff + b := int64(uint16(row[xi+4])<<8|uint16(row[xi+5])) * a + b /= 0xffff + + rgba[0] += int64(coeff) * r + rgba[1] += int64(coeff) * g + rgba[2] += int64(coeff) * b + rgba[3] += int64(coeff) * a + sum += int64(coeff) + } + } + + xo := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*8 + + value := clampUint16(rgba[0] / sum) + out.Pix[xo+0] = uint8(value >> 8) + out.Pix[xo+1] = uint8(value) + value = clampUint16(rgba[1] / sum) + out.Pix[xo+2] = uint8(value >> 8) + out.Pix[xo+3] = uint8(value) + value = clampUint16(rgba[2] / sum) + out.Pix[xo+4] = uint8(value >> 8) + out.Pix[xo+5] = uint8(value) + value = clampUint16(rgba[3] / sum) + out.Pix[xo+6] = uint8(value >> 8) + out.Pix[xo+7] = uint8(value) + } + } +} + +func resizeGray(in *image.Gray, out *image.Gray, scale float64, coeffs []int16, offset []int, filterLength int) { + newBounds := out.Bounds() + maxX := in.Bounds().Dx() - 1 + + for x := newBounds.Min.X; x < newBounds.Max.X; x++ { + row := in.Pix[(x-newBounds.Min.X)*in.Stride:] + for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { + var gray int32 + var sum int32 + start := offset[y] + ci := y * filterLength + for i := 0; i < filterLength; i++ { + coeff := coeffs[ci+i] + if coeff != 0 { + xi := start + i + switch { + case xi < 0: + xi = 0 + case xi >= maxX: + xi = maxX + } + gray += int32(coeff) * int32(row[xi]) + sum += int32(coeff) + } + } + + offset := (y-newBounds.Min.Y)*out.Stride + (x - newBounds.Min.X) + out.Pix[offset] = clampUint8(gray / sum) + } + } +} + +func resizeGray16(in *image.Gray16, out *image.Gray16, scale float64, coeffs []int32, offset []int, filterLength int) { + newBounds := out.Bounds() + maxX := in.Bounds().Dx() - 1 + + for x := newBounds.Min.X; x < newBounds.Max.X; x++ { + row := in.Pix[x*in.Stride:] + for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { + var gray int64 + var sum int64 + start := offset[y] + ci := y * filterLength + for i := 0; i < filterLength; i++ { + coeff := coeffs[ci+i] + if coeff != 0 { + xi := start + i + switch { + case uint(xi) < uint(maxX): + xi *= 2 + case xi >= maxX: + xi = 2 * maxX + default: + xi = 0 + } + gray += int64(coeff) * int64(uint16(row[xi+0])<<8|uint16(row[xi+1])) + sum += int64(coeff) + } + } + + offset := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*2 + value := clampUint16(gray / sum) + out.Pix[offset+0] = uint8(value >> 8) + out.Pix[offset+1] = uint8(value) + } + } +} + +func resizeYCbCr(in *ycc, out *ycc, scale float64, coeffs []int16, offset []int, filterLength int) { + newBounds := out.Bounds() + maxX := in.Bounds().Dx() - 1 + + for x := newBounds.Min.X; x < newBounds.Max.X; x++ { + row := in.Pix[x*in.Stride:] + for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { + var p [3]int32 + var sum int32 + start := offset[y] + ci := y * filterLength + for i := 0; i < filterLength; i++ { + coeff := coeffs[ci+i] + if coeff != 0 { + xi := start + i + switch { + case uint(xi) < uint(maxX): + xi *= 3 + case xi >= maxX: + xi = 3 * maxX + default: + xi = 0 + } + p[0] += int32(coeff) * int32(row[xi+0]) + p[1] += int32(coeff) * int32(row[xi+1]) + p[2] += int32(coeff) * int32(row[xi+2]) + sum += int32(coeff) + } + } + + xo := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*3 + out.Pix[xo+0] = clampUint8(p[0] / sum) + out.Pix[xo+1] = clampUint8(p[1] / sum) + out.Pix[xo+2] = clampUint8(p[2] / sum) + } + } +} + +func nearestYCbCr(in *ycc, out *ycc, scale float64, coeffs []bool, offset []int, filterLength int) { + newBounds := out.Bounds() + maxX := in.Bounds().Dx() - 1 + + for x := newBounds.Min.X; x < newBounds.Max.X; x++ { + row := in.Pix[x*in.Stride:] + for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { + var p [3]float32 + var sum float32 + start := offset[y] + ci := y * filterLength + for i := 0; i < filterLength; i++ { + if coeffs[ci+i] { + xi := start + i + switch { + case uint(xi) < uint(maxX): + xi *= 3 + case xi >= maxX: + xi = 3 * maxX + default: + xi = 0 + } + p[0] += float32(row[xi+0]) + p[1] += float32(row[xi+1]) + p[2] += float32(row[xi+2]) + sum++ + } + } + + xo := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*3 + out.Pix[xo+0] = floatToUint8(p[0] / sum) + out.Pix[xo+1] = floatToUint8(p[1] / sum) + out.Pix[xo+2] = floatToUint8(p[2] / sum) + } + } +} diff --git a/vendor/github.com/nfnt/resize/filters.go b/vendor/github.com/nfnt/resize/filters.go new file mode 100644 index 00000000..4ce04e38 --- /dev/null +++ b/vendor/github.com/nfnt/resize/filters.go @@ -0,0 +1,143 @@ +/* +Copyright (c) 2012, Jan Schlicht + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. +*/ + +package resize + +import ( + "math" +) + +func nearest(in float64) float64 { + if in >= -0.5 && in < 0.5 { + return 1 + } + return 0 +} + +func linear(in float64) float64 { + in = math.Abs(in) + if in <= 1 { + return 1 - in + } + return 0 +} + +func cubic(in float64) float64 { + in = math.Abs(in) + if in <= 1 { + return in*in*(1.5*in-2.5) + 1.0 + } + if in <= 2 { + return in*(in*(2.5-0.5*in)-4.0) + 2.0 + } + return 0 +} + +func mitchellnetravali(in float64) float64 { + in = math.Abs(in) + if in <= 1 { + return (7.0*in*in*in - 12.0*in*in + 5.33333333333) * 0.16666666666 + } + if in <= 2 { + return (-2.33333333333*in*in*in + 12.0*in*in - 20.0*in + 10.6666666667) * 0.16666666666 + } + return 0 +} + +func sinc(x float64) float64 { + x = math.Abs(x) * math.Pi + if x >= 1.220703e-4 { + return math.Sin(x) / x + } + return 1 +} + +func lanczos2(in float64) float64 { + if in > -2 && in < 2 { + return sinc(in) * sinc(in*0.5) + } + return 0 +} + +func lanczos3(in float64) float64 { + if in > -3 && in < 3 { + return sinc(in) * sinc(in*0.3333333333333333) + } + return 0 +} + +// range [-256,256] +func createWeights8(dy, filterLength int, blur, scale float64, kernel func(float64) float64) ([]int16, []int, int) { + filterLength = filterLength * int(math.Max(math.Ceil(blur*scale), 1)) + filterFactor := math.Min(1./(blur*scale), 1) + + coeffs := make([]int16, dy*filterLength) + start := make([]int, dy) + for y := 0; y < dy; y++ { + interpX := scale*(float64(y)+0.5) - 0.5 + start[y] = int(interpX) - filterLength/2 + 1 + interpX -= float64(start[y]) + for i := 0; i < filterLength; i++ { + in := (interpX - float64(i)) * filterFactor + coeffs[y*filterLength+i] = int16(kernel(in) * 256) + } + } + + return coeffs, start, filterLength +} + +// range [-65536,65536] +func createWeights16(dy, filterLength int, blur, scale float64, kernel func(float64) float64) ([]int32, []int, int) { + filterLength = filterLength * int(math.Max(math.Ceil(blur*scale), 1)) + filterFactor := math.Min(1./(blur*scale), 1) + + coeffs := make([]int32, dy*filterLength) + start := make([]int, dy) + for y := 0; y < dy; y++ { + interpX := scale*(float64(y)+0.5) - 0.5 + start[y] = int(interpX) - filterLength/2 + 1 + interpX -= float64(start[y]) + for i := 0; i < filterLength; i++ { + in := (interpX - float64(i)) * filterFactor + coeffs[y*filterLength+i] = int32(kernel(in) * 65536) + } + } + + return coeffs, start, filterLength +} + +func createWeightsNearest(dy, filterLength int, blur, scale float64) ([]bool, []int, int) { + filterLength = filterLength * int(math.Max(math.Ceil(blur*scale), 1)) + filterFactor := math.Min(1./(blur*scale), 1) + + coeffs := make([]bool, dy*filterLength) + start := make([]int, dy) + for y := 0; y < dy; y++ { + interpX := scale*(float64(y)+0.5) - 0.5 + start[y] = int(interpX) - filterLength/2 + 1 + interpX -= float64(start[y]) + for i := 0; i < filterLength; i++ { + in := (interpX - float64(i)) * filterFactor + if in >= -0.5 && in < 0.5 { + coeffs[y*filterLength+i] = true + } else { + coeffs[y*filterLength+i] = false + } + } + } + + return coeffs, start, filterLength +} diff --git a/vendor/github.com/nfnt/resize/nearest.go b/vendor/github.com/nfnt/resize/nearest.go new file mode 100644 index 00000000..888039d8 --- /dev/null +++ b/vendor/github.com/nfnt/resize/nearest.go @@ -0,0 +1,318 @@ +/* +Copyright (c) 2014, Charlie Vieth + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. +*/ + +package resize + +import "image" + +func floatToUint8(x float32) uint8 { + // Nearest-neighbor values are always + // positive no need to check lower-bound. + if x > 0xfe { + return 0xff + } + return uint8(x) +} + +func floatToUint16(x float32) uint16 { + if x > 0xfffe { + return 0xffff + } + return uint16(x) +} + +func nearestGeneric(in image.Image, out *image.RGBA64, scale float64, coeffs []bool, offset []int, filterLength int) { + newBounds := out.Bounds() + maxX := in.Bounds().Dx() - 1 + + for x := newBounds.Min.X; x < newBounds.Max.X; x++ { + for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { + var rgba [4]float32 + var sum float32 + start := offset[y] + ci := y * filterLength + for i := 0; i < filterLength; i++ { + if coeffs[ci+i] { + xi := start + i + switch { + case xi < 0: + xi = 0 + case xi >= maxX: + xi = maxX + } + r, g, b, a := in.At(xi+in.Bounds().Min.X, x+in.Bounds().Min.Y).RGBA() + rgba[0] += float32(r) + rgba[1] += float32(g) + rgba[2] += float32(b) + rgba[3] += float32(a) + sum++ + } + } + + offset := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*8 + value := floatToUint16(rgba[0] / sum) + out.Pix[offset+0] = uint8(value >> 8) + out.Pix[offset+1] = uint8(value) + value = floatToUint16(rgba[1] / sum) + out.Pix[offset+2] = uint8(value >> 8) + out.Pix[offset+3] = uint8(value) + value = floatToUint16(rgba[2] / sum) + out.Pix[offset+4] = uint8(value >> 8) + out.Pix[offset+5] = uint8(value) + value = floatToUint16(rgba[3] / sum) + out.Pix[offset+6] = uint8(value >> 8) + out.Pix[offset+7] = uint8(value) + } + } +} + +func nearestRGBA(in *image.RGBA, out *image.RGBA, scale float64, coeffs []bool, offset []int, filterLength int) { + newBounds := out.Bounds() + maxX := in.Bounds().Dx() - 1 + + for x := newBounds.Min.X; x < newBounds.Max.X; x++ { + row := in.Pix[x*in.Stride:] + for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { + var rgba [4]float32 + var sum float32 + start := offset[y] + ci := y * filterLength + for i := 0; i < filterLength; i++ { + if coeffs[ci+i] { + xi := start + i + switch { + case uint(xi) < uint(maxX): + xi *= 4 + case xi >= maxX: + xi = 4 * maxX + default: + xi = 0 + } + rgba[0] += float32(row[xi+0]) + rgba[1] += float32(row[xi+1]) + rgba[2] += float32(row[xi+2]) + rgba[3] += float32(row[xi+3]) + sum++ + } + } + + xo := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*4 + out.Pix[xo+0] = floatToUint8(rgba[0] / sum) + out.Pix[xo+1] = floatToUint8(rgba[1] / sum) + out.Pix[xo+2] = floatToUint8(rgba[2] / sum) + out.Pix[xo+3] = floatToUint8(rgba[3] / sum) + } + } +} + +func nearestNRGBA(in *image.NRGBA, out *image.NRGBA, scale float64, coeffs []bool, offset []int, filterLength int) { + newBounds := out.Bounds() + maxX := in.Bounds().Dx() - 1 + + for x := newBounds.Min.X; x < newBounds.Max.X; x++ { + row := in.Pix[x*in.Stride:] + for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { + var rgba [4]float32 + var sum float32 + start := offset[y] + ci := y * filterLength + for i := 0; i < filterLength; i++ { + if coeffs[ci+i] { + xi := start + i + switch { + case uint(xi) < uint(maxX): + xi *= 4 + case xi >= maxX: + xi = 4 * maxX + default: + xi = 0 + } + rgba[0] += float32(row[xi+0]) + rgba[1] += float32(row[xi+1]) + rgba[2] += float32(row[xi+2]) + rgba[3] += float32(row[xi+3]) + sum++ + } + } + + xo := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*4 + out.Pix[xo+0] = floatToUint8(rgba[0] / sum) + out.Pix[xo+1] = floatToUint8(rgba[1] / sum) + out.Pix[xo+2] = floatToUint8(rgba[2] / sum) + out.Pix[xo+3] = floatToUint8(rgba[3] / sum) + } + } +} + +func nearestRGBA64(in *image.RGBA64, out *image.RGBA64, scale float64, coeffs []bool, offset []int, filterLength int) { + newBounds := out.Bounds() + maxX := in.Bounds().Dx() - 1 + + for x := newBounds.Min.X; x < newBounds.Max.X; x++ { + row := in.Pix[x*in.Stride:] + for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { + var rgba [4]float32 + var sum float32 + start := offset[y] + ci := y * filterLength + for i := 0; i < filterLength; i++ { + if coeffs[ci+i] { + xi := start + i + switch { + case uint(xi) < uint(maxX): + xi *= 8 + case xi >= maxX: + xi = 8 * maxX + default: + xi = 0 + } + rgba[0] += float32(uint16(row[xi+0])<<8 | uint16(row[xi+1])) + rgba[1] += float32(uint16(row[xi+2])<<8 | uint16(row[xi+3])) + rgba[2] += float32(uint16(row[xi+4])<<8 | uint16(row[xi+5])) + rgba[3] += float32(uint16(row[xi+6])<<8 | uint16(row[xi+7])) + sum++ + } + } + + xo := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*8 + value := floatToUint16(rgba[0] / sum) + out.Pix[xo+0] = uint8(value >> 8) + out.Pix[xo+1] = uint8(value) + value = floatToUint16(rgba[1] / sum) + out.Pix[xo+2] = uint8(value >> 8) + out.Pix[xo+3] = uint8(value) + value = floatToUint16(rgba[2] / sum) + out.Pix[xo+4] = uint8(value >> 8) + out.Pix[xo+5] = uint8(value) + value = floatToUint16(rgba[3] / sum) + out.Pix[xo+6] = uint8(value >> 8) + out.Pix[xo+7] = uint8(value) + } + } +} + +func nearestNRGBA64(in *image.NRGBA64, out *image.NRGBA64, scale float64, coeffs []bool, offset []int, filterLength int) { + newBounds := out.Bounds() + maxX := in.Bounds().Dx() - 1 + + for x := newBounds.Min.X; x < newBounds.Max.X; x++ { + row := in.Pix[x*in.Stride:] + for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { + var rgba [4]float32 + var sum float32 + start := offset[y] + ci := y * filterLength + for i := 0; i < filterLength; i++ { + if coeffs[ci+i] { + xi := start + i + switch { + case uint(xi) < uint(maxX): + xi *= 8 + case xi >= maxX: + xi = 8 * maxX + default: + xi = 0 + } + rgba[0] += float32(uint16(row[xi+0])<<8 | uint16(row[xi+1])) + rgba[1] += float32(uint16(row[xi+2])<<8 | uint16(row[xi+3])) + rgba[2] += float32(uint16(row[xi+4])<<8 | uint16(row[xi+5])) + rgba[3] += float32(uint16(row[xi+6])<<8 | uint16(row[xi+7])) + sum++ + } + } + + xo := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*8 + value := floatToUint16(rgba[0] / sum) + out.Pix[xo+0] = uint8(value >> 8) + out.Pix[xo+1] = uint8(value) + value = floatToUint16(rgba[1] / sum) + out.Pix[xo+2] = uint8(value >> 8) + out.Pix[xo+3] = uint8(value) + value = floatToUint16(rgba[2] / sum) + out.Pix[xo+4] = uint8(value >> 8) + out.Pix[xo+5] = uint8(value) + value = floatToUint16(rgba[3] / sum) + out.Pix[xo+6] = uint8(value >> 8) + out.Pix[xo+7] = uint8(value) + } + } +} + +func nearestGray(in *image.Gray, out *image.Gray, scale float64, coeffs []bool, offset []int, filterLength int) { + newBounds := out.Bounds() + maxX := in.Bounds().Dx() - 1 + + for x := newBounds.Min.X; x < newBounds.Max.X; x++ { + row := in.Pix[x*in.Stride:] + for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { + var gray float32 + var sum float32 + start := offset[y] + ci := y * filterLength + for i := 0; i < filterLength; i++ { + if coeffs[ci+i] { + xi := start + i + switch { + case xi < 0: + xi = 0 + case xi >= maxX: + xi = maxX + } + gray += float32(row[xi]) + sum++ + } + } + + offset := (y-newBounds.Min.Y)*out.Stride + (x - newBounds.Min.X) + out.Pix[offset] = floatToUint8(gray / sum) + } + } +} + +func nearestGray16(in *image.Gray16, out *image.Gray16, scale float64, coeffs []bool, offset []int, filterLength int) { + newBounds := out.Bounds() + maxX := in.Bounds().Dx() - 1 + + for x := newBounds.Min.X; x < newBounds.Max.X; x++ { + row := in.Pix[x*in.Stride:] + for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { + var gray float32 + var sum float32 + start := offset[y] + ci := y * filterLength + for i := 0; i < filterLength; i++ { + if coeffs[ci+i] { + xi := start + i + switch { + case uint(xi) < uint(maxX): + xi *= 2 + case xi >= maxX: + xi = 2 * maxX + default: + xi = 0 + } + gray += float32(uint16(row[xi+0])<<8 | uint16(row[xi+1])) + sum++ + } + } + + offset := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*2 + value := floatToUint16(gray / sum) + out.Pix[offset+0] = uint8(value >> 8) + out.Pix[offset+1] = uint8(value) + } + } +} diff --git a/vendor/github.com/nfnt/resize/resize.go b/vendor/github.com/nfnt/resize/resize.go new file mode 100644 index 00000000..0d7fbf69 --- /dev/null +++ b/vendor/github.com/nfnt/resize/resize.go @@ -0,0 +1,620 @@ +/* +Copyright (c) 2012, Jan Schlicht + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. +*/ + +// Package resize implements various image resizing methods. +// +// The package works with the Image interface described in the image package. +// Various interpolation methods are provided and multiple processors may be +// utilized in the computations. +// +// Example: +// imgResized := resize.Resize(1000, 0, imgOld, resize.MitchellNetravali) +package resize + +import ( + "image" + "runtime" + "sync" +) + +// An InterpolationFunction provides the parameters that describe an +// interpolation kernel. It returns the number of samples to take +// and the kernel function to use for sampling. +type InterpolationFunction int + +// InterpolationFunction constants +const ( + // Nearest-neighbor interpolation + NearestNeighbor InterpolationFunction = iota + // Bilinear interpolation + Bilinear + // Bicubic interpolation (with cubic hermite spline) + Bicubic + // Mitchell-Netravali interpolation + MitchellNetravali + // Lanczos interpolation (a=2) + Lanczos2 + // Lanczos interpolation (a=3) + Lanczos3 +) + +// kernal, returns an InterpolationFunctions taps and kernel. +func (i InterpolationFunction) kernel() (int, func(float64) float64) { + switch i { + case Bilinear: + return 2, linear + case Bicubic: + return 4, cubic + case MitchellNetravali: + return 4, mitchellnetravali + case Lanczos2: + return 4, lanczos2 + case Lanczos3: + return 6, lanczos3 + default: + // Default to NearestNeighbor. + return 2, nearest + } +} + +// values <1 will sharpen the image +var blur = 1.0 + +// Resize scales an image to new width and height using the interpolation function interp. +// A new image with the given dimensions will be returned. +// If one of the parameters width or height is set to 0, its size will be calculated so that +// the aspect ratio is that of the originating image. +// The resizing algorithm uses channels for parallel computation. +// If the input image has width or height of 0, it is returned unchanged. +func Resize(width, height uint, img image.Image, interp InterpolationFunction) image.Image { + scaleX, scaleY := calcFactors(width, height, float64(img.Bounds().Dx()), float64(img.Bounds().Dy())) + if width == 0 { + width = uint(0.7 + float64(img.Bounds().Dx())/scaleX) + } + if height == 0 { + height = uint(0.7 + float64(img.Bounds().Dy())/scaleY) + } + + // Trivial case: return input image + if int(width) == img.Bounds().Dx() && int(height) == img.Bounds().Dy() { + return img + } + + // Input image has no pixels + if img.Bounds().Dx() <= 0 || img.Bounds().Dy() <= 0 { + return img + } + + if interp == NearestNeighbor { + return resizeNearest(width, height, scaleX, scaleY, img, interp) + } + + taps, kernel := interp.kernel() + cpus := runtime.GOMAXPROCS(0) + wg := sync.WaitGroup{} + + // Generic access to image.Image is slow in tight loops. + // The optimal access has to be determined from the concrete image type. + switch input := img.(type) { + case *image.RGBA: + // 8-bit precision + temp := image.NewRGBA(image.Rect(0, 0, input.Bounds().Dy(), int(width))) + result := image.NewRGBA(image.Rect(0, 0, int(width), int(height))) + + // horizontal filter, results in transposed temporary image + coeffs, offset, filterLength := createWeights8(temp.Bounds().Dy(), taps, blur, scaleX, kernel) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(temp, i, cpus).(*image.RGBA) + go func() { + defer wg.Done() + resizeRGBA(input, slice, scaleX, coeffs, offset, filterLength) + }() + } + wg.Wait() + + // horizontal filter on transposed image, result is not transposed + coeffs, offset, filterLength = createWeights8(result.Bounds().Dy(), taps, blur, scaleY, kernel) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(result, i, cpus).(*image.RGBA) + go func() { + defer wg.Done() + resizeRGBA(temp, slice, scaleY, coeffs, offset, filterLength) + }() + } + wg.Wait() + return result + case *image.NRGBA: + // 8-bit precision + temp := image.NewRGBA(image.Rect(0, 0, input.Bounds().Dy(), int(width))) + result := image.NewRGBA(image.Rect(0, 0, int(width), int(height))) + + // horizontal filter, results in transposed temporary image + coeffs, offset, filterLength := createWeights8(temp.Bounds().Dy(), taps, blur, scaleX, kernel) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(temp, i, cpus).(*image.RGBA) + go func() { + defer wg.Done() + resizeNRGBA(input, slice, scaleX, coeffs, offset, filterLength) + }() + } + wg.Wait() + + // horizontal filter on transposed image, result is not transposed + coeffs, offset, filterLength = createWeights8(result.Bounds().Dy(), taps, blur, scaleY, kernel) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(result, i, cpus).(*image.RGBA) + go func() { + defer wg.Done() + resizeRGBA(temp, slice, scaleY, coeffs, offset, filterLength) + }() + } + wg.Wait() + return result + + case *image.YCbCr: + // 8-bit precision + // accessing the YCbCr arrays in a tight loop is slow. + // converting the image to ycc increases performance by 2x. + temp := newYCC(image.Rect(0, 0, input.Bounds().Dy(), int(width)), input.SubsampleRatio) + result := newYCC(image.Rect(0, 0, int(width), int(height)), image.YCbCrSubsampleRatio444) + + coeffs, offset, filterLength := createWeights8(temp.Bounds().Dy(), taps, blur, scaleX, kernel) + in := imageYCbCrToYCC(input) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(temp, i, cpus).(*ycc) + go func() { + defer wg.Done() + resizeYCbCr(in, slice, scaleX, coeffs, offset, filterLength) + }() + } + wg.Wait() + + coeffs, offset, filterLength = createWeights8(result.Bounds().Dy(), taps, blur, scaleY, kernel) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(result, i, cpus).(*ycc) + go func() { + defer wg.Done() + resizeYCbCr(temp, slice, scaleY, coeffs, offset, filterLength) + }() + } + wg.Wait() + return result.YCbCr() + case *image.RGBA64: + // 16-bit precision + temp := image.NewRGBA64(image.Rect(0, 0, input.Bounds().Dy(), int(width))) + result := image.NewRGBA64(image.Rect(0, 0, int(width), int(height))) + + // horizontal filter, results in transposed temporary image + coeffs, offset, filterLength := createWeights16(temp.Bounds().Dy(), taps, blur, scaleX, kernel) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(temp, i, cpus).(*image.RGBA64) + go func() { + defer wg.Done() + resizeRGBA64(input, slice, scaleX, coeffs, offset, filterLength) + }() + } + wg.Wait() + + // horizontal filter on transposed image, result is not transposed + coeffs, offset, filterLength = createWeights16(result.Bounds().Dy(), taps, blur, scaleY, kernel) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(result, i, cpus).(*image.RGBA64) + go func() { + defer wg.Done() + resizeRGBA64(temp, slice, scaleY, coeffs, offset, filterLength) + }() + } + wg.Wait() + return result + case *image.NRGBA64: + // 16-bit precision + temp := image.NewRGBA64(image.Rect(0, 0, input.Bounds().Dy(), int(width))) + result := image.NewRGBA64(image.Rect(0, 0, int(width), int(height))) + + // horizontal filter, results in transposed temporary image + coeffs, offset, filterLength := createWeights16(temp.Bounds().Dy(), taps, blur, scaleX, kernel) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(temp, i, cpus).(*image.RGBA64) + go func() { + defer wg.Done() + resizeNRGBA64(input, slice, scaleX, coeffs, offset, filterLength) + }() + } + wg.Wait() + + // horizontal filter on transposed image, result is not transposed + coeffs, offset, filterLength = createWeights16(result.Bounds().Dy(), taps, blur, scaleY, kernel) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(result, i, cpus).(*image.RGBA64) + go func() { + defer wg.Done() + resizeRGBA64(temp, slice, scaleY, coeffs, offset, filterLength) + }() + } + wg.Wait() + return result + case *image.Gray: + // 8-bit precision + temp := image.NewGray(image.Rect(0, 0, input.Bounds().Dy(), int(width))) + result := image.NewGray(image.Rect(0, 0, int(width), int(height))) + + // horizontal filter, results in transposed temporary image + coeffs, offset, filterLength := createWeights8(temp.Bounds().Dy(), taps, blur, scaleX, kernel) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(temp, i, cpus).(*image.Gray) + go func() { + defer wg.Done() + resizeGray(input, slice, scaleX, coeffs, offset, filterLength) + }() + } + wg.Wait() + + // horizontal filter on transposed image, result is not transposed + coeffs, offset, filterLength = createWeights8(result.Bounds().Dy(), taps, blur, scaleY, kernel) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(result, i, cpus).(*image.Gray) + go func() { + defer wg.Done() + resizeGray(temp, slice, scaleY, coeffs, offset, filterLength) + }() + } + wg.Wait() + return result + case *image.Gray16: + // 16-bit precision + temp := image.NewGray16(image.Rect(0, 0, input.Bounds().Dy(), int(width))) + result := image.NewGray16(image.Rect(0, 0, int(width), int(height))) + + // horizontal filter, results in transposed temporary image + coeffs, offset, filterLength := createWeights16(temp.Bounds().Dy(), taps, blur, scaleX, kernel) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(temp, i, cpus).(*image.Gray16) + go func() { + defer wg.Done() + resizeGray16(input, slice, scaleX, coeffs, offset, filterLength) + }() + } + wg.Wait() + + // horizontal filter on transposed image, result is not transposed + coeffs, offset, filterLength = createWeights16(result.Bounds().Dy(), taps, blur, scaleY, kernel) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(result, i, cpus).(*image.Gray16) + go func() { + defer wg.Done() + resizeGray16(temp, slice, scaleY, coeffs, offset, filterLength) + }() + } + wg.Wait() + return result + default: + // 16-bit precision + temp := image.NewRGBA64(image.Rect(0, 0, img.Bounds().Dy(), int(width))) + result := image.NewRGBA64(image.Rect(0, 0, int(width), int(height))) + + // horizontal filter, results in transposed temporary image + coeffs, offset, filterLength := createWeights16(temp.Bounds().Dy(), taps, blur, scaleX, kernel) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(temp, i, cpus).(*image.RGBA64) + go func() { + defer wg.Done() + resizeGeneric(img, slice, scaleX, coeffs, offset, filterLength) + }() + } + wg.Wait() + + // horizontal filter on transposed image, result is not transposed + coeffs, offset, filterLength = createWeights16(result.Bounds().Dy(), taps, blur, scaleY, kernel) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(result, i, cpus).(*image.RGBA64) + go func() { + defer wg.Done() + resizeRGBA64(temp, slice, scaleY, coeffs, offset, filterLength) + }() + } + wg.Wait() + return result + } +} + +func resizeNearest(width, height uint, scaleX, scaleY float64, img image.Image, interp InterpolationFunction) image.Image { + taps, _ := interp.kernel() + cpus := runtime.GOMAXPROCS(0) + wg := sync.WaitGroup{} + + switch input := img.(type) { + case *image.RGBA: + // 8-bit precision + temp := image.NewRGBA(image.Rect(0, 0, input.Bounds().Dy(), int(width))) + result := image.NewRGBA(image.Rect(0, 0, int(width), int(height))) + + // horizontal filter, results in transposed temporary image + coeffs, offset, filterLength := createWeightsNearest(temp.Bounds().Dy(), taps, blur, scaleX) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(temp, i, cpus).(*image.RGBA) + go func() { + defer wg.Done() + nearestRGBA(input, slice, scaleX, coeffs, offset, filterLength) + }() + } + wg.Wait() + + // horizontal filter on transposed image, result is not transposed + coeffs, offset, filterLength = createWeightsNearest(result.Bounds().Dy(), taps, blur, scaleY) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(result, i, cpus).(*image.RGBA) + go func() { + defer wg.Done() + nearestRGBA(temp, slice, scaleY, coeffs, offset, filterLength) + }() + } + wg.Wait() + return result + case *image.NRGBA: + // 8-bit precision + temp := image.NewNRGBA(image.Rect(0, 0, input.Bounds().Dy(), int(width))) + result := image.NewNRGBA(image.Rect(0, 0, int(width), int(height))) + + // horizontal filter, results in transposed temporary image + coeffs, offset, filterLength := createWeightsNearest(temp.Bounds().Dy(), taps, blur, scaleX) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(temp, i, cpus).(*image.NRGBA) + go func() { + defer wg.Done() + nearestNRGBA(input, slice, scaleX, coeffs, offset, filterLength) + }() + } + wg.Wait() + + // horizontal filter on transposed image, result is not transposed + coeffs, offset, filterLength = createWeightsNearest(result.Bounds().Dy(), taps, blur, scaleY) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(result, i, cpus).(*image.NRGBA) + go func() { + defer wg.Done() + nearestNRGBA(temp, slice, scaleY, coeffs, offset, filterLength) + }() + } + wg.Wait() + return result + case *image.YCbCr: + // 8-bit precision + // accessing the YCbCr arrays in a tight loop is slow. + // converting the image to ycc increases performance by 2x. + temp := newYCC(image.Rect(0, 0, input.Bounds().Dy(), int(width)), input.SubsampleRatio) + result := newYCC(image.Rect(0, 0, int(width), int(height)), image.YCbCrSubsampleRatio444) + + coeffs, offset, filterLength := createWeightsNearest(temp.Bounds().Dy(), taps, blur, scaleX) + in := imageYCbCrToYCC(input) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(temp, i, cpus).(*ycc) + go func() { + defer wg.Done() + nearestYCbCr(in, slice, scaleX, coeffs, offset, filterLength) + }() + } + wg.Wait() + + coeffs, offset, filterLength = createWeightsNearest(result.Bounds().Dy(), taps, blur, scaleY) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(result, i, cpus).(*ycc) + go func() { + defer wg.Done() + nearestYCbCr(temp, slice, scaleY, coeffs, offset, filterLength) + }() + } + wg.Wait() + return result.YCbCr() + case *image.RGBA64: + // 16-bit precision + temp := image.NewRGBA64(image.Rect(0, 0, input.Bounds().Dy(), int(width))) + result := image.NewRGBA64(image.Rect(0, 0, int(width), int(height))) + + // horizontal filter, results in transposed temporary image + coeffs, offset, filterLength := createWeightsNearest(temp.Bounds().Dy(), taps, blur, scaleX) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(temp, i, cpus).(*image.RGBA64) + go func() { + defer wg.Done() + nearestRGBA64(input, slice, scaleX, coeffs, offset, filterLength) + }() + } + wg.Wait() + + // horizontal filter on transposed image, result is not transposed + coeffs, offset, filterLength = createWeightsNearest(result.Bounds().Dy(), taps, blur, scaleY) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(result, i, cpus).(*image.RGBA64) + go func() { + defer wg.Done() + nearestRGBA64(temp, slice, scaleY, coeffs, offset, filterLength) + }() + } + wg.Wait() + return result + case *image.NRGBA64: + // 16-bit precision + temp := image.NewNRGBA64(image.Rect(0, 0, input.Bounds().Dy(), int(width))) + result := image.NewNRGBA64(image.Rect(0, 0, int(width), int(height))) + + // horizontal filter, results in transposed temporary image + coeffs, offset, filterLength := createWeightsNearest(temp.Bounds().Dy(), taps, blur, scaleX) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(temp, i, cpus).(*image.NRGBA64) + go func() { + defer wg.Done() + nearestNRGBA64(input, slice, scaleX, coeffs, offset, filterLength) + }() + } + wg.Wait() + + // horizontal filter on transposed image, result is not transposed + coeffs, offset, filterLength = createWeightsNearest(result.Bounds().Dy(), taps, blur, scaleY) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(result, i, cpus).(*image.NRGBA64) + go func() { + defer wg.Done() + nearestNRGBA64(temp, slice, scaleY, coeffs, offset, filterLength) + }() + } + wg.Wait() + return result + case *image.Gray: + // 8-bit precision + temp := image.NewGray(image.Rect(0, 0, input.Bounds().Dy(), int(width))) + result := image.NewGray(image.Rect(0, 0, int(width), int(height))) + + // horizontal filter, results in transposed temporary image + coeffs, offset, filterLength := createWeightsNearest(temp.Bounds().Dy(), taps, blur, scaleX) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(temp, i, cpus).(*image.Gray) + go func() { + defer wg.Done() + nearestGray(input, slice, scaleX, coeffs, offset, filterLength) + }() + } + wg.Wait() + + // horizontal filter on transposed image, result is not transposed + coeffs, offset, filterLength = createWeightsNearest(result.Bounds().Dy(), taps, blur, scaleY) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(result, i, cpus).(*image.Gray) + go func() { + defer wg.Done() + nearestGray(temp, slice, scaleY, coeffs, offset, filterLength) + }() + } + wg.Wait() + return result + case *image.Gray16: + // 16-bit precision + temp := image.NewGray16(image.Rect(0, 0, input.Bounds().Dy(), int(width))) + result := image.NewGray16(image.Rect(0, 0, int(width), int(height))) + + // horizontal filter, results in transposed temporary image + coeffs, offset, filterLength := createWeightsNearest(temp.Bounds().Dy(), taps, blur, scaleX) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(temp, i, cpus).(*image.Gray16) + go func() { + defer wg.Done() + nearestGray16(input, slice, scaleX, coeffs, offset, filterLength) + }() + } + wg.Wait() + + // horizontal filter on transposed image, result is not transposed + coeffs, offset, filterLength = createWeightsNearest(result.Bounds().Dy(), taps, blur, scaleY) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(result, i, cpus).(*image.Gray16) + go func() { + defer wg.Done() + nearestGray16(temp, slice, scaleY, coeffs, offset, filterLength) + }() + } + wg.Wait() + return result + default: + // 16-bit precision + temp := image.NewRGBA64(image.Rect(0, 0, img.Bounds().Dy(), int(width))) + result := image.NewRGBA64(image.Rect(0, 0, int(width), int(height))) + + // horizontal filter, results in transposed temporary image + coeffs, offset, filterLength := createWeightsNearest(temp.Bounds().Dy(), taps, blur, scaleX) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(temp, i, cpus).(*image.RGBA64) + go func() { + defer wg.Done() + nearestGeneric(img, slice, scaleX, coeffs, offset, filterLength) + }() + } + wg.Wait() + + // horizontal filter on transposed image, result is not transposed + coeffs, offset, filterLength = createWeightsNearest(result.Bounds().Dy(), taps, blur, scaleY) + wg.Add(cpus) + for i := 0; i < cpus; i++ { + slice := makeSlice(result, i, cpus).(*image.RGBA64) + go func() { + defer wg.Done() + nearestRGBA64(temp, slice, scaleY, coeffs, offset, filterLength) + }() + } + wg.Wait() + return result + } + +} + +// Calculates scaling factors using old and new image dimensions. +func calcFactors(width, height uint, oldWidth, oldHeight float64) (scaleX, scaleY float64) { + if width == 0 { + if height == 0 { + scaleX = 1.0 + scaleY = 1.0 + } else { + scaleY = oldHeight / float64(height) + scaleX = scaleY + } + } else { + scaleX = oldWidth / float64(width) + if height == 0 { + scaleY = scaleX + } else { + scaleY = oldHeight / float64(height) + } + } + return +} + +type imageWithSubImage interface { + image.Image + SubImage(image.Rectangle) image.Image +} + +func makeSlice(img imageWithSubImage, i, n int) image.Image { + return img.SubImage(image.Rect(img.Bounds().Min.X, img.Bounds().Min.Y+i*img.Bounds().Dy()/n, img.Bounds().Max.X, img.Bounds().Min.Y+(i+1)*img.Bounds().Dy()/n)) +} diff --git a/vendor/github.com/nfnt/resize/thumbnail.go b/vendor/github.com/nfnt/resize/thumbnail.go new file mode 100644 index 00000000..9efc246b --- /dev/null +++ b/vendor/github.com/nfnt/resize/thumbnail.go @@ -0,0 +1,55 @@ +/* +Copyright (c) 2012, Jan Schlicht + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. +*/ + +package resize + +import ( + "image" +) + +// Thumbnail will downscale provided image to max width and height preserving +// original aspect ratio and using the interpolation function interp. +// It will return original image, without processing it, if original sizes +// are already smaller than provided constraints. +func Thumbnail(maxWidth, maxHeight uint, img image.Image, interp InterpolationFunction) image.Image { + origBounds := img.Bounds() + origWidth := uint(origBounds.Dx()) + origHeight := uint(origBounds.Dy()) + newWidth, newHeight := origWidth, origHeight + + // Return original image if it have same or smaller size as constraints + if maxWidth >= origWidth && maxHeight >= origHeight { + return img + } + + // Preserve aspect ratio + if origWidth > maxWidth { + newHeight = uint(origHeight * maxWidth / origWidth) + if newHeight < 1 { + newHeight = 1 + } + newWidth = maxWidth + } + + if newHeight > maxHeight { + newWidth = uint(newWidth * maxHeight / newHeight) + if newWidth < 1 { + newWidth = 1 + } + newHeight = maxHeight + } + return Resize(newWidth, newHeight, img, interp) +} diff --git a/vendor/github.com/nfnt/resize/ycc.go b/vendor/github.com/nfnt/resize/ycc.go new file mode 100644 index 00000000..143e4d06 --- /dev/null +++ b/vendor/github.com/nfnt/resize/ycc.go @@ -0,0 +1,387 @@ +/* +Copyright (c) 2014, Charlie Vieth + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. +*/ + +package resize + +import ( + "image" + "image/color" +) + +// ycc is an in memory YCbCr image. The Y, Cb and Cr samples are held in a +// single slice to increase resizing performance. +type ycc struct { + // Pix holds the image's pixels, in Y, Cb, Cr order. The pixel at + // (x, y) starts at Pix[(y-Rect.Min.Y)*Stride + (x-Rect.Min.X)*3]. + Pix []uint8 + // Stride is the Pix stride (in bytes) between vertically adjacent pixels. + Stride int + // Rect is the image's bounds. + Rect image.Rectangle + // SubsampleRatio is the subsample ratio of the original YCbCr image. + SubsampleRatio image.YCbCrSubsampleRatio +} + +// PixOffset returns the index of the first element of Pix that corresponds to +// the pixel at (x, y). +func (p *ycc) PixOffset(x, y int) int { + return (y-p.Rect.Min.Y)*p.Stride + (x-p.Rect.Min.X)*3 +} + +func (p *ycc) Bounds() image.Rectangle { + return p.Rect +} + +func (p *ycc) ColorModel() color.Model { + return color.YCbCrModel +} + +func (p *ycc) At(x, y int) color.Color { + if !(image.Point{x, y}.In(p.Rect)) { + return color.YCbCr{} + } + i := p.PixOffset(x, y) + return color.YCbCr{ + p.Pix[i+0], + p.Pix[i+1], + p.Pix[i+2], + } +} + +func (p *ycc) Opaque() bool { + return true +} + +// SubImage returns an image representing the portion of the image p visible +// through r. The returned value shares pixels with the original image. +func (p *ycc) SubImage(r image.Rectangle) image.Image { + r = r.Intersect(p.Rect) + if r.Empty() { + return &ycc{SubsampleRatio: p.SubsampleRatio} + } + i := p.PixOffset(r.Min.X, r.Min.Y) + return &ycc{ + Pix: p.Pix[i:], + Stride: p.Stride, + Rect: r, + SubsampleRatio: p.SubsampleRatio, + } +} + +// newYCC returns a new ycc with the given bounds and subsample ratio. +func newYCC(r image.Rectangle, s image.YCbCrSubsampleRatio) *ycc { + w, h := r.Dx(), r.Dy() + buf := make([]uint8, 3*w*h) + return &ycc{Pix: buf, Stride: 3 * w, Rect: r, SubsampleRatio: s} +} + +// Copy of image.YCbCrSubsampleRatio constants - this allows us to support +// older versions of Go where these constants are not defined (i.e. Go 1.4) +const ( + ycbcrSubsampleRatio444 image.YCbCrSubsampleRatio = iota + ycbcrSubsampleRatio422 + ycbcrSubsampleRatio420 + ycbcrSubsampleRatio440 + ycbcrSubsampleRatio411 + ycbcrSubsampleRatio410 +) + +// YCbCr converts ycc to a YCbCr image with the same subsample ratio +// as the YCbCr image that ycc was generated from. +func (p *ycc) YCbCr() *image.YCbCr { + ycbcr := image.NewYCbCr(p.Rect, p.SubsampleRatio) + switch ycbcr.SubsampleRatio { + case ycbcrSubsampleRatio422: + return p.ycbcr422(ycbcr) + case ycbcrSubsampleRatio420: + return p.ycbcr420(ycbcr) + case ycbcrSubsampleRatio440: + return p.ycbcr440(ycbcr) + case ycbcrSubsampleRatio444: + return p.ycbcr444(ycbcr) + case ycbcrSubsampleRatio411: + return p.ycbcr411(ycbcr) + case ycbcrSubsampleRatio410: + return p.ycbcr410(ycbcr) + } + return ycbcr +} + +// imageYCbCrToYCC converts a YCbCr image to a ycc image for resizing. +func imageYCbCrToYCC(in *image.YCbCr) *ycc { + w, h := in.Rect.Dx(), in.Rect.Dy() + p := ycc{ + Pix: make([]uint8, 3*w*h), + Stride: 3 * w, + Rect: image.Rect(0, 0, w, h), + SubsampleRatio: in.SubsampleRatio, + } + switch in.SubsampleRatio { + case ycbcrSubsampleRatio422: + return convertToYCC422(in, &p) + case ycbcrSubsampleRatio420: + return convertToYCC420(in, &p) + case ycbcrSubsampleRatio440: + return convertToYCC440(in, &p) + case ycbcrSubsampleRatio444: + return convertToYCC444(in, &p) + case ycbcrSubsampleRatio411: + return convertToYCC411(in, &p) + case ycbcrSubsampleRatio410: + return convertToYCC410(in, &p) + } + return &p +} + +func (p *ycc) ycbcr422(ycbcr *image.YCbCr) *image.YCbCr { + var off int + Pix := p.Pix + Y := ycbcr.Y + Cb := ycbcr.Cb + Cr := ycbcr.Cr + for y := 0; y < ycbcr.Rect.Max.Y-ycbcr.Rect.Min.Y; y++ { + yy := y * ycbcr.YStride + cy := y * ycbcr.CStride + for x := 0; x < ycbcr.Rect.Max.X-ycbcr.Rect.Min.X; x++ { + ci := cy + x/2 + Y[yy+x] = Pix[off+0] + Cb[ci] = Pix[off+1] + Cr[ci] = Pix[off+2] + off += 3 + } + } + return ycbcr +} + +func (p *ycc) ycbcr420(ycbcr *image.YCbCr) *image.YCbCr { + var off int + Pix := p.Pix + Y := ycbcr.Y + Cb := ycbcr.Cb + Cr := ycbcr.Cr + for y := 0; y < ycbcr.Rect.Max.Y-ycbcr.Rect.Min.Y; y++ { + yy := y * ycbcr.YStride + cy := (y / 2) * ycbcr.CStride + for x := 0; x < ycbcr.Rect.Max.X-ycbcr.Rect.Min.X; x++ { + ci := cy + x/2 + Y[yy+x] = Pix[off+0] + Cb[ci] = Pix[off+1] + Cr[ci] = Pix[off+2] + off += 3 + } + } + return ycbcr +} + +func (p *ycc) ycbcr440(ycbcr *image.YCbCr) *image.YCbCr { + var off int + Pix := p.Pix + Y := ycbcr.Y + Cb := ycbcr.Cb + Cr := ycbcr.Cr + for y := 0; y < ycbcr.Rect.Max.Y-ycbcr.Rect.Min.Y; y++ { + yy := y * ycbcr.YStride + cy := (y / 2) * ycbcr.CStride + for x := 0; x < ycbcr.Rect.Max.X-ycbcr.Rect.Min.X; x++ { + ci := cy + x + Y[yy+x] = Pix[off+0] + Cb[ci] = Pix[off+1] + Cr[ci] = Pix[off+2] + off += 3 + } + } + return ycbcr +} + +func (p *ycc) ycbcr444(ycbcr *image.YCbCr) *image.YCbCr { + var off int + Pix := p.Pix + Y := ycbcr.Y + Cb := ycbcr.Cb + Cr := ycbcr.Cr + for y := 0; y < ycbcr.Rect.Max.Y-ycbcr.Rect.Min.Y; y++ { + yy := y * ycbcr.YStride + cy := y * ycbcr.CStride + for x := 0; x < ycbcr.Rect.Max.X-ycbcr.Rect.Min.X; x++ { + ci := cy + x + Y[yy+x] = Pix[off+0] + Cb[ci] = Pix[off+1] + Cr[ci] = Pix[off+2] + off += 3 + } + } + return ycbcr +} + +func (p *ycc) ycbcr411(ycbcr *image.YCbCr) *image.YCbCr { + var off int + Pix := p.Pix + Y := ycbcr.Y + Cb := ycbcr.Cb + Cr := ycbcr.Cr + for y := 0; y < ycbcr.Rect.Max.Y-ycbcr.Rect.Min.Y; y++ { + yy := y * ycbcr.YStride + cy := y * ycbcr.CStride + for x := 0; x < ycbcr.Rect.Max.X-ycbcr.Rect.Min.X; x++ { + ci := cy + x/4 + Y[yy+x] = Pix[off+0] + Cb[ci] = Pix[off+1] + Cr[ci] = Pix[off+2] + off += 3 + } + } + return ycbcr +} + +func (p *ycc) ycbcr410(ycbcr *image.YCbCr) *image.YCbCr { + var off int + Pix := p.Pix + Y := ycbcr.Y + Cb := ycbcr.Cb + Cr := ycbcr.Cr + for y := 0; y < ycbcr.Rect.Max.Y-ycbcr.Rect.Min.Y; y++ { + yy := y * ycbcr.YStride + cy := (y / 2) * ycbcr.CStride + for x := 0; x < ycbcr.Rect.Max.X-ycbcr.Rect.Min.X; x++ { + ci := cy + x/4 + Y[yy+x] = Pix[off+0] + Cb[ci] = Pix[off+1] + Cr[ci] = Pix[off+2] + off += 3 + } + } + return ycbcr +} + +func convertToYCC422(in *image.YCbCr, p *ycc) *ycc { + var off int + Pix := p.Pix + Y := in.Y + Cb := in.Cb + Cr := in.Cr + for y := 0; y < in.Rect.Max.Y-in.Rect.Min.Y; y++ { + yy := y * in.YStride + cy := y * in.CStride + for x := 0; x < in.Rect.Max.X-in.Rect.Min.X; x++ { + ci := cy + x/2 + Pix[off+0] = Y[yy+x] + Pix[off+1] = Cb[ci] + Pix[off+2] = Cr[ci] + off += 3 + } + } + return p +} + +func convertToYCC420(in *image.YCbCr, p *ycc) *ycc { + var off int + Pix := p.Pix + Y := in.Y + Cb := in.Cb + Cr := in.Cr + for y := 0; y < in.Rect.Max.Y-in.Rect.Min.Y; y++ { + yy := y * in.YStride + cy := (y / 2) * in.CStride + for x := 0; x < in.Rect.Max.X-in.Rect.Min.X; x++ { + ci := cy + x/2 + Pix[off+0] = Y[yy+x] + Pix[off+1] = Cb[ci] + Pix[off+2] = Cr[ci] + off += 3 + } + } + return p +} + +func convertToYCC440(in *image.YCbCr, p *ycc) *ycc { + var off int + Pix := p.Pix + Y := in.Y + Cb := in.Cb + Cr := in.Cr + for y := 0; y < in.Rect.Max.Y-in.Rect.Min.Y; y++ { + yy := y * in.YStride + cy := (y / 2) * in.CStride + for x := 0; x < in.Rect.Max.X-in.Rect.Min.X; x++ { + ci := cy + x + Pix[off+0] = Y[yy+x] + Pix[off+1] = Cb[ci] + Pix[off+2] = Cr[ci] + off += 3 + } + } + return p +} + +func convertToYCC444(in *image.YCbCr, p *ycc) *ycc { + var off int + Pix := p.Pix + Y := in.Y + Cb := in.Cb + Cr := in.Cr + for y := 0; y < in.Rect.Max.Y-in.Rect.Min.Y; y++ { + yy := y * in.YStride + cy := y * in.CStride + for x := 0; x < in.Rect.Max.X-in.Rect.Min.X; x++ { + ci := cy + x + Pix[off+0] = Y[yy+x] + Pix[off+1] = Cb[ci] + Pix[off+2] = Cr[ci] + off += 3 + } + } + return p +} + +func convertToYCC411(in *image.YCbCr, p *ycc) *ycc { + var off int + Pix := p.Pix + Y := in.Y + Cb := in.Cb + Cr := in.Cr + for y := 0; y < in.Rect.Max.Y-in.Rect.Min.Y; y++ { + yy := y * in.YStride + cy := y * in.CStride + for x := 0; x < in.Rect.Max.X-in.Rect.Min.X; x++ { + ci := cy + x/4 + Pix[off+0] = Y[yy+x] + Pix[off+1] = Cb[ci] + Pix[off+2] = Cr[ci] + off += 3 + } + } + return p +} + +func convertToYCC410(in *image.YCbCr, p *ycc) *ycc { + var off int + Pix := p.Pix + Y := in.Y + Cb := in.Cb + Cr := in.Cr + for y := 0; y < in.Rect.Max.Y-in.Rect.Min.Y; y++ { + yy := y * in.YStride + cy := (y / 2) * in.CStride + for x := 0; x < in.Rect.Max.X-in.Rect.Min.X; x++ { + ci := cy + x/4 + Pix[off+0] = Y[yy+x] + Pix[off+1] = Cb[ci] + Pix[off+2] = Cr[ci] + off += 3 + } + } + return p +} diff --git a/vendor/github.com/pkg/errors/LICENSE b/vendor/github.com/pkg/errors/LICENSE new file mode 100644 index 00000000..835ba3e7 --- /dev/null +++ b/vendor/github.com/pkg/errors/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2015, Dave Cheney +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/pkg/errors/README.md b/vendor/github.com/pkg/errors/README.md new file mode 100644 index 00000000..6483ba2a --- /dev/null +++ b/vendor/github.com/pkg/errors/README.md @@ -0,0 +1,52 @@ +# errors [![Travis-CI](https://travis-ci.org/pkg/errors.svg)](https://travis-ci.org/pkg/errors) [![AppVeyor](https://ci.appveyor.com/api/projects/status/b98mptawhudj53ep/branch/master?svg=true)](https://ci.appveyor.com/project/davecheney/errors/branch/master) [![GoDoc](https://godoc.org/github.com/pkg/errors?status.svg)](http://godoc.org/github.com/pkg/errors) [![Report card](https://goreportcard.com/badge/github.com/pkg/errors)](https://goreportcard.com/report/github.com/pkg/errors) [![Sourcegraph](https://sourcegraph.com/github.com/pkg/errors/-/badge.svg)](https://sourcegraph.com/github.com/pkg/errors?badge) + +Package errors provides simple error handling primitives. + +`go get github.com/pkg/errors` + +The traditional error handling idiom in Go is roughly akin to +```go +if err != nil { + return err +} +``` +which applied recursively up the call stack results in error reports without context or debugging information. The errors package allows programmers to add context to the failure path in their code in a way that does not destroy the original value of the error. + +## Adding context to an error + +The errors.Wrap function returns a new error that adds context to the original error. For example +```go +_, err := ioutil.ReadAll(r) +if err != nil { + return errors.Wrap(err, "read failed") +} +``` +## Retrieving the cause of an error + +Using `errors.Wrap` constructs a stack of errors, adding context to the preceding error. Depending on the nature of the error it may be necessary to reverse the operation of errors.Wrap to retrieve the original error for inspection. Any error value which implements this interface can be inspected by `errors.Cause`. +```go +type causer interface { + Cause() error +} +``` +`errors.Cause` will recursively retrieve the topmost error which does not implement `causer`, which is assumed to be the original cause. For example: +```go +switch err := errors.Cause(err).(type) { +case *MyError: + // handle specifically +default: + // unknown error +} +``` + +[Read the package documentation for more information](https://godoc.org/github.com/pkg/errors). + +## Contributing + +We welcome pull requests, bug fixes and issue reports. With that said, the bar for adding new symbols to this package is intentionally set high. + +Before proposing a change, please discuss your change by raising an issue. + +## License + +BSD-2-Clause diff --git a/vendor/github.com/pkg/errors/appveyor.yml b/vendor/github.com/pkg/errors/appveyor.yml new file mode 100644 index 00000000..a932eade --- /dev/null +++ b/vendor/github.com/pkg/errors/appveyor.yml @@ -0,0 +1,32 @@ +version: build-{build}.{branch} + +clone_folder: C:\gopath\src\github.com\pkg\errors +shallow_clone: true # for startup speed + +environment: + GOPATH: C:\gopath + +platform: + - x64 + +# http://www.appveyor.com/docs/installed-software +install: + # some helpful output for debugging builds + - go version + - go env + # pre-installed MinGW at C:\MinGW is 32bit only + # but MSYS2 at C:\msys64 has mingw64 + - set PATH=C:\msys64\mingw64\bin;%PATH% + - gcc --version + - g++ --version + +build_script: + - go install -v ./... + +test_script: + - set PATH=C:\gopath\bin;%PATH% + - go test -v ./... + +#artifacts: +# - path: '%GOPATH%\bin\*.exe' +deploy: off diff --git a/vendor/github.com/pkg/errors/errors.go b/vendor/github.com/pkg/errors/errors.go new file mode 100644 index 00000000..842ee804 --- /dev/null +++ b/vendor/github.com/pkg/errors/errors.go @@ -0,0 +1,269 @@ +// Package errors provides simple error handling primitives. +// +// The traditional error handling idiom in Go is roughly akin to +// +// if err != nil { +// return err +// } +// +// which applied recursively up the call stack results in error reports +// without context or debugging information. The errors package allows +// programmers to add context to the failure path in their code in a way +// that does not destroy the original value of the error. +// +// Adding context to an error +// +// The errors.Wrap function returns a new error that adds context to the +// original error by recording a stack trace at the point Wrap is called, +// and the supplied message. For example +// +// _, err := ioutil.ReadAll(r) +// if err != nil { +// return errors.Wrap(err, "read failed") +// } +// +// If additional control is required the errors.WithStack and errors.WithMessage +// functions destructure errors.Wrap into its component operations of annotating +// an error with a stack trace and an a message, respectively. +// +// Retrieving the cause of an error +// +// Using errors.Wrap constructs a stack of errors, adding context to the +// preceding error. Depending on the nature of the error it may be necessary +// to reverse the operation of errors.Wrap to retrieve the original error +// for inspection. Any error value which implements this interface +// +// type causer interface { +// Cause() error +// } +// +// can be inspected by errors.Cause. errors.Cause will recursively retrieve +// the topmost error which does not implement causer, which is assumed to be +// the original cause. For example: +// +// switch err := errors.Cause(err).(type) { +// case *MyError: +// // handle specifically +// default: +// // unknown error +// } +// +// causer interface is not exported by this package, but is considered a part +// of stable public API. +// +// Formatted printing of errors +// +// All error values returned from this package implement fmt.Formatter and can +// be formatted by the fmt package. The following verbs are supported +// +// %s print the error. If the error has a Cause it will be +// printed recursively +// %v see %s +// %+v extended format. Each Frame of the error's StackTrace will +// be printed in detail. +// +// Retrieving the stack trace of an error or wrapper +// +// New, Errorf, Wrap, and Wrapf record a stack trace at the point they are +// invoked. This information can be retrieved with the following interface. +// +// type stackTracer interface { +// StackTrace() errors.StackTrace +// } +// +// Where errors.StackTrace is defined as +// +// type StackTrace []Frame +// +// The Frame type represents a call site in the stack trace. Frame supports +// the fmt.Formatter interface that can be used for printing information about +// the stack trace of this error. For example: +// +// if err, ok := err.(stackTracer); ok { +// for _, f := range err.StackTrace() { +// fmt.Printf("%+s:%d", f) +// } +// } +// +// stackTracer interface is not exported by this package, but is considered a part +// of stable public API. +// +// See the documentation for Frame.Format for more details. +package errors + +import ( + "fmt" + "io" +) + +// New returns an error with the supplied message. +// New also records the stack trace at the point it was called. +func New(message string) error { + return &fundamental{ + msg: message, + stack: callers(), + } +} + +// Errorf formats according to a format specifier and returns the string +// as a value that satisfies error. +// Errorf also records the stack trace at the point it was called. +func Errorf(format string, args ...interface{}) error { + return &fundamental{ + msg: fmt.Sprintf(format, args...), + stack: callers(), + } +} + +// fundamental is an error that has a message and a stack, but no caller. +type fundamental struct { + msg string + *stack +} + +func (f *fundamental) Error() string { return f.msg } + +func (f *fundamental) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + if s.Flag('+') { + io.WriteString(s, f.msg) + f.stack.Format(s, verb) + return + } + fallthrough + case 's': + io.WriteString(s, f.msg) + case 'q': + fmt.Fprintf(s, "%q", f.msg) + } +} + +// WithStack annotates err with a stack trace at the point WithStack was called. +// If err is nil, WithStack returns nil. +func WithStack(err error) error { + if err == nil { + return nil + } + return &withStack{ + err, + callers(), + } +} + +type withStack struct { + error + *stack +} + +func (w *withStack) Cause() error { return w.error } + +func (w *withStack) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + if s.Flag('+') { + fmt.Fprintf(s, "%+v", w.Cause()) + w.stack.Format(s, verb) + return + } + fallthrough + case 's': + io.WriteString(s, w.Error()) + case 'q': + fmt.Fprintf(s, "%q", w.Error()) + } +} + +// Wrap returns an error annotating err with a stack trace +// at the point Wrap is called, and the supplied message. +// If err is nil, Wrap returns nil. +func Wrap(err error, message string) error { + if err == nil { + return nil + } + err = &withMessage{ + cause: err, + msg: message, + } + return &withStack{ + err, + callers(), + } +} + +// Wrapf returns an error annotating err with a stack trace +// at the point Wrapf is call, and the format specifier. +// If err is nil, Wrapf returns nil. +func Wrapf(err error, format string, args ...interface{}) error { + if err == nil { + return nil + } + err = &withMessage{ + cause: err, + msg: fmt.Sprintf(format, args...), + } + return &withStack{ + err, + callers(), + } +} + +// WithMessage annotates err with a new message. +// If err is nil, WithMessage returns nil. +func WithMessage(err error, message string) error { + if err == nil { + return nil + } + return &withMessage{ + cause: err, + msg: message, + } +} + +type withMessage struct { + cause error + msg string +} + +func (w *withMessage) Error() string { return w.msg + ": " + w.cause.Error() } +func (w *withMessage) Cause() error { return w.cause } + +func (w *withMessage) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + if s.Flag('+') { + fmt.Fprintf(s, "%+v\n", w.Cause()) + io.WriteString(s, w.msg) + return + } + fallthrough + case 's', 'q': + io.WriteString(s, w.Error()) + } +} + +// Cause returns the underlying cause of the error, if possible. +// An error value has a cause if it implements the following +// interface: +// +// type causer interface { +// Cause() error +// } +// +// If the error does not implement Cause, the original error will +// be returned. If the error is nil, nil will be returned without further +// investigation. +func Cause(err error) error { + type causer interface { + Cause() error + } + + for err != nil { + cause, ok := err.(causer) + if !ok { + break + } + err = cause.Cause() + } + return err +} diff --git a/vendor/github.com/pkg/errors/stack.go b/vendor/github.com/pkg/errors/stack.go new file mode 100644 index 00000000..2874a048 --- /dev/null +++ b/vendor/github.com/pkg/errors/stack.go @@ -0,0 +1,147 @@ +package errors + +import ( + "fmt" + "io" + "path" + "runtime" + "strings" +) + +// Frame represents a program counter inside a stack frame. +type Frame uintptr + +// pc returns the program counter for this frame; +// multiple frames may have the same PC value. +func (f Frame) pc() uintptr { return uintptr(f) - 1 } + +// file returns the full path to the file that contains the +// function for this Frame's pc. +func (f Frame) file() string { + fn := runtime.FuncForPC(f.pc()) + if fn == nil { + return "unknown" + } + file, _ := fn.FileLine(f.pc()) + return file +} + +// line returns the line number of source code of the +// function for this Frame's pc. +func (f Frame) line() int { + fn := runtime.FuncForPC(f.pc()) + if fn == nil { + return 0 + } + _, line := fn.FileLine(f.pc()) + return line +} + +// Format formats the frame according to the fmt.Formatter interface. +// +// %s source file +// %d source line +// %n function name +// %v equivalent to %s:%d +// +// Format accepts flags that alter the printing of some verbs, as follows: +// +// %+s function name and path of source file relative to the compile time +// GOPATH separated by \n\t (\n\t) +// %+v equivalent to %+s:%d +func (f Frame) Format(s fmt.State, verb rune) { + switch verb { + case 's': + switch { + case s.Flag('+'): + pc := f.pc() + fn := runtime.FuncForPC(pc) + if fn == nil { + io.WriteString(s, "unknown") + } else { + file, _ := fn.FileLine(pc) + fmt.Fprintf(s, "%s\n\t%s", fn.Name(), file) + } + default: + io.WriteString(s, path.Base(f.file())) + } + case 'd': + fmt.Fprintf(s, "%d", f.line()) + case 'n': + name := runtime.FuncForPC(f.pc()).Name() + io.WriteString(s, funcname(name)) + case 'v': + f.Format(s, 's') + io.WriteString(s, ":") + f.Format(s, 'd') + } +} + +// StackTrace is stack of Frames from innermost (newest) to outermost (oldest). +type StackTrace []Frame + +// Format formats the stack of Frames according to the fmt.Formatter interface. +// +// %s lists source files for each Frame in the stack +// %v lists the source file and line number for each Frame in the stack +// +// Format accepts flags that alter the printing of some verbs, as follows: +// +// %+v Prints filename, function, and line number for each Frame in the stack. +func (st StackTrace) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + switch { + case s.Flag('+'): + for _, f := range st { + fmt.Fprintf(s, "\n%+v", f) + } + case s.Flag('#'): + fmt.Fprintf(s, "%#v", []Frame(st)) + default: + fmt.Fprintf(s, "%v", []Frame(st)) + } + case 's': + fmt.Fprintf(s, "%s", []Frame(st)) + } +} + +// stack represents a stack of program counters. +type stack []uintptr + +func (s *stack) Format(st fmt.State, verb rune) { + switch verb { + case 'v': + switch { + case st.Flag('+'): + for _, pc := range *s { + f := Frame(pc) + fmt.Fprintf(st, "\n%+v", f) + } + } + } +} + +func (s *stack) StackTrace() StackTrace { + f := make([]Frame, len(*s)) + for i := 0; i < len(f); i++ { + f[i] = Frame((*s)[i]) + } + return f +} + +func callers() *stack { + const depth = 32 + var pcs [depth]uintptr + n := runtime.Callers(3, pcs[:]) + var st stack = pcs[0:n] + return &st +} + +// funcname removes the path prefix component of a function's name reported by func.Name(). +func funcname(name string) string { + i := strings.LastIndex(name, "/") + name = name[i+1:] + i = strings.Index(name, ".") + return name[i+1:] +} diff --git a/vendor/vendor.json b/vendor/vendor.json index b7831a26..ba94d581 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -89,10 +89,10 @@ "revisionTime": "2017-02-27T21:27:28Z" }, { - "checksumSHA1": "9w9yweGig7vqJqLSJMPSe0yRPXE=", + "checksumSHA1": "yLcB7C8Nm8YupMj67iGsgYQjdNg=", "path": "github.com/geek1011/kepubify/kepub", - "revision": "d6d9dff6262ccd55299e25a086935ce94a2eec09", - "revisionTime": "2017-10-07T23:20:27Z" + "revision": "13613146585f9a58ffae0c36b4cd8c6837b16f79", + "revisionTime": "2018-06-23T16:48:50Z" }, { "checksumSHA1": "gKyBj05YkfuLFruAyPZ4KV9nFp8=", @@ -118,6 +118,18 @@ "revision": "95345c4e1c0ebc9d16a3284177f09360f4d20fab", "revisionTime": "2017-01-24T11:57:57Z" }, + { + "checksumSHA1": "6z9MgcvNbdVGsAIvv6BHA1uALQA=", + "path": "github.com/nfnt/resize", + "revision": "83c6a9932646f83e3267f353373d47347b6036b2", + "revisionTime": "2018-02-21T19:10:11Z" + }, + { + "checksumSHA1": "ljd3FhYRJ91cLZz3wsH9BQQ2JbA=", + "path": "github.com/pkg/errors", + "revision": "816c9085562cd7ee03e7f8188a1cfd942858cded", + "revisionTime": "2018-03-11T21:45:15Z" + }, { "checksumSHA1": "LuFv4/jlrmFNnDb/5SCSEPAM9vU=", "path": "github.com/pmezard/go-difflib/difflib",