From 8dd07c0ddd99ae626a1ec8c06f75f27fed51269f Mon Sep 17 00:00:00 2001 From: Unknwon Date: Sat, 26 Jul 2014 00:24:27 -0400 Subject: [PATCH] New UI merge in progress --- .bra.toml | 17 + .gitignore | 1 + bee.json | 23 - cmd/serve.go | 47 +- cmd/update.go | 7 +- cmd/web.go | 287 +- conf/README.md | 9 - conf/app.ini | 37 +- conf/license/BSD license | 23 + conf/license/CC0 1.0 Universal | 116 + conf/license/Eclipse Public License v1.0 | 203 + conf/license/GPL v3 | 674 +++ conf/license/ISC license | 13 + conf/license/LGPL v2.1 | 504 +++ conf/license/LGPL v3 | 165 + .../Mozilla Public License Version 2.0 | 362 ++ conf/locale/locale_en-US.ini | 177 + conf/locale/locale_zh-CN.ini | 176 + conf/supervisor.ini | 8 - {conf => etc}/mysql.sql | 0 {conf/etc => etc}/supervisord.conf | 0 gogs.go | 4 +- models/action.go | 64 +- models/git_diff.go | 9 +- models/issue.go | 8 +- models/login.go | 27 +- models/publickey.go | 92 +- models/repo.go | 155 +- models/update.go | 15 +- models/user.go | 71 +- models/webhook.go | 6 +- modules/auth/admin.go | 22 +- modules/auth/apiv1/miscellaneous.go | 14 +- modules/auth/auth.go | 177 +- modules/auth/auth_form.go | 36 + modules/auth/ldap/ldap.go | 2 +- modules/auth/org.go | 49 +- modules/auth/publickey.go | 33 - modules/auth/publickey_form.go | 21 + modules/auth/repo.go | 252 -- modules/auth/repo_form.go | 165 + modules/auth/user.go | 299 -- modules/auth/user_form.go | 98 + modules/base/base.go | 4 +- modules/base/template.go | 29 +- modules/base/tool.go | 157 +- modules/bin/conf.go | 3623 ----------------- modules/captcha/captcha.go | 201 + modules/captcha/image.go | 487 +++ modules/captcha/image_test.go | 42 + modules/captcha/siprng.go | 267 ++ modules/captcha/siprng_test.go | 23 + modules/git/blob.go | 26 + modules/git/commit.go | 78 + modules/git/commit_archive.go | 36 + modules/git/repo.go | 27 + modules/git/repo_branch.go | 38 + modules/git/repo_commit.go | 234 ++ modules/git/repo_object.go | 14 + modules/git/repo_tag.go | 96 + modules/git/repo_tree.go | 32 + modules/git/sha1.go | 87 + modules/git/signature.go | 40 + modules/git/tag.go | 67 + modules/git/tree.go | 124 + modules/git/tree_blob.go | 46 + modules/git/tree_entry.go | 109 + modules/git/utils.go | 27 + modules/git/version.go | 43 + modules/log/console.go | 73 + modules/log/file.go | 237 ++ modules/log/log.go | 255 +- modules/mailer/mail.go | 22 +- modules/mailer/mailer.go | 2 +- modules/middleware/auth.go | 6 +- modules/middleware/binding/binding.go | 103 +- modules/middleware/context.go | 267 +- modules/middleware/logger.go | 52 - modules/middleware/render.go | 281 -- modules/middleware/repo.go | 99 +- modules/middleware/static.go | 127 - modules/process/manager.go | 2 +- modules/setting/setting.go | 80 +- modules/ssh/ssh.go | 119 + public/img/404.png | Bin 9776 -> 9754 bytes public/img/500.png | Bin 12087 -> 12066 bytes public/img/favicon.png | Bin 10889 -> 10305 bytes public/img/gogs-lg.png | Bin 0 -> 97926 bytes public/ng/css/font-awesome.min.css | 4 + public/ng/css/github.min.css | 1 + public/ng/css/gogs.css | 1257 ++++++ public/ng/css/ui.css | 814 ++++ public/ng/fonts/FontAwesome.otf | Bin 0 -> 75188 bytes public/ng/fonts/fontawesome-webfont.eot | Bin 0 -> 72449 bytes public/ng/fonts/fontawesome-webfont.svg | 504 +++ public/ng/fonts/fontawesome-webfont.ttf | Bin 0 -> 141564 bytes public/ng/fonts/fontawesome-webfont.woff | Bin 0 -> 83760 bytes public/ng/fonts/octicons.css | 237 ++ public/ng/fonts/octicons.eot | Bin 0 -> 31440 bytes public/ng/fonts/octicons.svg | 198 + public/ng/fonts/octicons.ttf | Bin 0 -> 31272 bytes public/ng/fonts/octicons.woff | Bin 0 -> 17492 bytes public/ng/js/gogs.js | 205 + public/ng/js/lib/jquery-1.11.1.min.js | 4 + public/ng/js/lib/lib.js | 168 + public/ng/js/lib/tabs.js | 39 + public/ng/js/min/gogs-min.js | 4 + public/ng/less/gogs.less | 7 + public/ng/less/ui.less | 10 + public/ng/less/ui/alert.less | 47 + public/ng/less/ui/bread.less | 18 + public/ng/less/ui/form.less | 192 + public/ng/less/ui/grid.less | 99 + public/ng/less/ui/label.less | 41 + public/ng/less/ui/menu.less | 158 + public/ng/less/ui/panel.less | 41 + public/ng/less/ui/reset.less | 376 ++ public/ng/less/ui/table.less | 63 + public/ng/less/ui/var.less | 83 + routers/admin/admin.go | 11 +- routers/admin/auth.go | 12 +- routers/admin/user.go | 29 +- routers/api/v1/users.go | 5 +- routers/dev/debug.go | 4 +- routers/dev/template.go | 6 +- routers/{dashboard.go => home.go} | 21 +- routers/install.go | 17 +- routers/org/org.go | 12 +- routers/repo/branch.go | 4 +- routers/repo/commit.go | 376 +- routers/repo/download.go | 121 +- routers/repo/http.go | 55 +- routers/repo/issue.go | 2222 +++++----- routers/repo/pull.go | 4 +- routers/repo/release.go | 382 +- routers/repo/repo.go | 507 +-- routers/repo/setting.go | 620 +-- routers/repo/view.go | 203 + routers/user/auth.go | 442 ++ routers/user/home.go | 87 +- routers/user/setting.go | 352 +- routers/user/social.go | 8 +- routers/user/user.go | 457 --- rpp.ini | 6 - build.sh => scripts/build.sh | 0 build_linux64.sh => scripts/build_linux64.sh | 0 .../dockerfiles}/README.md | 0 {dockerfiles => scripts/dockerfiles}/build.sh | 0 .../dockerfiles}/images/gogits/Dockerfile | 0 .../dockerfiles}/images/gogits/deploy.sh | 0 .../dockerfiles}/images/memcache/.gitkeep | 0 .../dockerfiles}/images/memcache/Dockerfile | 0 .../dockerfiles}/images/mysql/.gitkeep | 0 .../dockerfiles}/images/mysql/Dockerfile | 0 .../dockerfiles}/images/postgres/.gitkeep | 0 .../dockerfiles}/images/postgres/Dockerfile | 0 .../dockerfiles}/images/redis/.gitkeep | 0 .../dockerfiles}/images/redis/Dockerfile | 0 {dockerfiles => scripts/dockerfiles}/run.sh | 0 .../gogs_supervisord.sh | 4 +- scripts/mysql.sql | 2 + scripts/start.bat | 2 + start.sh => scripts/start.sh | 0 start.bat | 2 - templates/.VERSION | 1 + templates/VERSION | 1 - templates/home.tmpl | 95 +- templates/ng/base/alert.tmpl | 2 + templates/ng/base/footer.tmpl | 27 + templates/ng/base/head.tmpl | 30 + templates/ng/base/header.tmpl | 58 + templates/ng/base/social.tmpl | 4 + templates/repo/bare.tmpl | 50 + templates/repo/create.tmpl | 166 +- templates/repo/home.tmpl | 161 + templates/repo/view_file.tmpl | 29 + templates/repo/view_list.tmpl | 46 + templates/status/401.tmpl | 4 +- templates/status/403.tmpl | 6 +- templates/status/404.tmpl | 9 +- templates/status/500.tmpl | 12 +- templates/user/dashboard.tmpl | 102 - templates/user/dashboard/dashboard.tmpl | 142 + templates/user/dashboard/nav.tmpl | 46 + templates/user/delete.tmpl | 45 - templates/user/notification.tmpl | 9 - templates/user/password.tmpl | 49 - templates/user/publickey.tmpl | 65 - templates/user/security.tmpl | 9 - templates/user/setting.tmpl | 69 - templates/user/setting_nav.tmpl | 11 - templates/user/settings/delete.tmpl | 28 + templates/user/settings/nav.tmpl | 12 + templates/user/settings/password.tmpl | 37 + templates/user/settings/profile.tmpl | 50 + templates/user/settings/social.tmpl | 18 + templates/user/settings/sshkeys.tmpl | 61 + templates/user/signin.tmpl | 100 +- templates/user/signup.tmpl | 108 +- 199 files changed, 15030 insertions(+), 9325 deletions(-) create mode 100644 .bra.toml delete mode 100644 bee.json delete mode 100644 conf/README.md create mode 100644 conf/license/BSD license create mode 100644 conf/license/CC0 1.0 Universal create mode 100644 conf/license/Eclipse Public License v1.0 create mode 100644 conf/license/GPL v3 create mode 100644 conf/license/ISC license create mode 100644 conf/license/LGPL v2.1 create mode 100644 conf/license/LGPL v3 create mode 100644 conf/license/Mozilla Public License Version 2.0 create mode 100644 conf/locale/locale_en-US.ini create mode 100644 conf/locale/locale_zh-CN.ini delete mode 100644 conf/supervisor.ini rename {conf => etc}/mysql.sql (100%) rename {conf/etc => etc}/supervisord.conf (100%) create mode 100644 modules/auth/auth_form.go delete mode 100644 modules/auth/publickey.go create mode 100644 modules/auth/publickey_form.go delete mode 100644 modules/auth/repo.go create mode 100644 modules/auth/repo_form.go delete mode 100644 modules/auth/user.go create mode 100644 modules/auth/user_form.go delete mode 100644 modules/bin/conf.go create mode 100644 modules/captcha/captcha.go create mode 100644 modules/captcha/image.go create mode 100644 modules/captcha/image_test.go create mode 100644 modules/captcha/siprng.go create mode 100644 modules/captcha/siprng_test.go create mode 100644 modules/git/blob.go create mode 100644 modules/git/commit.go create mode 100644 modules/git/commit_archive.go create mode 100644 modules/git/repo.go create mode 100644 modules/git/repo_branch.go create mode 100644 modules/git/repo_commit.go create mode 100644 modules/git/repo_object.go create mode 100644 modules/git/repo_tag.go create mode 100644 modules/git/repo_tree.go create mode 100644 modules/git/sha1.go create mode 100644 modules/git/signature.go create mode 100644 modules/git/tag.go create mode 100644 modules/git/tree.go create mode 100644 modules/git/tree_blob.go create mode 100644 modules/git/tree_entry.go create mode 100644 modules/git/utils.go create mode 100644 modules/git/version.go create mode 100644 modules/log/console.go create mode 100644 modules/log/file.go delete mode 100644 modules/middleware/logger.go delete mode 100644 modules/middleware/render.go delete mode 100644 modules/middleware/static.go create mode 100644 modules/ssh/ssh.go create mode 100644 public/img/gogs-lg.png create mode 100644 public/ng/css/font-awesome.min.css create mode 100644 public/ng/css/github.min.css create mode 100644 public/ng/css/gogs.css create mode 100644 public/ng/css/ui.css create mode 100644 public/ng/fonts/FontAwesome.otf create mode 100755 public/ng/fonts/fontawesome-webfont.eot create mode 100755 public/ng/fonts/fontawesome-webfont.svg create mode 100755 public/ng/fonts/fontawesome-webfont.ttf create mode 100755 public/ng/fonts/fontawesome-webfont.woff create mode 100755 public/ng/fonts/octicons.css create mode 100755 public/ng/fonts/octicons.eot create mode 100755 public/ng/fonts/octicons.svg create mode 100755 public/ng/fonts/octicons.ttf create mode 100755 public/ng/fonts/octicons.woff create mode 100644 public/ng/js/gogs.js create mode 100644 public/ng/js/lib/jquery-1.11.1.min.js create mode 100644 public/ng/js/lib/lib.js create mode 100644 public/ng/js/lib/tabs.js create mode 100644 public/ng/js/min/gogs-min.js create mode 100644 public/ng/less/gogs.less create mode 100644 public/ng/less/ui.less create mode 100644 public/ng/less/ui/alert.less create mode 100644 public/ng/less/ui/bread.less create mode 100644 public/ng/less/ui/form.less create mode 100644 public/ng/less/ui/grid.less create mode 100644 public/ng/less/ui/label.less create mode 100644 public/ng/less/ui/menu.less create mode 100644 public/ng/less/ui/panel.less create mode 100644 public/ng/less/ui/reset.less create mode 100644 public/ng/less/ui/table.less create mode 100644 public/ng/less/ui/var.less rename routers/{dashboard.go => home.go} (58%) create mode 100644 routers/repo/view.go create mode 100644 routers/user/auth.go delete mode 100644 routers/user/user.go delete mode 100644 rpp.ini rename build.sh => scripts/build.sh (100%) rename build_linux64.sh => scripts/build_linux64.sh (100%) rename {dockerfiles => scripts/dockerfiles}/README.md (100%) rename {dockerfiles => scripts/dockerfiles}/build.sh (100%) rename {dockerfiles => scripts/dockerfiles}/images/gogits/Dockerfile (100%) rename {dockerfiles => scripts/dockerfiles}/images/gogits/deploy.sh (100%) rename {dockerfiles => scripts/dockerfiles}/images/memcache/.gitkeep (100%) rename {dockerfiles => scripts/dockerfiles}/images/memcache/Dockerfile (100%) rename {dockerfiles => scripts/dockerfiles}/images/mysql/.gitkeep (100%) rename {dockerfiles => scripts/dockerfiles}/images/mysql/Dockerfile (100%) rename {dockerfiles => scripts/dockerfiles}/images/postgres/.gitkeep (100%) rename {dockerfiles => scripts/dockerfiles}/images/postgres/Dockerfile (100%) rename {dockerfiles => scripts/dockerfiles}/images/redis/.gitkeep (100%) rename {dockerfiles => scripts/dockerfiles}/images/redis/Dockerfile (100%) rename {dockerfiles => scripts/dockerfiles}/run.sh (100%) rename gogs_supervisord.sh => scripts/gogs_supervisord.sh (81%) create mode 100644 scripts/mysql.sql create mode 100644 scripts/start.bat rename start.sh => scripts/start.sh (100%) delete mode 100644 start.bat create mode 100644 templates/.VERSION delete mode 100644 templates/VERSION create mode 100644 templates/ng/base/alert.tmpl create mode 100644 templates/ng/base/footer.tmpl create mode 100644 templates/ng/base/head.tmpl create mode 100644 templates/ng/base/header.tmpl create mode 100644 templates/ng/base/social.tmpl create mode 100644 templates/repo/bare.tmpl create mode 100644 templates/repo/home.tmpl create mode 100644 templates/repo/view_file.tmpl create mode 100644 templates/repo/view_list.tmpl delete mode 100644 templates/user/dashboard.tmpl create mode 100644 templates/user/dashboard/dashboard.tmpl create mode 100644 templates/user/dashboard/nav.tmpl delete mode 100644 templates/user/delete.tmpl delete mode 100644 templates/user/notification.tmpl delete mode 100644 templates/user/password.tmpl delete mode 100644 templates/user/publickey.tmpl delete mode 100644 templates/user/security.tmpl delete mode 100644 templates/user/setting.tmpl delete mode 100644 templates/user/setting_nav.tmpl create mode 100644 templates/user/settings/delete.tmpl create mode 100644 templates/user/settings/nav.tmpl create mode 100644 templates/user/settings/password.tmpl create mode 100644 templates/user/settings/profile.tmpl create mode 100644 templates/user/settings/social.tmpl create mode 100644 templates/user/settings/sshkeys.tmpl diff --git a/.bra.toml b/.bra.toml new file mode 100644 index 0000000000..a5afa27675 --- /dev/null +++ b/.bra.toml @@ -0,0 +1,17 @@ +[run] +init_cmds = [["./gogs", "web"]] +watch_all = true +watch_dirs = [ + "$WORKDIR/conf/locale", + "$WORKDIR/cmd", + "$WORKDIR/models", + "$WORKDIR/modules", + "$WORKDIR/routers" +] +watch_exts = [".go", ".ini"] +build_delay = 1500 +cmds = [ + ["go", "install"], + ["go", "build"], + ["./gogs", "web"] +] \ No newline at end of file diff --git a/.gitignore b/.gitignore index 865f77c634..ac88d5ca1a 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,4 @@ gogs __pycache__ *.pem output* +config.codekit diff --git a/bee.json b/bee.json deleted file mode 100644 index 15820ab9f2..0000000000 --- a/bee.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "version": 0, - "gopm": { - "enable": false, - "install": false - }, - "go_install": true, - "watch_ext": [], - "dir_structure": { - "watch_all": true, - "controllers": "routers", - "models": "", - "others": [ - "modules", - "$GOPATH/src/github.com/gogits/logs", - "$GOPATH/src/github.com/gogits/git" - ] - }, - "cmd_args": [ - "web" - ], - "envs": [] -} diff --git a/cmd/serve.go b/cmd/serve.go index bb1b4927b4..41dece6fa1 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -10,11 +10,12 @@ import ( "os/exec" "path" "path/filepath" - "strconv" "strings" "github.com/codegangsta/cli" + "github.com/Unknwon/com" + "github.com/gogits/gogs/models" "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/setting" @@ -81,22 +82,22 @@ func runServ(k *cli.Context) { keys := strings.Split(os.Args[2], "-") if len(keys) != 2 { println("Gogs: auth file format error") - log.GitLogger.Fatal("Invalid auth file format: %s", os.Args[2]) + log.GitLogger.Fatal(2, "Invalid auth file format: %s", os.Args[2]) } - keyId, err := strconv.ParseInt(keys[1], 10, 64) + keyId, err := com.StrTo(keys[1]).Int64() if err != nil { println("Gogs: auth file format error") - log.GitLogger.Fatal("Invalid auth file format: %v", err) + log.GitLogger.Fatal(2, "Invalid auth file format: %v", err) } user, err := models.GetUserByKeyId(keyId) if err != nil { if err == models.ErrUserNotKeyOwner { println("Gogs: you are not the owner of SSH key") - log.GitLogger.Fatal("Invalid owner of SSH key: %d", keyId) + log.GitLogger.Fatal(2, "Invalid owner of SSH key: %d", keyId) } println("Gogs: internal error:", err) - log.GitLogger.Fatal("Fail to get user by key ID(%d): %v", keyId, err) + log.GitLogger.Fatal(2, "Fail to get user by key ID(%d): %v", keyId, err) } cmd := os.Getenv("SSH_ORIGINAL_COMMAND") @@ -110,7 +111,7 @@ func runServ(k *cli.Context) { rr := strings.SplitN(repoPath, "/", 2) if len(rr) != 2 { println("Gogs: unavailable repository", args) - log.GitLogger.Fatal("Unavailable repository: %v", args) + log.GitLogger.Fatal(2, "Unavailable repository: %v", args) } repoUserName := rr[0] repoName := strings.TrimSuffix(rr[1], ".git") @@ -122,10 +123,10 @@ func runServ(k *cli.Context) { if err != nil { if err == models.ErrUserNotExist { println("Gogs: given repository owner are not registered") - log.GitLogger.Fatal("Unregistered owner: %s", repoUserName) + log.GitLogger.Fatal(2, "Unregistered owner: %s", repoUserName) } println("Gogs: internal error:", err) - log.GitLogger.Fatal("Fail to get repository owner(%s): %v", repoUserName, err) + log.GitLogger.Fatal(2, "Fail to get repository owner(%s): %v", repoUserName, err) } // Access check. @@ -134,20 +135,20 @@ func runServ(k *cli.Context) { has, err := models.HasAccess(user.Name, path.Join(repoUserName, repoName), models.WRITABLE) if err != nil { println("Gogs: internal error:", err) - log.GitLogger.Fatal("Fail to check write access:", err) + log.GitLogger.Fatal(2, "Fail to check write access:", err) } else if !has { println("You have no right to write this repository") - log.GitLogger.Fatal("User %s has no right to write repository %s", user.Name, repoPath) + log.GitLogger.Fatal(2, "User %s has no right to write repository %s", user.Name, repoPath) } case isRead: repo, err := models.GetRepositoryByName(repoUser.Id, repoName) if err != nil { if err == models.ErrRepoNotExist { println("Gogs: given repository does not exist") - log.GitLogger.Fatal("Repository does not exist: %s/%s", repoUser.Name, repoName) + log.GitLogger.Fatal(2, "Repository does not exist: %s/%s", repoUser.Name, repoName) } println("Gogs: internal error:", err) - log.GitLogger.Fatal("Fail to get repository: %v", err) + log.GitLogger.Fatal(2, "Fail to get repository: %v", err) } if !repo.IsPrivate { @@ -157,10 +158,10 @@ func runServ(k *cli.Context) { has, err := models.HasAccess(user.Name, path.Join(repoUserName, repoName), models.READABLE) if err != nil { println("Gogs: internal error:", err) - log.GitLogger.Fatal("Fail to check read access:", err) + log.GitLogger.Fatal(2, "Fail to check read access:", err) } else if !has { println("You have no right to access this repository") - log.GitLogger.Fatal("User %s has no right to read repository %s", user.Name, repoPath) + log.GitLogger.Fatal(2, "User %s has no right to read repository %s", user.Name, repoPath) } default: println("Unknown command") @@ -175,29 +176,27 @@ func runServ(k *cli.Context) { gitcmd.Stdout = os.Stdout gitcmd.Stdin = os.Stdin gitcmd.Stderr = os.Stderr - err = gitcmd.Run() - if err != nil { - println("Gogs: internal error:", err) - log.GitLogger.Fatal("Fail to execute git command: %v", err) + if err = gitcmd.Run(); err != nil { + println("Gogs: internal error:", err.Error()) + log.GitLogger.Fatal(2, "Fail to execute git command: %v", err) } if isWrite { tasks, err := models.GetUpdateTasksByUuid(uuid) if err != nil { - log.GitLogger.Fatal("Fail to get update task: %v", err) + log.GitLogger.Fatal(2, "Fail to get update task: %v", err) } for _, task := range tasks { err = models.Update(task.RefName, task.OldCommitId, task.NewCommitId, user.Name, repoUserName, repoName, user.Id) if err != nil { - log.GitLogger.Fatal("Fail to update: %v", err) + log.GitLogger.Fatal(2, "Fail to update: %v", err) } } - err = models.DelUpdateTasksByUuid(uuid) - if err != nil { - log.GitLogger.Fatal("Fail to del update task: %v", err) + if err = models.DelUpdateTasksByUuid(uuid); err != nil { + log.GitLogger.Fatal(2, "Fail to del update task: %v", err) } } } diff --git a/cmd/update.go b/cmd/update.go index bee30b89c9..cc55693e2b 100644 --- a/cmd/update.go +++ b/cmd/update.go @@ -8,6 +8,7 @@ import ( "os" "github.com/codegangsta/cli" + "github.com/gogits/gogs/models" "github.com/gogits/gogs/modules/log" ) @@ -30,9 +31,9 @@ func runUpdate(c *cli.Context) { args := c.Args() if len(args) != 3 { - log.GitLogger.Fatal("received less 3 parameters") + log.GitLogger.Fatal(2, "received less 3 parameters") } else if args[0] == "" { - log.GitLogger.Fatal("refName is empty, shouldn't use") + log.GitLogger.Fatal(2, "refName is empty, shouldn't use") } uuid := os.Getenv("uuid") @@ -45,6 +46,6 @@ func runUpdate(c *cli.Context) { } if err := models.AddUpdateTask(&task); err != nil { - log.GitLogger.Fatal(err.Error()) + log.GitLogger.Fatal(2, err.Error()) } } diff --git a/cmd/web.go b/cmd/web.go index bb020fab90..9329b61426 100644 --- a/cmd/web.go +++ b/cmd/web.go @@ -12,13 +12,16 @@ import ( "os" "path" + "github.com/Unknwon/macaron" "github.com/codegangsta/cli" - "github.com/go-martini/martini" + "github.com/macaron-contrib/i18n" + "github.com/macaron-contrib/session" "github.com/gogits/gogs/modules/auth" "github.com/gogits/gogs/modules/auth/apiv1" "github.com/gogits/gogs/modules/avatar" "github.com/gogits/gogs/modules/base" + "github.com/gogits/gogs/modules/captcha" "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/middleware" "github.com/gogits/gogs/modules/middleware/binding" @@ -27,7 +30,7 @@ import ( "github.com/gogits/gogs/routers/admin" "github.com/gogits/gogs/routers/api/v1" "github.com/gogits/gogs/routers/dev" - "github.com/gogits/gogs/routers/org" + // "github.com/gogits/gogs/routers/org" "github.com/gogits/gogs/routers/repo" "github.com/gogits/gogs/routers/user" ) @@ -43,61 +46,72 @@ and it takes care of all the other things for you`, // checkVersion checks if binary matches the version of temolate files. func checkVersion() { - data, err := ioutil.ReadFile(path.Join(setting.StaticRootPath, "templates/VERSION")) + data, err := ioutil.ReadFile(path.Join(setting.StaticRootPath, "templates/.VERSION")) if err != nil { - log.Fatal("Fail to read 'templates/VERSION': %v", err) + log.Fatal(4, "Fail to read 'templates/.VERSION': %v", err) } if string(data) != setting.AppVer { - log.Fatal("Binary and template file version does not match, did you forget to recompile?") + log.Fatal(4, "Binary and template file version does not match, did you forget to recompile?") } } -func newMartini() *martini.ClassicMartini { - r := martini.NewRouter() - m := martini.New() - m.Use(middleware.Logger()) - m.Use(martini.Recovery()) - m.Use(middleware.Static("public", - middleware.StaticOptions{SkipLogging: !setting.DisableRouterLog})) - m.MapTo(r, (*martini.Routes)(nil)) - m.Action(r.Handle) - return &martini.ClassicMartini{m, r} +// newMacaron initializes Macaron instance. +func newMacaron() *macaron.Macaron { + m := macaron.New() + m.Use(macaron.Logger()) + m.Use(macaron.Recovery()) + if setting.EnableGzip { + m.Use(macaron.Gzip()) + } + m.Use(macaron.Static("public", + macaron.StaticOptions{ + SkipLogging: !setting.DisableRouterLog, + }, + )) + m.Use(macaron.Renderer(macaron.RenderOptions{ + Directory: path.Join(setting.StaticRootPath, "templates"), + Funcs: []template.FuncMap{base.TemplateFuncs}, + IndentJSON: macaron.Env != macaron.PROD, + })) + m.Use(i18n.I18n(i18n.LocaleOptions{ + Langs: setting.Langs, + Names: setting.Names, + Redirect: true, + })) + m.Use(session.Sessioner(session.Options{ + Provider: setting.SessionProvider, + Config: *setting.SessionConfig, + })) + m.Use(middleware.Contexter()) + return m } func runWeb(*cli.Context) { routers.GlobalInit() checkVersion() - m := newMartini() - - // Middlewares. - m.Use(middleware.Renderer(middleware.RenderOptions{ - Directory: path.Join(setting.StaticRootPath, "templates"), - Funcs: []template.FuncMap{base.TemplateFuncs}, - IndentJSON: true, - })) - m.Use(middleware.InitContext()) + m := newMacaron() reqSignIn := middleware.Toggle(&middleware.ToggleOptions{SignInRequire: true}) ignSignIn := middleware.Toggle(&middleware.ToggleOptions{SignInRequire: setting.Service.RequireSignInView}) ignSignInAndCsrf := middleware.Toggle(&middleware.ToggleOptions{DisableCsrf: true}) - reqSignOut := middleware.Toggle(&middleware.ToggleOptions{SignOutRequire: true}) bindIgnErr := binding.BindIgnErr // Routers. m.Get("/", ignSignIn, routers.Home) - m.Get("/install", bindIgnErr(auth.InstallForm{}), routers.Install) - m.Post("/install", bindIgnErr(auth.InstallForm{}), routers.InstallPost) - m.Group("", func(r martini.Router) { + // m.Get("/install", bindIgnErr(auth.InstallForm{}), routers.Install) + // m.Post("/install", bindIgnErr(auth.InstallForm{}), routers.InstallPost) + m.Group("", func(r *macaron.Router) { r.Get("/issues", user.Issues) r.Get("/pulls", user.Pulls) r.Get("/stars", user.Stars) }, reqSignIn) - m.Group("/api", func(_ martini.Router) { - m.Group("/v1", func(r martini.Router) { + // API routers. + m.Group("/api", func(_ *macaron.Router) { + m.Group("/v1", func(r *macaron.Router) { // Miscellaneous. r.Post("/markdown", bindIgnErr(apiv1.MarkdownForm{}), v1.Markdown) r.Post("/markdown/raw", v1.MarkdownRaw) @@ -118,58 +132,62 @@ func runWeb(*cli.Context) { os.MkdirAll("public/img/avatar/", os.ModePerm) m.Get("/avatar/:hash", avt.ServeHTTP) - m.Group("/user", func(r martini.Router) { + // User routers. + m.Group("/user", func(r *macaron.Router) { r.Get("/login", user.SignIn) - r.Post("/login", bindIgnErr(auth.LogInForm{}), user.SignInPost) + r.Post("/login", bindIgnErr(auth.SignInForm{}), user.SignInPost) r.Get("/login/:name", user.SocialSignIn) r.Get("/sign_up", user.SignUp) r.Post("/sign_up", bindIgnErr(auth.RegisterForm{}), user.SignUpPost) r.Get("/reset_password", user.ResetPasswd) r.Post("/reset_password", user.ResetPasswdPost) }, reqSignOut) - m.Group("/user", func(r martini.Router) { - r.Get("/delete", user.Delete) - r.Post("/delete", user.DeletePost) - r.Get("/settings", user.Setting) - r.Post("/settings", bindIgnErr(auth.UpdateProfileForm{}), user.SettingPost) + m.Group("/user", func(r *macaron.Router) { + r.Get("/settings", user.Settings) + r.Post("/settings", bindIgnErr(auth.UpdateProfileForm{}), user.SettingsPost) + m.Group("/settings", func(r *macaron.Router) { + r.Get("/password", user.SettingsPassword) + r.Post("/password", bindIgnErr(auth.ChangePasswordForm{}), user.SettingsPasswordPost) + r.Get("/ssh", user.SettingsSSHKeys) + r.Post("/ssh", bindIgnErr(auth.AddSSHKeyForm{}), user.SettingsSSHKeysPost) + r.Get("/social", user.SettingsSocial) + r.Route("/delete", "GET,POST", user.SettingsDelete) + }) }, reqSignIn) - m.Group("/user", func(r martini.Router) { - r.Get("/feeds", binding.Bind(auth.FeedsForm{}), user.Feeds) + m.Group("/user", func(r *macaron.Router) { + // r.Get("/feeds", binding.Bind(auth.FeedsForm{}), user.Feeds) r.Any("/activate", user.Activate) r.Get("/email2user", user.Email2User) r.Get("/forget_password", user.ForgotPasswd) r.Post("/forget_password", user.ForgotPasswdPost) r.Get("/logout", user.SignOut) }) - m.Group("/user/settings", func(r martini.Router) { - r.Get("/social", user.SettingSocial) - r.Get("/password", user.SettingPassword) - r.Post("/password", bindIgnErr(auth.UpdatePasswdForm{}), user.SettingPasswordPost) - r.Any("/ssh", bindIgnErr(auth.AddSSHKeyForm{}), user.SettingSSHKeys) - r.Get("/notification", user.SettingNotification) - r.Get("/security", user.SettingSecurity) - }, reqSignIn) - m.Get("/user/:username", ignSignIn, user.Profile) + m.Get("/user/:username", ignSignIn, user.Profile) // TODO: Legacy - m.Group("/repo", func(r martini.Router) { + // Captcha service. + cpt := captcha.NewCaptcha("/captcha/", setting.Cache) + m.Map(cpt) + m.Get("/captcha/*", cpt.Handler) + + m.Group("/repo", func(r *macaron.Router) { r.Get("/create", repo.Create) r.Post("/create", bindIgnErr(auth.CreateRepoForm{}), repo.CreatePost) - r.Get("/migrate", repo.Migrate) - r.Post("/migrate", bindIgnErr(auth.MigrateRepoForm{}), repo.MigratePost) + // r.Get("/migrate", repo.Migrate) + // r.Post("/migrate", bindIgnErr(auth.MigrateRepoForm{}), repo.MigratePost) }, reqSignIn) adminReq := middleware.Toggle(&middleware.ToggleOptions{SignInRequire: true, AdminRequire: true}) m.Get("/admin", adminReq, admin.Dashboard) - m.Group("/admin", func(r martini.Router) { + m.Group("/admin", func(r *macaron.Router) { r.Get("/users", admin.Users) r.Get("/repos", admin.Repositories) r.Get("/auths", admin.Auths) r.Get("/config", admin.Config) r.Get("/monitor", admin.Monitor) }, adminReq) - m.Group("/admin/users", func(r martini.Router) { + m.Group("/admin/users", func(r *macaron.Router) { r.Get("/new", admin.NewUser) r.Post("/new", bindIgnErr(auth.RegisterForm{}), admin.NewUserPost) r.Get("/:userid", admin.EditUser) @@ -177,7 +195,7 @@ func runWeb(*cli.Context) { r.Get("/:userid/delete", admin.DeleteUser) }, adminReq) - m.Group("/admin/auths", func(r martini.Router) { + m.Group("/admin/auths", func(r *macaron.Router) { r.Get("/new", admin.NewAuthSource) r.Post("/new", bindIgnErr(auth.AuthenticationForm{}), admin.NewAuthSourcePost) r.Get("/:authid", admin.EditAuthSource) @@ -187,103 +205,104 @@ func runWeb(*cli.Context) { m.Get("/:username", ignSignIn, user.Profile) - if martini.Env == martini.Dev { + if macaron.Env == macaron.DEV { m.Get("/template/**", dev.TemplatePreview) dev.RegisterDebugRoutes(m) } - reqTrueOwner := middleware.RequireTrueOwner() + // reqTrueOwner := middleware.RequireTrueOwner() - m.Group("/org", func(r martini.Router) { - r.Get("/create", org.New) - r.Post("/create", bindIgnErr(auth.CreateOrgForm{}), org.NewPost) - r.Get("/:org", org.Home) - r.Get("/:org/dashboard", org.Dashboard) - r.Get("/:org/members", org.Members) + // m.Group("/org", func(r *macaron.Router) { + // r.Get("/create", org.New) + // r.Post("/create", bindIgnErr(auth.CreateOrgForm{}), org.NewPost) + // r.Get("/:org", org.Home) + // r.Get("/:org/dashboard", org.Dashboard) + // r.Get("/:org/members", org.Members) - r.Get("/:org/teams", org.Teams) - r.Get("/:org/teams/new", org.NewTeam) - r.Post("/:org/teams/new", bindIgnErr(auth.CreateTeamForm{}), org.NewTeamPost) - r.Get("/:org/teams/:team/edit", org.EditTeam) + // r.Get("/:org/teams", org.Teams) + // r.Get("/:org/teams/new", org.NewTeam) + // r.Post("/:org/teams/new", bindIgnErr(auth.CreateTeamForm{}), org.NewTeamPost) + // r.Get("/:org/teams/:team/edit", org.EditTeam) - r.Get("/:org/team/:team", org.SingleTeam) + // r.Get("/:org/team/:team", org.SingleTeam) - r.Get("/:org/settings", org.Settings) - r.Post("/:org/settings", bindIgnErr(auth.OrgSettingForm{}), org.SettingsPost) - r.Post("/:org/settings/delete", org.DeletePost) - }, reqSignIn) + // r.Get("/:org/settings", org.Settings) + // r.Post("/:org/settings", bindIgnErr(auth.OrgSettingForm{}), org.SettingsPost) + // r.Post("/:org/settings/delete", org.DeletePost) + // }, reqSignIn) - m.Group("/:username/:reponame", func(r martini.Router) { - r.Get("/settings", repo.Setting) - r.Post("/settings", bindIgnErr(auth.RepoSettingForm{}), repo.SettingPost) + // m.Group("/:username/:reponame", func(r *macaron.Router) { + // r.Get("/settings", repo.Setting) + // r.Post("/settings", bindIgnErr(auth.RepoSettingForm{}), repo.SettingPost) - m.Group("/settings", func(r martini.Router) { - r.Get("/collaboration", repo.Collaboration) - r.Post("/collaboration", repo.CollaborationPost) - r.Get("/hooks", repo.WebHooks) - r.Get("/hooks/add", repo.WebHooksAdd) - r.Post("/hooks/add", bindIgnErr(auth.NewWebhookForm{}), repo.WebHooksAddPost) - r.Get("/hooks/:id", repo.WebHooksEdit) - r.Post("/hooks/:id", bindIgnErr(auth.NewWebhookForm{}), repo.WebHooksEditPost) - }) - }, reqSignIn, middleware.RepoAssignment(true), reqTrueOwner) + // m.Group("/settings", func(r *macaron.Router) { + // r.Get("/collaboration", repo.Collaboration) + // r.Post("/collaboration", repo.CollaborationPost) + // r.Get("/hooks", repo.WebHooks) + // r.Get("/hooks/add", repo.WebHooksAdd) + // r.Post("/hooks/add", bindIgnErr(auth.NewWebhookForm{}), repo.WebHooksAddPost) + // r.Get("/hooks/:id", repo.WebHooksEdit) + // r.Post("/hooks/:id", bindIgnErr(auth.NewWebhookForm{}), repo.WebHooksEditPost) + // }) + // }, reqSignIn, middleware.RepoAssignment(true), reqTrueOwner) - m.Group("/:username/:reponame", func(r martini.Router) { - r.Get("/action/:action", repo.Action) + // m.Group("/:username/:reponame", func(r *macaron.Router) { + // r.Get("/action/:action", repo.Action) - m.Group("/issues", func(r martini.Router) { - r.Get("/new", repo.CreateIssue) - r.Post("/new", bindIgnErr(auth.CreateIssueForm{}), repo.CreateIssuePost) - r.Post("/:index", bindIgnErr(auth.CreateIssueForm{}), repo.UpdateIssue) - r.Post("/:index/label", repo.UpdateIssueLabel) - r.Post("/:index/milestone", repo.UpdateIssueMilestone) - r.Post("/:index/assignee", repo.UpdateAssignee) - r.Get("/:index/attachment/:id", repo.IssueGetAttachment) - r.Post("/labels/new", bindIgnErr(auth.CreateLabelForm{}), repo.NewLabel) - r.Post("/labels/edit", bindIgnErr(auth.CreateLabelForm{}), repo.UpdateLabel) - r.Post("/labels/delete", repo.DeleteLabel) - r.Get("/milestones", repo.Milestones) - r.Get("/milestones/new", repo.NewMilestone) - r.Post("/milestones/new", bindIgnErr(auth.CreateMilestoneForm{}), repo.NewMilestonePost) - r.Get("/milestones/:index/edit", repo.UpdateMilestone) - r.Post("/milestones/:index/edit", bindIgnErr(auth.CreateMilestoneForm{}), repo.UpdateMilestonePost) - r.Get("/milestones/:index/:action", repo.UpdateMilestone) - }) + // m.Group("/issues", func(r *macaron.Router) { + // r.Get("/new", repo.CreateIssue) + // r.Post("/new", bindIgnErr(auth.CreateIssueForm{}), repo.CreateIssuePost) + // r.Post("/:index", bindIgnErr(auth.CreateIssueForm{}), repo.UpdateIssue) + // r.Post("/:index/label", repo.UpdateIssueLabel) + // r.Post("/:index/milestone", repo.UpdateIssueMilestone) + // r.Post("/:index/assignee", repo.UpdateAssignee) + // r.Get("/:index/attachment/:id", repo.IssueGetAttachment) + // r.Post("/labels/new", bindIgnErr(auth.CreateLabelForm{}), repo.NewLabel) + // r.Post("/labels/edit", bindIgnErr(auth.CreateLabelForm{}), repo.UpdateLabel) + // r.Post("/labels/delete", repo.DeleteLabel) + // r.Get("/milestones", repo.Milestones) + // r.Get("/milestones/new", repo.NewMilestone) + // r.Post("/milestones/new", bindIgnErr(auth.CreateMilestoneForm{}), repo.NewMilestonePost) + // r.Get("/milestones/:index/edit", repo.UpdateMilestone) + // r.Post("/milestones/:index/edit", bindIgnErr(auth.CreateMilestoneForm{}), repo.UpdateMilestonePost) + // r.Get("/milestones/:index/:action", repo.UpdateMilestone) + // }) - r.Post("/comment/:action", repo.Comment) - r.Get("/releases/new", repo.NewRelease) - r.Get("/releases/edit/:tagname", repo.EditRelease) - }, reqSignIn, middleware.RepoAssignment(true)) + // r.Post("/comment/:action", repo.Comment) + // r.Get("/releases/new", repo.NewRelease) + // r.Get("/releases/edit/:tagname", repo.EditRelease) + // }, reqSignIn, middleware.RepoAssignment(true)) - m.Group("/:username/:reponame", func(r martini.Router) { - r.Post("/releases/new", bindIgnErr(auth.NewReleaseForm{}), repo.NewReleasePost) - r.Post("/releases/edit/:tagname", bindIgnErr(auth.EditReleaseForm{}), repo.EditReleasePost) - }, reqSignIn, middleware.RepoAssignment(true, true)) + // m.Group("/:username/:reponame", func(r *macaron.Router) { + // r.Post("/releases/new", bindIgnErr(auth.NewReleaseForm{}), repo.NewReleasePost) + // r.Post("/releases/edit/:tagname", bindIgnErr(auth.EditReleaseForm{}), repo.EditReleasePost) + // }, reqSignIn, middleware.RepoAssignment(true, true)) - m.Group("/:username/:reponame", func(r martini.Router) { - r.Get("/issues", repo.Issues) - r.Get("/issues/:index", repo.ViewIssue) - r.Get("/pulls", repo.Pulls) - r.Get("/branches", repo.Branches) - }, ignSignIn, middleware.RepoAssignment(true)) + // m.Group("/:username/:reponame", func(r *macaron.Router) { + // r.Get("/issues", repo.Issues) + // r.Get("/issues/:index", repo.ViewIssue) + // r.Get("/pulls", repo.Pulls) + // r.Get("/branches", repo.Branches) + // }, ignSignIn, middleware.RepoAssignment(true)) - m.Group("/:username/:reponame", func(r martini.Router) { - r.Get("/src/:branchname", repo.Single) - r.Get("/src/:branchname/**", repo.Single) + m.Group("/:username/:reponame", func(r *macaron.Router) { + r.Get("/src/:branchname", repo.Home) + r.Get("/src/:branchname/*", repo.Home) r.Get("/raw/:branchname/**", repo.SingleDownload) - r.Get("/commits/:branchname", repo.Commits) - r.Get("/commits/:branchname/search", repo.SearchCommits) - r.Get("/commits/:branchname/**", repo.FileHistory) - r.Get("/commit/:branchname", repo.Diff) - r.Get("/commit/:branchname/**", repo.Diff) - r.Get("/releases", repo.Releases) - r.Get("/archive/:branchname/:reponame.zip", repo.ZipDownload) - r.Get("/archive/:branchname/:reponame.tar.gz", repo.TarGzDownload) + // r.Get("/commits/:branchname", repo.Commits) + // r.Get("/commits/:branchname/search", repo.SearchCommits) + // r.Get("/commits/:branchname/**", repo.FileHistory) + // r.Get("/commit/:branchname", repo.Diff) + // r.Get("/commit/:branchname/**", repo.Diff) + // r.Get("/releases", repo.Releases) + r.Get("/archive/*.*", repo.Download) }, ignSignIn, middleware.RepoAssignment(true, true)) - m.Group("/:username", func(r martini.Router) { - r.Get("/:reponame", middleware.RepoAssignment(true, true, true), repo.Single) - r.Any("/:reponame/**", repo.Http) + m.Group("/:username", func(r *macaron.Router) { + r.Get("/:reponame", middleware.RepoAssignment(true, true, true), repo.Home) + m.Group("/:reponame", func(r *macaron.Router) { + r.Any("/*", repo.Http) + }) }, ignSignInAndCsrf) // Not found handler. @@ -298,10 +317,10 @@ func runWeb(*cli.Context) { case setting.HTTPS: err = http.ListenAndServeTLS(listenAddr, setting.CertFile, setting.KeyFile, m) default: - log.Fatal("Invalid protocol: %s", setting.Protocol) + log.Fatal(4, "Invalid protocol: %s", setting.Protocol) } if err != nil { - log.Fatal("Fail to start server: %v", err) + log.Fatal(4, "Fail to start server: %v", err) } } diff --git a/conf/README.md b/conf/README.md deleted file mode 100644 index a20541a93f..0000000000 --- a/conf/README.md +++ /dev/null @@ -1,9 +0,0 @@ -## NOTICE - -This directory only used for development, and us [go-bindata](https://github.com/jteeuwen/go-bindata) to store in memory for releases. - -To apply any change in this directory, install [go-bindata](https://github.com/jteeuwen/go-bindata), and then execute following command in root of source directory: - -``` -$ go-bindata -ignore="\\.DS_Store|README.md" -o modules/bin/conf.go -pkg="bin" conf/... -``` \ No newline at end of file diff --git a/conf/app.ini b/conf/app.ini index 96e320375b..a6f048efbc 100644 --- a/conf/app.ini +++ b/conf/app.ini @@ -28,6 +28,8 @@ KEY_FILE = custom/https/key.pem ; Upper level of template and static file path ; default is the path where Gogs is executed STATIC_ROOT_PATH = +; Application level GZIP support +ENABLE_GZIP = false [database] ; Either "mysql", "postgres" or "sqlite3", it's your choice @@ -125,14 +127,6 @@ SCOPES = all AUTH_URL = https://open.t.qq.com/cgi-bin/oauth2/authorize TOKEN_URL = https://open.t.qq.com/cgi-bin/oauth2/access_token -[oauth.twitter] -ENABLED = false -CLIENT_ID = -CLIENT_SECRET = -SCOPES = all -AUTH_URL = https://api.twitter.com/oauth/authorize -TOKEN_URL = https://api.twitter.com/oauth/access_token - [oauth.weibo] ENABLED = false CLIENT_ID = @@ -147,8 +141,8 @@ ADAPTER = memory ; For "memory" only, GC interval in seconds, default is 60 INTERVAL = 60 ; For "redis" and "memcache", connection host address -; redis: ":6039" -; memcache: "127.0.0.1:11211" +; redis: `:6039` +; memcache: `127.0.0.1:11211` HOST = [session] @@ -156,9 +150,9 @@ HOST = PROVIDER = file ; Provider config options ; memory: not have any config yet -; file: session file path, e.g. "data/sessions" -; redis: config like redis server addr, poolSize, password, e.g. "127.0.0.1:6379,100,astaxie" -; mysql: go-sql-driver/mysql dsn config string, e.g. "root:password@/session_table" +; file: session file path, e.g. `data/sessions` +; redis: config like redis server addr, poolSize, password, e.g. `127.0.0.1:6379,100,gogs` +; mysql: go-sql-driver/mysql dsn config string, e.g. `root:password@/session_table` PROVIDER_CONFIG = data/sessions ; Session cookie name COOKIE_NAME = i_like_gogits @@ -182,15 +176,15 @@ DISABLE_GRAVATAR = false [attachment] ; Whether attachments are enabled. Defaults to `true` -ENABLE = -; Path for attachments. Defaults to files/attachments -PATH = +ENABLE = true +; Path for attachments. Defaults to `data/attachments` +PATH = data/attachments ; One or more allowed types, e.g. image/jpeg|image/png -ALLOWED_TYPES = +ALLOWED_TYPES = image/jpeg|image/png ; Max size of each file. Defaults to 32MB -MAX_SIZE +MAX_SIZE = 32 ; Max number of files per upload. Defaults to 10 -MAX_FILES = +MAX_FILES = 10 [log] ROOT_PATH = @@ -209,7 +203,6 @@ LEVEL = ; For "file" mode only [log.file] LEVEL = -FILE_NAME = log/gogs.log ; This enables automated log rotate(switch of following options), default is true LOG_ROTATE = true ; Max line number of single file, default is 1000000 @@ -253,3 +246,7 @@ LEVEL = DRIVER = ; Based on xorm, e.g.: root:root@localhost/gogs?charset=utf8 CONN = + +[i18n] +LANGS = en-US,zh-CN +NAMES = English,简体中文 diff --git a/conf/license/BSD license b/conf/license/BSD license new file mode 100644 index 0000000000..b57a6c2419 --- /dev/null +++ b/conf/license/BSD license @@ -0,0 +1,23 @@ +Copyright (c) 2014 +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. \ No newline at end of file diff --git a/conf/license/CC0 1.0 Universal b/conf/license/CC0 1.0 Universal new file mode 100644 index 0000000000..3bbbc1ee92 --- /dev/null +++ b/conf/license/CC0 1.0 Universal @@ -0,0 +1,116 @@ +CC0 1.0 Universal + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator and +subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for the +purpose of contributing to a commons of creative, cultural and scientific +works ("Commons") that the public can reliably and without fear of later +claims of infringement build upon, modify, incorporate in other works, reuse +and redistribute as freely as possible in any form whatsoever and for any +purposes, including without limitation commercial purposes. These owners may +contribute to the Commons to promote the ideal of a free culture and the +further production of creative, cultural and scientific works, or to gain +reputation or greater distribution for their Work in part through the use and +efforts of others. + +For these and/or other purposes and motivations, and without any expectation +of additional consideration or compensation, the person associating CC0 with a +Work (the "Affirmer"), to the extent that he or she is an owner of Copyright +and Related Rights in the Work, voluntarily elects to apply CC0 to the Work +and publicly distribute the Work under its terms, with knowledge of his or her +Copyright and Related Rights in the Work and the meaning and intended legal +effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not limited +to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, communicate, + and translate a Work; + + ii. moral rights retained by the original author(s) and/or performer(s); + + iii. publicity and privacy rights pertaining to a person's image or likeness + depicted in a Work; + + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + + v. rights protecting the extraction, dissemination, use and reuse of data in + a Work; + + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation thereof, + including any amended or successor version of such directive); and + + vii. other similar, equivalent or corresponding rights throughout the world + based on applicable law or treaty, and any national implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention of, +applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and +unconditionally waives, abandons, and surrenders all of Affirmer's Copyright +and Related Rights and associated claims and causes of action, whether now +known or unknown (including existing as well as future claims and causes of +action), in the Work (i) in all territories worldwide, (ii) for the maximum +duration provided by applicable law or treaty (including future time +extensions), (iii) in any current or future medium and for any number of +copies, and (iv) for any purpose whatsoever, including without limitation +commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes +the Waiver for the benefit of each member of the public at large and to the +detriment of Affirmer's heirs and successors, fully intending that such Waiver +shall not be subject to revocation, rescission, cancellation, termination, or +any other legal or equitable action to disrupt the quiet enjoyment of the Work +by the public as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason be +judged legally invalid or ineffective under applicable law, then the Waiver +shall be preserved to the maximum extent permitted taking into account +Affirmer's express Statement of Purpose. In addition, to the extent the Waiver +is so judged Affirmer hereby grants to each affected person a royalty-free, +non transferable, non sublicensable, non exclusive, irrevocable and +unconditional license to exercise Affirmer's Copyright and Related Rights in +the Work (i) in all territories worldwide, (ii) for the maximum duration +provided by applicable law or treaty (including future time extensions), (iii) +in any current or future medium and for any number of copies, and (iv) for any +purpose whatsoever, including without limitation commercial, advertising or +promotional purposes (the "License"). The License shall be deemed effective as +of the date CC0 was applied by Affirmer to the Work. Should any part of the +License for any reason be judged legally invalid or ineffective under +applicable law, such partial invalidity or ineffectiveness shall not +invalidate the remainder of the License, and in such case Affirmer hereby +affirms that he or she will not (i) exercise any of his or her remaining +Copyright and Related Rights in the Work or (ii) assert any associated claims +and causes of action with respect to the Work, in either case contrary to +Affirmer's express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + + b. Affirmer offers the Work as-is and makes no representations or warranties + of any kind concerning the Work, express, implied, statutory or otherwise, + including without limitation warranties of title, merchantability, fitness + for a particular purpose, non infringement, or the absence of latent or + other defects, accuracy, or the present or absence of errors, whether or not + discoverable, all to the greatest extent permissible under applicable law. + + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without limitation + any person's Copyright and Related Rights in the Work. Further, Affirmer + disclaims responsibility for obtaining any necessary consents, permissions + or other rights required for any use of the Work. + + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to this + CC0 or use of the Work. + +For more information, please see + \ No newline at end of file diff --git a/conf/license/Eclipse Public License v1.0 b/conf/license/Eclipse Public License v1.0 new file mode 100644 index 0000000000..5032843775 --- /dev/null +++ b/conf/license/Eclipse Public License v1.0 @@ -0,0 +1,203 @@ +Eclipse Public License - v 1.0 + +THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC +LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM +CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + +a) in the case of the initial Contributor, the initial code and documentation + distributed under this Agreement, and +b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + + where such changes and/or additions to the Program originate from and are + distributed by that particular Contributor. A Contribution 'originates' + from a Contributor if it was added to the Program by such Contributor + itself or anyone acting on such Contributor's behalf. Contributions do not + include additions to the Program which: (i) are separate modules of + software distributed in conjunction with the Program under their own + license agreement, and (ii) are not derivative works of the Program. + +"Contributor" means any person or entity that distributes the Program. + +"Licensed Patents" mean patent claims licensable by a Contributor which are +necessarily infringed by the use or sale of its Contribution alone or when +combined with the Program. + +"Program" means the Contributions distributed in accordance with this +Agreement. + +"Recipient" means anyone who receives the Program under this Agreement, +including all Contributors. + +2. GRANT OF RIGHTS + a) Subject to the terms of this Agreement, each Contributor hereby grants + Recipient a non-exclusive, worldwide, royalty-free copyright license to + reproduce, prepare derivative works of, publicly display, publicly + perform, distribute and sublicense the Contribution of such Contributor, + if any, and such derivative works, in source code and object code form. + b) Subject to the terms of this Agreement, each Contributor hereby grants + Recipient a non-exclusive, worldwide, royalty-free patent license under + Licensed Patents to make, use, sell, offer to sell, import and otherwise + transfer the Contribution of such Contributor, if any, in source code and + object code form. This patent license shall apply to the combination of + the Contribution and the Program if, at the time the Contribution is + added by the Contributor, such addition of the Contribution causes such + combination to be covered by the Licensed Patents. The patent license + shall not apply to any other combinations which include the Contribution. + No hardware per se is licensed hereunder. + c) Recipient understands that although each Contributor grants the licenses + to its Contributions set forth herein, no assurances are provided by any + Contributor that the Program does not infringe the patent or other + intellectual property rights of any other entity. Each Contributor + disclaims any liability to Recipient for claims brought by any other + entity based on infringement of intellectual property rights or + otherwise. As a condition to exercising the rights and licenses granted + hereunder, each Recipient hereby assumes sole responsibility to secure + any other intellectual property rights needed, if any. For example, if a + third party patent license is required to allow Recipient to distribute + the Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + d) Each Contributor represents that to its knowledge it has sufficient + copyright rights in its Contribution, if any, to grant the copyright + license set forth in this Agreement. + +3. REQUIREMENTS + +A Contributor may choose to distribute the Program in object code form under +its own license agreement, provided that: + + a) it complies with the terms and conditions of this Agreement; and + b) its license agreement: + i) effectively disclaims on behalf of all Contributors all warranties + and conditions, express and implied, including warranties or + conditions of title and non-infringement, and implied warranties or + conditions of merchantability and fitness for a particular purpose; + ii) effectively excludes on behalf of all Contributors all liability for + damages, including direct, indirect, special, incidental and + consequential damages, such as lost profits; + iii) states that any provisions which differ from this Agreement are + offered by that Contributor alone and not by any other party; and + iv) states that source code for the Program is available from such + Contributor, and informs licensees how to obtain it in a reasonable + manner on or through a medium customarily used for software exchange. + +When the Program is made available in source code form: + + a) it must be made available under this Agreement; and + b) a copy of this Agreement must be included with each copy of the Program. + Contributors may not remove or alter any copyright notices contained + within the Program. + +Each Contributor must identify itself as the originator of its Contribution, +if +any, in a manner that reasonably allows subsequent Recipients to identify the +originator of the Contribution. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities with +respect to end users, business partners and the like. While this license is +intended to facilitate the commercial use of the Program, the Contributor who +includes the Program in a commercial product offering should do so in a manner +which does not create potential liability for other Contributors. Therefore, +if a Contributor includes the Program in a commercial product offering, such +Contributor ("Commercial Contributor") hereby agrees to defend and indemnify +every other Contributor ("Indemnified Contributor") against any losses, +damages and costs (collectively "Losses") arising from claims, lawsuits and +other legal actions brought by a third party against the Indemnified +Contributor to the extent caused by the acts or omissions of such Commercial +Contributor in connection with its distribution of the Program in a commercial +product offering. The obligations in this section do not apply to any claims +or Losses relating to any actual or alleged intellectual property +infringement. In order to qualify, an Indemnified Contributor must: +a) promptly notify the Commercial Contributor in writing of such claim, and +b) allow the Commercial Contributor to control, and cooperate with the +Commercial Contributor in, the defense and any related settlement +negotiations. The Indemnified Contributor may participate in any such claim at +its own expense. + +For example, a Contributor might include the Program in a commercial product +offering, Product X. That Contributor is then a Commercial Contributor. If +that Commercial Contributor then makes performance claims, or offers +warranties related to Product X, those performance claims and warranties are +such Commercial Contributor's responsibility alone. Under this section, the +Commercial Contributor would have to defend claims against the other +Contributors related to those performance claims and warranties, and if a +court requires any other Contributor to pay any damages as a result, the +Commercial Contributor must pay those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, +NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each +Recipient is solely responsible for determining the appropriateness of using +and distributing the Program and assumes all risks associated with its +exercise of rights under this Agreement , including but not limited to the +risks and costs of program errors, compliance with applicable laws, damage to +or loss of data, programs or equipment, and unavailability or interruption of +operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY +CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION +LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE +EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of the +remainder of the terms of this Agreement, and without further action by the +parties hereto, such provision shall be reformed to the minimum extent +necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Program itself +(excluding combinations of the Program with other software or hardware) +infringes such Recipient's patent(s), then such Recipient's rights granted +under Section 2(b) shall terminate as of the date such litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it fails to +comply with any of the material terms or conditions of this Agreement and does +not cure such failure in a reasonable period of time after becoming aware of +such noncompliance. If all Recipient's rights under this Agreement terminate, +Recipient agrees to cease use and distribution of the Program as soon as +reasonably practicable. However, Recipient's obligations under this Agreement +and any licenses granted by Recipient relating to the Program shall continue +and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, but in +order to avoid inconsistency the Agreement is copyrighted and may only be +modified in the following manner. The Agreement Steward reserves the right to +publish new versions (including revisions) of this Agreement from time to +time. No one other than the Agreement Steward has the right to modify this +Agreement. The Eclipse Foundation is the initial Agreement Steward. The +Eclipse Foundation may assign the responsibility to serve as the Agreement +Steward to a suitable separate entity. Each new version of the Agreement will +be given a distinguishing version number. The Program (including +Contributions) may always be distributed subject to the version of the +Agreement under which it was received. In addition, after a new version of the +Agreement is published, Contributor may elect to distribute the Program +(including its Contributions) under the new version. Except as expressly +stated in Sections 2(a) and 2(b) above, Recipient receives no rights or +licenses to the intellectual property of any Contributor under this Agreement, +whether expressly, by implication, estoppel or otherwise. All rights in the +Program not expressly granted under this Agreement are reserved. + +This Agreement is governed by the laws of the State of New York and the +intellectual property laws of the United States of America. No party to this +Agreement will bring a legal action under this Agreement more than one year +after the cause of action arose. Each party waives its rights to a jury trial in +any resulting litigation. \ No newline at end of file diff --git a/conf/license/GPL v3 b/conf/license/GPL v3 new file mode 100644 index 0000000000..70566f2d0e --- /dev/null +++ b/conf/license/GPL v3 @@ -0,0 +1,674 @@ +GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {one line to give the program's name and a brief idea of what it does.} + Copyright (C) {year} {name of author} + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + {project} Copyright (C) {year} {fullname} + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. \ No newline at end of file diff --git a/conf/license/ISC license b/conf/license/ISC license new file mode 100644 index 0000000000..2ee47a3b1e --- /dev/null +++ b/conf/license/ISC license @@ -0,0 +1,13 @@ +Copyright (c) 2014 + +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. \ No newline at end of file diff --git a/conf/license/LGPL v2.1 b/conf/license/LGPL v2.1 new file mode 100644 index 0000000000..86cd459cd2 --- /dev/null +++ b/conf/license/LGPL v2.1 @@ -0,0 +1,504 @@ +GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +(This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.) + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + {description} + Copyright (C) {year} {fullname} + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random + Hacker. + + {signature of Ty Coon}, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! \ No newline at end of file diff --git a/conf/license/LGPL v3 b/conf/license/LGPL v3 new file mode 100644 index 0000000000..bde60cebdd --- /dev/null +++ b/conf/license/LGPL v3 @@ -0,0 +1,165 @@ +GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file diff --git a/conf/license/Mozilla Public License Version 2.0 b/conf/license/Mozilla Public License Version 2.0 new file mode 100644 index 0000000000..f0e5c79e18 --- /dev/null +++ b/conf/license/Mozilla Public License Version 2.0 @@ -0,0 +1,362 @@ +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. "Contributor" + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. "Contributor Version" + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the terms of + a Secondary License. + +1.6. "Executable Form" + + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + + means a work that combines Covered Software with other material, in a + separate file or files, that is not Covered Software. + +1.8. "License" + + means this document. + +1.9. "Licensable" + + means having the right to grant, to the maximum extent possible, whether + at the time of the initial grant or subsequently, any and all of the + rights conveyed by this License. + +1.10. "Modifications" + + means any of the following: + + a. any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. "Patent Claims" of a Contributor + + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the License, + by the making, using, selling, offering for sale, having made, import, + or transfer of either its Contributions or its Contributor Version. + +1.12. "Secondary License" + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. "Source Code Form" + + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, "control" means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution + become effective for each Contribution on the date the Contributor first + distributes such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under + this License. No additional rights or licenses will be implied from the + distribution or licensing of Covered Software under this License. + Notwithstanding Section 2.1(b) above, no patent license is granted by a + Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of + its Contributions. + + This License does not grant any rights in the trademarks, service marks, + or logos of any Contributor (except as may be necessary to comply with + the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this + License (see Section 10.2) or under the terms of a Secondary License (if + permitted under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its + Contributions are its original creation(s) or it has sufficient rights to + grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under + applicable copyright doctrines of fair use, fair dealing, or other + equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under + the terms of this License. You must inform recipients that the Source + Code Form of the Covered Software is governed by the terms of this + License, and how they can obtain a copy of this License. You may not + attempt to alter or restrict the recipients' rights in the Source Code + Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter the + recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for + the Covered Software. If the Larger Work is a combination of Covered + Software with a work governed by one or more Secondary Licenses, and the + Covered Software is not Incompatible With Secondary Licenses, this + License permits You to additionally distribute such Covered Software + under the terms of such Secondary License(s), so that the recipient of + the Larger Work may, at their option, further distribute the Covered + Software under the terms of either this License or such Secondary + License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices + (including copyright notices, patent notices, disclaimers of warranty, or + limitations of liability) contained within the Source Code Form of the + Covered Software, except that You may alter any license notices to the + extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on + behalf of any Contributor. You must make it absolutely clear that any + such warranty, support, indemnity, or liability obligation is offered by + You alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, + judicial order, or regulation then You must: (a) comply with the terms of + this License to the maximum extent possible; and (b) describe the + limitations and the code they affect. Such description must be placed in a + text file included with all distributions of the Covered Software under + this License. Except to the extent prohibited by statute or regulation, + such description must be sufficiently detailed for a recipient of ordinary + skill to be able to understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing + basis, if such Contributor fails to notify You of the non-compliance by + some reasonable means prior to 60 days after You have come back into + compliance. Moreover, Your grants from a particular Contributor are + reinstated on an ongoing basis if such Contributor notifies You of the + non-compliance by some reasonable means, this is the first time You have + received notice of non-compliance with this License from such + Contributor, and You become compliant prior to 30 days after Your receipt + of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, + counter-claims, and cross-claims) alleging that a Contributor Version + directly or indirectly infringes any patent, then the rights granted to + You by any and all Contributors for the Covered Software under Section + 2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an "as is" basis, + without warranty of any kind, either expressed, implied, or statutory, + including, without limitation, warranties that the Covered Software is free + of defects, merchantable, fit for a particular purpose or non-infringing. + The entire risk as to the quality and performance of the Covered Software + is with You. Should any Covered Software prove defective in any respect, + You (not any Contributor) assume the cost of any necessary servicing, + repair, or correction. This disclaimer of warranty constitutes an essential + part of this License. No use of any Covered Software is authorized under + this License except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from + such party's negligence to the extent applicable law prohibits such + limitation. Some jurisdictions do not allow the exclusion or limitation of + incidental or consequential damages, so this exclusion and limitation may + not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts + of a jurisdiction where the defendant maintains its principal place of + business and such litigation shall be governed by laws of that + jurisdiction, without reference to its conflict-of-law provisions. Nothing + in this Section shall prevent a party's ability to bring cross-claims or + counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. Any law or regulation which provides that + the language of a contract shall be construed against the drafter shall not + be used to construe this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version + of the License under which You originally received the Covered Software, + or under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a + modified version of this License if you rename the license and remove + any references to the name of the license steward (except to note that + such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary + Licenses If You choose to distribute Source Code Form that is + Incompatible With Secondary Licenses under the terms of this version of + the License, the notice described in Exhibit B of this License must be + attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, +then You may include the notice in a location (such as a LICENSE file in a +relevant directory) where a recipient would be likely to look for such a +notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible + With Secondary Licenses", as defined by + the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/conf/locale/locale_en-US.ini b/conf/locale/locale_en-US.ini new file mode 100644 index 0000000000..b8832167ae --- /dev/null +++ b/conf/locale/locale_en-US.ini @@ -0,0 +1,177 @@ +app_desc = A painless self-hosted Git service written in Go + +home = Home +dashboard = Dashboard +explore = Explore +help = Help +sign_in = Sign In +sign_out = Sign Out +sign_up = Sign Up +register = Register +website = Website +version = Version +page = Page +template = Template +language = Language + +username = Username +email = E-mail +password = Password +re_type = Re-Type +captcha = Captcha + +repository = Repository +organization = Organization +mirror = Mirror +new_repo = New Repository +new_migrate = New Migration +new_org = New Organization +manage_org = Manage Organizations +admin_panel = Admin Panel +account_settings = Account Settings +settings = Settings + +news_feed = News Feed +pull_requests = Pull Requests +issues = Issues + +cancel = Cancel + +[home] +uname_holder = Username or E-mail +password_holder = Password +switch_dashboard_context = Switch Dashboard Context +my_repos = My Repositories +collaborative_repos = Collaborative Repositories +my_orgs = My Organizations +my_mirrors = My Mirrors + +[auth] +create_new_account = Create New Account +register_hepler_msg = Already have an account? Sign in now! +disable_register_prompt = Sorry, registration has been disabled. Please contact the site administrator. +remember_me = Remember Me +forget_password = Fotget password? +sign_up_now = Need an account? Sign up now. + +[form] +UserName = Username +Email = E-mail address +Password = Password +Retype = Re-type password +SSHTitle = SSH key name + +require_error = ` cannot be empty.` +alpha_dash_error = ` must be valid alpha or numeric or dash(-_) characters.` +alpha_dash_dot_error = ` must be valid alpha or numeric or dash(-_) or dot characters.` +min_size_error = ` must contain at least %s characters.` +max_size_error = ` must contain at most %s characters.` +email_error = ` is not a valid e-mail address.` +url_error = ` is not a valid URL.` +unknown_error = Unknown error: +captcha_incorrect = Captcha didn't match. +password_not_match = Password and re-type password are not same. + +username_been_taken = Username has been already taken. +repo_name_been_taken = Repository name has been already taken. +email_been_used = E-mail address has been already used. +ssh_key_been_used = Public key name has been used. +illegal_username = Your username contains illegal characters. +illegal_repo_name = Repository name contains illegal characters. +username_password_incorrect = Username or password is not correct. + +invalid_ssh_key = Sorry, we're not able to verify your SSH key: %s + +still_own_repo = Your account still have ownership of repository, you have to delete or transfer them first. + +[settings] +profile = Profile +password = Password +ssh_keys = SSH Keys +social = Social Accounts +delete = Delete Accoount + +public_profile = Public Profile +profile_desc = Your Email address is public and will be used for any account related notifications, and any web based operations made via the site. +full_name = Full Name +website = Website +location = Location +update_profile = Update Profile +update_profile_success = Your profile has been successfully updated. + +change_password = Change Password +old_password = Current Password +new_password = New Password +password_incorrect = Current password is not correct. +change_password_success = Password is changed successfully. You can now sign in via new password. + +manage_ssh_keys = Manage SSH Keys +add_key = Add Key +ssh_desc = This is a list of SSH keys associated with your account. Remove any keys that you do not recognize. +ssh_helper = Need help? Check out our guide to generating SSH keys or troubleshoot common SSH Problems. +add_new_key = Add SSH Key +key_name = Key Name +key_content = Content +add_key_success = New SSH Key has been added! +delete_key = Delete +add_on = Added on +last_used = Last used on +no_activity = No recent activity + +manage_social = Manage Associated Social Accounts + +delete_account = Delete Your Account +delete_prompt = The operation will delete your account permanently, and CANNOT be undo! +confirm_delete_account = Confirm Deletion + +[repo] +owner = Owner +repo_name = Repository Name +repo_name_helper = Great repository names are short, memorable and unique. +visibility = Visibility +visiblity_helper = This repository is Private +repo_desc = Description +repo_lang = Language +repo_lang_helper = Select a .gitignore file +license = License +license_helper = Select a license file +init_readme = Initialize this repository with a README.md +create_repo = Create Repository + +[action] +create_repo = created repository %s +commit_repo = pushed to %s at %s +create_issue = opened issue %s#%s +comment_issue = commented on issue %s#%s + +[tool] +ago = ago +from_now = from now +now = now +1s = 1 second %s +1m = 1 mintue %s +1h = 1 hour %s +1d = 1 day %s +1w = 1 week %s +1mon = 1 month %s +1y = 1 year %s +seconds = %d seconds %s +minutes = %d minutes %s +hours = %d hours %s +days = %d days %s +weeks = %d weeks %s +months = %d months %s +years = %d years %s + + + + + + + + + + + + + diff --git a/conf/locale/locale_zh-CN.ini b/conf/locale/locale_zh-CN.ini new file mode 100644 index 0000000000..30e683071e --- /dev/null +++ b/conf/locale/locale_zh-CN.ini @@ -0,0 +1,176 @@ +app_desc = 基于 Go 语言的自助 Git 服务 + +home = 首页 +dashboard = 控制面板 +explore = 探索 +help = 帮助 +sign_in = 登录 +sign_out = 退出 +sign_up = 注册 +register = 注册 +website = 官方网站 +version = 当前版本 +page = 页面 +template = 模板 +language = 语言选项 + +username = 用户名 +email = 邮箱 +password = 密码 +re_type = 确认密码 +captcha = 验证码 + +repository = 仓库 +organization = 组织 +mirror = 镜像 +new_repo = 创建新的仓库 +new_migrate = 迁移外部仓库 +new_org = 创建新的组织 +manage_org = 管理我的组织 +admin_panel = 管理面板 +account_settings = 帐户设置 +settings = 帐户设置 + +news_feed = 最新活动 +pull_requests = 合并请求 +issues = 工单管理 + +cancel = 取消 + +[home] +uname_holder = 用户名或邮箱 +password_holder = 密码 +switch_dashboard_context = 切换控制面板用户 +my_repos = 我的仓库 +collaborative_repos = 参与协作的仓库 +my_orgs = 我的组织 +my_mirrors = 我的镜像 + +[auth] +create_new_account = 创建帐户 +register_hepler_msg = 已经注册?立即登录! +disable_register_prompt = 对不起,注册功能已被关闭。请联系网站管理员。 +remember_me = 记住登录 +forget_password = 忘记密码? +sign_up_now = 还没帐户?马上注册。 + +[form] +UserName = 用户名 +Email = 邮箱地址 +Password = 密码 +Retype = 确认密码 +SSHTitle = SSH 密钥名称 + +require_error = 不能为空。 +alpha_dash_error = 必须为英文字母、阿拉伯数字或横线(-_)。 +alpha_dash_dot_error = 必须为英文字母、阿拉伯数字、横线(-_)或点。 +min_size_error = 长度最小为 %s 个字符。 +max_size_error = 长度最大为 %s 个字符。 +email_error = 不是一个有效的邮箱地址。 +url_error = 不是一个有效的 URL。 +unknown_error = 未知错误: +captcha_incorrect = 验证码未匹配。 +password_not_match = 密码与确认密码未匹配。 + +username_been_taken = 用户名已经被占用。 +repo_name_been_taken = 仓库名称已经被占用。 +email_been_used = 邮箱地址已经被使用。 +ssh_key_been_used = SSH 密钥已经被使用。 +illegal_username = 您的用户名包含非法字符。 +illegal_repo_name = 仓库名称包含非法字符。 +username_password_incorrect = 用户名或密码不正确。 + +invalid_ssh_key = 很抱歉,我们无法验证您输入的 SSH 密钥:%s + +still_own_repo = 您的帐户仍然是某些仓库的拥有者,您必须先转移或删除它们才能执行删除帐户操作! + +[settings] +profile = 个人信息 +password = 修改密码 +ssh_keys = 管理 SSH 密钥 +social = 社交帐号绑定 +delete = 删除帐户 + +public_profile = 公开信息 +profile_desc = 您的邮箱地址将会被公开,并被用于接收帐户的所有提醒和通知。 +full_name = 自定义名称 +website = 个人网站 +location = 所在地区 +update_profile = 更新信息 +update_profile_success = 您的个人信息已经更新成功! + +change_password = 修改密码 +old_password = 当前密码 +new_password = 新的密码 +password_incorrect = 当前密码不正确! +change_password_success = 密码修改成功!您现在可以使用新的密码登录。 + +manage_ssh_keys = 管理 SSH 密钥 +add_key = 增加密钥 +ssh_desc = 以下是与您帐户所关联的 SSH 密钥,如果您发现有陌生的密钥,请立即删除它! +ssh_helper = 需要帮助? 请查看有关 如何生成 SSH 密钥常见 SSH 问题 寻找答案。 +add_new_key = 增加 SSH 密钥 +key_name = 密钥名称 +key_content = 密钥内容 +add_key_success = 新的 SSH 密钥添加成功! +delete_key = 删除 +add_on = 增加于 +last_used = 上次使用在 +no_activity = 没有最近活动 + +manage_social = 管理关联社交帐户 + +delete_account = 删除当前帐户 +delete_prompt = 删除操作会永久清除您的帐户信息,并且 不可恢复! +confirm_delete_account = 确认删除帐户 + +[repo] +owner = 拥有者 +repo_name = 仓库名称 +repo_name_helper = 伟大的仓库名称一般都较短、令人深刻并且 独一无二 的。 +visibility = 可见性 +visiblity_helper = 本仓库将是 私有的 +repo_desc = 仓库描述 +repo_lang = 仓库语言 +repo_lang_helper = 请选择 .gitignore 文件 +license = 授权许可 +license_helper = 请选择授权许可文件 +init_readme = 使用 README.md 文件初始化仓库 +create_repo = 创建仓库 + +[action] +create_repo = 创建了仓库 %s +commit_repo = 推送了 %s 分支的代码到 %s +create_issue = 创建了工单 %s#%s +comment_issue = 评论了工单 %s#%s + +[tool] +ago = 之前 +from_now = 之后 +now = 现在 +1s = 1 秒%s +1m = 1 分钟%s +1h = 1 小时%s +1d = 1 天%s +1w = 1 周%s +1mon = 1 月%s +1y = 1 年%s +seconds = %d 秒%s +minutes = %d 分钟%s +hours = %d 小时%s +days = %d 天%s +weeks = %d 周%s +months = %d 月%s +years = %d 年%s + + + + + + + + + + + + diff --git a/conf/supervisor.ini b/conf/supervisor.ini deleted file mode 100644 index 0acd9ca0b3..0000000000 --- a/conf/supervisor.ini +++ /dev/null @@ -1,8 +0,0 @@ -[program:gogs] -user=git -command = /home/git/gogs/start.sh -directory = /home/git/gogs -autostart = true -stdout_logfile = /var/gogs.log -stderr_logfile = /var/gogs-error.log -environment=HOME="/home/git" diff --git a/conf/mysql.sql b/etc/mysql.sql similarity index 100% rename from conf/mysql.sql rename to etc/mysql.sql diff --git a/conf/etc/supervisord.conf b/etc/supervisord.conf similarity index 100% rename from conf/etc/supervisord.conf rename to etc/supervisord.conf diff --git a/gogs.go b/gogs.go index c7c9ca8d00..e432d6bede 100644 --- a/gogs.go +++ b/gogs.go @@ -4,7 +4,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -// Gogs(Go Git Service) is a Self Hosted Git Service in the Go Programming Language. +// Gogs(Go Git Service) is a painless self-hosted Git Service written in Go. package main import ( @@ -17,7 +17,7 @@ import ( "github.com/gogits/gogs/modules/setting" ) -const APP_VER = "0.4.5.0712 Alpha" +const APP_VER = "0.4.7.0725 Alpha" func init() { runtime.GOMAXPROCS(runtime.NumCPU()) diff --git a/models/action.go b/models/action.go index 0342abf5e3..b9d45ab375 100644 --- a/models/action.go +++ b/models/action.go @@ -8,30 +8,31 @@ import ( "encoding/json" "errors" "fmt" + "path" "regexp" "strings" "time" "unicode" - "github.com/gogits/git" - "github.com/gogits/gogs/modules/base" + "github.com/gogits/gogs/modules/git" "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/setting" ) -// Operation types of user action. +type ActionType int + const ( - OP_CREATE_REPO = iota + 1 - OP_DELETE_REPO - OP_STAR_REPO - OP_FOLLOW_REPO - OP_COMMIT_REPO - OP_CREATE_ISSUE - OP_PULL_REQUEST - OP_TRANSFER_REPO - OP_PUSH_TAG - OP_COMMENT_ISSUE + CREATE_REPO ActionType = iota + 1 // 1 + DELETE_REPO // 2 + STAR_REPO // 3 + FOLLOW_REPO // 4 + COMMIT_REPO // 5 + CREATE_ISSUE // 6 + PULL_REQUEST // 7 + TRANSFER_REPO // 8 + PUSH_TAG // 9 + COMMENT_ISSUE // 10 ) var ( @@ -53,7 +54,7 @@ func init() { type Action struct { Id int64 UserId int64 // Receiver user id. - OpType int + OpType ActionType ActUserId int64 // Action user id. ActUserName string // Action user name. ActEmail string @@ -67,7 +68,7 @@ type Action struct { } func (a Action) GetOpType() int { - return a.OpType + return int(a.OpType) } func (a Action) GetActUserName() string { @@ -86,6 +87,10 @@ func (a Action) GetRepoName() string { return a.RepoName } +func (a Action) GetRepoLink() string { + return path.Join(a.RepoUserName, a.RepoName) +} + func (a Action) GetBranch() string { return a.RefName } @@ -94,6 +99,14 @@ func (a Action) GetContent() string { return a.Content } +func (a Action) GetCreate() time.Time { + return a.Created +} + +func (a Action) GetIssueInfos() []string { + return strings.SplitN(a.Content, "|", 2) +} + func updateIssuesCommit(userId, repoId int64, repoUserName, repoName string, commits []*base.PushCommit) error { for _, c := range commits { refs := IssueKeywordsPat.FindAllString(c.Message, -1) @@ -160,12 +173,11 @@ func updateIssuesCommit(userId, repoId int64, repoUserName, repoName string, com // CommitRepoAction adds new action for committing repository. func CommitRepoAction(userId, repoUserId int64, userName, actEmail string, repoId int64, repoUserName, repoName string, refFullName string, commit *base.PushCommits) error { - // log.Trace("action.CommitRepoAction(start): %d/%s", userId, repoName) - opType := OP_COMMIT_REPO + opType := COMMIT_REPO // Check it's tag push or branch. if strings.HasPrefix(refFullName, "refs/tags/") { - opType = OP_PUSH_TAG + opType = PUSH_TAG commit = &base.PushCommits{} } @@ -269,26 +281,26 @@ func CommitRepoAction(userId, repoUserId int64, userName, actEmail string, // NewRepoAction adds new action for creating repository. func NewRepoAction(u *User, repo *Repository) (err error) { if err = NotifyWatchers(&Action{ActUserId: u.Id, ActUserName: u.Name, ActEmail: u.Email, - OpType: OP_CREATE_REPO, RepoId: repo.Id, RepoUserName: repo.Owner.Name, RepoName: repo.Name, + OpType: CREATE_REPO, RepoId: repo.Id, RepoUserName: repo.Owner.Name, RepoName: repo.Name, IsPrivate: repo.IsPrivate}); err != nil { - log.Error("action.NewRepoAction(notify watchers): %d/%s", u.Id, repo.Name) + log.Error(4, "NotifyWatchers: %d/%s", u.Id, repo.Name) return err } - log.Trace("action.NewRepoAction: %s/%s", u.LowerName, repo.LowerName) + log.Trace("action.NewRepoAction: %s/%s", u.Name, repo.Name) return err } // TransferRepoAction adds new action for transfering repository. -func TransferRepoAction(user, newUser *User, repo *Repository) (err error) { - if err = NotifyWatchers(&Action{ActUserId: user.Id, ActUserName: user.Name, ActEmail: user.Email, - OpType: OP_TRANSFER_REPO, RepoId: repo.Id, RepoName: repo.Name, Content: newUser.Name, +func TransferRepoAction(u, newUser *User, repo *Repository) (err error) { + if err = NotifyWatchers(&Action{ActUserId: u.Id, ActUserName: u.Name, ActEmail: u.Email, + OpType: TRANSFER_REPO, RepoId: repo.Id, RepoName: repo.Name, Content: newUser.Name, IsPrivate: repo.IsPrivate}); err != nil { - log.Error("action.TransferRepoAction(notify watchers): %d/%s", user.Id, repo.Name) + log.Error(4, "NotifyWatchers: %d/%s", u.Id, repo.Name) return err } - log.Trace("action.TransferRepoAction: %s/%s", user.LowerName, repo.LowerName) + log.Trace("action.TransferRepoAction: %s/%s", u.Name, repo.Name) return err } diff --git a/models/git_diff.go b/models/git_diff.go index 303d61d5de..4b4d1234dd 100644 --- a/models/git_diff.go +++ b/models/git_diff.go @@ -13,9 +13,10 @@ import ( "strings" "time" + "github.com/Unknwon/com" + "github.com/gogits/git" - "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/process" ) @@ -118,8 +119,8 @@ func ParsePatch(pid int64, cmd *exec.Cmd, reader io.Reader) (*Diff, error) { // Parse line number. ranges := strings.Split(ss[len(ss)-2][1:], " ") - leftLine, _ = base.StrTo(strings.Split(ranges[0], ",")[0][1:]).Int() - rightLine, _ = base.StrTo(strings.Split(ranges[1], ",")[0]).Int() + leftLine, _ = com.StrTo(strings.Split(ranges[0], ",")[0][1:]).Int() + rightLine, _ = com.StrTo(strings.Split(ranges[1], ",")[0]).Int() continue case line[0] == '+': curFile.Addition++ @@ -214,7 +215,7 @@ func GetDiff(repoPath, commitid string) (*Diff, error) { select { case <-time.After(5 * time.Minute): if errKill := process.Kill(pid); errKill != nil { - log.Error("git_diff.ParsePatch(Kill): %v", err) + log.Error(4, "git_diff.ParsePatch(Kill): %v", err) } <-done // return "", ErrExecTimeout.Error(), ErrExecTimeout diff --git a/models/issue.go b/models/issue.go index a2a7ff6457..307ace816d 100644 --- a/models/issue.go +++ b/models/issue.go @@ -13,9 +13,9 @@ import ( "strings" "time" + "github.com/Unknwon/com" "github.com/go-xorm/xorm" - "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/log" ) @@ -72,7 +72,7 @@ func (i *Issue) GetLabels() error { strIds := strings.Split(strings.TrimSuffix(i.LabelIds[1:], "|"), "|$") i.Labels = make([]*Label, 0, len(strIds)) for _, strId := range strIds { - id, _ := base.StrTo(strId).Int64() + id, _ := com.StrTo(strId).Int64() if id > 0 { l, err := GetLabelById(id) if err != nil { @@ -337,7 +337,7 @@ func GetIssueUserPairsByRepoIds(rids []int64, isClosed bool, page int) ([]*Issue buf := bytes.NewBufferString("") for _, rid := range rids { buf.WriteString("repo_id=") - buf.WriteString(base.ToStr(rid)) + buf.WriteString(com.ToStr(rid)) buf.WriteString(" OR ") } cond := strings.TrimSuffix(buf.String(), " OR ") @@ -564,7 +564,7 @@ func UpdateLabel(l *Label) error { // DeleteLabel delete a label of given repository. func DeleteLabel(repoId int64, strId string) error { - id, _ := base.StrTo(strId).Int64() + id, _ := com.StrTo(strId).Int64() l, err := GetLabelById(id) if err != nil { if err == ErrLabelNotExist { diff --git a/models/login.go b/models/login.go index e99b61e779..da7722f294 100644 --- a/models/login.go +++ b/models/login.go @@ -164,15 +164,14 @@ func UserSignIn(uname, passwd string) (*User, error) { if u.LoginType == NOTYPE { if has { u.LoginType = PLAIN + } else { + return nil, ErrUserNotExist } } - // for plain login, user must have existed. + // For plain login, user must exist to reach this line. + // Now verify password. if u.LoginType == PLAIN { - if !has { - return nil, ErrUserNotExist - } - newUser := &User{Passwd: passwd, Salt: u.Salt} newUser.EncodePasswd() if u.Passwd != newUser.Passwd { @@ -233,18 +232,18 @@ func UserSignIn(uname, passwd string) (*User, error) { // Query if name/passwd can login against the LDAP direcotry pool // Create a local user if success // Return the same LoginUserPlain semantic -func LoginUserLdapSource(user *User, name, passwd string, sourceId int64, cfg *LDAPConfig, autoRegister bool) (*User, error) { +func LoginUserLdapSource(u *User, name, passwd string, sourceId int64, cfg *LDAPConfig, autoRegister bool) (*User, error) { mail, logged := cfg.Ldapsource.SearchEntry(name, passwd) if !logged { // user not in LDAP, do nothing return nil, ErrUserNotExist } if !autoRegister { - return user, nil + return u, nil } // fake a local user creation - user = &User{ + u = &User{ LowerName: strings.ToLower(name), Name: strings.ToLower(name), LoginType: LDAP, @@ -255,7 +254,8 @@ func LoginUserLdapSource(user *User, name, passwd string, sourceId int64, cfg *L Email: mail, } - return CreateUser(user) + err := CreateUser(u) + return u, err } type loginAuth struct { @@ -322,7 +322,7 @@ func SmtpAuth(host string, port int, a smtp.Auth, useTls bool) error { // Query if name/passwd can login against the LDAP direcotry pool // Create a local user if success // Return the same LoginUserPlain semantic -func LoginUserSMTPSource(user *User, name, passwd string, sourceId int64, cfg *SMTPConfig, autoRegister bool) (*User, error) { +func LoginUserSMTPSource(u *User, name, passwd string, sourceId int64, cfg *SMTPConfig, autoRegister bool) (*User, error) { var auth smtp.Auth if cfg.Auth == SMTP_PLAIN { auth = smtp.PlainAuth("", name, passwd, cfg.Host) @@ -340,7 +340,7 @@ func LoginUserSMTPSource(user *User, name, passwd string, sourceId int64, cfg *S } if !autoRegister { - return user, nil + return u, nil } var loginName = name @@ -349,7 +349,7 @@ func LoginUserSMTPSource(user *User, name, passwd string, sourceId int64, cfg *S loginName = name[:idx] } // fake a local user creation - user = &User{ + u = &User{ LowerName: strings.ToLower(loginName), Name: strings.ToLower(loginName), LoginType: SMTP, @@ -359,5 +359,6 @@ func LoginUserSMTPSource(user *User, name, passwd string, sourceId int64, cfg *S Passwd: passwd, Email: name, } - return CreateUser(user) + err := CreateUser(u) + return u, err } diff --git a/models/publickey.go b/models/publickey.go index 603ff36438..baf381778e 100644 --- a/models/publickey.go +++ b/models/publickey.go @@ -54,7 +54,7 @@ func exePath() (string, error) { func homeDir() string { home, err := com.HomeDir() if err != nil { - log.Fatal("Fail to get home directory: %v", err) + log.Fatal(4, "Fail to get home directory: %v", err) } return home } @@ -63,25 +63,28 @@ func init() { var err error if appPath, err = exePath(); err != nil { - log.Fatal("publickey.init(fail to get app path): %v\n", err) + log.Fatal(4, "fail to get app path: %v\n", err) } + appPath = strings.Replace(appPath, "\\", "/", -1) // Determine and create .ssh path. SshPath = filepath.Join(homeDir(), ".ssh") if err = os.MkdirAll(SshPath, os.ModePerm); err != nil { - log.Fatal("publickey.init(fail to create SshPath(%s)): %v\n", SshPath, err) + log.Fatal(4, "fail to create SshPath(%s): %v\n", SshPath, err) } } // PublicKey represents a SSH key. type PublicKey struct { - Id int64 - OwnerId int64 `xorm:"UNIQUE(s) INDEX NOT NULL"` - Name string `xorm:"UNIQUE(s) NOT NULL"` - Fingerprint string - Content string `xorm:"TEXT NOT NULL"` - Created time.Time `xorm:"CREATED"` - Updated time.Time `xorm:"UPDATED"` + Id int64 + OwnerId int64 `xorm:"UNIQUE(s) INDEX NOT NULL"` + Name string `xorm:"UNIQUE(s) NOT NULL"` + Fingerprint string + Content string `xorm:"TEXT NOT NULL"` + Created time.Time `xorm:"CREATED"` + Updated time.Time + HasRecentActivity bool `xorm:"-"` + HasUsed bool `xorm:"-"` } // GetAuthorizedString generates and returns formatted public key string for authorized_keys file. @@ -89,6 +92,59 @@ func (key *PublicKey) GetAuthorizedString() string { return fmt.Sprintf(_TPL_PUBLICK_KEY, appPath, key.Id, key.Content) } +var ( + MinimumKeySize = map[string]int{ + "(ED25519)": 256, + "(ECDSA)": 256, + "(NTRU)": 1087, + "(MCE)": 1702, + "(McE)": 1702, + "(RSA)": 2048, + } +) + +// CheckPublicKeyString checks if the given public key string is recognized by SSH. +func CheckPublicKeyString(content string) (bool, error) { + if strings.ContainsAny(content, "\n\r") { + return false, errors.New("Only a single line with a single key please") + } + + // write the key to a file… + tmpFile, err := ioutil.TempFile(os.TempDir(), "keytest") + if err != nil { + return false, err + } + tmpPath := tmpFile.Name() + defer os.Remove(tmpPath) + tmpFile.WriteString(content) + tmpFile.Close() + + // … see if ssh-keygen recognizes its contents + stdout, stderr, err := process.Exec("CheckPublicKeyString", "ssh-keygen", "-l", "-f", tmpPath) + if err != nil { + return false, errors.New("ssh-keygen -l -f: " + stderr) + } else if len(stdout) < 2 { + return false, errors.New("ssh-keygen returned not enough output to evaluate the key") + } + sshKeygenOutput := strings.Split(stdout, " ") + if len(sshKeygenOutput) < 4 { + return false, errors.New("Not enough fields returned by ssh-keygen -l -f") + } + keySize, err := com.StrTo(sshKeygenOutput[0]).Int() + if err != nil { + return false, errors.New("Cannot get key size of the given key") + } + keyType := strings.TrimSpace(sshKeygenOutput[len(sshKeygenOutput)-1]) + + if minimumKeySize := MinimumKeySize[keyType]; minimumKeySize == 0 { + return false, errors.New("Sorry, unrecognized public key type") + } else if keySize < minimumKeySize { + return false, fmt.Errorf("The minimum accepted size of a public key %s is %d", keyType, minimumKeySize) + } + + return true, nil +} + // saveAuthorizedKeyFile writes SSH key content to authorized_keys file. func saveAuthorizedKeyFile(key *PublicKey) error { sshOpLocker.Lock() @@ -144,10 +200,18 @@ func AddPublicKey(key *PublicKey) (err error) { } // ListPublicKey returns a list of all public keys that user has. -func ListPublicKey(uid int64) ([]PublicKey, error) { - keys := make([]PublicKey, 0, 5) +func ListPublicKey(uid int64) ([]*PublicKey, error) { + keys := make([]*PublicKey, 0, 5) err := x.Find(&keys, &PublicKey{OwnerId: uid}) - return keys, err + if err != nil { + return nil, err + } + + for _, key := range keys { + key.HasUsed = key.Updated.After(key.Created) + key.HasRecentActivity = key.Updated.Add(7 * 24 * time.Hour).After(time.Now()) + } + return keys, nil } // rewriteAuthorizedKeys finds and deletes corresponding line in authorized_keys file. @@ -218,8 +282,6 @@ func DeletePublicKey(key *PublicKey) error { fpath := filepath.Join(SshPath, "authorized_keys") tmpPath := filepath.Join(SshPath, "authorized_keys.tmp") - log.Trace("publickey.DeletePublicKey(authorized_keys): %s", fpath) - if err = rewriteAuthorizedKeys(key, fpath, tmpPath); err != nil { return err } else if err = os.Remove(fpath); err != nil { diff --git a/models/repo.go b/models/repo.go index 8dda6f0d03..da0813e3b4 100644 --- a/models/repo.go +++ b/models/repo.go @@ -14,7 +14,6 @@ import ( "path" "path/filepath" "regexp" - "runtime" "sort" "strings" "time" @@ -23,10 +22,7 @@ import ( "github.com/Unknwon/cae/zip" "github.com/Unknwon/com" - "github.com/gogits/git" - - "github.com/gogits/gogs/modules/base" - "github.com/gogits/gogs/modules/bin" + "github.com/gogits/gogs/modules/git" "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/process" "github.com/gogits/gogs/modules/setting" @@ -47,35 +43,27 @@ var ( ) var ( - LanguageIgns, Licenses []string + Gitignores, Licenses []string ) var ( DescriptionPattern = regexp.MustCompile(`https?://\S+`) ) -// getAssetList returns corresponding asset list in 'conf'. -func getAssetList(prefix string) []string { - assets := make([]string, 0, 15) - for _, name := range bin.AssetNames() { - if strings.HasPrefix(name, prefix) { - assets = append(assets, strings.TrimPrefix(name, prefix+"/")) - } - } - return assets -} - func LoadRepoConfig() { // Load .gitignore and license files. types := []string{"gitignore", "license"} typeFiles := make([][]string, 2) for i, t := range types { - files := getAssetList(path.Join("conf", t)) + files, err := com.StatDir(path.Join("conf", t)) + if err != nil { + log.Fatal(4, "Fail to get %s files: %v", t, err) + } customPath := path.Join(setting.CustomPath, "conf", t) if com.IsDir(customPath) { customFiles, err := com.StatDir(customPath) if err != nil { - log.Fatal("Fail to get custom %s files: %v", t, err) + log.Fatal(4, "Fail to get custom %s files: %v", t, err) } for _, f := range customFiles { @@ -87,34 +75,33 @@ func LoadRepoConfig() { typeFiles[i] = files } - LanguageIgns = typeFiles[0] + Gitignores = typeFiles[0] Licenses = typeFiles[1] - sort.Strings(LanguageIgns) + sort.Strings(Gitignores) sort.Strings(Licenses) } func NewRepoContext() { zip.Verbose = false + // Check Git version. + ver, err := git.GetVersion() + if err != nil { + log.Fatal(4, "Fail to get Git version: %v", err) + } + if ver.Major < 2 && ver.Minor < 8 { + log.Fatal(4, "Gogs requires Git version greater or equal to 1.8.0") + } + // Check if server has basic git setting. stdout, stderr, err := process.Exec("NewRepoContext(get setting)", "git", "config", "--get", "user.name") if err != nil { - log.Fatal("repo.NewRepoContext(fail to get git user.name): %s", stderr) + log.Fatal(4, "Fail to get git user.name: %s", stderr) } else if err != nil || len(strings.TrimSpace(stdout)) == 0 { if _, stderr, err = process.Exec("NewRepoContext(set email)", "git", "config", "--global", "user.email", "gogitservice@gmail.com"); err != nil { - log.Fatal("repo.NewRepoContext(fail to set git user.email): %s", stderr) + log.Fatal(4, "Fail to set git user.email: %s", stderr) } else if _, stderr, err = process.Exec("NewRepoContext(set name)", "git", "config", "--global", "user.name", "Gogs"); err != nil { - log.Fatal("repo.NewRepoContext(fail to set git user.name): %s", stderr) - } - } - - barePath := path.Join(setting.RepoRootPath, "git-bare.zip") - if !com.IsExist(barePath) { - data, err := bin.Asset("conf/content/git-bare.zip") - if err != nil { - log.Fatal("Fail to get asset 'git-bare.zip': %v", err) - } else if err := ioutil.WriteFile(barePath, data, os.ModePerm); err != nil { - log.Fatal("Fail to write asset 'git-bare.zip': %v", err) + log.Fatal(4, "Fail to set git user.name: %s", stderr) } } } @@ -135,12 +122,16 @@ type Repository struct { NumIssues int NumClosedIssues int NumOpenIssues int `xorm:"-"` + NumPulls int + NumClosedPulls int + NumOpenPulls int `xorm:"-"` NumMilestones int `xorm:"NOT NULL DEFAULT 0"` NumClosedMilestones int `xorm:"NOT NULL DEFAULT 0"` NumOpenMilestones int `xorm:"-"` NumTags int `xorm:"-"` IsPrivate bool IsMirror bool + IsFork bool `xorm:"NOT NULL DEFAULT false"` IsBare bool IsGoget bool DefaultBranch string @@ -153,11 +144,11 @@ func (repo *Repository) GetOwner() (err error) { return err } +// DescriptionHtml does special handles to description and return HTML string. func (repo *Repository) DescriptionHtml() template.HTML { sanitize := func(s string) string { // TODO(nuss-justin): Improve sanitization. Strip all tags? ss := html.EscapeString(s) - return fmt.Sprintf(`%s`, ss, ss) } return template.HTML(DescriptionPattern.ReplaceAllStringFunc(repo.Description, sanitize)) @@ -225,7 +216,8 @@ func MirrorRepository(repoId int64, userName, repoName, repoPath, url string) er return err } - return git.UnpackRefs(repoPath) + // return git.UnpackRefs(repoPath) + return nil } func GetMirror(repoId int64) (*Mirror, error) { @@ -257,14 +249,14 @@ func MirrorUpdate() { repoPath, fmt.Sprintf("MirrorUpdate: %s", repoPath), "git", "remote", "update"); err != nil { return errors.New("git remote update: " + stderr) - } else if err = git.UnpackRefs(repoPath); err != nil { - return errors.New("UnpackRefs: " + err.Error()) - } + } // else if err = git.UnpackRefs(repoPath); err != nil { + // return errors.New("UnpackRefs: " + err.Error()) + // } m.NextUpdate = time.Now().Add(time.Duration(m.Interval) * time.Hour) return UpdateMirror(m) }); err != nil { - log.Error("repo.MirrorUpdate: %v", err) + log.Error(4, "repo.MirrorUpdate: %v", err) } } @@ -317,7 +309,7 @@ func MigrateRepository(u *User, name, desc string, private, mirror bool, url str // extractGitBareZip extracts git-bare.zip to repository path. func extractGitBareZip(repoPath string) error { - z, err := zip.Open(filepath.Join(setting.RepoRootPath, "git-bare.zip")) + z, err := zip.Open(path.Join(setting.ConfRootPath, "content/git-bare.zip")) if err != nil { return err } @@ -361,34 +353,18 @@ func createHookUpdate(hookPath, content string) error { return err } -// SetRepoEnvs sets environment variables for command update. -func SetRepoEnvs(userId int64, userName, repoName, repoUserName string) { - os.Setenv("userId", base.ToStr(userId)) - os.Setenv("userName", userName) - os.Setenv("repoName", repoName) - os.Setenv("repoUserName", repoUserName) -} - // InitRepository initializes README and .gitignore if needed. -func initRepository(f string, user *User, repo *Repository, initReadme bool, repoLang, license string) error { - repoPath := RepoPath(user.Name, repo.Name) +func initRepository(f string, u *User, repo *Repository, initReadme bool, repoLang, license string) error { + repoPath := RepoPath(u.Name, repo.Name) // Create bare new repository. if err := extractGitBareZip(repoPath); err != nil { return err } - if runtime.GOOS == "windows" { - rp := strings.NewReplacer("\\", "/") - appPath = "\"" + rp.Replace(appPath) + "\"" - } else { - rp := strings.NewReplacer("\\", "/", " ", "\\ ") - appPath = rp.Replace(appPath) - } - // hook/post-update if err := createHookUpdate(filepath.Join(repoPath, "hooks", "update"), - fmt.Sprintf(TPL_UPDATE_HOOK, setting.ScriptType, appPath)); err != nil { + fmt.Sprintf(TPL_UPDATE_HOOK, setting.ScriptType, "\""+appPath+"\"")); err != nil { return err } @@ -405,7 +381,7 @@ func initRepository(f string, user *User, repo *Repository, initReadme bool, rep } // Clone to temprory path and do the init commit. - tmpDir := filepath.Join(os.TempDir(), base.ToStr(time.Now().Nanosecond())) + tmpDir := filepath.Join(os.TempDir(), com.ToStr(time.Now().Nanosecond())) os.MkdirAll(tmpDir, os.ModePerm) _, stderr, err := process.Exec( @@ -426,12 +402,11 @@ func initRepository(f string, user *User, repo *Repository, initReadme bool, rep } // .gitignore - if repoLang != "" { - filePath := "conf/gitignore/" + repoLang + filePath := "conf/gitignore/" + repoLang + if com.IsFile(filePath) { targetPath := path.Join(tmpDir, fileName["gitign"]) - data, err := bin.Asset(filePath) - if err == nil { - if err = ioutil.WriteFile(targetPath, data, os.ModePerm); err != nil { + if com.IsFile(filePath) { + if err = com.Copy(filePath, targetPath); err != nil { return err } } else { @@ -443,15 +418,16 @@ func initRepository(f string, user *User, repo *Repository, initReadme bool, rep } } } + } else { + delete(fileName, "gitign") } // LICENSE - if license != "" { - filePath := "conf/license/" + license + filePath = "conf/license/" + license + if com.IsFile(filePath) { targetPath := path.Join(tmpDir, fileName["license"]) - data, err := bin.Asset(filePath) - if err == nil { - if err = ioutil.WriteFile(targetPath, data, os.ModePerm); err != nil { + if com.IsFile(filePath) { + if err = com.Copy(filePath, targetPath); err != nil { return err } } else { @@ -463,16 +439,16 @@ func initRepository(f string, user *User, repo *Repository, initReadme bool, rep } } } + } else { + delete(fileName, "license") } if len(fileName) == 0 { return nil } - SetRepoEnvs(user.Id, user.Name, repo.Name, user.Name) - // Apply changes and commit. - return initRepoCommit(tmpDir, user.NewGitSig()) + return initRepoCommit(tmpDir, u.NewGitSig()) } // CreateRepository creates a repository for given user or organization. @@ -549,15 +525,15 @@ func CreateRepository(u *User, name, desc, lang, license string, private, mirror } } - rawSql := "UPDATE `user` SET num_repos = num_repos + 1 WHERE id = ?" - if _, err = sess.Exec(rawSql, u.Id); err != nil { + if _, err = sess.Exec( + "UPDATE `user` SET num_repos = num_repos + 1 WHERE id = ?", u.Id); err != nil { sess.Rollback() return nil, err } // Update owner team info and count. if u.IsOrganization() { - t.RepoIds += "$" + base.ToStr(repo.Id) + "|" + t.RepoIds += "$" + com.ToStr(repo.Id) + "|" t.NumRepos++ if _, err = sess.Id(t.Id).AllCols().Update(t); err != nil { sess.Rollback() @@ -572,24 +548,24 @@ func CreateRepository(u *User, name, desc, lang, license string, private, mirror if u.IsOrganization() { ous, err := GetOrgUsersByOrgId(u.Id) if err != nil { - log.Error("repo.CreateRepository(GetOrgUsersByOrgId): %v", err) + log.Error(4, "repo.CreateRepository(GetOrgUsersByOrgId): %v", err) } else { for _, ou := range ous { if err = WatchRepo(ou.Uid, repo.Id, true); err != nil { - log.Error("repo.CreateRepository(WatchRepo): %v", err) + log.Error(4, "repo.CreateRepository(WatchRepo): %v", err) } } } } if err = WatchRepo(u.Id, repo.Id, true); err != nil { - log.Error("repo.CreateRepository(WatchRepo2): %v", err) + log.Error(4, "WatchRepo2: %v", err) } if err = NewRepoAction(u, repo); err != nil { - log.Error("repo.CreateRepository(NewRepoAction): %v", err) + log.Error(4, "NewRepoAction: %v", err) } - // No need for init for mirror. + // No need for init mirror. if mirror { return repo, nil } @@ -597,11 +573,11 @@ func CreateRepository(u *User, name, desc, lang, license string, private, mirror repoPath := RepoPath(u.Name, repo.Name) if err = initRepository(repoPath, u, repo, initReadme, lang, license); err != nil { if err2 := os.RemoveAll(repoPath); err2 != nil { - log.Error("repo.CreateRepository(initRepository): %v", err) - return nil, errors.New(fmt.Sprintf( - "delete repo directory %s/%s failed(2): %v", u.Name, repo.Name, err2)) + log.Error(4, "initRepository: %v", err) + return nil, fmt.Errorf( + "delete repo directory %s/%s failed(2): %v", u.Name, repo.Name, err2) } - return nil, err + return nil, fmt.Errorf("initRepository: %v", err) } _, stderr, err := process.ExecDir(-1, @@ -982,15 +958,12 @@ func WatchRepo(uid, rid int64, watch bool) (err error) { if _, err = x.Insert(&Watch{RepoId: rid, UserId: uid}); err != nil { return err } - - rawSql := "UPDATE `repository` SET num_watches = num_watches + 1 WHERE id = ?" - _, err = x.Exec(rawSql, rid) + _, err = x.Exec("UPDATE `repository` SET num_watches = num_watches + 1 WHERE id = ?", rid) } else { if _, err = x.Delete(&Watch{0, uid, rid}); err != nil { return err } - rawSql := "UPDATE `repository` SET num_watches = num_watches - 1 WHERE id = ?" - _, err = x.Exec(rawSql, rid) + _, err = x.Exec("UPDATE `repository` SET num_watches = num_watches - 1 WHERE id = ?", rid) } return err } diff --git a/models/update.go b/models/update.go index cf7f5d2a79..68a92ada1d 100644 --- a/models/update.go +++ b/models/update.go @@ -10,9 +10,8 @@ import ( "os/exec" "strings" - "github.com/gogits/git" - "github.com/gogits/gogs/modules/base" + "github.com/gogits/gogs/modules/git" "github.com/gogits/gogs/modules/log" ) @@ -47,8 +46,6 @@ func DelUpdateTasksByUuid(uuid string) error { } func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName string, userId int64) error { - //fmt.Println(refName, oldCommitId, newCommitId) - //fmt.Println(userName, repoUserName, repoName) isNew := strings.HasPrefix(oldCommitId, "0000000") if isNew && strings.HasPrefix(newCommitId, "0000000") { @@ -82,12 +79,12 @@ func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName return fmt.Errorf("runUpdate.GetRepositoryByName userId: %v", err) } - // if tags push + // Push tags. if strings.HasPrefix(refName, "refs/tags/") { tagName := git.RefEndName(refName) tag, err := repo.GetTag(tagName) if err != nil { - log.GitLogger.Fatal("runUpdate.GetTag: %v", err) + log.GitLogger.Fatal(4, "runUpdate.GetTag: %v", err) } var actEmail string @@ -96,7 +93,7 @@ func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName } else { cmt, err := tag.Commit() if err != nil { - log.GitLogger.Fatal("runUpdate.GetTag Commit: %v", err) + log.GitLogger.Fatal(4, "runUpdate.GetTag Commit: %v", err) } actEmail = cmt.Committer.Email } @@ -105,7 +102,7 @@ func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName if err = CommitRepoAction(userId, ru.Id, userName, actEmail, repos.Id, repoUserName, repoName, refName, commit); err != nil { - log.GitLogger.Fatal("runUpdate.models.CommitRepoAction: %s/%s:%v", repoUserName, repoName, err) + log.GitLogger.Fatal(4, "runUpdate.models.CommitRepoAction: %s/%s:%v", repoUserName, repoName, err) } return err } @@ -135,7 +132,7 @@ func Update(refName, oldCommitId, newCommitId, userName, repoUserName, repoName // if commits push commits := make([]*base.PushCommit, 0) - var maxCommits = 3 + var maxCommits = 2 var actEmail string for e := l.Front(); e != nil; e = e.Next() { commit := e.Value.(*git.Commit) diff --git a/models/user.go b/models/user.go index 581fce23a4..540f4b6af4 100644 --- a/models/user.go +++ b/models/user.go @@ -14,9 +14,10 @@ import ( "strings" "time" - "github.com/gogits/git" + "github.com/Unknwon/com" "github.com/gogits/gogs/modules/base" + "github.com/gogits/gogs/modules/git" "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/setting" ) @@ -77,6 +78,14 @@ type User struct { Members []*User `xorm:"-"` } +// DashboardLink returns the user dashboard page link. +func (u *User) DashboardLink() string { + if u.IsOrganization() { + return "/org/" + u.Name + "/dashboard" + } + return "/" +} + // HomeLink returns the user home page link. func (u *User) HomeLink() string { return "/user/" + u.Name @@ -157,23 +166,23 @@ func GetUserSalt() string { } // CreateUser creates record of a new user. -func CreateUser(u *User) (*User, error) { +func CreateUser(u *User) error { if !IsLegalName(u.Name) { - return nil, ErrUserNameIllegal + return ErrUserNameIllegal } isExist, err := IsUserExist(u.Name) if err != nil { - return nil, err + return err } else if isExist { - return nil, ErrUserAlreadyExist + return ErrUserAlreadyExist } isExist, err = IsEmailUsed(u.Email) if err != nil { - return nil, err + return err } else if isExist { - return nil, ErrEmailAlreadyUsed + return ErrEmailAlreadyUsed } u.LowerName = strings.ToLower(u.Name) @@ -186,21 +195,17 @@ func CreateUser(u *User) (*User, error) { sess := x.NewSession() defer sess.Close() if err = sess.Begin(); err != nil { - return nil, err + return err } if _, err = sess.Insert(u); err != nil { sess.Rollback() - return nil, err - } - - if err = os.MkdirAll(UserPath(u.Name), os.ModePerm); err != nil { + return err + } else if err = os.MkdirAll(UserPath(u.Name), os.ModePerm); err != nil { sess.Rollback() - return nil, err - } - - if err = sess.Commit(); err != nil { - return nil, err + return err + } else if err = sess.Commit(); err != nil { + return err } // Auto-set admin for user whose ID is 1. @@ -209,7 +214,7 @@ func CreateUser(u *User) (*User, error) { u.IsActive = true _, err = x.Id(u.Id).UseBool().Update(u) } - return u, err + return err } // CountUsers returns number of users. @@ -237,7 +242,7 @@ func getVerifyUser(code string) (user *User) { if user, err = GetUserByName(string(b)); user != nil { return user } - log.Error("user.getVerifyUser: %v", err) + log.Error(4, "user.getVerifyUser: %v", err) } return nil @@ -250,7 +255,7 @@ func VerifyUserActiveCode(code string) (user *User) { if user = getVerifyUser(code); user != nil { // time limit code prefix := code[:base.TimeLimitCodeLength] - data := base.ToStr(user.Id) + user.Email + user.LowerName + user.Passwd + user.Rands + data := com.ToStr(user.Id) + user.Email + user.LowerName + user.Passwd + user.Rands if base.VerifyTimeLimitCode(data, minutes, prefix) { return user @@ -260,12 +265,16 @@ func VerifyUserActiveCode(code string) (user *User) { } // ChangeUserName changes all corresponding setting from old user name to new one. -func ChangeUserName(user *User, newUserName string) (err error) { +func ChangeUserName(u *User, newUserName string) (err error) { + if !IsLegalName(newUserName) { + return ErrUserNameIllegal + } + newUserName = strings.ToLower(newUserName) // Update accesses of user. accesses := make([]Access, 0, 10) - if err = x.Find(&accesses, &Access{UserName: user.LowerName}); err != nil { + if err = x.Find(&accesses, &Access{UserName: u.LowerName}); err != nil { return err } @@ -277,28 +286,28 @@ func ChangeUserName(user *User, newUserName string) (err error) { for i := range accesses { accesses[i].UserName = newUserName - if strings.HasPrefix(accesses[i].RepoName, user.LowerName+"/") { - accesses[i].RepoName = strings.Replace(accesses[i].RepoName, user.LowerName, newUserName, 1) + if strings.HasPrefix(accesses[i].RepoName, u.LowerName+"/") { + accesses[i].RepoName = strings.Replace(accesses[i].RepoName, u.LowerName, newUserName, 1) } if err = UpdateAccessWithSession(sess, &accesses[i]); err != nil { return err } } - repos, err := GetRepositories(user.Id, true) + repos, err := GetRepositories(u.Id, true) if err != nil { return err } for i := range repos { accesses = make([]Access, 0, 10) // Update accesses of user repository. - if err = x.Find(&accesses, &Access{RepoName: user.LowerName + "/" + repos[i].LowerName}); err != nil { + if err = x.Find(&accesses, &Access{RepoName: u.LowerName + "/" + repos[i].LowerName}); err != nil { return err } for j := range accesses { // if the access is not the user's access (already updated above) - if accesses[j].UserName != user.LowerName { + if accesses[j].UserName != u.LowerName { accesses[j].RepoName = newUserName + "/" + repos[i].LowerName if err = UpdateAccessWithSession(sess, &accesses[j]); err != nil { return err @@ -308,7 +317,7 @@ func ChangeUserName(user *User, newUserName string) (err error) { } // Change user directory name. - if err = os.Rename(UserPath(user.LowerName), UserPath(newUserName)); err != nil { + if err = os.Rename(UserPath(u.LowerName), UserPath(newUserName)); err != nil { sess.Rollback() return err } @@ -317,7 +326,7 @@ func ChangeUserName(user *User, newUserName string) (err error) { } // UpdateUser updates user's information. -func UpdateUser(u *User) (err error) { +func UpdateUser(u *User) error { u.LowerName = strings.ToLower(u.Name) if len(u.Location) > 255 { @@ -330,7 +339,7 @@ func UpdateUser(u *User) (err error) { u.Description = u.Description[:255] } - _, err = x.Id(u.Id).AllCols().Update(u) + _, err := x.Id(u.Id).AllCols().Update(u) return err } @@ -340,7 +349,7 @@ func DeleteUser(u *User) error { // Check ownership of repository. count, err := GetRepositoryCount(u) if err != nil { - return errors.New("modesl.GetRepositories(GetRepositoryCount): " + err.Error()) + return errors.New("GetRepositoryCount: " + err.Error()) } else if count > 0 { return ErrUserOwnRepos } diff --git a/models/webhook.go b/models/webhook.go index 9044befba2..925ec1a7de 100644 --- a/models/webhook.go +++ b/models/webhook.go @@ -47,7 +47,7 @@ type Webhook struct { func (w *Webhook) GetEvent() { w.HookEvent = &HookEvent{} if err := json.Unmarshal([]byte(w.Events), w.HookEvent); err != nil { - log.Error("webhook.GetEvent(%d): %v", w.Id, err) + log.Error(4, "webhook.GetEvent(%d): %v", w.Id, err) } } @@ -193,13 +193,13 @@ func DeliverHooks() { // Only support JSON now. if _, err := httplib.Post(t.Url).SetTimeout(timeout, timeout). Body([]byte(t.PayloadContent)).Response(); err != nil { - log.Error("webhook.DeliverHooks(Delivery): %v", err) + log.Error(4, "webhook.DeliverHooks(Delivery): %v", err) return nil } t.IsDeliveried = true if err := UpdateHookTask(t); err != nil { - log.Error("webhook.DeliverHooks(UpdateHookTask): %v", err) + log.Error(4, "webhook.DeliverHooks(UpdateHookTask): %v", err) return nil } diff --git a/modules/auth/admin.go b/modules/auth/admin.go index 69161f908a..38f3292b88 100644 --- a/modules/auth/admin.go +++ b/modules/auth/admin.go @@ -5,12 +5,9 @@ package auth import ( - "net/http" - "reflect" + "github.com/Unknwon/macaron" + "github.com/macaron-contrib/i18n" - "github.com/go-martini/martini" - - "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/middleware/binding" ) @@ -25,17 +22,6 @@ type AdminEditUserForm struct { LoginType int `form:"login_type"` } -func (f *AdminEditUserForm) Name(field string) string { - names := map[string]string{ - "Email": "E-mail address", - "Website": "Website", - "Location": "Location", - "Avatar": "Gravatar Email", - } - return names[field] -} - -func (f *AdminEditUserForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) +func (f *AdminEditUserForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) } diff --git a/modules/auth/apiv1/miscellaneous.go b/modules/auth/apiv1/miscellaneous.go index 726a080147..30515eb861 100644 --- a/modules/auth/apiv1/miscellaneous.go +++ b/modules/auth/apiv1/miscellaneous.go @@ -5,13 +5,12 @@ package apiv1 import ( - "net/http" "reflect" - "github.com/go-martini/martini" + "github.com/Unknwon/macaron" + "github.com/macaron-contrib/i18n" "github.com/gogits/gogs/modules/auth" - "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/middleware/binding" ) @@ -22,17 +21,16 @@ type MarkdownForm struct { Context string `form:"context"` } -func (f *MarkdownForm) Validate(errs *binding.Errors, req *http.Request, ctx martini.Context) { - data := ctx.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validateApiReq(errs, data, f) +func (f *MarkdownForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validateApiReq(errs, ctx.Data, f, l) } -func validateApiReq(errs *binding.Errors, data base.TmplData, f interface{}) { +func validateApiReq(errs *binding.Errors, data map[string]interface{}, f interface{}, l i18n.Locale) { if errs.Count() == 0 { return } else if len(errs.Overall) > 0 { for _, err := range errs.Overall { - log.Error("%s: %v", reflect.TypeOf(f), err) + log.Error(4, "%s: %v", reflect.TypeOf(f), err) } return } diff --git a/modules/auth/auth.go b/modules/auth/auth.go index e9b215101b..2236de4761 100644 --- a/modules/auth/auth.go +++ b/modules/auth/auth.go @@ -7,49 +7,152 @@ package auth import ( "net/http" "reflect" + "strings" - "github.com/go-martini/martini" + "github.com/macaron-contrib/i18n" + "github.com/macaron-contrib/session" - "github.com/gogits/gogs/modules/base" + "github.com/gogits/gogs/models" + "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/middleware/binding" + "github.com/gogits/gogs/modules/setting" ) -type AuthenticationForm struct { - Id int64 `form:"id"` - Type int `form:"type"` - AuthName string `form:"name" binding:"Required;MaxSize(50)"` - Domain string `form:"domain"` - Host string `form:"host"` - Port int `form:"port"` - UseSSL bool `form:"usessl"` - BaseDN string `form:"base_dn"` - Attributes string `form:"attributes"` - Filter string `form:"filter"` - MsAdSA string `form:"ms_ad_sa"` - IsActived bool `form:"is_actived"` - SmtpAuth string `form:"smtpauth"` - SmtpHost string `form:"smtphost"` - SmtpPort int `form:"smtpport"` - Tls bool `form:"tls"` - AllowAutoRegister bool `form:"allowautoregister"` -} - -func (f *AuthenticationForm) Name(field string) string { - names := map[string]string{ - "AuthName": "Authentication's name", - "Domain": "Domain name", - "Host": "Host address", - "Port": "Port Number", - "UseSSL": "Use SSL", - "BaseDN": "Base DN", - "Attributes": "Search attributes", - "Filter": "Search filter", - "MsAdSA": "Ms Ad SA", +// SignedInId returns the id of signed in user. +func SignedInId(header http.Header, sess session.Store) int64 { + if !models.HasEngine { + return 0 } - return names[field] + + if setting.Service.EnableReverseProxyAuth { + webAuthUser := header.Get(setting.ReverseProxyAuthUser) + if len(webAuthUser) > 0 { + u, err := models.GetUserByName(webAuthUser) + if err != nil { + if err != models.ErrUserNotExist { + log.Error(4, "GetUserByName: %v", err) + } + return 0 + } + return u.Id + } + } + + uid := sess.Get("uid") + if uid == nil { + return 0 + } + if id, ok := uid.(int64); ok { + if _, err := models.GetUserById(id); err != nil { + if err != models.ErrUserNotExist { + log.Error(4, "GetUserById: %v", err) + } + return 0 + } + return id + } + return 0 } -func (f *AuthenticationForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) +// SignedInUser returns the user object of signed user. +func SignedInUser(header http.Header, sess session.Store) *models.User { + uid := SignedInId(header, sess) + if uid <= 0 { + return nil + } + + u, err := models.GetUserById(uid) + if err != nil { + log.Error(4, "GetUserById: %v", err) + return nil + } + return u +} + +// AssignForm assign form values back to the template data. +func AssignForm(form interface{}, data map[string]interface{}) { + typ := reflect.TypeOf(form) + val := reflect.ValueOf(form) + + if typ.Kind() == reflect.Ptr { + typ = typ.Elem() + val = val.Elem() + } + + for i := 0; i < typ.NumField(); i++ { + field := typ.Field(i) + + fieldName := field.Tag.Get("form") + // Allow ignored fields in the struct + if fieldName == "-" { + continue + } + + data[fieldName] = val.Field(i).Interface() + } +} + +func GetMinMaxSize(field reflect.StructField) string { + for _, rule := range strings.Split(field.Tag.Get("binding"), ";") { + if strings.HasPrefix(rule, "MinSize(") || strings.HasPrefix(rule, "MaxSize(") { + return rule[8 : len(rule)-1] + } + } + return "" +} + +func validate(errs *binding.Errors, data map[string]interface{}, f interface{}, l i18n.Locale) { + if errs.Count() == 0 { + return + } else if len(errs.Overall) > 0 { + for _, err := range errs.Overall { + log.Error(4, "%s: %v", reflect.TypeOf(f), err) + } + return + } + + data["HasError"] = true + AssignForm(f, data) + + typ := reflect.TypeOf(f) + val := reflect.ValueOf(f) + + if typ.Kind() == reflect.Ptr { + typ = typ.Elem() + val = val.Elem() + } + + for i := 0; i < typ.NumField(); i++ { + field := typ.Field(i) + + fieldName := field.Tag.Get("form") + // Allow ignored fields in the struct + if fieldName == "-" { + continue + } + + if err, ok := errs.Fields[field.Name]; ok { + data["Err_"+field.Name] = true + trName := l.Tr("form." + field.Name) + switch err { + case binding.BindingRequireError: + data["ErrorMsg"] = trName + l.Tr("form.require_error") + case binding.BindingAlphaDashError: + data["ErrorMsg"] = trName + l.Tr("form.alpha_dash_error") + case binding.BindingAlphaDashDotError: + data["ErrorMsg"] = trName + l.Tr("form.alpha_dash_dot_error") + case binding.BindingMinSizeError: + data["ErrorMsg"] = trName + l.Tr("form.min_size_error", GetMinMaxSize(field)) + case binding.BindingMaxSizeError: + data["ErrorMsg"] = trName + l.Tr("form.max_size_error", GetMinMaxSize(field)) + case binding.BindingEmailError: + data["ErrorMsg"] = trName + l.Tr("form.email_error") + case binding.BindingUrlError: + data["ErrorMsg"] = trName + l.Tr("form.url_error") + default: + data["ErrorMsg"] = l.Tr("form.unknown_error") + " " + err + } + return + } + } } diff --git a/modules/auth/auth_form.go b/modules/auth/auth_form.go new file mode 100644 index 0000000000..cb9da5dff4 --- /dev/null +++ b/modules/auth/auth_form.go @@ -0,0 +1,36 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package auth + +import ( + "github.com/Unknwon/macaron" + "github.com/macaron-contrib/i18n" + + "github.com/gogits/gogs/modules/middleware/binding" +) + +type AuthenticationForm struct { + Id int64 `form:"id"` + Type int `form:"type"` + AuthName string `form:"name" binding:"Required;MaxSize(50)"` + Domain string `form:"domain"` + Host string `form:"host"` + Port int `form:"port"` + UseSSL bool `form:"usessl"` + BaseDN string `form:"base_dn"` + Attributes string `form:"attributes"` + Filter string `form:"filter"` + MsAdSA string `form:"ms_ad_sa"` + IsActived bool `form:"is_actived"` + SmtpAuth string `form:"smtpauth"` + SmtpHost string `form:"smtphost"` + SmtpPort int `form:"smtpport"` + Tls bool `form:"tls"` + AllowAutoRegister bool `form:"allowautoregister"` +} + +func (f *AuthenticationForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} diff --git a/modules/auth/ldap/ldap.go b/modules/auth/ldap/ldap.go index e944a90a1e..e27e5133ed 100644 --- a/modules/auth/ldap/ldap.go +++ b/modules/auth/ldap/ldap.go @@ -55,7 +55,7 @@ func LoginUser(name, passwd string) (a string, r bool) { func (ls Ldapsource) SearchEntry(name, passwd string) (string, bool) { l, err := ldapDial(ls) if err != nil { - log.Error("LDAP Connect error, %s:%v", ls.Host, err) + log.Error(4, "LDAP Connect error, %s:%v", ls.Host, err) ls.Enabled = false return "", false } diff --git a/modules/auth/org.go b/modules/auth/org.go index e243627ef2..c45d83a711 100644 --- a/modules/auth/org.go +++ b/modules/auth/org.go @@ -5,12 +5,9 @@ package auth import ( - "net/http" - "reflect" + "github.com/Unknwon/macaron" + "github.com/macaron-contrib/i18n" - "github.com/go-martini/martini" - - "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/middleware/binding" ) @@ -26,17 +23,8 @@ type CreateOrgForm struct { Email string `form:"email" binding:"Required;Email;MaxSize(50)"` } -func (f *CreateOrgForm) Name(field string) string { - names := map[string]string{ - "OrgName": "Organization name", - "Email": "E-mail address", - } - return names[field] -} - -func (f *CreateOrgForm) Validate(errs *binding.Errors, req *http.Request, ctx martini.Context) { - data := ctx.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errs, data, f) +func (f *CreateOrgForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) } type OrgSettingForm struct { @@ -47,20 +35,8 @@ type OrgSettingForm struct { Location string `form:"location" binding:"MaxSize(50)"` } -func (f *OrgSettingForm) Name(field string) string { - names := map[string]string{ - "DisplayName": "Display name", - "Email": "E-mail address", - "Description": "Description", - "Website": "Website address", - "Location": "Location", - } - return names[field] -} - -func (f *OrgSettingForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) +func (f *OrgSettingForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) } // ___________ @@ -76,15 +52,6 @@ type CreateTeamForm struct { Permission string `form:"permission"` } -func (f *CreateTeamForm) Name(field string) string { - names := map[string]string{ - "TeamName": "Team name", - "Description": "Team description", - } - return names[field] -} - -func (f *CreateTeamForm) Validate(errs *binding.Errors, req *http.Request, ctx martini.Context) { - data := ctx.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errs, data, f) +func (f *CreateTeamForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) } diff --git a/modules/auth/publickey.go b/modules/auth/publickey.go deleted file mode 100644 index b828c92b57..0000000000 --- a/modules/auth/publickey.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package auth - -import ( - "net/http" - "reflect" - - "github.com/go-martini/martini" - - "github.com/gogits/gogs/modules/base" - "github.com/gogits/gogs/modules/middleware/binding" -) - -type AddSSHKeyForm struct { - KeyName string `form:"keyname" binding:"Required"` - KeyContent string `form:"key_content" binding:"Required"` -} - -func (f *AddSSHKeyForm) Name(field string) string { - names := map[string]string{ - "KeyName": "SSH key name", - "KeyContent": "SSH key content", - } - return names[field] -} - -func (f *AddSSHKeyForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} diff --git a/modules/auth/publickey_form.go b/modules/auth/publickey_form.go new file mode 100644 index 0000000000..4618a7ea36 --- /dev/null +++ b/modules/auth/publickey_form.go @@ -0,0 +1,21 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package auth + +import ( + "github.com/Unknwon/macaron" + "github.com/macaron-contrib/i18n" + + "github.com/gogits/gogs/modules/middleware/binding" +) + +type AddSSHKeyForm struct { + SSHTitle string `form:"title" binding:"Required"` + Content string `form:"content" binding:"Required"` +} + +func (f *AddSSHKeyForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} diff --git a/modules/auth/repo.go b/modules/auth/repo.go deleted file mode 100644 index d3d215322a..0000000000 --- a/modules/auth/repo.go +++ /dev/null @@ -1,252 +0,0 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package auth - -import ( - "net/http" - "reflect" - - "github.com/go-martini/martini" - - "github.com/gogits/gogs/modules/base" - "github.com/gogits/gogs/modules/middleware/binding" -) - -// __________ .__ __ -// \______ \ ____ ______ ____ _____|__|/ |_ ___________ ___.__. -// | _// __ \\____ \ / _ \/ ___/ \ __\/ _ \_ __ < | | -// | | \ ___/| |_> > <_> )___ \| || | ( <_> ) | \/\___ | -// |____|_ /\___ > __/ \____/____ >__||__| \____/|__| / ____| -// \/ \/|__| \/ \/ - -type CreateRepoForm struct { - Uid int64 `form:"uid" binding:"Required"` - RepoName string `form:"repo" binding:"Required;AlphaDash;MaxSize(100)"` - Private bool `form:"private"` - Description string `form:"desc" binding:"MaxSize(255)"` - Language string `form:"language"` - License string `form:"license"` - InitReadme bool `form:"initReadme"` -} - -func (f *CreateRepoForm) Name(field string) string { - names := map[string]string{ - "RepoName": "Repository name", - "Description": "Description", - } - return names[field] -} - -func (f *CreateRepoForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} - -type MigrateRepoForm struct { - Url string `form:"url" binding:"Url"` - AuthUserName string `form:"auth_username"` - AuthPasswd string `form:"auth_password"` - Uid int64 `form:"uid" binding:"Required"` - RepoName string `form:"repo" binding:"Required;AlphaDash;MaxSize(100)"` - Mirror bool `form:"mirror"` - Private bool `form:"private"` - Description string `form:"desc" binding:"MaxSize(255)"` -} - -func (f *MigrateRepoForm) Name(field string) string { - names := map[string]string{ - "Url": "Migration URL", - "RepoName": "Repository name", - "Description": "Description", - } - return names[field] -} - -func (f *MigrateRepoForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} - -type RepoSettingForm struct { - RepoName string `form:"name" binding:"Required;AlphaDash;MaxSize(100)"` - Description string `form:"desc" binding:"MaxSize(255)"` - Website string `form:"site" binding:"Url;MaxSize(100)"` - Branch string `form:"branch"` - Interval int `form:"interval"` - Private bool `form:"private"` - GoGet bool `form:"goget"` -} - -func (f *RepoSettingForm) Name(field string) string { - names := map[string]string{ - "RepoName": "Repository name", - "Description": "Description", - "Website": "Website address", - } - return names[field] -} - -func (f *RepoSettingForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} - -// __ __ ___. .__ .__ __ -// / \ / \ ____\_ |__ | |__ | |__ ____ | | __ -// \ \/\/ // __ \| __ \| | \| | \ / _ \| |/ / -// \ /\ ___/| \_\ \ Y \ Y ( <_> ) < -// \__/\ / \___ >___ /___| /___| /\____/|__|_ \ -// \/ \/ \/ \/ \/ \/ - -type NewWebhookForm struct { - Url string `form:"url" binding:"Required;Url"` - ContentType string `form:"content_type" binding:"Required"` - Secret string `form:"secret""` - PushOnly bool `form:"push_only"` - Active bool `form:"active"` -} - -func (f *NewWebhookForm) Name(field string) string { - names := map[string]string{ - "Url": "Payload URL", - "ContentType": "Content type", - } - return names[field] -} - -func (f *NewWebhookForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} - -// .___ -// | | ______ ________ __ ____ -// | |/ ___// ___/ | \_/ __ \ -// | |\___ \ \___ \| | /\ ___/ -// |___/____ >____ >____/ \___ > -// \/ \/ \/ - -type CreateIssueForm struct { - IssueName string `form:"title" binding:"Required;MaxSize(50)"` - MilestoneId int64 `form:"milestoneid"` - AssigneeId int64 `form:"assigneeid"` - Labels string `form:"labels"` - Content string `form:"content"` -} - -func (f *CreateIssueForm) Name(field string) string { - names := map[string]string{ - "IssueName": "Issue name", - } - return names[field] -} - -func (f *CreateIssueForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} - -// _____ .__.__ __ -// / \ |__| | ____ _______/ |_ ____ ____ ____ -// / \ / \| | | _/ __ \ / ___/\ __\/ _ \ / \_/ __ \ -// / Y \ | |_\ ___/ \___ \ | | ( <_> ) | \ ___/ -// \____|__ /__|____/\___ >____ > |__| \____/|___| /\___ > -// \/ \/ \/ \/ \/ - -type CreateMilestoneForm struct { - Title string `form:"title" binding:"Required;MaxSize(50)"` - Content string `form:"content"` - Deadline string `form:"due_date"` -} - -func (f *CreateMilestoneForm) Name(field string) string { - names := map[string]string{ - "Title": "Milestone name", - } - return names[field] -} - -func (f *CreateMilestoneForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} - -// .____ ___. .__ -// | | _____ \_ |__ ____ | | -// | | \__ \ | __ \_/ __ \| | -// | |___ / __ \| \_\ \ ___/| |__ -// |_______ (____ /___ /\___ >____/ -// \/ \/ \/ \/ - -type CreateLabelForm struct { - Title string `form:"title" binding:"Required;MaxSize(50)"` - Color string `form:"color" binding:"Required;Size(7)"` -} - -func (f *CreateLabelForm) Name(field string) string { - names := map[string]string{ - "Title": "Label name", - "Color": "Label color", - } - return names[field] -} - -func (f *CreateLabelForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} - -// __________ .__ -// \______ \ ____ | | ____ _____ ______ ____ -// | _// __ \| | _/ __ \\__ \ / ___// __ \ -// | | \ ___/| |_\ ___/ / __ \_\___ \\ ___/ -// |____|_ /\___ >____/\___ >____ /____ >\___ > -// \/ \/ \/ \/ \/ \/ - -type NewReleaseForm struct { - TagName string `form:"tag_name" binding:"Required"` - Target string `form:"tag_target" binding:"Required"` - Title string `form:"title" binding:"Required"` - Content string `form:"content" binding:"Required"` - Draft string `form:"draft"` - Prerelease bool `form:"prerelease"` -} - -func (f *NewReleaseForm) Name(field string) string { - names := map[string]string{ - "TagName": "Tag name", - "Target": "Target", - "Title": "Release title", - "Content": "Release content", - } - return names[field] -} - -func (f *NewReleaseForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} - -type EditReleaseForm struct { - Target string `form:"tag_target" binding:"Required"` - Title string `form:"title" binding:"Required"` - Content string `form:"content" binding:"Required"` - Draft string `form:"draft"` - Prerelease bool `form:"prerelease"` -} - -func (f *EditReleaseForm) Name(field string) string { - names := map[string]string{ - "Target": "Target", - "Title": "Release title", - "Content": "Release content", - } - return names[field] -} - -func (f *EditReleaseForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} diff --git a/modules/auth/repo_form.go b/modules/auth/repo_form.go new file mode 100644 index 0000000000..11efb24d1c --- /dev/null +++ b/modules/auth/repo_form.go @@ -0,0 +1,165 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package auth + +import ( + "github.com/Unknwon/macaron" + "github.com/macaron-contrib/i18n" + + "github.com/gogits/gogs/modules/middleware/binding" +) + +// _______________________________________ _________.______________________ _______________.___. +// \______ \_ _____/\______ \_____ \ / _____/| \__ ___/\_____ \\______ \__ | | +// | _/| __)_ | ___// | \ \_____ \ | | | | / | \| _// | | +// | | \| \ | | / | \/ \| | | | / | \ | \\____ | +// |____|_ /_______ / |____| \_______ /_______ /|___| |____| \_______ /____|_ // ______| +// \/ \/ \/ \/ \/ \/ \/ + +type CreateRepoForm struct { + Uid int64 `form:"uid" binding:"Required"` + RepoName string `form:"repo_name" binding:"Required;AlphaDash;MaxSize(100)"` + Private bool `form:"private"` + Description string `form:"desc" binding:"MaxSize(255)"` + Gitignore string `form:"gitignore"` + License string `form:"license"` + InitReadme bool `form:"init_readme"` +} + +func (f *CreateRepoForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +type MigrateRepoForm struct { + Url string `form:"url" binding:"Url"` + AuthUserName string `form:"auth_username"` + AuthPasswd string `form:"auth_password"` + Uid int64 `form:"uid" binding:"Required"` + RepoName string `form:"repo" binding:"Required;AlphaDash;MaxSize(100)"` + Mirror bool `form:"mirror"` + Private bool `form:"private"` + Description string `form:"desc" binding:"MaxSize(255)"` +} + +func (f *MigrateRepoForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +type RepoSettingForm struct { + RepoName string `form:"name" binding:"Required;AlphaDash;MaxSize(100)"` + Description string `form:"desc" binding:"MaxSize(255)"` + Website string `form:"site" binding:"Url;MaxSize(100)"` + Branch string `form:"branch"` + Interval int `form:"interval"` + Private bool `form:"private"` + GoGet bool `form:"goget"` +} + +func (f *RepoSettingForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +// __ __ ___. .__ .__ __ +// / \ / \ ____\_ |__ | |__ | |__ ____ | | __ +// \ \/\/ // __ \| __ \| | \| | \ / _ \| |/ / +// \ /\ ___/| \_\ \ Y \ Y ( <_> ) < +// \__/\ / \___ >___ /___| /___| /\____/|__|_ \ +// \/ \/ \/ \/ \/ \/ + +type NewWebhookForm struct { + Url string `form:"url" binding:"Required;Url"` + ContentType string `form:"content_type" binding:"Required"` + Secret string `form:"secret""` + PushOnly bool `form:"push_only"` + Active bool `form:"active"` +} + +func (f *NewWebhookForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +// .___ +// | | ______ ________ __ ____ +// | |/ ___// ___/ | \_/ __ \ +// | |\___ \ \___ \| | /\ ___/ +// |___/____ >____ >____/ \___ > +// \/ \/ \/ + +type CreateIssueForm struct { + IssueName string `form:"title" binding:"Required;MaxSize(50)"` + MilestoneId int64 `form:"milestoneid"` + AssigneeId int64 `form:"assigneeid"` + Labels string `form:"labels"` + Content string `form:"content"` +} + +func (f *CreateIssueForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +// _____ .__.__ __ +// / \ |__| | ____ _______/ |_ ____ ____ ____ +// / \ / \| | | _/ __ \ / ___/\ __\/ _ \ / \_/ __ \ +// / Y \ | |_\ ___/ \___ \ | | ( <_> ) | \ ___/ +// \____|__ /__|____/\___ >____ > |__| \____/|___| /\___ > +// \/ \/ \/ \/ \/ + +type CreateMilestoneForm struct { + Title string `form:"title" binding:"Required;MaxSize(50)"` + Content string `form:"content"` + Deadline string `form:"due_date"` +} + +func (f *CreateMilestoneForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +// .____ ___. .__ +// | | _____ \_ |__ ____ | | +// | | \__ \ | __ \_/ __ \| | +// | |___ / __ \| \_\ \ ___/| |__ +// |_______ (____ /___ /\___ >____/ +// \/ \/ \/ \/ + +type CreateLabelForm struct { + Title string `form:"title" binding:"Required;MaxSize(50)"` + Color string `form:"color" binding:"Required;Size(7)"` +} + +func (f *CreateLabelForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +// __________ .__ +// \______ \ ____ | | ____ _____ ______ ____ +// | _// __ \| | _/ __ \\__ \ / ___// __ \ +// | | \ ___/| |_\ ___/ / __ \_\___ \\ ___/ +// |____|_ /\___ >____/\___ >____ /____ >\___ > +// \/ \/ \/ \/ \/ \/ + +type NewReleaseForm struct { + TagName string `form:"tag_name" binding:"Required"` + Target string `form:"tag_target" binding:"Required"` + Title string `form:"title" binding:"Required"` + Content string `form:"content" binding:"Required"` + Draft string `form:"draft"` + Prerelease bool `form:"prerelease"` +} + +func (f *NewReleaseForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +type EditReleaseForm struct { + Target string `form:"tag_target" binding:"Required"` + Title string `form:"title" binding:"Required"` + Content string `form:"content" binding:"Required"` + Draft string `form:"draft"` + Prerelease bool `form:"prerelease"` +} + +func (f *EditReleaseForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} diff --git a/modules/auth/user.go b/modules/auth/user.go deleted file mode 100644 index dfb969e816..0000000000 --- a/modules/auth/user.go +++ /dev/null @@ -1,299 +0,0 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package auth - -import ( - "net/http" - "reflect" - "strings" - - "github.com/go-martini/martini" - - "github.com/gogits/session" - - "github.com/gogits/gogs/models" - "github.com/gogits/gogs/modules/base" - "github.com/gogits/gogs/modules/log" - "github.com/gogits/gogs/modules/middleware/binding" - "github.com/gogits/gogs/modules/setting" -) - -// Web form interface. -type Form interface { - Name(field string) string -} - -type RegisterForm struct { - UserName string `form:"username" binding:"Required;AlphaDashDot;MaxSize(30)"` - Email string `form:"email" binding:"Required;Email;MaxSize(50)"` - Password string `form:"passwd" binding:"Required;MinSize(6);MaxSize(30)"` - RetypePasswd string `form:"retypepasswd"` - LoginType string `form:"logintype"` - LoginName string `form:"loginname"` -} - -func (f *RegisterForm) Name(field string) string { - names := map[string]string{ - "UserName": "Username", - "Email": "E-mail address", - "Password": "Password", - "RetypePasswd": "Re-type password", - } - return names[field] -} - -func (f *RegisterForm) Validate(errs *binding.Errors, req *http.Request, ctx martini.Context) { - data := ctx.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errs, data, f) -} - -type LogInForm struct { - UserName string `form:"username" binding:"Required;MaxSize(35)"` - Password string `form:"passwd" binding:"Required;MinSize(6);MaxSize(30)"` - Remember bool `form:"remember"` -} - -func (f *LogInForm) Name(field string) string { - names := map[string]string{ - "UserName": "Username", - "Password": "Password", - } - return names[field] -} - -func (f *LogInForm) Validate(errs *binding.Errors, req *http.Request, ctx martini.Context) { - data := ctx.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errs, data, f) -} - -func GetMinMaxSize(field reflect.StructField) string { - for _, rule := range strings.Split(field.Tag.Get("binding"), ";") { - if strings.HasPrefix(rule, "MinSize(") || strings.HasPrefix(rule, "MaxSize(") { - return rule[8 : len(rule)-1] - } - } - return "" -} - -func validate(errs *binding.Errors, data base.TmplData, f Form) { - if errs.Count() == 0 { - return - } else if len(errs.Overall) > 0 { - for _, err := range errs.Overall { - log.Error("%s: %v", reflect.TypeOf(f), err) - } - return - } - - data["HasError"] = true - AssignForm(f, data) - - typ := reflect.TypeOf(f) - val := reflect.ValueOf(f) - - if typ.Kind() == reflect.Ptr { - typ = typ.Elem() - val = val.Elem() - } - - for i := 0; i < typ.NumField(); i++ { - field := typ.Field(i) - - fieldName := field.Tag.Get("form") - // Allow ignored fields in the struct - if fieldName == "-" { - continue - } - - if err, ok := errs.Fields[field.Name]; ok { - data["Err_"+field.Name] = true - switch err { - case binding.BindingRequireError: - data["ErrorMsg"] = f.Name(field.Name) + " cannot be empty" - case binding.BindingAlphaDashError: - data["ErrorMsg"] = f.Name(field.Name) + " must be valid alpha or numeric or dash(-_) characters" - case binding.BindingAlphaDashDotError: - data["ErrorMsg"] = f.Name(field.Name) + " must be valid alpha or numeric or dash(-_) or dot characters" - case binding.BindingMinSizeError: - data["ErrorMsg"] = f.Name(field.Name) + " must contain at least " + GetMinMaxSize(field) + " characters" - case binding.BindingMaxSizeError: - data["ErrorMsg"] = f.Name(field.Name) + " must contain at most " + GetMinMaxSize(field) + " characters" - case binding.BindingEmailError: - data["ErrorMsg"] = f.Name(field.Name) + " is not a valid e-mail address" - case binding.BindingUrlError: - data["ErrorMsg"] = f.Name(field.Name) + " is not a valid URL" - default: - data["ErrorMsg"] = "Unknown error: " + err - } - return - } - } -} - -// AssignForm assign form values back to the template data. -func AssignForm(form interface{}, data base.TmplData) { - typ := reflect.TypeOf(form) - val := reflect.ValueOf(form) - - if typ.Kind() == reflect.Ptr { - typ = typ.Elem() - val = val.Elem() - } - - for i := 0; i < typ.NumField(); i++ { - field := typ.Field(i) - - fieldName := field.Tag.Get("form") - // Allow ignored fields in the struct - if fieldName == "-" { - continue - } - - data[fieldName] = val.Field(i).Interface() - } -} - -type InstallForm struct { - Database string `form:"database" binding:"Required"` - Host string `form:"host"` - User string `form:"user"` - Passwd string `form:"passwd"` - DatabaseName string `form:"database_name"` - SslMode string `form:"ssl_mode"` - DatabasePath string `form:"database_path"` - RepoRootPath string `form:"repo_path"` - RunUser string `form:"run_user"` - Domain string `form:"domain"` - AppUrl string `form:"app_url"` - AdminName string `form:"admin_name" binding:"Required;AlphaDashDot;MaxSize(30)"` - AdminPasswd string `form:"admin_pwd" binding:"Required;MinSize(6);MaxSize(30)"` - AdminEmail string `form:"admin_email" binding:"Required;Email;MaxSize(50)"` - SmtpHost string `form:"smtp_host"` - SmtpEmail string `form:"mailer_user"` - SmtpPasswd string `form:"mailer_pwd"` - RegisterConfirm string `form:"register_confirm"` - MailNotify string `form:"mail_notify"` -} - -func (f *InstallForm) Name(field string) string { - names := map[string]string{ - "Database": "Database name", - "AdminName": "Admin user name", - "AdminPasswd": "Admin password", - "AdminEmail": "Admin e-maill address", - } - return names[field] -} - -func (f *InstallForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { - data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errors, data, f) -} - -// SignedInId returns the id of signed in user. -func SignedInId(header http.Header, sess session.SessionStore) int64 { - if !models.HasEngine { - return 0 - } - - if setting.Service.EnableReverseProxyAuth { - webAuthUser := header.Get(setting.ReverseProxyAuthUser) - if len(webAuthUser) > 0 { - u, err := models.GetUserByName(webAuthUser) - if err != nil { - if err != models.ErrUserNotExist { - log.Error("auth.user.SignedInId(GetUserByName): %v", err) - } - return 0 - } - return u.Id - } - } - - uid := sess.Get("userId") - if uid == nil { - return 0 - } - if id, ok := uid.(int64); ok { - if _, err := models.GetUserById(id); err != nil { - if err != models.ErrUserNotExist { - log.Error("auth.user.SignedInId(GetUserById): %v", err) - } - return 0 - } - return id - } - return 0 -} - -// SignedInUser returns the user object of signed user. -func SignedInUser(header http.Header, sess session.SessionStore) *models.User { - uid := SignedInId(header, sess) - if uid <= 0 { - return nil - } - - u, err := models.GetUserById(uid) - if err != nil { - log.Error("user.SignedInUser: %v", err) - return nil - } - return u -} - -// IsSignedIn check if any user has signed in. -func IsSignedIn(header http.Header, sess session.SessionStore) bool { - return SignedInId(header, sess) > 0 -} - -type FeedsForm struct { - UserId int64 `form:"userid" binding:"Required"` - Page int64 `form:"p"` -} - -type UpdateProfileForm struct { - UserName string `form:"username" binding:"Required;AlphaDash;MaxSize(30)"` - FullName string `form:"fullname" binding:"MaxSize(40)"` - Email string `form:"email" binding:"Required;Email;MaxSize(50)"` - Website string `form:"website" binding:"Url;MaxSize(50)"` - Location string `form:"location" binding:"MaxSize(50)"` - Avatar string `form:"avatar" binding:"Required;Email;MaxSize(50)"` -} - -func (f *UpdateProfileForm) Name(field string) string { - names := map[string]string{ - "UserName": "Username", - "Email": "E-mail address", - "Website": "Website address", - "Location": "Location", - "Avatar": "Gravatar Email", - } - return names[field] -} - -func (f *UpdateProfileForm) Validate(errs *binding.Errors, req *http.Request, ctx martini.Context) { - data := ctx.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errs, data, f) -} - -type UpdatePasswdForm struct { - OldPasswd string `form:"oldpasswd" binding:"Required;MinSize(6);MaxSize(30)"` - NewPasswd string `form:"newpasswd" binding:"Required;MinSize(6);MaxSize(30)"` - RetypePasswd string `form:"retypepasswd"` -} - -func (f *UpdatePasswdForm) Name(field string) string { - names := map[string]string{ - "OldPasswd": "Old password", - "NewPasswd": "New password", - "RetypePasswd": "Re-type password", - } - return names[field] -} - -func (f *UpdatePasswdForm) Validate(errs *binding.Errors, req *http.Request, ctx martini.Context) { - data := ctx.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) - validate(errs, data, f) -} diff --git a/modules/auth/user_form.go b/modules/auth/user_form.go new file mode 100644 index 0000000000..30080e859b --- /dev/null +++ b/modules/auth/user_form.go @@ -0,0 +1,98 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package auth + +import ( + "github.com/Unknwon/macaron" + "github.com/macaron-contrib/i18n" + + "github.com/gogits/gogs/modules/middleware/binding" +) + +type InstallForm struct { + Database string `form:"database" binding:"Required"` + Host string `form:"host"` + User string `form:"user"` + Passwd string `form:"passwd"` + DatabaseName string `form:"database_name"` + SslMode string `form:"ssl_mode"` + DatabasePath string `form:"database_path"` + RepoRootPath string `form:"repo_path"` + RunUser string `form:"run_user"` + Domain string `form:"domain"` + AppUrl string `form:"app_url"` + AdminName string `form:"admin_name" binding:"Required;AlphaDashDot;MaxSize(30)"` + AdminPasswd string `form:"admin_pwd" binding:"Required;MinSize(6);MaxSize(30)"` + AdminEmail string `form:"admin_email" binding:"Required;Email;MaxSize(50)"` + SmtpHost string `form:"smtp_host"` + SmtpEmail string `form:"mailer_user"` + SmtpPasswd string `form:"mailer_pwd"` + RegisterConfirm string `form:"register_confirm"` + MailNotify string `form:"mail_notify"` +} + +func (f *InstallForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +// _____ ____ _________________ ___ +// / _ \ | | \__ ___/ | \ +// / /_\ \| | / | | / ~ \ +// / | \ | / | | \ Y / +// \____|__ /______/ |____| \___|_ / +// \/ \/ + +type RegisterForm struct { + UserName string `form:"uname" binding:"Required;AlphaDashDot;MaxSize(35)"` + Email string `form:"email" binding:"Required;Email;MaxSize(50)"` + Password string `form:"password" binding:"Required;MinSize(6);MaxSize(30)"` + Retype string `form:"retype"` + LoginType string `form:"logintype"` + LoginName string `form:"loginname"` +} + +func (f *RegisterForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +type SignInForm struct { + UserName string `form:"uname" binding:"Required;MaxSize(35)"` + Password string `form:"password" binding:"Required;MinSize(6);MaxSize(30)"` + Remember bool `form:"remember"` +} + +func (f *SignInForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +// __________________________________________.___ _______ ________ _________ +// / _____/\_ _____/\__ ___/\__ ___/| |\ \ / _____/ / _____/ +// \_____ \ | __)_ | | | | | |/ | \/ \ ___ \_____ \ +// / \ | \ | | | | | / | \ \_\ \/ \ +// /_______ //_______ / |____| |____| |___\____|__ /\______ /_______ / +// \/ \/ \/ \/ \/ + +type UpdateProfileForm struct { + UserName string `form:"uname" binding:"Required;MaxSize(35)"` + FullName string `form:"fullname" binding:"MaxSize(40)"` + Email string `form:"email" binding:"Required;Email;MaxSize(50)"` + Website string `form:"website" binding:"Url;MaxSize(50)"` + Location string `form:"location" binding:"MaxSize(50)"` + Avatar string `form:"avatar" binding:"Required;Email;MaxSize(50)"` +} + +func (f *UpdateProfileForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} + +type ChangePasswordForm struct { + OldPassword string `form:"old_password" binding:"Required;MinSize(6);MaxSize(30)"` + Password string `form:"password" binding:"Required;MinSize(6);MaxSize(30)"` + Retype string `form:"retype"` +} + +func (f *ChangePasswordForm) Validate(ctx *macaron.Context, errs *binding.Errors, l i18n.Locale) { + validate(errs, ctx.Data, f, l) +} diff --git a/modules/base/base.go b/modules/base/base.go index 570600c3d4..cb51478292 100644 --- a/modules/base/base.go +++ b/modules/base/base.go @@ -5,9 +5,7 @@ package base type ( - // Type TmplData represents data in the templates. - TmplData map[string]interface{} - TplName string + TplName string ApiJsonErr struct { Message string `json:"message"` diff --git a/modules/base/template.go b/modules/base/template.go index 8df8d82498..7589fdaafb 100644 --- a/modules/base/template.go +++ b/modules/base/template.go @@ -51,7 +51,7 @@ var mailDomains = map[string]string{ var TemplateFuncs template.FuncMap = map[string]interface{}{ "GoVer": func() string { - return runtime.Version() + return strings.Title(runtime.Version()) }, "AppName": func() string { return setting.AppName @@ -69,7 +69,8 @@ var TemplateFuncs template.FuncMap = map[string]interface{}{ return fmt.Sprint(time.Since(startTime).Nanoseconds()/1e6) + "ms" }, "AvatarLink": AvatarLink, - "str2html": Str2html, + "str2html": Str2html, // TODO: Legacy + "Str2html": Str2html, "TimeSince": TimeSince, "FileSize": FileSize, "Subtract": Subtract, @@ -98,10 +99,14 @@ var TemplateFuncs template.FuncMap = map[string]interface{}{ "DiffTypeToStr": DiffTypeToStr, "DiffLineTypeToStr": DiffLineTypeToStr, "ShortSha": ShortSha, - "Oauth2Icon": Oauth2Icon, - "Oauth2Name": Oauth2Name, + "Md5": EncodeMd5, + "ActionContent2Commits": ActionContent2Commits, + "Oauth2Icon": Oauth2Icon, + "Oauth2Name": Oauth2Name, + "CreateCaptcha": func() string { return "" }, } +// TODO: Legacy type Actioner interface { GetOpType() int GetActUserName() string @@ -117,11 +122,11 @@ type Actioner interface { func ActionIcon(opType int) string { switch opType { case 1: // Create repository. - return "plus-circle" + return "repo" case 5, 9: // Commit repository. - return "arrow-circle-o-right" + return "git-commit" case 6: // Create issue. - return "exclamation-circle" + return "issue-opened" case 8: // Transfer repository. return "share" case 10: // Comment issue. @@ -131,6 +136,7 @@ func ActionIcon(opType int) string { } } +// TODO: Legacy const ( TPL_CREATE_REPO = `%s created repository %s` TPL_COMMIT_REPO = `%s pushed to %s at %s%s` @@ -155,6 +161,15 @@ type PushCommits struct { Commits []*PushCommit } +func ActionContent2Commits(act Actioner) *PushCommits { + var push *PushCommits + if err := json.Unmarshal([]byte(act.GetContent()), &push); err != nil { + return nil + } + return push +} + +// TODO: Legacy // ActionDesc accepts int that represents action operation type // and returns the description. func ActionDesc(act Actioner) string { diff --git a/modules/base/tool.go b/modules/base/tool.go index 9635f13e0f..830c37f697 100644 --- a/modules/base/tool.go +++ b/modules/base/tool.go @@ -13,10 +13,13 @@ import ( "fmt" "hash" "math" - "strconv" + r "math/rand" "strings" "time" + "github.com/Unknwon/com" + "github.com/Unknwon/i18n" + "github.com/gogits/gogs/modules/setting" ) @@ -42,6 +45,33 @@ func GetRandomString(n int, alphabets ...byte) string { return string(bytes) } +// RandomCreateBytes generate random []byte by specify chars. +func RandomCreateBytes(n int, alphabets ...byte) []byte { + const alphanum = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + var bytes = make([]byte, n) + var randby bool + if num, err := rand.Read(bytes); num != n || err != nil { + r.Seed(time.Now().UnixNano()) + randby = true + } + for i, b := range bytes { + if len(alphabets) == 0 { + if randby { + bytes[i] = alphanum[r.Intn(len(alphanum))] + } else { + bytes[i] = alphanum[b%byte(len(alphanum))] + } + } else { + if randby { + bytes[i] = alphabets[r.Intn(len(alphabets))] + } else { + bytes[i] = alphabets[b%byte(len(alphabets))] + } + } + } + return bytes +} + // http://code.google.com/p/go/source/browse/pbkdf2/pbkdf2.go?repo=crypto func PBKDF2(password, salt []byte, iter, keyLen int, h func() hash.Hash) []byte { prf := hmac.New(h, password) @@ -89,7 +119,7 @@ func VerifyTimeLimitCode(data string, minutes int, code string) bool { // split code start := code[:12] lives := code[12:18] - if d, err := StrTo(lives).Int(); err == nil { + if d, err := com.StrTo(lives).Int(); err == nil { minutes = d } @@ -133,7 +163,7 @@ func CreateTimeLimitCode(data string, minutes int, startInf interface{}) string // create sha1 encode string sh := sha1.New() - sh.Write([]byte(data + setting.SecretKey + startStr + endStr + ToStr(minutes))) + sh.Write([]byte(data + setting.SecretKey + startStr + endStr + com.ToStr(minutes))) encoded := hex.EncodeToString(sh.Sum(nil)) code := fmt.Sprintf("%s%06d%s", startStr, minutes, encoded) @@ -240,53 +270,53 @@ func TimeSincePro(then time.Time) string { } // TimeSince calculates the time interval and generate user-friendly string. -func TimeSince(then time.Time) string { +func TimeSince(then time.Time, lang string) string { now := time.Now() - lbl := "ago" + lbl := i18n.Tr(lang, "tool.ago") diff := now.Unix() - then.Unix() if then.After(now) { - lbl = "from now" + lbl = i18n.Tr(lang, "tool.from_now") diff = then.Unix() - now.Unix() } switch { case diff <= 0: - return "now" + return i18n.Tr(lang, "tool.now") case diff <= 2: - return fmt.Sprintf("1 second %s", lbl) + return i18n.Tr(lang, "tool.1s", lbl) case diff < 1*Minute: - return fmt.Sprintf("%d seconds %s", diff, lbl) + return i18n.Tr(lang, "tool.seconds", diff, lbl) case diff < 2*Minute: - return fmt.Sprintf("1 minute %s", lbl) + return i18n.Tr(lang, "tool.1m", lbl) case diff < 1*Hour: - return fmt.Sprintf("%d minutes %s", diff/Minute, lbl) + return i18n.Tr(lang, "tool.minutes", diff/Minute, lbl) case diff < 2*Hour: - return fmt.Sprintf("1 hour %s", lbl) + return i18n.Tr(lang, "tool.1h", lbl) case diff < 1*Day: - return fmt.Sprintf("%d hours %s", diff/Hour, lbl) + return i18n.Tr(lang, "tool.hours", diff/Hour, lbl) case diff < 2*Day: - return fmt.Sprintf("1 day %s", lbl) + return i18n.Tr(lang, "tool.1d", lbl) case diff < 1*Week: - return fmt.Sprintf("%d days %s", diff/Day, lbl) + return i18n.Tr(lang, "tool.days", diff/Day, lbl) case diff < 2*Week: - return fmt.Sprintf("1 week %s", lbl) + return i18n.Tr(lang, "tool.1w", lbl) case diff < 1*Month: - return fmt.Sprintf("%d weeks %s", diff/Week, lbl) + return i18n.Tr(lang, "tool.weeks", diff/Week, lbl) case diff < 2*Month: - return fmt.Sprintf("1 month %s", lbl) + return i18n.Tr(lang, "tool.1mon", lbl) case diff < 1*Year: - return fmt.Sprintf("%d months %s", diff/Month, lbl) + return i18n.Tr(lang, "tool.months", diff/Month, lbl) case diff < 2*Year: - return fmt.Sprintf("1 year %s", lbl) + return i18n.Tr(lang, "tool.1y", lbl) default: - return fmt.Sprintf("%d years %s", diff/Year, lbl) + return i18n.Tr(lang, "tool.years", diff/Year, lbl) } } @@ -439,88 +469,3 @@ func DateFormat(t time.Time, format string) string { format = replacer.Replace(format) return t.Format(format) } - -// convert string to specify type - -type StrTo string - -func (f StrTo) Exist() bool { - return string(f) != string(0x1E) -} - -func (f StrTo) Int() (int, error) { - v, err := strconv.ParseInt(f.String(), 10, 32) - return int(v), err -} - -func (f StrTo) Int64() (int64, error) { - v, err := strconv.ParseInt(f.String(), 10, 64) - return int64(v), err -} - -func (f StrTo) MustInt() int { - v, _ := f.Int() - return v -} - -func (f StrTo) MustInt64() int64 { - v, _ := f.Int64() - return v -} - -func (f StrTo) String() string { - if f.Exist() { - return string(f) - } - return "" -} - -// convert any type to string -func ToStr(value interface{}, args ...int) (s string) { - switch v := value.(type) { - case bool: - s = strconv.FormatBool(v) - case float32: - s = strconv.FormatFloat(float64(v), 'f', argInt(args).Get(0, -1), argInt(args).Get(1, 32)) - case float64: - s = strconv.FormatFloat(v, 'f', argInt(args).Get(0, -1), argInt(args).Get(1, 64)) - case int: - s = strconv.FormatInt(int64(v), argInt(args).Get(0, 10)) - case int8: - s = strconv.FormatInt(int64(v), argInt(args).Get(0, 10)) - case int16: - s = strconv.FormatInt(int64(v), argInt(args).Get(0, 10)) - case int32: - s = strconv.FormatInt(int64(v), argInt(args).Get(0, 10)) - case int64: - s = strconv.FormatInt(v, argInt(args).Get(0, 10)) - case uint: - s = strconv.FormatUint(uint64(v), argInt(args).Get(0, 10)) - case uint8: - s = strconv.FormatUint(uint64(v), argInt(args).Get(0, 10)) - case uint16: - s = strconv.FormatUint(uint64(v), argInt(args).Get(0, 10)) - case uint32: - s = strconv.FormatUint(uint64(v), argInt(args).Get(0, 10)) - case uint64: - s = strconv.FormatUint(v, argInt(args).Get(0, 10)) - case string: - s = v - case []byte: - s = string(v) - default: - s = fmt.Sprintf("%v", v) - } - return s -} - -type argInt []int - -func (a argInt) Get(i int, args ...int) (r int) { - if i >= 0 && i < len(a) { - r = a[i] - } else if len(args) > 0 { - r = args[0] - } - return -} diff --git a/modules/bin/conf.go b/modules/bin/conf.go deleted file mode 100644 index fa0822d732..0000000000 --- a/modules/bin/conf.go +++ /dev/null @@ -1,3623 +0,0 @@ -package bin - -import ( - "bytes" - "compress/gzip" - "fmt" - "io" - "strings" -) - -func bindata_read(data []byte, name string) ([]byte, error) { - gz, err := gzip.NewReader(bytes.NewBuffer(data)) - if err != nil { - return nil, fmt.Errorf("Read %q: %v", name, err) - } - - var buf bytes.Buffer - _, err = io.Copy(&buf, gz) - gz.Close() - - if err != nil { - return nil, fmt.Errorf("Read %q: %v", name, err) - } - - return buf.Bytes(), nil -} - -func conf_app_ini() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0xb4, 0x59, - 0xeb, 0x72, 0xdb, 0xc8, 0x95, 0xfe, 0x8f, 0xa7, 0x68, 0x73, 0x67, 0x76, - 0xec, 0x2d, 0x89, 0xa4, 0xe4, 0xb5, 0xec, 0x91, 0xc7, 0xb5, 0xa6, 0x48, - 0x50, 0xc2, 0x9a, 0x17, 0x0d, 0x00, 0xc9, 0xa3, 0xb8, 0x54, 0x28, 0x08, - 0x68, 0x92, 0x1d, 0x01, 0x68, 0x08, 0xdd, 0x14, 0xc5, 0xfc, 0xcb, 0x2b, - 0xa4, 0xf2, 0x34, 0x79, 0x9e, 0xfc, 0xc8, 0x63, 0xe4, 0x3b, 0x0d, 0x80, - 0x02, 0x65, 0x8e, 0xc6, 0xb9, 0x55, 0x52, 0x16, 0xd1, 0xdd, 0xe7, 0xf4, - 0xb9, 0x7c, 0xe7, 0xd6, 0xf3, 0x9e, 0xf5, 0xf2, 0x9c, 0x65, 0x61, 0xca, - 0x99, 0x5e, 0x84, 0x9a, 0xa9, 0x85, 0x5c, 0x29, 0x26, 0x33, 0xc6, 0xef, - 0x79, 0xb1, 0x66, 0x79, 0x38, 0xc7, 0x86, 0xd0, 0x09, 0xb7, 0x7a, 0xe7, - 0xe7, 0xc1, 0xa4, 0x37, 0xb6, 0xd9, 0x07, 0x76, 0x2a, 0xe7, 0xea, 0x18, - 0xff, 0xb2, 0x53, 0xa1, 0x99, 0xc7, 0x8b, 0x7b, 0x11, 0x95, 0xfb, 0xa3, - 0xe9, 0xe9, 0x14, 0xfb, 0x22, 0x9d, 0x77, 0x66, 0x21, 0x56, 0x65, 0xd6, - 0xce, 0xb3, 0xb9, 0xf5, 0x9e, 0xf5, 0x17, 0x61, 0x06, 0x4e, 0x38, 0x2e, - 0x66, 0x6c, 0x2d, 0x97, 0xac, 0x58, 0x66, 0x2c, 0x91, 0x51, 0x98, 0x24, - 0x6b, 0xcb, 0xbd, 0x98, 0x04, 0x17, 0x9e, 0xed, 0x82, 0x72, 0x2e, 0x34, - 0x4e, 0xdb, 0x42, 0x2f, 0x78, 0xc1, 0x5a, 0x31, 0xbf, 0x6f, 0xed, 0xb1, - 0x56, 0x5e, 0xc8, 0xb8, 0xc5, 0x24, 0x16, 0x34, 0x57, 0x1a, 0x2b, 0x31, - 0x9f, 0x85, 0xcb, 0x04, 0xbc, 0x54, 0x79, 0xc6, 0x70, 0x18, 0x4f, 0x07, - 0x24, 0x1b, 0xbe, 0x2d, 0xeb, 0x4b, 0xc1, 0x73, 0xa9, 0x84, 0x96, 0xc5, - 0xfa, 0xda, 0x72, 0xa7, 0x53, 0x1f, 0x1b, 0x96, 0xd7, 0x77, 0x9d, 0x73, - 0x3f, 0xf0, 0xaf, 0xce, 0xe9, 0xdc, 0x4d, 0xa8, 0x16, 0x38, 0xa8, 0x20, - 0x3d, 0x2f, 0xae, 0xad, 0x73, 0x77, 0xea, 0x4f, 0xfb, 0xd3, 0x11, 0x76, - 0x16, 0x5a, 0xe7, 0xd6, 0x60, 0x3a, 0xee, 0x39, 0x13, 0x7c, 0x19, 0x21, - 0x17, 0x52, 0x69, 0xc3, 0x27, 0xb8, 0x70, 0xe9, 0xc8, 0xf7, 0x2f, 0xeb, - 0xf3, 0xaf, 0xd4, 0x71, 0xa7, 0xf3, 0xfd, 0xcb, 0xf2, 0x38, 0x3e, 0xbe, - 0x7f, 0x79, 0xe6, 0xfb, 0xe7, 0xc1, 0xf9, 0xd4, 0xf5, 0x5f, 0xa9, 0x8e, - 0x65, 0x3e, 0x7a, 0x83, 0x01, 0xe9, 0x66, 0x6d, 0x76, 0xf0, 0xf1, 0xba, - 0xdb, 0xed, 0x5a, 0x9e, 0x77, 0x56, 0x7f, 0x1f, 0x1e, 0x42, 0xef, 0x81, - 0x50, 0xe1, 0x4d, 0xc2, 0x59, 0x7f, 0x30, 0x21, 0xfb, 0x67, 0x4c, 0x64, - 0xb5, 0xf6, 0xa9, 0x8c, 0xb9, 0x35, 0x1d, 0x0e, 0x47, 0xce, 0xc4, 0xae, - 0x55, 0x9d, 0x85, 0x89, 0xe2, 0xd6, 0xc0, 0xf1, 0x7a, 0x27, 0x23, 0x3b, - 0x70, 0xa7, 0x17, 0xbe, 0xed, 0x92, 0x0b, 0x36, 0x5b, 0xef, 0xd9, 0x29, - 0xcf, 0x78, 0x11, 0x6a, 0xce, 0x94, 0xe6, 0xb9, 0x3a, 0xc6, 0xca, 0x77, - 0x2c, 0x8a, 0xe1, 0x56, 0xbd, 0xe8, 0x68, 0xd9, 0x99, 0xc3, 0x91, 0x9d, - 0x68, 0xa9, 0xb4, 0x4c, 0x3b, 0xa4, 0xb6, 0x32, 0x07, 0xe6, 0xd2, 0xb8, - 0xe7, 0xbb, 0xd3, 0x29, 0xa9, 0xdc, 0x51, 0x45, 0xd4, 0xc9, 0x6f, 0xe7, - 0x9d, 0xa8, 0x58, 0xe7, 0xa0, 0xd1, 0x89, 0xea, 0xcc, 0x2b, 0xb6, 0x41, - 0xc4, 0x0b, 0xdd, 0xc6, 0xf9, 0xfd, 0x28, 0xfc, 0xa0, 0x8b, 0x25, 0x67, - 0xfb, 0xf1, 0x12, 0x1b, 0x42, 0x66, 0x1f, 0xde, 0xbd, 0x3d, 0xea, 0x2e, - 0xba, 0x69, 0x57, 0xb1, 0x7d, 0x32, 0xdf, 0x87, 0x74, 0x4d, 0x7f, 0xda, - 0xfc, 0x21, 0x4c, 0xf3, 0x84, 0xb7, 0x23, 0x99, 0x5a, 0x7d, 0xdb, 0xf5, - 0x83, 0xa1, 0x33, 0x22, 0x65, 0x9a, 0x52, 0x74, 0x0c, 0xdb, 0x9c, 0xa7, - 0xd6, 0x27, 0xfb, 0x6a, 0xe7, 0x81, 0x5b, 0xbe, 0x36, 0xfb, 0xef, 0xd9, - 0x45, 0x9e, 0x03, 0x2a, 0x09, 0xcc, 0x95, 0x30, 0x39, 0x63, 0x9a, 0x83, - 0x3b, 0x29, 0x1c, 0x66, 0x31, 0x94, 0x86, 0x28, 0x11, 0x9b, 0x09, 0xd8, - 0x94, 0x54, 0xc6, 0xf1, 0x06, 0x74, 0x80, 0x31, 0xb3, 0xca, 0x56, 0x00, - 0x1b, 0x37, 0xa0, 0xa6, 0x65, 0xfe, 0xc0, 0xa3, 0xa5, 0xe6, 0xb1, 0xe5, - 0xf9, 0x3d, 0xdf, 0xe9, 0x07, 0xc6, 0xed, 0xe7, 0x3d, 0xff, 0x8c, 0x5c, - 0x68, 0x7d, 0x89, 0x43, 0x1d, 0x02, 0x3b, 0xfc, 0xba, 0x81, 0xd3, 0x74, - 0xad, 0xee, 0x12, 0x83, 0x54, 0x68, 0x38, 0x2f, 0xb8, 0x2a, 0xd1, 0x8a, - 0x45, 0xa1, 0xf9, 0x6b, 0x6c, 0x08, 0xfd, 0x83, 0x22, 0xd8, 0x17, 0x2c, - 0x5a, 0x48, 0x0a, 0x96, 0xc1, 0x49, 0x8d, 0x43, 0x43, 0x6b, 0x9d, 0x4d, - 0x3d, 0x42, 0xc1, 0xc1, 0xe1, 0xdb, 0x76, 0x17, 0xff, 0x3b, 0x38, 0x7e, - 0xfd, 0xba, 0x7b, 0x64, 0x55, 0xe1, 0x46, 0x5e, 0xb2, 0xaa, 0x00, 0x29, - 0xa4, 0xd4, 0xd6, 0x79, 0xcf, 0xf3, 0x3e, 0x0f, 0xd8, 0x07, 0x88, 0x30, - 0xa4, 0x8b, 0x1a, 0xd7, 0x66, 0xc9, 0x7a, 0x8f, 0xf1, 0x3a, 0x7e, 0x4a, - 0x3c, 0x91, 0x64, 0x05, 0xbf, 0x5b, 0x8a, 0x82, 0x97, 0x82, 0x01, 0xf1, - 0x62, 0xb6, 0xde, 0x9f, 0x2d, 0x93, 0xa4, 0x05, 0x10, 0x8e, 0x36, 0xb1, - 0x53, 0x9e, 0xaf, 0xd9, 0xd6, 0xf2, 0x1b, 0xae, 0x56, 0x65, 0x02, 0xd2, - 0xdf, 0xe0, 0xa6, 0x1d, 0xdf, 0xc0, 0x1c, 0x61, 0x9c, 0x8a, 0xec, 0xda, - 0x04, 0x52, 0xb4, 0x2c, 0x84, 0x46, 0xbc, 0x39, 0x13, 0x58, 0x6e, 0x34, - 0x02, 0x12, 0xfb, 0x9f, 0x1a, 0x50, 0x7c, 0xf1, 0xa2, 0x7f, 0xd6, 0x9b, - 0x9c, 0xda, 0xcc, 0x3f, 0x73, 0x3c, 0xe6, 0x4f, 0xd9, 0x27, 0xdb, 0x3e, - 0x67, 0x57, 0xd3, 0x0b, 0x97, 0x19, 0xdd, 0x06, 0x3d, 0xbf, 0xc7, 0xbc, - 0xde, 0xd0, 0x7e, 0xf1, 0xc2, 0xf2, 0xec, 0xbe, 0x6b, 0xfb, 0x01, 0xbc, - 0x0f, 0x06, 0x2f, 0xfe, 0xeb, 0xe3, 0x70, 0x60, 0x7f, 0x76, 0xf1, 0xff, - 0xff, 0xfe, 0x9f, 0x97, 0xe0, 0xd4, 0x5b, 0x6a, 0xb9, 0x9f, 0xc8, 0x39, - 0xa2, 0xa3, 0xe0, 0x29, 0x4f, 0x6f, 0xa0, 0x6b, 0x1c, 0xae, 0x95, 0x05, - 0xec, 0x3b, 0x93, 0xc0, 0xb5, 0xc7, 0xf6, 0xf8, 0x04, 0xa1, 0x30, 0xe8, - 0x5d, 0x79, 0xa0, 0x7f, 0x6b, 0xf5, 0xa7, 0xd3, 0x4f, 0x8e, 0x6d, 0x72, - 0x4c, 0xc3, 0xa4, 0x41, 0xb8, 0xe2, 0x4a, 0xa6, 0xbc, 0xde, 0xde, 0xd0, - 0x35, 0xcf, 0x88, 0x2c, 0x2a, 0x78, 0x2c, 0x4a, 0xab, 0xb8, 0x94, 0x14, - 0x15, 0x50, 0x53, 0xc8, 0x87, 0x35, 0x0b, 0x97, 0xb0, 0x72, 0x06, 0x80, - 0x19, 0xbc, 0xb3, 0x05, 0x0f, 0x63, 0x08, 0x62, 0x52, 0x29, 0x80, 0xb8, - 0x54, 0xd5, 0x87, 0xe5, 0xda, 0x97, 0xb6, 0xeb, 0xd9, 0x01, 0x52, 0xc6, - 0x2f, 0x57, 0x41, 0xef, 0xc2, 0x3f, 0xb3, 0x27, 0x00, 0x16, 0xc0, 0x35, - 0xdd, 0xe4, 0xbd, 0x5f, 0xf6, 0x3f, 0xdb, 0x27, 0xb4, 0xb5, 0x4f, 0x0b, - 0x55, 0x5e, 0x02, 0x50, 0xae, 0xad, 0x5e, 0xdf, 0x77, 0x2e, 0xed, 0xa0, - 0x0f, 0x0f, 0x05, 0x23, 0xfa, 0x35, 0x76, 0x26, 0x08, 0x74, 0x52, 0xec, - 0xe0, 0x5d, 0x17, 0xcc, 0x3d, 0x9b, 0xe0, 0x49, 0x80, 0xf8, 0xd5, 0x43, - 0x88, 0x12, 0x23, 0x0d, 0xe7, 0x31, 0xd3, 0x92, 0x21, 0x2d, 0xcf, 0x44, - 0x91, 0x32, 0xbe, 0x9f, 0x86, 0x22, 0x61, 0x33, 0xf8, 0xba, 0xe0, 0x73, - 0xa1, 0x74, 0x19, 0xb9, 0xe0, 0x79, 0xea, 0x78, 0x94, 0x4b, 0x6c, 0x24, - 0xb5, 0x11, 0xb8, 0x4e, 0x86, 0x8e, 0x3b, 0x6e, 0xb8, 0x72, 0x20, 0xb9, - 0x62, 0x99, 0xd4, 0x0c, 0xe9, 0x5b, 0xae, 0x2a, 0x62, 0x5c, 0x40, 0x31, - 0x67, 0x00, 0xc1, 0x60, 0x34, 0x13, 0x84, 0x51, 0x24, 0x97, 0x99, 0x2e, - 0x01, 0xb4, 0x49, 0x54, 0x86, 0xbd, 0x6b, 0xf4, 0x6f, 0x30, 0x35, 0x22, - 0xa6, 0x08, 0x72, 0xa6, 0xc4, 0xdc, 0xa4, 0x3e, 0x88, 0x7a, 0x2f, 0xf8, - 0x0a, 0x6c, 0xd7, 0x7a, 0x21, 0xb2, 0x79, 0x1b, 0x92, 0xfd, 0x7c, 0xe1, - 0xb8, 0x76, 0xe0, 0x39, 0xa7, 0x13, 0x78, 0xfa, 0xd2, 0xb1, 0x3f, 0x37, - 0x38, 0xf4, 0xc3, 0x08, 0x21, 0x1d, 0xde, 0x03, 0xa1, 0x90, 0x45, 0xb1, - 0x5c, 0x44, 0x7a, 0x59, 0x70, 0xcb, 0x9e, 0x98, 0x7b, 0xfb, 0xbd, 0xfe, - 0x99, 0x1d, 0xf4, 0x2e, 0x81, 0x33, 0xb7, 0x41, 0x35, 0x26, 0x1b, 0x40, - 0x19, 0x31, 0xab, 0x3c, 0x59, 0x9f, 0x9f, 0x4c, 0x7d, 0x67, 0x78, 0x15, - 0x90, 0x0d, 0x9a, 0xc7, 0x25, 0x72, 0x45, 0xcc, 0x35, 0xa8, 0x8e, 0x4d, - 0xa9, 0xa0, 0x02, 0x80, 0xb2, 0xb5, 0x58, 0xde, 0x50, 0x4e, 0xa3, 0xd0, - 0x10, 0x5a, 0x95, 0x99, 0x55, 0x28, 0xb5, 0xe4, 0xaa, 0x73, 0x70, 0xf4, - 0xa6, 0xe6, 0xf9, 0x1c, 0x16, 0x36, 0x97, 0x58, 0x5f, 0x56, 0xfc, 0x66, - 0x21, 0xe5, 0x2d, 0xe5, 0x98, 0x7e, 0x01, 0x6c, 0xe9, 0x50, 0xdd, 0xc2, - 0x22, 0xb0, 0xf1, 0x7d, 0x98, 0x90, 0x69, 0x60, 0x63, 0xe4, 0x28, 0x65, - 0xf9, 0x3d, 0xef, 0x53, 0xe0, 0x4c, 0xe0, 0xac, 0xcb, 0x1e, 0x49, 0x79, - 0x40, 0xde, 0xe1, 0x89, 0x00, 0x4e, 0x51, 0xb6, 0x53, 0x2e, 0x97, 0x9a, - 0x8e, 0x23, 0x38, 0x65, 0x16, 0x2b, 0x6b, 0x60, 0x13, 0x3a, 0xdc, 0xc0, - 0x77, 0xc6, 0x36, 0xca, 0x05, 0x08, 0xde, 0xe0, 0x36, 0x42, 0x01, 0xd5, - 0xc0, 0x52, 0xc6, 0x41, 0x43, 0xd9, 0x93, 0xe5, 0x6c, 0x66, 0xb2, 0x6b, - 0x36, 0x47, 0x9e, 0x04, 0xaa, 0x23, 0xd4, 0xf1, 0x8c, 0x27, 0x7b, 0xec, - 0x96, 0xf3, 0x9c, 0xca, 0x39, 0xcc, 0x2c, 0x4c, 0x36, 0xad, 0xea, 0x7a, - 0x2c, 0xb3, 0x1f, 0x34, 0xbb, 0xcd, 0x00, 0x8b, 0x15, 0xf5, 0x13, 0x66, - 0xb3, 0x8d, 0x80, 0x9e, 0x0c, 0x82, 0x93, 0x8b, 0xe1, 0x90, 0x2a, 0x94, - 0x4d, 0xaa, 0x1e, 0x10, 0x2c, 0x27, 0x14, 0x2c, 0xc8, 0x3a, 0x48, 0xd9, - 0x6b, 0x60, 0x93, 0x14, 0x23, 0x6f, 0x94, 0x0d, 0x87, 0x77, 0x71, 0xf2, - 0xff, 0x76, 0xdf, 0x37, 0xe5, 0xb6, 0x6e, 0x3e, 0x5e, 0xa9, 0xda, 0x63, - 0x65, 0xe1, 0xa6, 0x12, 0x97, 0x1a, 0x57, 0xa8, 0x54, 0xe7, 0xed, 0x39, - 0xfd, 0x26, 0x37, 0x1c, 0xbf, 0x79, 0xf7, 0x16, 0x7b, 0x3f, 0xff, 0x5c, - 0x6d, 0xdc, 0xdd, 0x99, 0xd5, 0xc3, 0x37, 0x75, 0xa6, 0xad, 0xd9, 0xcc, - 0x0a, 0x99, 0x02, 0xb3, 0x31, 0xb2, 0xa7, 0xb2, 0x86, 0xee, 0x74, 0xfc, - 0xb8, 0x07, 0xc5, 0x37, 0x41, 0x6c, 0xa0, 0x9d, 0x87, 0x4a, 0xad, 0x64, - 0x11, 0xd7, 0xb9, 0x78, 0x93, 0x87, 0xa9, 0x2e, 0x48, 0x4a, 0x07, 0x5f, - 0xdb, 0xb0, 0xda, 0x68, 0x97, 0x08, 0xf9, 0x7a, 0xbf, 0x3f, 0x72, 0x80, - 0x80, 0xc0, 0x31, 0x5c, 0xaa, 0x8f, 0x32, 0xfb, 0x95, 0x2d, 0xcb, 0xf4, - 0xdc, 0x44, 0x71, 0x0d, 0xb4, 0x30, 0x17, 0xed, 0x06, 0xd8, 0x48, 0x3e, - 0x8b, 0x50, 0x54, 0xf5, 0x25, 0x3b, 0xf0, 0x68, 0xf2, 0x64, 0xc7, 0x08, - 0xd1, 0xa1, 0x7f, 0x64, 0x21, 0xfe, 0xc0, 0x2d, 0x7f, 0xfa, 0xc9, 0x9e, - 0x7c, 0x23, 0x51, 0x14, 0xc1, 0x36, 0x81, 0x96, 0xb7, 0x3c, 0xb3, 0x4c, - 0x4b, 0xa1, 0x59, 0x94, 0x08, 0x64, 0x3e, 0x26, 0xe2, 0xb2, 0xcc, 0x72, - 0x84, 0xbb, 0x36, 0xa6, 0xc4, 0x7e, 0xcd, 0x0e, 0x88, 0x53, 0x12, 0x85, - 0x3e, 0xa6, 0xd2, 0x2c, 0x51, 0xa4, 0x15, 0x1a, 0x05, 0x39, 0x2f, 0x4b, - 0x7f, 0x07, 0x29, 0xf4, 0xf7, 0x3c, 0xd2, 0x1b, 0xf3, 0x98, 0x9d, 0x7f, - 0xd9, 0x3c, 0xab, 0xd5, 0xaa, 0x62, 0x05, 0x43, 0x29, 0x73, 0x91, 0xd1, - 0x81, 0xec, 0x24, 0xb2, 0x99, 0x6c, 0x73, 0x83, 0xaf, 0x6f, 0x3e, 0x0e, - 0x29, 0xa9, 0x79, 0xd8, 0x65, 0xe2, 0x2a, 0xb5, 0x6d, 0x29, 0x25, 0x4b, - 0x93, 0x1d, 0x1a, 0x2e, 0x3b, 0x6d, 0xfc, 0x2c, 0x55, 0x65, 0xe2, 0xca, - 0x24, 0x77, 0x77, 0xff, 0xb4, 0x39, 0x90, 0x96, 0x0d, 0xf8, 0xd9, 0x5f, - 0xff, 0xf2, 0xa7, 0xbf, 0xfd, 0xf1, 0xcf, 0x54, 0x32, 0x77, 0x60, 0xa4, - 0x08, 0xf3, 0x45, 0x15, 0x18, 0x95, 0x04, 0xed, 0x6e, 0x03, 0x22, 0xef, - 0xd9, 0x4e, 0x90, 0xec, 0xa4, 0x2a, 0x25, 0x07, 0x05, 0xcf, 0x22, 0x02, - 0xc6, 0x8a, 0x8b, 0x1b, 0xb9, 0xcb, 0x6a, 0xc0, 0x41, 0xd6, 0xd6, 0x35, - 0x7d, 0x34, 0x17, 0xfb, 0x37, 0x35, 0xd0, 0x0e, 0x7f, 0x03, 0x9e, 0xcf, - 0x93, 0x6e, 0x81, 0xb4, 0xb2, 0xa0, 0x5e, 0x09, 0xad, 0x77, 0x25, 0xb6, - 0x7f, 0xc0, 0x8c, 0xbb, 0x3c, 0x8f, 0x18, 0xac, 0x58, 0x3f, 0x5a, 0xe1, - 0x37, 0x84, 0xff, 0x15, 0x9a, 0x5d, 0x52, 0x1b, 0xdb, 0xfd, 0x27, 0x64, - 0x36, 0x8c, 0x1b, 0x7e, 0xfb, 0x06, 0x91, 0xbf, 0x26, 0xd9, 0x96, 0x38, - 0xa2, 0x8a, 0xbb, 0xd5, 0x09, 0xf3, 0x14, 0x33, 0x57, 0xd9, 0x70, 0x22, - 0xaf, 0xe3, 0x87, 0x2c, 0x57, 0xcd, 0xc9, 0x27, 0xa3, 0x5b, 0x75, 0xd8, - 0xea, 0x0d, 0x7a, 0xe7, 0xbe, 0xc9, 0xa8, 0xe5, 0x4a, 0xdd, 0x7f, 0x56, - 0xfb, 0x55, 0x53, 0x7b, 0xda, 0xdf, 0xaa, 0x80, 0x55, 0x49, 0xdb, 0xe2, - 0x78, 0xd4, 0xb5, 0x1a, 0xb5, 0xf0, 0xa8, 0x5b, 0x33, 0x2a, 0x65, 0x31, - 0xb9, 0xaa, 0x29, 0x0b, 0x18, 0x64, 0xc8, 0x41, 0xa6, 0x79, 0x43, 0x07, - 0xbd, 0x29, 0x03, 0xef, 0x99, 0x21, 0x38, 0x66, 0xad, 0xe3, 0xa3, 0xee, - 0xeb, 0x1f, 0x5b, 0x58, 0xa8, 0xa9, 0xb0, 0xf6, 0xd8, 0xa3, 0x1f, 0x1c, - 0x1c, 0x1e, 0x1c, 0xb4, 0xaa, 0x8a, 0x62, 0x7a, 0x36, 0xa5, 0xc0, 0x6c, - 0xb7, 0x3d, 0x28, 0x8f, 0x3c, 0xda, 0xa5, 0x34, 0x4b, 0x35, 0x36, 0xec, - 0xb2, 0x09, 0x1a, 0x84, 0x4b, 0x67, 0x60, 0x8c, 0x62, 0x32, 0xd0, 0x7b, - 0x76, 0x5e, 0xc8, 0x7b, 0x41, 0x1d, 0xa6, 0x69, 0xdf, 0xe6, 0x4c, 0xe6, - 0x24, 0xb9, 0x2a, 0x85, 0x03, 0xcd, 0xb1, 0xe9, 0xc8, 0x16, 0xe1, 0x3d, - 0x15, 0xab, 0x75, 0x7d, 0x6a, 0xcd, 0x69, 0xa0, 0x26, 0x16, 0xa8, 0x84, - 0xa5, 0x7c, 0x8f, 0xf3, 0x10, 0x26, 0x85, 0xf6, 0xbc, 0x8d, 0x39, 0x81, - 0x7a, 0xfa, 0x6a, 0x57, 0xb5, 0x1e, 0xf5, 0xaf, 0x78, 0x24, 0xe2, 0x96, - 0x97, 0x4b, 0x55, 0xd5, 0x35, 0x96, 0xda, 0x63, 0xb9, 0x94, 0x89, 0x07, - 0xf8, 0xec, 0x6d, 0x2a, 0x63, 0xcd, 0xf0, 0xd1, 0x46, 0x47, 0xaf, 0xdf, - 0xfe, 0xb8, 0x77, 0xd0, 0xed, 0xee, 0x85, 0x18, 0xc6, 0x1e, 0x04, 0x37, - 0xc6, 0x24, 0xbd, 0x8f, 0xd1, 0x5f, 0xef, 0xe3, 0xef, 0x7e, 0x5c, 0x50, - 0xb7, 0xd2, 0x31, 0x8b, 0x2c, 0x56, 0x59, 0x7d, 0x2b, 0xda, 0x51, 0xf4, - 0x7c, 0x35, 0x47, 0x9a, 0x7b, 0x8e, 0xeb, 0x6b, 0x3e, 0xd6, 0xc2, 0x06, - 0xda, 0xcc, 0x37, 0x1b, 0x6b, 0x95, 0xbd, 0xea, 0x69, 0x3d, 0xa6, 0xd4, - 0x2a, 0xe1, 0x4e, 0xaf, 0xd2, 0x3d, 0x42, 0x5b, 0x25, 0x78, 0xd9, 0x98, - 0x57, 0x7d, 0x7f, 0xd5, 0xee, 0x8b, 0x80, 0xf4, 0x0c, 0xca, 0xfe, 0x0d, - 0x14, 0x4e, 0xd9, 0xd0, 0xa0, 0x16, 0x6c, 0x0c, 0x07, 0xd8, 0x99, 0xe8, - 0xa8, 0x10, 0xd9, 0xf0, 0x5b, 0x15, 0xa3, 0x25, 0x43, 0x84, 0xe5, 0x85, - 0x6b, 0x37, 0xda, 0x28, 0x3b, 0x33, 0x63, 0xbd, 0xa2, 0xca, 0x69, 0xee, - 0xdf, 0xa2, 0xa5, 0xb9, 0xb9, 0xee, 0x0f, 0xa9, 0x99, 0x2f, 0xb9, 0x80, - 0xdc, 0x6c, 0x3c, 0x8a, 0x8e, 0x00, 0xa0, 0x96, 0x6e, 0x13, 0x05, 0x5b, - 0x4c, 0xde, 0x1d, 0xfd, 0x6f, 0xb7, 0x6b, 0x9d, 0xf6, 0x37, 0xcd, 0xa0, - 0xe9, 0xf1, 0xc0, 0xa4, 0xdc, 0x78, 0xe4, 0x92, 0x88, 0x19, 0x37, 0x7c, - 0x76, 0x90, 0x7b, 0xb6, 0xe7, 0xd1, 0x50, 0x32, 0x72, 0x86, 0xf6, 0x53, - 0xfa, 0x8d, 0x0d, 0x62, 0x60, 0x4c, 0x2d, 0xd8, 0x6c, 0x99, 0x45, 0x7b, - 0x1b, 0x9c, 0xab, 0x45, 0x78, 0x40, 0xe8, 0xc6, 0xdf, 0xc3, 0x37, 0x47, - 0x15, 0xbc, 0xe3, 0x37, 0xad, 0xe6, 0x1d, 0x74, 0x66, 0x73, 0x85, 0x33, - 0x08, 0xce, 0x7a, 0xde, 0xd9, 0xf0, 0x62, 0xd2, 0xc7, 0x25, 0x66, 0xeb, - 0x51, 0x46, 0x73, 0x01, 0x46, 0xfc, 0x2d, 0x11, 0xc9, 0x11, 0x05, 0x42, - 0x18, 0xfd, 0x5a, 0x09, 0x8d, 0xa7, 0xbc, 0xcc, 0xb4, 0x88, 0x30, 0xac, - 0xda, 0x7e, 0x0a, 0x43, 0x9f, 0x46, 0xfc, 0x24, 0x8c, 0x38, 0xcd, 0x12, - 0xd5, 0xba, 0x81, 0xc6, 0xe3, 0x8c, 0x5c, 0x22, 0xba, 0x94, 0xf8, 0x4e, - 0x64, 0x62, 0xf9, 0x24, 0x20, 0xab, 0x7d, 0x5c, 0xe6, 0x5e, 0x3a, 0x7d, - 0xb2, 0x48, 0xd5, 0x79, 0xd6, 0xe3, 0xcc, 0xa9, 0xfb, 0x64, 0xa4, 0xb0, - 0xbe, 0xa0, 0x7d, 0x2a, 0x9f, 0x9d, 0xaa, 0x77, 0x83, 0x46, 0x42, 0xa8, - 0xba, 0xa2, 0x66, 0x46, 0xa0, 0x34, 0x64, 0x6c, 0x87, 0x46, 0xb5, 0x94, - 0xa3, 0x7e, 0x63, 0x78, 0x22, 0x4a, 0x4d, 0x5b, 0x0e, 0x4b, 0x80, 0x52, - 0x9a, 0x86, 0xa4, 0x98, 0xe2, 0x79, 0x68, 0x1e, 0x79, 0x52, 0x9c, 0x14, - 0x39, 0x90, 0x46, 0xaf, 0x45, 0xaa, 0x0e, 0x9d, 0x8a, 0x6c, 0xcf, 0xc4, - 0x7d, 0xcb, 0xaa, 0x66, 0xfd, 0x6a, 0xf5, 0xdf, 0xd9, 0xe4, 0x3f, 0xe9, - 0xef, 0xbb, 0x06, 0x37, 0xb5, 0xe2, 0x7e, 0x01, 0x37, 0x90, 0x9a, 0x03, - 0x7e, 0xb3, 0x9c, 0xd3, 0x0f, 0x07, 0x1d, 0x16, 0xfd, 0xfd, 0x1c, 0x16, - 0x46, 0x7f, 0xbb, 0x28, 0x64, 0x41, 0x3f, 0xfa, 0x85, 0xa0, 0xa9, 0xfa, - 0x69, 0x6a, 0x2c, 0x39, 0x58, 0x23, 0x8c, 0x50, 0x94, 0xde, 0xcd, 0xa7, - 0x55, 0xa7, 0xf8, 0xda, 0x36, 0x46, 0xf5, 0x72, 0xde, 0x24, 0x37, 0xb4, - 0xab, 0xf5, 0xeb, 0x0d, 0xd9, 0x86, 0xc2, 0x58, 0xe3, 0xe9, 0x71, 0x5a, - 0x6c, 0x9c, 0xa5, 0xa7, 0xa7, 0x3a, 0x3f, 0x60, 0xbb, 0x7c, 0xf7, 0xc0, - 0x0f, 0x03, 0x2d, 0x7a, 0x2b, 0x32, 0x81, 0xad, 0xe8, 0x29, 0x40, 0xa6, - 0xf0, 0x40, 0x4c, 0xa7, 0x58, 0x21, 0x35, 0x7e, 0xbf, 0x54, 0xa8, 0xf7, - 0x91, 0x31, 0xe8, 0x4c, 0xd2, 0x9c, 0x0c, 0xc8, 0xd6, 0x49, 0xfb, 0xd5, - 0xd7, 0x09, 0x60, 0x34, 0x3d, 0x0d, 0xdc, 0xa9, 0xdf, 0xf3, 0x1b, 0x91, - 0x3f, 0x0e, 0x1f, 0x10, 0xaf, 0x19, 0xd2, 0xd5, 0xd2, 0x3c, 0x72, 0x80, - 0x95, 0x02, 0x17, 0x38, 0x98, 0xe4, 0xdc, 0xe2, 0x61, 0xcc, 0x0d, 0x83, - 0x8f, 0x7b, 0xbf, 0x04, 0xf4, 0x46, 0xe8, 0xd5, 0x2e, 0x30, 0x4e, 0x20, - 0x46, 0x0a, 0x99, 0x1a, 0x81, 0x26, 0x66, 0xfa, 0x39, 0x3e, 0x87, 0xef, - 0x50, 0x4e, 0xc2, 0x0c, 0x0c, 0xd9, 0x4f, 0x3f, 0xe1, 0x6b, 0x8f, 0x21, - 0x9e, 0xc7, 0x27, 0x86, 0xaf, 0xe7, 0xfc, 0x0e, 0x19, 0xea, 0xcc, 0x19, - 0x9a, 0x07, 0xcb, 0x77, 0x26, 0x60, 0xe7, 0x29, 0xf5, 0x7b, 0xa4, 0x75, - 0x8c, 0xce, 0x7a, 0xfd, 0xb5, 0x5e, 0x03, 0x8c, 0xcf, 0x57, 0x5f, 0x69, - 0x66, 0x3f, 0xe4, 0x02, 0x15, 0xc5, 0x3c, 0xdb, 0x90, 0x38, 0xc4, 0x80, - 0x64, 0x79, 0x19, 0xf3, 0x84, 0xd3, 0xc3, 0xc1, 0x8c, 0xde, 0x13, 0x52, - 0x88, 0x4d, 0x27, 0xb6, 0xcd, 0xf5, 0xd6, 0x08, 0xb3, 0x79, 0xdc, 0x69, - 0x20, 0x20, 0xdb, 0xe5, 0xfe, 0xac, 0xe1, 0x4f, 0x7a, 0xc2, 0xa9, 0xaa, - 0x7e, 0x59, 0xf2, 0xe9, 0xed, 0xa3, 0x7c, 0xe9, 0xae, 0x0c, 0x92, 0x22, - 0x05, 0x85, 0x73, 0xbe, 0x23, 0xb9, 0xbb, 0x36, 0x8a, 0xcb, 0x04, 0x03, - 0x69, 0x80, 0x94, 0x33, 0xf6, 0x9a, 0xaf, 0xac, 0x3e, 0xe8, 0x11, 0x87, - 0xc5, 0x86, 0xf7, 0x6a, 0xc1, 0xb3, 0x66, 0x7b, 0x01, 0x26, 0x09, 0xae, - 0x7b, 0x8e, 0x6b, 0xb3, 0x5c, 0x54, 0x21, 0xa3, 0xa3, 0x9c, 0xc2, 0x61, - 0x99, 0x89, 0x87, 0x32, 0x2f, 0x2c, 0xe3, 0xfc, 0x49, 0x4c, 0xd0, 0x91, - 0xe6, 0xdb, 0x35, 0xbe, 0xc1, 0xe0, 0xac, 0xd9, 0xcd, 0xd4, 0xaf, 0xcf, - 0x9b, 0x57, 0x3d, 0x93, 0x66, 0x9e, 0xd8, 0x89, 0x16, 0xb7, 0xec, 0xf4, - 0xdc, 0x64, 0xbe, 0x2d, 0xc2, 0x40, 0x84, 0xf3, 0x0c, 0x17, 0x8a, 0xa8, - 0x36, 0x5e, 0x39, 0x54, 0x9b, 0x34, 0xd9, 0x6a, 0x4c, 0xf1, 0xcf, 0x1e, - 0x7c, 0x32, 0xd6, 0x6f, 0x4f, 0xe9, 0xdf, 0x3e, 0x89, 0x97, 0x1e, 0xe6, - 0xd4, 0x51, 0x20, 0xff, 0x45, 0x61, 0xc6, 0x6e, 0x48, 0x4d, 0x4e, 0xe6, - 0x43, 0x93, 0xc4, 0xab, 0x9c, 0xf8, 0xa5, 0x75, 0xf0, 0xb1, 0xf1, 0x10, - 0xdd, 0xda, 0x6b, 0x1d, 0x6e, 0x7d, 0x5f, 0x93, 0x5f, 0x6c, 0x7a, 0x2a, - 0xf1, 0x9a, 0xa6, 0xdb, 0xe4, 0xe5, 0xa7, 0xe6, 0x7b, 0x7c, 0x14, 0x6e, - 0x98, 0x70, 0xfb, 0x75, 0x98, 0x6d, 0x3d, 0xd4, 0x5a, 0x03, 0x97, 0xb8, - 0x97, 0x07, 0x4f, 0x40, 0x19, 0xd3, 0x7f, 0x73, 0x79, 0x90, 0x45, 0x5a, - 0x4a, 0x78, 0x6c, 0x1e, 0x7a, 0x8f, 0xe9, 0x9f, 0x8f, 0x9b, 0xff, 0x02, - 0x61, 0xd2, 0xcf, 0xff, 0x21, 0x3b, 0x17, 0xe8, 0x24, 0x3e, 0x2c, 0xf5, - 0xec, 0x9d, 0x45, 0xe0, 0x21, 0x26, 0x7f, 0x0f, 0x00, 0x00, 0xff, 0xff, - 0xc9, 0x2e, 0x07, 0x65, 0xc7, 0x19, 0x00, 0x00, - }, - "conf/app.ini", - ) -} - -func conf_content_git_bare_zip() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0xac, 0x7a, - 0x05, 0x54, 0x94, 0x5d, 0xd7, 0xf6, 0xd0, 0x48, 0x77, 0xc7, 0xd0, 0xdd, - 0x29, 0x48, 0x89, 0x74, 0x77, 0x77, 0xf7, 0x00, 0x33, 0xc4, 0x10, 0x82, - 0xa4, 0xe0, 0x48, 0x0e, 0x12, 0xd2, 0x21, 0xdd, 0x20, 0x22, 0x8d, 0x80, - 0x80, 0x34, 0x4a, 0x87, 0x84, 0xa8, 0xa4, 0x80, 0xa0, 0xe4, 0x8f, 0xbf, - 0x8f, 0xef, 0x07, 0xfe, 0x8f, 0xcf, 0xf7, 0xae, 0xf7, 0xfd, 0xc7, 0xb5, - 0xd7, 0x5e, 0x67, 0xad, 0x7d, 0x5f, 0xd7, 0x76, 0xdf, 0xe7, 0x9c, 0x7d, - 0xee, 0x73, 0xa1, 0xa9, 0x82, 0x84, 0x4c, 0x04, 0x00, 0x00, 0xd0, 0x01, - 0xc9, 0xba, 0x9e, 0xf7, 0x90, 0x6a, 0x72, 0xdd, 0x6d, 0xaf, 0x46, 0x61, - 0x57, 0x86, 0x7a, 0x65, 0x36, 0x1e, 0xee, 0xf6, 0x4e, 0x0e, 0x72, 0x8f, - 0xf8, 0x70, 0x42, 0x80, 0x58, 0x00, 0x07, 0xbf, 0x08, 0x8d, 0x3d, 0x24, - 0x77, 0x79, 0x05, 0x5a, 0x4b, 0x2a, 0xcd, 0x18, 0x61, 0x44, 0x21, 0x37, - 0xa1, 0xf7, 0xc7, 0x2b, 0x6b, 0x7e, 0x2f, 0x06, 0x87, 0x28, 0xf9, 0x38, - 0xdf, 0xf1, 0x9a, 0x32, 0x16, 0xbf, 0x62, 0xc2, 0x63, 0x79, 0x86, 0x5b, - 0x0d, 0x5c, 0x2f, 0x72, 0x31, 0x76, 0x41, 0x94, 0x57, 0x5c, 0xcb, 0xd5, - 0x06, 0x69, 0x75, 0xa4, 0xbf, 0xfd, 0xa2, 0x30, 0xe0, 0x8b, 0xc2, 0xc6, - 0x66, 0x2d, 0xb9, 0x3e, 0xd5, 0xb4, 0xd1, 0xbc, 0xf0, 0xf4, 0x6c, 0x2c, - 0x94, 0x06, 0x3a, 0x9e, 0x5b, 0xd9, 0x36, 0x9a, 0xf4, 0xb8, 0x58, 0xe7, - 0x71, 0x4f, 0xdb, 0xcd, 0x3c, 0x44, 0x62, 0xd1, 0x68, 0xa5, 0xae, 0x46, - 0x4a, 0x57, 0x86, 0x79, 0x65, 0xb6, 0x76, 0xde, 0x36, 0x5e, 0x4e, 0x20, - 0xb0, 0x93, 0x87, 0x3b, 0xe6, 0xd0, 0xa0, 0xca, 0x1b, 0x35, 0x35, 0x2d, - 0x56, 0x65, 0xae, 0xd7, 0x3c, 0xc3, 0x9c, 0xfd, 0x3c, 0xa5, 0xf5, 0xfa, - 0x8a, 0x6a, 0xfd, 0x9c, 0x5a, 0xac, 0xfd, 0xaf, 0x39, 0xf5, 0x15, 0x07, - 0xdf, 0x28, 0xe9, 0x69, 0x6a, 0x28, 0x71, 0xa9, 0x73, 0x0f, 0x70, 0xb2, - 0xf6, 0xbf, 0x19, 0xd1, 0x31, 0x60, 0xed, 0x37, 0x00, 0x7c, 0x02, 0x0c, - 0x3c, 0xa3, 0x77, 0x1a, 0x5f, 0x45, 0x04, 0xdc, 0xe4, 0xe1, 0x70, 0xf2, - 0x7e, 0x46, 0x7e, 0x35, 0x22, 0xbd, 0x32, 0xe4, 0x2b, 0x53, 0x94, 0x93, - 0xb9, 0xc7, 0xa1, 0xac, 0x56, 0xa7, 0xcd, 0xaa, 0xac, 0xc6, 0xf1, 0x6e, - 0x44, 0x51, 0x4d, 0x95, 0xed, 0xdd, 0x88, 0x1a, 0x27, 0xb7, 0x12, 0xd7, - 0xca, 0xcf, 0x47, 0x31, 0x00, 0x3f, 0x7e, 0x3f, 0x1e, 0x05, 0x5c, 0xfb, - 0xfd, 0x28, 0x95, 0xa3, 0x87, 0x87, 0x8b, 0x37, 0xcf, 0x4d, 0x78, 0xcb, - 0xe3, 0x04, 0x43, 0x0c, 0x04, 0x00, 0xe0, 0xd5, 0x95, 0x51, 0xfe, 0x2b, - 0xc6, 0x0a, 0x04, 0x72, 0xf5, 0x07, 0x59, 0x81, 0x6d, 0x1c, 0xb9, 0xdc, - 0xbc, 0x1d, 0xb8, 0xbd, 0xad, 0xdc, 0x40, 0xae, 0x76, 0x41, 0xf1, 0x12, - 0x1a, 0xdd, 0xd2, 0x58, 0x91, 0x0e, 0x3b, 0x06, 0xa9, 0xf5, 0x9f, 0x11, - 0x95, 0x5e, 0x0d, 0xe8, 0x32, 0x32, 0x4e, 0x12, 0x43, 0x14, 0xa6, 0x26, - 0xfb, 0x8d, 0x5e, 0xf0, 0x64, 0x52, 0x37, 0xa0, 0x7c, 0x59, 0x7a, 0xe1, - 0x72, 0x6b, 0xfb, 0x95, 0x73, 0x6b, 0x70, 0xd6, 0x94, 0xf9, 0xfc, 0x73, - 0xf1, 0x7d, 0x2e, 0xca, 0x06, 0x4d, 0x4c, 0xbf, 0x2f, 0x21, 0x0a, 0xdb, - 0x79, 0x72, 0xbc, 0x74, 0x8f, 0x3a, 0xcc, 0xf2, 0x58, 0x81, 0x08, 0x62, - 0x61, 0x0b, 0xe8, 0xd6, 0x78, 0xcd, 0xcb, 0x54, 0xb7, 0xa6, 0x79, 0x43, - 0x64, 0xed, 0x25, 0x80, 0xd1, 0x34, 0x63, 0xdd, 0x3b, 0xc9, 0xb7, 0xc4, - 0xe4, 0x03, 0x62, 0x8c, 0xc5, 0x90, 0x82, 0x30, 0x70, 0xc0, 0xcc, 0xef, - 0xd4, 0x93, 0x32, 0xbb, 0x87, 0x8c, 0xea, 0x85, 0xea, 0x3a, 0xc3, 0xfb, - 0x77, 0xea, 0x84, 0x18, 0x70, 0x19, 0x51, 0x03, 0xf7, 0xbe, 0xb2, 0x14, - 0x01, 0x38, 0x8d, 0x99, 0x51, 0x17, 0x30, 0x99, 0x81, 0x1f, 0x1e, 0x9e, - 0xc5, 0x7b, 0x92, 0x2a, 0x60, 0xf0, 0x25, 0x90, 0x9c, 0x95, 0x49, 0x4b, - 0x10, 0x3d, 0x38, 0xea, 0x2a, 0xe4, 0x56, 0x89, 0x16, 0x71, 0xa3, 0x6c, - 0xa2, 0x78, 0x88, 0xd9, 0x35, 0x0b, 0xea, 0x08, 0x7a, 0xb8, 0x22, 0xc9, - 0xb3, 0x48, 0x25, 0x4c, 0x18, 0x50, 0xeb, 0x3d, 0x43, 0xb5, 0x0f, 0x7d, - 0x92, 0x4d, 0x1f, 0xf9, 0x4d, 0xd5, 0x3f, 0x3c, 0x59, 0x61, 0xc7, 0x57, - 0x3b, 0x0f, 0x45, 0xcf, 0xac, 0xaa, 0x8a, 0x1a, 0x57, 0x2f, 0x5f, 0x17, - 0x09, 0x49, 0x69, 0xa8, 0xc8, 0x3e, 0x99, 0x8d, 0x5d, 0x86, 0xa4, 0x38, - 0x4e, 0x93, 0x6b, 0x49, 0x78, 0x2e, 0x6e, 0x6a, 0x28, 0xc0, 0xc4, 0x71, - 0xde, 0x7c, 0x7e, 0x83, 0xc9, 0xb0, 0x62, 0x92, 0x9a, 0xa6, 0xe6, 0x54, - 0xa4, 0xfe, 0x0c, 0x0a, 0x2d, 0x4e, 0xd9, 0xfc, 0x6c, 0x22, 0x51, 0x46, - 0x7b, 0xb3, 0x84, 0x9f, 0xbe, 0x0d, 0xe0, 0x1d, 0x5f, 0x95, 0x2f, 0x04, - 0xe9, 0xe7, 0x5b, 0xfa, 0x59, 0x42, 0x1b, 0x0f, 0x37, 0x37, 0x27, 0xf0, - 0xf5, 0xf2, 0x25, 0x5a, 0x78, 0x4c, 0xf0, 0x12, 0xf5, 0x64, 0x67, 0x68, - 0x78, 0x2a, 0x72, 0x8c, 0xeb, 0xab, 0xe5, 0xef, 0x47, 0xd7, 0x2b, 0x87, - 0xd1, 0x4f, 0x63, 0x26, 0x19, 0x1e, 0xdf, 0xfb, 0xb4, 0xc6, 0x2c, 0xf2, - 0xb0, 0xe1, 0xd5, 0xb0, 0x6b, 0xd4, 0x97, 0x67, 0x81, 0xbe, 0x95, 0xd4, - 0xa5, 0xc4, 0xcc, 0x5f, 0x08, 0xe4, 0xa6, 0x8e, 0x2f, 0x86, 0x25, 0xfa, - 0x68, 0xda, 0x5f, 0xe3, 0x68, 0xdb, 0x35, 0x3e, 0xee, 0x1d, 0x23, 0x7b, - 0x82, 0x71, 0xa8, 0x56, 0x6f, 0x26, 0x5b, 0xdc, 0xd0, 0x16, 0x35, 0x04, - 0xdb, 0xa2, 0x7a, 0x2a, 0x6f, 0xae, 0x13, 0x8c, 0x6b, 0x40, 0xe8, 0xb5, - 0xd0, 0x38, 0x9e, 0x3b, 0x46, 0x6c, 0x5c, 0xab, 0xaf, 0x5b, 0xbf, 0xd6, - 0xff, 0x3c, 0xcf, 0xa9, 0xb8, 0xe3, 0xbd, 0xf8, 0x4a, 0x8c, 0x46, 0x54, - 0x11, 0x59, 0xdc, 0xf8, 0xdb, 0xd1, 0x18, 0xa0, 0xea, 0xdb, 0xe7, 0x05, - 0xf3, 0xf4, 0xbc, 0xc9, 0x8e, 0xb7, 0x9a, 0xb1, 0x2e, 0x0b, 0x5d, 0xa3, - 0x11, 0x2a, 0x49, 0x70, 0x1a, 0xaa, 0x37, 0x28, 0x58, 0x24, 0xab, 0x2b, - 0x34, 0x28, 0xdf, 0x36, 0x7b, 0x60, 0x2c, 0x26, 0xc6, 0x21, 0x99, 0x3a, - 0xc1, 0x2f, 0x80, 0xf9, 0xe4, 0x56, 0x99, 0xa0, 0xd6, 0x08, 0x56, 0x6a, - 0x72, 0x45, 0x97, 0x80, 0x12, 0x76, 0x74, 0x94, 0x31, 0x88, 0xbc, 0xaf, - 0x3c, 0x86, 0x02, 0x0b, 0xa3, 0xed, 0x2d, 0x0d, 0xbc, 0x01, 0x23, 0x8f, - 0x11, 0xb1, 0x05, 0x7f, 0xbb, 0x22, 0xac, 0xd9, 0x8d, 0xf4, 0xc4, 0x34, - 0xb5, 0x7c, 0xda, 0x19, 0xda, 0xe7, 0xda, 0x9d, 0x61, 0x23, 0x4f, 0xb0, - 0x24, 0x53, 0xe8, 0x7a, 0xb8, 0x44, 0xd8, 0x3c, 0x97, 0xf1, 0xcc, 0x86, - 0xea, 0xb2, 0x6a, 0x42, 0x72, 0x2d, 0xc5, 0x74, 0x03, 0xcb, 0x14, 0x7a, - 0x90, 0xe8, 0xdd, 0xdc, 0x88, 0x79, 0x18, 0xb2, 0x5a, 0xf4, 0xda, 0xba, - 0xf8, 0x50, 0x42, 0x91, 0x6a, 0x8a, 0x77, 0x09, 0xe5, 0x10, 0x42, 0x29, - 0x8d, 0xd8, 0xd8, 0xb5, 0xcd, 0x52, 0xd8, 0xfa, 0xe6, 0x15, 0x89, 0xc9, - 0xda, 0xbe, 0x6c, 0xd1, 0x08, 0xcf, 0x66, 0xe0, 0xb0, 0x27, 0x66, 0x4a, - 0x91, 0x77, 0xc8, 0x10, 0xc5, 0xa3, 0xdc, 0xb2, 0xa8, 0x52, 0x4c, 0xc0, - 0x1f, 0x42, 0x8c, 0x0a, 0x8e, 0xff, 0x8c, 0x05, 0xe9, 0xd2, 0x3c, 0xa9, - 0xc7, 0xab, 0x53, 0xaf, 0xab, 0x10, 0x46, 0x56, 0x9f, 0xc0, 0x46, 0x00, - 0x89, 0x76, 0x7e, 0x18, 0xfa, 0x9a, 0x11, 0xdb, 0x3f, 0xb9, 0x74, 0x64, - 0x60, 0xb5, 0x77, 0xe1, 0x1c, 0xe0, 0xeb, 0xff, 0xf2, 0x1c, 0x74, 0xfe, - 0x69, 0xc7, 0xf9, 0x60, 0x67, 0x95, 0x44, 0xc1, 0x70, 0x47, 0x83, 0x98, - 0x20, 0x63, 0xdb, 0x77, 0x62, 0x3d, 0xb0, 0x35, 0x83, 0x6b, 0x23, 0x69, - 0x8b, 0x87, 0xb2, 0xaa, 0xc6, 0xc4, 0xce, 0x8c, 0xdf, 0xc6, 0xb4, 0x87, - 0x03, 0x18, 0x54, 0x1d, 0x7d, 0x4c, 0x28, 0xdf, 0x17, 0xcd, 0x52, 0x46, - 0xd6, 0xc7, 0xc0, 0x5a, 0x75, 0xbb, 0x34, 0xb7, 0xd1, 0x3c, 0xaa, 0x76, - 0xc4, 0x79, 0x53, 0x22, 0xcb, 0xdc, 0x85, 0x9b, 0xaa, 0x5d, 0x33, 0x36, - 0x6f, 0x97, 0x22, 0xed, 0x34, 0x36, 0x38, 0x2b, 0x65, 0x3d, 0x9a, 0xda, - 0x28, 0x4a, 0xb4, 0x17, 0xc5, 0xa6, 0x48, 0x86, 0x6f, 0xe6, 0xb2, 0x4e, - 0x73, 0x5f, 0x41, 0x94, 0xa2, 0xd3, 0x79, 0x75, 0x5a, 0xa1, 0x6a, 0x0d, - 0x69, 0xfc, 0x6c, 0x2d, 0x3a, 0xde, 0xf6, 0x74, 0x84, 0x2c, 0x28, 0xad, - 0xea, 0x4c, 0x84, 0x23, 0xd1, 0x68, 0xfa, 0xc0, 0x41, 0x10, 0xa3, 0xac, - 0xd2, 0xa2, 0xad, 0xeb, 0xc3, 0x65, 0xc0, 0xa3, 0xae, 0x53, 0x33, 0xb9, - 0xf6, 0xbc, 0xa5, 0x9b, 0x73, 0x05, 0x35, 0xcc, 0xb5, 0x0f, 0x7a, 0x35, - 0xca, 0xb9, 0x32, 0xb2, 0x7f, 0xcd, 0x15, 0x90, 0x87, 0x37, 0x98, 0xeb, - 0xe7, 0x84, 0xf9, 0x6b, 0xb2, 0x70, 0x3d, 0x92, 0x21, 0xe8, 0x02, 0xe2, - 0x21, 0xef, 0xb6, 0x58, 0x63, 0x19, 0xa8, 0xed, 0x2c, 0x9e, 0x85, 0xb0, - 0x48, 0x55, 0xd3, 0xc5, 0x6a, 0x22, 0xaa, 0xd8, 0x29, 0xe9, 0x65, 0xf1, - 0x3c, 0x34, 0x7f, 0xe9, 0x30, 0x6b, 0x5e, 0x74, 0x3b, 0x45, 0x29, 0xac, - 0xa6, 0x77, 0x45, 0xab, 0x43, 0x7c, 0x3d, 0x9d, 0x4c, 0x66, 0x0d, 0x09, - 0xe2, 0x52, 0x8e, 0xcd, 0xa5, 0x29, 0xab, 0x2b, 0xaa, 0xfc, 0x90, 0x34, - 0xde, 0xa3, 0xe5, 0x41, 0x4e, 0x86, 0x77, 0xf9, 0xe7, 0xe7, 0x93, 0x55, - 0xea, 0x5e, 0x8f, 0x37, 0xd8, 0x27, 0xba, 0x56, 0xd3, 0x02, 0x6e, 0x35, - 0x8d, 0xce, 0xbb, 0x70, 0x81, 0x3d, 0x19, 0xab, 0x0c, 0xc5, 0x07, 0xee, - 0xaf, 0xac, 0xbe, 0x47, 0x96, 0x25, 0x76, 0x7b, 0x6e, 0x61, 0x4d, 0x06, - 0x7b, 0xb1, 0xca, 0x16, 0xa4, 0xb9, 0xf8, 0x01, 0xf3, 0x66, 0xbe, 0x41, - 0x65, 0xdc, 0xdb, 0x7a, 0x57, 0x73, 0x9b, 0x15, 0x11, 0x00, 0x20, 0xbf, - 0x99, 0xaf, 0x97, 0x9d, 0x8d, 0x9d, 0x93, 0x8f, 0xdd, 0x5f, 0x09, 0xdb, - 0x69, 0x0d, 0x7a, 0x75, 0xf1, 0x62, 0xb5, 0x6c, 0x70, 0xe8, 0x36, 0x09, - 0xa7, 0xde, 0x41, 0x57, 0x8a, 0xb2, 0x2a, 0x7a, 0x32, 0x7c, 0xb8, 0x48, - 0xab, 0xe9, 0x9a, 0xe6, 0x07, 0xf4, 0xe9, 0xf5, 0x61, 0x3d, 0x3f, 0x65, - 0x8f, 0x94, 0xa5, 0x15, 0x51, 0x29, 0x33, 0xf3, 0x37, 0xd8, 0x64, 0x19, - 0xa3, 0xe4, 0xe8, 0x8a, 0xaf, 0xa8, 0x13, 0x6a, 0x31, 0xce, 0xa1, 0x7c, - 0x3c, 0x11, 0x61, 0x09, 0xda, 0xc1, 0x92, 0x81, 0x0a, 0xc8, 0x8d, 0x0e, - 0xcb, 0x52, 0xa1, 0xeb, 0x27, 0x61, 0xf2, 0x1d, 0x33, 0xf6, 0x9b, 0x3a, - 0xa1, 0x80, 0x99, 0x28, 0x45, 0x1e, 0x7e, 0xfb, 0x42, 0x1b, 0x04, 0x52, - 0x03, 0x48, 0x99, 0x48, 0x53, 0xf7, 0x77, 0x23, 0xbd, 0x61, 0x49, 0x76, - 0x20, 0xe3, 0x05, 0x28, 0x2b, 0xe9, 0x30, 0xa2, 0xa0, 0xab, 0xc4, 0xc1, - 0x47, 0x4b, 0xeb, 0x07, 0x09, 0x07, 0xd3, 0x3e, 0x9e, 0x19, 0x50, 0x6c, - 0x3d, 0xe4, 0x7c, 0x93, 0x74, 0x97, 0x66, 0x11, 0xd0, 0xc2, 0xf2, 0xfe, - 0x96, 0xac, 0x61, 0xd3, 0x85, 0x60, 0xdc, 0x19, 0x1c, 0xd0, 0xcb, 0x3f, - 0xf5, 0xf2, 0xfb, 0x2b, 0x1f, 0xe0, 0xbd, 0x1e, 0x88, 0xf3, 0x98, 0xb5, - 0xd5, 0x1a, 0x0d, 0xd5, 0xbc, 0x9c, 0x7f, 0x33, 0xcd, 0x7b, 0xcb, 0x4f, - 0x07, 0x17, 0x7b, 0x05, 0x5c, 0x8f, 0xc1, 0xb6, 0xdf, 0x60, 0x30, 0x49, - 0x44, 0x3f, 0xa3, 0x22, 0xfc, 0x4d, 0x33, 0x3d, 0x12, 0x18, 0xfb, 0x49, - 0xcc, 0xe7, 0xc7, 0x47, 0xcd, 0x63, 0x66, 0x26, 0x53, 0x11, 0xbd, 0x66, - 0x13, 0x6f, 0x61, 0xda, 0xda, 0x42, 0x86, 0xee, 0xb9, 0x4e, 0x5f, 0x69, - 0x02, 0xcc, 0x08, 0x57, 0xed, 0x66, 0xdc, 0x8f, 0xdd, 0xe6, 0x3e, 0x99, - 0xcd, 0x0c, 0xba, 0x99, 0x25, 0xe8, 0xea, 0x8d, 0xed, 0x8a, 0x2f, 0x90, - 0x08, 0xcd, 0x8d, 0xcb, 0x60, 0x85, 0xb3, 0x47, 0xe3, 0x23, 0x39, 0x24, - 0xae, 0x60, 0xde, 0x03, 0x66, 0xc2, 0x16, 0x0f, 0xad, 0x6f, 0x49, 0x46, - 0x27, 0xdf, 0xbe, 0xab, 0x78, 0xdf, 0x1f, 0x95, 0xdb, 0x9e, 0x63, 0xa1, - 0x69, 0x5a, 0x35, 0x98, 0x73, 0x81, 0xde, 0xf4, 0x51, 0x21, 0x13, 0xaf, - 0xfe, 0x5e, 0xbd, 0x5f, 0x93, 0x89, 0x50, 0x60, 0xdb, 0xc7, 0x8b, 0x79, - 0x9b, 0x24, 0xbb, 0x4d, 0xec, 0xe8, 0xdb, 0x7e, 0x92, 0xc2, 0x50, 0x82, - 0x01, 0x25, 0x4f, 0x7e, 0xbe, 0x27, 0x8f, 0x63, 0x97, 0x06, 0xef, 0x13, - 0x78, 0x53, 0x8c, 0x99, 0xd6, 0x7a, 0xdc, 0x7c, 0x17, 0xe9, 0x58, 0xc7, - 0x1d, 0x31, 0x57, 0xa3, 0xd6, 0xff, 0x77, 0xee, 0x40, 0x40, 0xb6, 0x56, - 0xe0, 0x5f, 0xaf, 0x82, 0x6b, 0x48, 0x8b, 0xe0, 0x01, 0x2f, 0x16, 0xf2, - 0xe8, 0x65, 0x96, 0x75, 0x84, 0x45, 0xa8, 0x80, 0x1f, 0x1a, 0x0f, 0x1e, - 0x10, 0x8e, 0x33, 0x0e, 0x4e, 0x5c, 0x5e, 0xde, 0xae, 0xf8, 0xb8, 0xb1, - 0x33, 0xdc, 0xe2, 0xc6, 0xd3, 0x9d, 0xba, 0x6f, 0xa9, 0xe2, 0x28, 0x1b, - 0x6b, 0x82, 0x4a, 0x5b, 0x0f, 0x67, 0xb1, 0xc1, 0x37, 0xb2, 0x4a, 0x2a, - 0x5a, 0x01, 0xc9, 0x68, 0x71, 0x17, 0x60, 0xdd, 0xcd, 0x75, 0x5a, 0x27, - 0x17, 0x8a, 0x65, 0x22, 0x0d, 0x62, 0x88, 0xb1, 0x16, 0x89, 0x6c, 0x31, - 0xe4, 0xe0, 0xdf, 0x9d, 0x43, 0x37, 0x18, 0xd0, 0xbf, 0xb7, 0x70, 0xa2, - 0xd3, 0x86, 0x29, 0x3a, 0x61, 0x68, 0x65, 0x91, 0x98, 0x79, 0xd2, 0x40, - 0x91, 0xd6, 0x78, 0x9f, 0x70, 0xc2, 0x97, 0x50, 0x10, 0xfe, 0xd5, 0x9d, - 0x47, 0xe0, 0xb6, 0x48, 0x10, 0x7a, 0xe0, 0x5e, 0xb8, 0x82, 0xd7, 0x59, - 0xe9, 0xb0, 0xe1, 0xa6, 0xda, 0x13, 0xaf, 0xe4, 0x3d, 0x84, 0x9b, 0xf9, - 0x53, 0x31, 0x99, 0xdc, 0x3e, 0xbf, 0x1a, 0x3d, 0xbe, 0xd1, 0x6a, 0x40, - 0x5e, 0x76, 0x5c, 0xff, 0xd3, 0x6e, 0x7e, 0xed, 0x95, 0x71, 0x7c, 0x1a, - 0xdd, 0xbc, 0x78, 0x11, 0x0e, 0x67, 0x1c, 0x34, 0x4e, 0x6f, 0x51, 0xc6, - 0xa3, 0xe1, 0xb7, 0x7e, 0xb6, 0x1a, 0x75, 0x68, 0x89, 0x06, 0x2c, 0x28, - 0x25, 0x28, 0x97, 0x2d, 0xfa, 0xf2, 0xb1, 0x8e, 0x71, 0x4d, 0x4d, 0xdb, - 0xcb, 0xd3, 0xb6, 0x80, 0xd8, 0xb9, 0xa2, 0xf5, 0x51, 0x5b, 0x07, 0x12, - 0xfb, 0xd0, 0x0d, 0x40, 0x7a, 0x79, 0x1c, 0x52, 0xe7, 0x43, 0xaa, 0xf8, - 0x97, 0xaf, 0xb4, 0x72, 0x1f, 0xe0, 0x2a, 0xcf, 0x67, 0x83, 0xc0, 0xfa, - 0x9d, 0xe4, 0x8d, 0xf0, 0x2f, 0x4f, 0x9f, 0x87, 0xab, 0xb7, 0x38, 0xe8, - 0xcd, 0x12, 0x4b, 0x07, 0x3c, 0x80, 0x79, 0x8a, 0xca, 0x95, 0x65, 0xca, - 0x66, 0xbf, 0xea, 0x26, 0xb1, 0xdf, 0xe6, 0xc2, 0xdd, 0x4b, 0xae, 0x5b, - 0x98, 0x38, 0x29, 0x9f, 0x6d, 0x2e, 0xeb, 0xee, 0x17, 0xdd, 0x8a, 0x79, - 0x42, 0xac, 0xa0, 0x1f, 0x05, 0xcc, 0xbd, 0x28, 0x60, 0x7c, 0xed, 0x0c, - 0xe1, 0xac, 0x34, 0x67, 0x23, 0x76, 0xa2, 0xb9, 0xbd, 0x85, 0x59, 0x49, - 0x45, 0xaa, 0x90, 0x98, 0x3a, 0xcd, 0x6e, 0x56, 0xb2, 0x4c, 0x23, 0xd0, - 0x89, 0x3a, 0x74, 0x60, 0x63, 0xc4, 0x74, 0x77, 0xe1, 0x6b, 0x6b, 0xac, - 0xae, 0x74, 0x67, 0x63, 0x61, 0x56, 0xf3, 0xb8, 0xf5, 0xd1, 0x12, 0x03, - 0xfc, 0xb5, 0x45, 0x62, 0xd6, 0x46, 0x5a, 0x4e, 0xcc, 0xc3, 0xcf, 0xed, - 0xcc, 0x6f, 0x67, 0x53, 0x85, 0x8e, 0xca, 0x21, 0x3e, 0x10, 0x66, 0xea, - 0x7c, 0xad, 0x81, 0x18, 0xe8, 0xdd, 0x86, 0xc0, 0x05, 0xd7, 0x25, 0x0b, - 0x61, 0x8f, 0x21, 0xd5, 0xc1, 0xa1, 0xc0, 0x6f, 0x65, 0xe5, 0xd5, 0xc6, - 0x69, 0x94, 0xe9, 0xc5, 0xa7, 0xbe, 0x4e, 0xdf, 0xbf, 0x82, 0x0c, 0xb8, - 0xb2, 0x4b, 0x3d, 0x0e, 0x1c, 0x83, 0x7f, 0xeb, 0xff, 0xdb, 0xb4, 0xa0, - 0x99, 0xac, 0xab, 0xce, 0x52, 0x8c, 0x7a, 0xbd, 0xbb, 0xfc, 0xa8, 0xda, - 0x8d, 0x0d, 0x23, 0x48, 0xd7, 0xcc, 0x63, 0x4e, 0x1e, 0x2f, 0x50, 0xf8, - 0x7e, 0x8f, 0xbc, 0xf0, 0x16, 0x19, 0x1e, 0x9b, 0x91, 0x26, 0xd6, 0x5c, - 0x04, 0x36, 0xba, 0x7b, 0x08, 0x32, 0xef, 0x49, 0x3c, 0xc5, 0x47, 0x59, - 0x0a, 0x22, 0x85, 0xc5, 0x2c, 0x3f, 0x21, 0xff, 0xbe, 0x79, 0x6a, 0x26, - 0x0e, 0xf4, 0x93, 0x39, 0x01, 0xdf, 0x02, 0x5b, 0x51, 0xae, 0x93, 0xde, - 0xb8, 0xf3, 0xd4, 0x99, 0xcc, 0x99, 0x55, 0x91, 0x3a, 0xed, 0x8c, 0xb4, - 0xaa, 0xba, 0xd5, 0xad, 0x54, 0xfd, 0xc8, 0x6f, 0x46, 0xf5, 0x66, 0xdd, - 0xba, 0x26, 0xa7, 0xf7, 0xda, 0xbc, 0x9a, 0x31, 0x89, 0x38, 0xdd, 0xa6, - 0x9d, 0x1a, 0xf2, 0xdd, 0xb8, 0x10, 0x9d, 0x34, 0xf2, 0xea, 0x83, 0x4e, - 0xcc, 0xf9, 0xf5, 0x1a, 0xdd, 0x20, 0xe8, 0x9c, 0x98, 0xba, 0x4d, 0xa4, - 0x6a, 0xdd, 0x89, 0x03, 0xd4, 0x6a, 0xef, 0xc4, 0x1e, 0x5d, 0x32, 0xd7, - 0xbf, 0xcd, 0x65, 0xb6, 0x51, 0x6a, 0x82, 0x2c, 0xd5, 0xde, 0x6a, 0x03, - 0x42, 0xcb, 0x8f, 0xcd, 0x9c, 0xe7, 0x44, 0x08, 0xfa, 0xcf, 0x1e, 0x25, - 0xf3, 0x4d, 0xae, 0x2d, 0x4d, 0x1b, 0xed, 0xcb, 0x84, 0xd3, 0x9c, 0xeb, - 0x5a, 0x46, 0xf5, 0xb6, 0x4d, 0xd9, 0xab, 0x75, 0xc5, 0x7f, 0x14, 0x73, - 0x10, 0x7f, 0x26, 0x67, 0xe9, 0x3c, 0x13, 0x50, 0x63, 0x3f, 0x8e, 0x21, - 0x64, 0x8d, 0x12, 0x8a, 0x8a, 0xff, 0x14, 0xb7, 0x31, 0x5f, 0x73, 0x97, - 0x8e, 0xe4, 0xe1, 0x6a, 0x3e, 0x93, 0x70, 0x1e, 0x72, 0x8f, 0x66, 0x98, - 0xd2, 0x3d, 0x5e, 0xa6, 0x28, 0x8d, 0xed, 0x6f, 0x72, 0x9f, 0xbe, 0x8d, - 0x8c, 0x17, 0x78, 0x3f, 0x8d, 0x43, 0x8e, 0xe1, 0x9c, 0x88, 0xa1, 0x67, - 0xe8, 0xcb, 0x68, 0x21, 0x1c, 0x16, 0x58, 0xff, 0x2e, 0x9a, 0x8c, 0xbb, - 0x6b, 0xd0, 0x3e, 0xbe, 0xa0, 0xba, 0x6f, 0x6f, 0x7f, 0x52, 0x94, 0xdb, - 0xb3, 0xf0, 0x49, 0x2e, 0xb2, 0x91, 0x59, 0x9c, 0xc0, 0x25, 0x17, 0x86, - 0xfb, 0x9c, 0x8f, 0x71, 0xb5, 0xd7, 0xdb, 0x07, 0xac, 0x4a, 0x0b, 0xc3, - 0x31, 0x16, 0x64, 0x28, 0xa5, 0x4c, 0x34, 0x66, 0xa3, 0x60, 0x60, 0x10, - 0x71, 0x7f, 0x59, 0x9d, 0xbf, 0x9c, 0xda, 0x9f, 0x72, 0xdf, 0x9b, 0xd8, - 0xfc, 0x33, 0xe7, 0x60, 0x59, 0x8f, 0xb8, 0x91, 0x19, 0x37, 0xa9, 0x9e, - 0x7f, 0xff, 0x7a, 0x43, 0xaa, 0xc5, 0xf0, 0xf7, 0x85, 0x5a, 0x5d, 0x83, - 0xfd, 0x7d, 0xa8, 0x27, 0xa4, 0x50, 0xf9, 0xc3, 0xfa, 0xd7, 0xc0, 0x34, - 0xb6, 0xcc, 0xd0, 0x4d, 0x05, 0x39, 0xf1, 0xb9, 0x67, 0xa1, 0xf7, 0xe4, - 0xa7, 0x61, 0x0b, 0x45, 0x33, 0x18, 0x16, 0x4e, 0x99, 0xa9, 0xf2, 0x8b, - 0x59, 0x77, 0xa2, 0x42, 0xcf, 0xe4, 0x2d, 0x8b, 0xd6, 0x79, 0x43, 0x96, - 0xa1, 0xdc, 0xb5, 0xc9, 0xe1, 0x4f, 0x93, 0xbd, 0x02, 0xf6, 0x7d, 0x0c, - 0xcb, 0xb4, 0xa0, 0x99, 0xf6, 0x1b, 0xb1, 0x06, 0x08, 0x1b, 0x35, 0xdb, - 0x2c, 0x29, 0xb3, 0x08, 0x22, 0x32, 0x8c, 0x0b, 0x39, 0x84, 0xb4, 0x8c, - 0xe2, 0x06, 0xb6, 0x67, 0x6f, 0x88, 0xcd, 0xe6, 0x33, 0xb9, 0xad, 0xe7, - 0x5b, 0xeb, 0x16, 0x75, 0xa6, 0xa2, 0x73, 0xca, 0x5d, 0x6e, 0x51, 0xc2, - 0x5c, 0x6b, 0xc4, 0x84, 0xf9, 0xdf, 0x2f, 0x18, 0x72, 0x5d, 0x62, 0xee, - 0xf2, 0x44, 0xaf, 0x63, 0x83, 0xc3, 0xe9, 0xc9, 0xc0, 0x2a, 0x03, 0x33, - 0x24, 0xc6, 0xaa, 0x2b, 0xf1, 0x89, 0x3a, 0x3e, 0xa6, 0x2d, 0xab, 0xc3, - 0x50, 0xea, 0xf2, 0x39, 0xe2, 0x43, 0x34, 0x59, 0x4b, 0x33, 0x1b, 0x88, - 0x62, 0x7b, 0x72, 0xf1, 0x4a, 0x98, 0xa2, 0x47, 0x31, 0x12, 0x5f, 0x5a, - 0x7c, 0xb1, 0xb8, 0x55, 0x0e, 0x33, 0xeb, 0x08, 0xc2, 0xe0, 0x5e, 0x76, - 0x20, 0x0b, 0xfb, 0xc7, 0x62, 0x12, 0x1c, 0xa7, 0xf8, 0x3c, 0xc0, 0xdd, - 0x9c, 0xc3, 0x30, 0xd3, 0x30, 0x77, 0x46, 0x79, 0x94, 0x87, 0x81, 0x45, - 0xfd, 0xfd, 0x65, 0xa1, 0xaa, 0x1f, 0x87, 0xb8, 0xd4, 0x56, 0x58, 0x59, - 0x0e, 0x23, 0xd4, 0x35, 0xf2, 0x01, 0xc1, 0x75, 0xa1, 0xb8, 0x15, 0x25, - 0x51, 0x29, 0xe5, 0x79, 0x04, 0xf0, 0x6c, 0x51, 0x1f, 0x70, 0xa3, 0x02, - 0x24, 0xf4, 0x7b, 0x9c, 0x66, 0x35, 0xe9, 0x74, 0x81, 0x7d, 0x9f, 0x0e, - 0xb4, 0xac, 0x3b, 0x2d, 0x4e, 0x8e, 0xfe, 0xfe, 0xde, 0xe9, 0xac, 0xcd, - 0xa4, 0x97, 0x72, 0x2a, 0x10, 0xf2, 0x2e, 0x34, 0xd4, 0x1d, 0x9c, 0x1c, - 0x57, 0xb8, 0xe4, 0x16, 0xe6, 0x06, 0x6d, 0x4e, 0xcd, 0xf6, 0x4f, 0xff, - 0xba, 0xc8, 0x54, 0x86, 0xe6, 0x2b, 0xc9, 0x54, 0xa5, 0x06, 0xaf, 0x4f, - 0x6d, 0x0a, 0xda, 0x8e, 0x58, 0x95, 0x00, 0xf8, 0x89, 0x48, 0xe3, 0x0b, - 0x51, 0x45, 0xa2, 0xb2, 0xe6, 0x77, 0x44, 0xd5, 0x2b, 0xe5, 0x26, 0xb6, - 0x9a, 0x53, 0xa6, 0xaa, 0xe3, 0x8c, 0xc6, 0x6c, 0xa1, 0x77, 0x86, 0xa2, - 0x1a, 0x31, 0xd2, 0x6d, 0xf8, 0x33, 0x95, 0x52, 0x20, 0xf8, 0xd3, 0xf8, - 0xc2, 0x4d, 0x26, 0xb6, 0xf6, 0xa8, 0x2e, 0xd7, 0x0d, 0x81, 0x91, 0xbe, - 0x2f, 0xf3, 0xce, 0x28, 0x33, 0xb7, 0x88, 0x2f, 0x25, 0xc4, 0xe9, 0xa1, - 0x4d, 0x97, 0x2e, 0x5f, 0xf7, 0x40, 0x01, 0xb4, 0x4a, 0x1b, 0x89, 0xc3, - 0x92, 0x3a, 0x17, 0x23, 0x4f, 0xa4, 0x36, 0x1c, 0x0e, 0x33, 0x1b, 0x89, - 0xd7, 0xdf, 0xfa, 0x53, 0xad, 0x06, 0x82, 0x89, 0x0d, 0x84, 0xb6, 0xbe, - 0x2f, 0xde, 0xde, 0x74, 0x77, 0x8c, 0x98, 0x98, 0xc0, 0x51, 0xc0, 0x28, - 0xeb, 0x9b, 0x36, 0xdf, 0x8c, 0xa0, 0x8f, 0xb6, 0xe6, 0x67, 0xdc, 0xd6, - 0xa1, 0xcd, 0x9f, 0xe4, 0x30, 0xac, 0x20, 0xf0, 0x3c, 0xc1, 0xa3, 0x39, - 0x5a, 0x84, 0x9a, 0xc6, 0x1b, 0x04, 0xcf, 0x18, 0x1f, 0x0b, 0xce, 0x6c, - 0x14, 0xc8, 0xf9, 0xba, 0xae, 0x7a, 0xd6, 0x47, 0x72, 0xe6, 0x34, 0x85, - 0xf9, 0x9c, 0xb7, 0x8b, 0x15, 0x4c, 0x88, 0x72, 0x22, 0xdf, 0x82, 0x36, - 0xa5, 0x7b, 0xe5, 0x9f, 0x2f, 0x9a, 0x45, 0x25, 0x75, 0x23, 0x0d, 0xe7, - 0x7d, 0x7b, 0xd1, 0xfb, 0x71, 0x91, 0x05, 0x69, 0xa2, 0xa8, 0x9b, 0x72, - 0x69, 0xa5, 0xa8, 0x00, 0x76, 0x37, 0xce, 0x23, 0x21, 0x6c, 0x7e, 0x0a, - 0xb9, 0x04, 0xc9, 0xd8, 0x35, 0x07, 0xfa, 0xa0, 0x1e, 0xcf, 0xef, 0x40, - 0xc7, 0x28, 0xef, 0xf2, 0x39, 0x68, 0xff, 0x5c, 0x45, 0xbd, 0xa5, 0x9f, - 0x94, 0xe7, 0x98, 0x71, 0xfc, 0x43, 0xb8, 0xb5, 0x89, 0xcb, 0x96, 0xe4, - 0xf7, 0x07, 0xab, 0xec, 0x67, 0xe0, 0x3d, 0xcd, 0x3c, 0x5b, 0xf8, 0x03, - 0x09, 0xfa, 0x37, 0xdd, 0x04, 0x81, 0xfc, 0x30, 0x82, 0x66, 0xf2, 0x91, - 0x0e, 0x73, 0xfe, 0x17, 0xc2, 0x89, 0xd9, 0xf9, 0x20, 0x82, 0x8f, 0x61, - 0x21, 0x38, 0x18, 0xfd, 0x07, 0x5b, 0x68, 0x37, 0x97, 0x34, 0xe7, 0x12, - 0xf7, 0x93, 0x19, 0x34, 0x00, 0xc0, 0x80, 0xf0, 0xf7, 0x25, 0xed, 0x65, - 0x67, 0x6d, 0xe5, 0xfd, 0x6b, 0x1f, 0x2f, 0x34, 0x74, 0xf1, 0x9e, 0xeb, - 0x25, 0x3e, 0x7f, 0x73, 0x4e, 0x2c, 0x42, 0x64, 0x92, 0xc0, 0x4d, 0x4b, - 0x20, 0x05, 0x36, 0x76, 0xb1, 0x8d, 0xe3, 0x74, 0x20, 0x60, 0x71, 0xe3, - 0x5f, 0x75, 0x4e, 0xff, 0x34, 0x5d, 0x5b, 0x8f, 0x4c, 0xca, 0x48, 0x0f, - 0x88, 0xdd, 0xe1, 0x56, 0x15, 0x48, 0xb9, 0x08, 0x18, 0x59, 0x30, 0xc3, - 0xc3, 0x93, 0x13, 0xcf, 0x4c, 0x11, 0x48, 0xde, 0x6b, 0xda, 0x0d, 0xd8, - 0xb1, 0xf1, 0x3f, 0x1c, 0x72, 0x4d, 0x80, 0x0b, 0xbc, 0x24, 0x51, 0x58, - 0x89, 0xe6, 0x86, 0x34, 0x08, 0xcd, 0x38, 0x6f, 0x3b, 0xa6, 0x3e, 0x72, - 0x0c, 0xf6, 0xda, 0xdf, 0xe0, 0xbb, 0x3c, 0xc7, 0x3c, 0xd7, 0x7c, 0x92, - 0x56, 0xa4, 0x72, 0x62, 0x4e, 0x52, 0x3b, 0x99, 0x75, 0xe4, 0x5c, 0x51, - 0x6c, 0x41, 0x2e, 0xc4, 0xe7, 0x4c, 0x57, 0xf1, 0x79, 0xc2, 0x78, 0x53, - 0x7c, 0x80, 0x33, 0xad, 0xb9, 0xc0, 0xc2, 0x65, 0xd3, 0x31, 0x57, 0xdb, - 0x4d, 0xba, 0x7e, 0x80, 0x4a, 0xe8, 0xde, 0x3b, 0xa5, 0x55, 0x4e, 0x2e, - 0x88, 0x7e, 0x25, 0x90, 0xb1, 0xfb, 0x6b, 0x15, 0x94, 0x8f, 0xd9, 0x88, - 0x9b, 0x2d, 0x81, 0x49, 0x66, 0x59, 0x41, 0x4f, 0xcc, 0x2b, 0x3e, 0xeb, - 0x63, 0xde, 0xf2, 0x46, 0xc9, 0x18, 0x8a, 0x0a, 0x57, 0xa7, 0x6c, 0x2c, - 0x57, 0x89, 0x46, 0xda, 0xea, 0xa0, 0xda, 0x07, 0x4b, 0x61, 0x78, 0xf3, - 0xd3, 0xb3, 0xa2, 0x47, 0xf6, 0x33, 0x95, 0x8d, 0x13, 0x99, 0x10, 0x98, - 0xcc, 0xc3, 0x37, 0xde, 0x0d, 0x87, 0x6b, 0xe6, 0xee, 0xa5, 0x07, 0xa6, - 0x1e, 0x86, 0x77, 0x99, 0x60, 0x9c, 0xc9, 0x3a, 0xbd, 0x92, 0xc7, 0xa6, - 0x61, 0x3a, 0xe9, 0xaa, 0x77, 0xd4, 0xcc, 0x8c, 0x1c, 0x92, 0x39, 0xcf, - 0x60, 0x7a, 0xcc, 0x3a, 0x29, 0xc2, 0xe3, 0x0f, 0xa6, 0xe6, 0x4b, 0x2c, - 0xc7, 0x93, 0xc9, 0x3f, 0x60, 0x77, 0x77, 0xbd, 0xe6, 0x37, 0xea, 0x76, - 0x48, 0xa1, 0x6c, 0x31, 0x1b, 0xd7, 0xa4, 0xd4, 0x96, 0x5b, 0x6f, 0xac, - 0x37, 0x2a, 0xe3, 0xbf, 0xf3, 0xe1, 0x78, 0xf1, 0xe5, 0x2c, 0xd9, 0x91, - 0x20, 0xef, 0x63, 0x8a, 0x3a, 0xab, 0x2a, 0xb8, 0x1c, 0x5c, 0x76, 0xd3, - 0xd8, 0x83, 0xf3, 0xe9, 0x74, 0xfc, 0x84, 0x9b, 0x29, 0x18, 0xce, 0x94, - 0x80, 0xc6, 0xfc, 0xa2, 0x01, 0xcc, 0x88, 0x6f, 0x9b, 0xd6, 0x3d, 0xbb, - 0x4e, 0x42, 0x8f, 0x61, 0xa7, 0xaf, 0x89, 0x9d, 0xb5, 0xaa, 0x1d, 0xe4, - 0xd5, 0x07, 0xb3, 0x93, 0x8c, 0xe1, 0x58, 0x37, 0xed, 0xeb, 0xe0, 0xdb, - 0x52, 0xb3, 0x75, 0x4b, 0x93, 0x8a, 0x64, 0xf4, 0x8e, 0xaf, 0x19, 0x83, - 0xb4, 0x21, 0x27, 0x54, 0x78, 0x2b, 0x18, 0xf5, 0xed, 0x15, 0x47, 0x96, - 0x42, 0x13, 0x1c, 0x7c, 0xb0, 0x25, 0x78, 0xa7, 0x9d, 0xea, 0x32, 0x31, - 0xf0, 0xb3, 0x33, 0xeb, 0xf4, 0x3b, 0x57, 0xc2, 0x56, 0x0e, 0x2e, 0x96, - 0xeb, 0x79, 0x6a, 0x93, 0x9f, 0x22, 0x32, 0x9f, 0x84, 0xe5, 0x4b, 0x66, - 0x4e, 0x98, 0x02, 0x91, 0x0b, 0x3f, 0xfa, 0xfb, 0x0e, 0x9f, 0xca, 0x17, - 0xfa, 0x34, 0x46, 0xda, 0x8a, 0x53, 0xbe, 0x39, 0xbd, 0xbb, 0xae, 0x2f, - 0xb4, 0xeb, 0x4e, 0x2e, 0xe1, 0x63, 0xc2, 0x09, 0xce, 0x62, 0xea, 0x30, - 0x56, 0x5e, 0xba, 0x1f, 0xf0, 0xe5, 0x24, 0x65, 0x67, 0x57, 0x2e, 0x2e, - 0x54, 0x9a, 0x05, 0x8c, 0x1a, 0x46, 0x0c, 0x44, 0x61, 0xac, 0x6e, 0x50, - 0x7c, 0x56, 0xc2, 0x31, 0x45, 0xd1, 0xaa, 0xab, 0xce, 0xec, 0xca, 0xe1, - 0x1d, 0x23, 0x48, 0x48, 0x1f, 0x0a, 0xe1, 0xed, 0x71, 0xf9, 0x18, 0x26, - 0x07, 0xc6, 0xf2, 0xfb, 0xee, 0x75, 0xe4, 0xca, 0x08, 0x75, 0x70, 0x78, - 0x70, 0x19, 0x64, 0x16, 0x11, 0x49, 0x8a, 0x1a, 0x6d, 0xe3, 0x6c, 0x67, - 0x47, 0x8f, 0xf7, 0x32, 0x3b, 0x9e, 0x77, 0xd4, 0x4b, 0x3b, 0x45, 0xf9, - 0x03, 0xb6, 0xa6, 0x92, 0xe4, 0xc0, 0x82, 0x4d, 0x4e, 0x88, 0xda, 0x93, - 0xb3, 0x2c, 0xb0, 0x72, 0x44, 0x7d, 0xbc, 0x14, 0x13, 0xd4, 0x26, 0x01, - 0xfb, 0xe4, 0xbb, 0xc2, 0xb0, 0x1d, 0xf0, 0xd5, 0xb9, 0xca, 0xbb, 0x2f, - 0xc6, 0xa7, 0xf3, 0x65, 0xac, 0x04, 0xb7, 0xfb, 0xbd, 0x2d, 0x48, 0x49, - 0x76, 0x83, 0x3a, 0x00, 0x94, 0xb4, 0xe5, 0xfd, 0xed, 0x26, 0x52, 0xbb, - 0xbb, 0x9f, 0x04, 0xee, 0x28, 0xbf, 0x4b, 0x37, 0x3f, 0xf3, 0x54, 0x3f, - 0xcf, 0xd6, 0xe4, 0x17, 0xca, 0x20, 0xe0, 0x8c, 0xb1, 0x1d, 0xdb, 0xd0, - 0xf9, 0xd2, 0x91, 0x6e, 0x29, 0x3b, 0x9a, 0xf0, 0xae, 0x3c, 0x0f, 0xc5, - 0xa0, 0x7a, 0xbf, 0x50, 0x5a, 0xda, 0xbd, 0x76, 0x9f, 0x79, 0x3e, 0xd2, - 0x15, 0xa1, 0x94, 0x10, 0xd8, 0x99, 0x2b, 0x08, 0x30, 0xd9, 0x68, 0xdc, - 0x68, 0xd6, 0x45, 0x0f, 0xcf, 0xc3, 0x0d, 0x75, 0x75, 0x18, 0xdf, 0xc6, - 0x21, 0x4d, 0x5a, 0xda, 0xdb, 0x4b, 0x28, 0x0f, 0x0e, 0x57, 0x74, 0xf1, - 0xb0, 0x5c, 0x89, 0x91, 0x74, 0x7d, 0x43, 0xfe, 0xe0, 0xb3, 0x61, 0x8b, - 0x56, 0xc4, 0xc5, 0xeb, 0xce, 0xf4, 0x9d, 0x96, 0x87, 0xe4, 0xaa, 0x77, - 0xaa, 0x25, 0xa6, 0xbf, 0x50, 0xec, 0x55, 0x05, 0x95, 0xc9, 0x54, 0x02, - 0x1b, 0xee, 0xa5, 0xe5, 0xf2, 0xbc, 0x28, 0xe9, 0x53, 0xec, 0xf3, 0x4d, - 0xce, 0xfa, 0xe4, 0x68, 0x13, 0xd2, 0x7e, 0x0f, 0xaa, 0x5d, 0x9b, 0xde, - 0xd8, 0xfc, 0xc1, 0xb1, 0xce, 0xb0, 0xb7, 0xf7, 0x6e, 0x43, 0x53, 0x58, - 0x70, 0xee, 0x60, 0x60, 0x40, 0x37, 0x96, 0xc8, 0xb3, 0x80, 0xce, 0x99, - 0x9e, 0x15, 0xd9, 0xa4, 0xec, 0xce, 0x0d, 0xc3, 0xbb, 0xb8, 0x60, 0xdc, - 0xb1, 0xde, 0x05, 0x9f, 0xe9, 0x0d, 0x0b, 0x4b, 0x0f, 0x29, 0xb4, 0xe9, - 0xb9, 0xd2, 0xcd, 0xe9, 0xce, 0xaf, 0x53, 0x41, 0xbc, 0x1e, 0xf4, 0xd4, - 0xdd, 0x4b, 0x25, 0x2f, 0x33, 0x1b, 0xdf, 0xbd, 0xce, 0x39, 0xd2, 0x3f, - 0xc4, 0xb1, 0xab, 0x94, 0xd1, 0x8c, 0xf7, 0xe5, 0x85, 0xa8, 0xa1, 0x95, - 0x94, 0x3d, 0x9c, 0x48, 0x2a, 0x04, 0xb3, 0x27, 0x2b, 0x24, 0x1d, 0x2e, - 0x5e, 0x26, 0x57, 0x9b, 0x3b, 0x92, 0xd7, 0x98, 0xca, 0xe1, 0xde, 0xc2, - 0xd2, 0xc8, 0xb3, 0xda, 0xfa, 0xb8, 0xfb, 0xa0, 0x8e, 0xb0, 0x83, 0x24, - 0xa7, 0xd5, 0xc8, 0x0d, 0x96, 0x9d, 0x00, 0xe7, 0xbf, 0xad, 0x46, 0x44, - 0x2d, 0xab, 0x51, 0x03, 0x5b, 0x7f, 0x60, 0x88, 0xc3, 0xbd, 0x18, 0x7c, - 0x3c, 0xe2, 0xcb, 0x32, 0xe5, 0xf0, 0xc5, 0xdf, 0xca, 0x80, 0xea, 0xbd, - 0x03, 0x76, 0x0f, 0x85, 0x4d, 0x98, 0x02, 0xf9, 0x48, 0x73, 0xef, 0x29, - 0x89, 0xaa, 0xb9, 0xdd, 0x04, 0x71, 0x56, 0x3b, 0xcf, 0xa9, 0xd6, 0x9b, - 0x3d, 0x5c, 0xea, 0x09, 0x05, 0x3c, 0xc3, 0xd7, 0x31, 0x83, 0xcf, 0xa7, - 0x32, 0x82, 0xc8, 0xda, 0xc4, 0xd3, 0xce, 0xf4, 0xd4, 0xc7, 0x37, 0xa5, - 0x60, 0x8e, 0xbd, 0x87, 0xad, 0x74, 0xcc, 0x53, 0xdf, 0x31, 0xc5, 0xa8, - 0xbf, 0x2c, 0x20, 0xcd, 0xb0, 0x8f, 0xcc, 0x83, 0x8e, 0xda, 0x9e, 0xc2, - 0xf2, 0xfd, 0x9f, 0x4d, 0x5d, 0x10, 0xf7, 0x92, 0xd6, 0xc0, 0xd8, 0x0d, - 0x50, 0xb0, 0x7d, 0xe9, 0x8f, 0x6d, 0x71, 0x9e, 0x8d, 0xc8, 0x87, 0x01, - 0x9b, 0x8e, 0xb9, 0x15, 0x69, 0xde, 0xb4, 0xde, 0x47, 0xb3, 0x1b, 0xa9, - 0x52, 0xc8, 0x07, 0xa2, 0xa5, 0x92, 0x05, 0xaf, 0xce, 0xc5, 0x17, 0xca, - 0xf4, 0x5d, 0x8c, 0x98, 0xbf, 0x5f, 0x43, 0xc9, 0x3b, 0xc4, 0x53, 0x92, - 0xe0, 0xea, 0x2b, 0x7d, 0xb1, 0xab, 0x87, 0x5a, 0x52, 0x70, 0xdf, 0xb4, - 0xf5, 0xe2, 0x68, 0xdb, 0x84, 0xb6, 0xc7, 0x52, 0xba, 0x8a, 0xfb, 0x89, - 0xa3, 0xed, 0x76, 0x18, 0xda, 0x97, 0xf0, 0x66, 0x0d, 0xd8, 0x83, 0x89, - 0x4d, 0xb2, 0xbb, 0x1a, 0x91, 0xbb, 0x9e, 0x73, 0x97, 0x27, 0x66, 0x49, - 0x27, 0x1a, 0xa7, 0x6a, 0x13, 0xdf, 0x9a, 0x4e, 0x18, 0xe2, 0x5f, 0x8d, - 0x5d, 0x7e, 0xc7, 0xcf, 0x13, 0x1f, 0x3f, 0x97, 0xb7, 0xb6, 0x2b, 0xd5, - 0x6f, 0x10, 0x54, 0x09, 0x00, 0xa5, 0x57, 0x31, 0x19, 0x4f, 0xdd, 0xcd, - 0x0d, 0x99, 0xa5, 0xdb, 0x74, 0xf0, 0x15, 0xe0, 0xe3, 0x7d, 0x3a, 0xb8, - 0x9e, 0x8c, 0x92, 0x0f, 0xae, 0x7e, 0x5c, 0x60, 0x4a, 0x39, 0x3e, 0xdb, - 0xbc, 0xec, 0x49, 0xa5, 0xbc, 0xfa, 0x02, 0xef, 0xf0, 0x51, 0x30, 0x37, - 0x61, 0x83, 0x94, 0xaf, 0x5f, 0x68, 0x8d, 0x8c, 0xa5, 0x94, 0x98, 0xe4, - 0xa2, 0xd9, 0xf7, 0xbc, 0x15, 0x77, 0x96, 0x51, 0x0d, 0x7a, 0x79, 0x7c, - 0xfb, 0x21, 0x6f, 0xc5, 0x4a, 0x46, 0xe1, 0xd0, 0xdc, 0x81, 0xa6, 0x33, - 0xc7, 0x34, 0x72, 0xb8, 0xa8, 0xa0, 0x15, 0x80, 0x9d, 0x23, 0x43, 0xdc, - 0x95, 0xcf, 0x62, 0xfc, 0xe5, 0xe6, 0xec, 0x2d, 0x6b, 0x40, 0x4d, 0xcb, - 0x34, 0x44, 0x68, 0xeb, 0x91, 0xd5, 0x5b, 0x4d, 0xb4, 0x13, 0x26, 0xaf, - 0xcf, 0x93, 0x5e, 0x9f, 0x4d, 0xb8, 0x8e, 0x67, 0xb4, 0x23, 0xd2, 0x8d, - 0x26, 0xc9, 0xd3, 0xef, 0x8a, 0xf3, 0x09, 0x2c, 0xc6, 0x02, 0xa7, 0xab, - 0x89, 0xdf, 0x54, 0x15, 0xf4, 0x0b, 0xec, 0xcc, 0x48, 0xe7, 0xb5, 0xe8, - 0x90, 0x9c, 0x32, 0xa5, 0x8a, 0x68, 0x70, 0x2a, 0x6b, 0xc2, 0x46, 0x3b, - 0x54, 0x98, 0xfa, 0x7a, 0x3c, 0x44, 0xcd, 0x43, 0xb2, 0x2b, 0xd2, 0x48, - 0x87, 0x9f, 0xc0, 0x3c, 0x79, 0x7b, 0x9e, 0x4d, 0x1c, 0xd3, 0xa8, 0x1a, - 0x39, 0xf0, 0xd3, 0x86, 0x6b, 0x33, 0x0d, 0x18, 0x3b, 0x35, 0xb6, 0xc9, - 0xc8, 0xe1, 0x62, 0xbc, 0x7b, 0x43, 0x8a, 0xb1, 0x0a, 0xe8, 0xed, 0x78, - 0x25, 0x5e, 0xc8, 0x7e, 0xf4, 0x4a, 0xd0, 0x85, 0x70, 0xe6, 0x51, 0x28, - 0x7e, 0xd7, 0x11, 0x66, 0x73, 0x11, 0xad, 0x90, 0x99, 0x45, 0x50, 0x9c, - 0x5c, 0x3c, 0x03, 0x19, 0xa2, 0x6f, 0x6d, 0xca, 0x7a, 0x0c, 0x42, 0x7e, - 0x98, 0x4a, 0x79, 0x8d, 0xcc, 0x98, 0x68, 0x38, 0x7c, 0x9b, 0xdb, 0xda, - 0x11, 0x69, 0x11, 0x49, 0x06, 0xf9, 0xb1, 0x9a, 0xaa, 0xbe, 0xa7, 0xd4, - 0xd7, 0x9c, 0xae, 0x95, 0x0a, 0x49, 0xff, 0xe8, 0xc7, 0xa1, 0x52, 0x75, - 0xaa, 0x87, 0xfc, 0xdc, 0x64, 0xb0, 0x59, 0xb2, 0x3a, 0x82, 0xcd, 0xda, - 0x65, 0xac, 0x62, 0x56, 0x21, 0xf0, 0x5a, 0x3c, 0xcf, 0xbd, 0x55, 0x1b, - 0xe6, 0x03, 0xde, 0xf8, 0x5d, 0xbf, 0x0b, 0x7a, 0x16, 0xbb, 0xf4, 0x0a, - 0x67, 0x06, 0x52, 0x69, 0x29, 0xf3, 0x98, 0x4e, 0x5f, 0x8f, 0x4a, 0x77, - 0xf3, 0x76, 0x7f, 0x71, 0x4c, 0x0f, 0x4b, 0x8e, 0xd3, 0x44, 0x23, 0xd7, - 0x89, 0x95, 0x27, 0xd5, 0x39, 0xb2, 0xda, 0x48, 0x9b, 0x35, 0xb8, 0x72, - 0xd3, 0xf2, 0x22, 0xe3, 0x55, 0xed, 0x60, 0x83, 0xcf, 0xd8, 0xcb, 0x12, - 0x77, 0xa8, 0xc7, 0xc0, 0x62, 0x4c, 0xf5, 0x09, 0x12, 0x05, 0x9e, 0xed, - 0x5f, 0xad, 0xd6, 0xe8, 0x3f, 0x83, 0x67, 0x2d, 0x79, 0xb5, 0xbf, 0xf1, - 0x10, 0x8d, 0xc6, 0xc8, 0x36, 0x5a, 0xdc, 0x0f, 0x04, 0x7c, 0x59, 0x77, - 0x30, 0x33, 0xb3, 0x1b, 0xa4, 0x0e, 0x14, 0xd3, 0x27, 0xeb, 0xdf, 0x3b, - 0x7e, 0xa3, 0x54, 0x29, 0x6d, 0x61, 0x30, 0x74, 0x9b, 0x25, 0x12, 0xe3, - 0x0b, 0x56, 0x1f, 0x79, 0xdf, 0x93, 0x85, 0x3c, 0x9c, 0x53, 0x04, 0x8c, - 0x8c, 0xa3, 0xd2, 0xc1, 0xaa, 0x84, 0xb8, 0x21, 0xe9, 0x10, 0x72, 0xe1, - 0x0e, 0x7d, 0xef, 0x94, 0x65, 0xb6, 0x12, 0xa4, 0x26, 0xc5, 0x22, 0xb6, - 0xf8, 0xe1, 0x34, 0xcc, 0x72, 0xf8, 0xf8, 0x23, 0xfa, 0x3c, 0x03, 0xc5, - 0xc8, 0x0f, 0x9f, 0x31, 0xc9, 0x67, 0x20, 0xf1, 0xea, 0xc0, 0x56, 0x80, - 0x70, 0xe1, 0x2d, 0x56, 0x31, 0x0c, 0xf6, 0x69, 0x0f, 0x0e, 0x6b, 0xd1, - 0x4b, 0x63, 0xdd, 0x20, 0xe9, 0x63, 0xdf, 0x2a, 0x33, 0x37, 0xbf, 0x4e, - 0x83, 0xc0, 0x61, 0x2b, 0xb3, 0xad, 0x7b, 0xac, 0x96, 0x29, 0xaa, 0x87, - 0xbe, 0x38, 0xf8, 0x1d, 0x8f, 0x5b, 0x91, 0xa1, 0x07, 0xdb, 0x7e, 0x1e, - 0xde, 0xfb, 0xf3, 0x68, 0x18, 0x94, 0x7d, 0x65, 0x95, 0x71, 0xd2, 0xef, - 0x7c, 0x44, 0xe4, 0xf2, 0xd1, 0xe8, 0x28, 0xdb, 0x18, 0xd3, 0x73, 0x28, - 0xe1, 0xa7, 0x5d, 0x1f, 0x10, 0x67, 0x2a, 0xfa, 0xf7, 0x72, 0x12, 0x87, - 0xa3, 0xa6, 0x45, 0x04, 0x88, 0x48, 0x0c, 0x92, 0x1c, 0x3c, 0x02, 0xe8, - 0x7c, 0x9a, 0xcb, 0x27, 0xdc, 0xc7, 0x67, 0xfd, 0xbe, 0xd6, 0xac, 0xf5, - 0xf2, 0xd5, 0x7a, 0x4e, 0x3c, 0x1a, 0x78, 0xe1, 0x0f, 0x26, 0xc2, 0xae, - 0x61, 0x2f, 0xb7, 0xb3, 0x9b, 0x63, 0x60, 0x39, 0x69, 0xdf, 0xef, 0x11, - 0xb8, 0xbb, 0x03, 0xaa, 0x8c, 0xe9, 0xe3, 0x6b, 0xc1, 0x10, 0xc5, 0xaa, - 0x28, 0xc2, 0x2e, 0xfc, 0x96, 0xe1, 0xd5, 0x97, 0xe2, 0x95, 0x45, 0x3a, - 0x1e, 0x91, 0x17, 0x4d, 0x8c, 0xb1, 0x75, 0x0c, 0x5d, 0x1e, 0x4b, 0xea, - 0x5f, 0xf3, 0x6d, 0xc7, 0x3f, 0xcc, 0xb2, 0x21, 0x39, 0x7e, 0xf5, 0xe1, - 0x32, 0xc9, 0xa5, 0x68, 0x05, 0x8d, 0xe0, 0xe9, 0x99, 0xd9, 0x68, 0x8f, - 0x4c, 0xde, 0xcc, 0x62, 0x1d, 0x92, 0x60, 0xe6, 0xb3, 0x33, 0x35, 0xa0, - 0xdb, 0x71, 0xa1, 0x81, 0x06, 0x9b, 0x43, 0xa6, 0xc7, 0xa9, 0xff, 0x65, - 0x78, 0xb5, 0xca, 0xf3, 0x3d, 0x66, 0x73, 0xc9, 0xbc, 0x47, 0x60, 0x81, - 0x93, 0xe6, 0xd7, 0x69, 0x71, 0x27, 0xf7, 0x09, 0x3b, 0x84, 0xe3, 0x87, - 0x52, 0x80, 0xaf, 0x7a, 0xc8, 0xb8, 0x41, 0x11, 0x16, 0x27, 0x3a, 0x8b, - 0xab, 0xcc, 0x04, 0xc6, 0xdf, 0x23, 0xaa, 0x48, 0x5d, 0x53, 0x92, 0xed, - 0xb3, 0x47, 0xd7, 0x6c, 0x94, 0xf6, 0x79, 0xd0, 0x6b, 0xbc, 0x46, 0x45, - 0x66, 0xb3, 0xd6, 0xfc, 0xcd, 0xfd, 0xb3, 0x04, 0x39, 0x82, 0x7a, 0xf6, - 0x27, 0xbd, 0x2d, 0x8a, 0x9b, 0x5f, 0xcf, 0x61, 0xb9, 0x09, 0x33, 0xf9, - 0xd8, 0x1c, 0xc5, 0x7a, 0x7c, 0x77, 0x20, 0xb3, 0xa0, 0xcf, 0x35, 0x10, - 0x49, 0x9a, 0xdc, 0x7c, 0x71, 0xa8, 0xfd, 0x02, 0x69, 0xeb, 0x58, 0x3e, - 0x92, 0x42, 0xdf, 0xcd, 0xbd, 0xc7, 0xb9, 0x6a, 0x33, 0x12, 0xfb, 0x8c, - 0x7f, 0x60, 0xee, 0x3c, 0x30, 0x84, 0x81, 0xf9, 0x12, 0x0a, 0xc2, 0x17, - 0xcb, 0x62, 0xaf, 0xa9, 0xa4, 0x7c, 0xa1, 0xbd, 0xf2, 0x96, 0xb0, 0xc7, - 0xe0, 0x4e, 0x4e, 0x6c, 0xa9, 0xbc, 0x94, 0xf4, 0xa6, 0x3d, 0x1e, 0xed, - 0x9d, 0xe1, 0x40, 0xf4, 0xb1, 0xc3, 0x76, 0x3a, 0xaa, 0xa2, 0x68, 0x5a, - 0x0d, 0x7c, 0x75, 0xba, 0x68, 0xb1, 0x63, 0x14, 0xdd, 0xa3, 0xd4, 0x59, - 0xf8, 0xcb, 0x55, 0xe0, 0x11, 0x09, 0xb3, 0xc7, 0xc2, 0x26, 0x85, 0xc0, - 0x7d, 0x67, 0xd5, 0x3b, 0xa1, 0x1a, 0xdd, 0xae, 0x30, 0xe5, 0xae, 0xe9, - 0xe3, 0xf6, 0x0f, 0x82, 0x6a, 0xcb, 0x83, 0x15, 0x7b, 0x52, 0x37, 0x4f, - 0x03, 0xa4, 0x88, 0xad, 0x6d, 0x4f, 0xae, 0x3e, 0xaf, 0xa7, 0x90, 0x01, - 0x00, 0xda, 0xeb, 0xa7, 0x01, 0x90, 0xd5, 0xbf, 0x0e, 0xf9, 0xd7, 0xae, - 0x91, 0x20, 0x3a, 0x66, 0xde, 0x13, 0xbc, 0x78, 0x81, 0xcc, 0xed, 0x2b, - 0xf1, 0x02, 0x6a, 0x52, 0x9c, 0x19, 0x5d, 0x26, 0xe2, 0xdb, 0xaa, 0x6c, - 0x58, 0x87, 0x11, 0xc3, 0xa3, 0x7b, 0x29, 0x4e, 0x65, 0xd3, 0x0e, 0x26, - 0xba, 0x09, 0xa6, 0x4a, 0x45, 0xc9, 0xfd, 0x71, 0x1b, 0x8c, 0xb7, 0xe9, - 0xa8, 0x81, 0x49, 0x68, 0xeb, 0xc9, 0x0b, 0x73, 0x73, 0x12, 0x76, 0x55, - 0x83, 0x85, 0x93, 0x85, 0x9b, 0xcc, 0x33, 0x8c, 0x61, 0x98, 0xd8, 0xdf, - 0x74, 0xca, 0xa1, 0x11, 0xa3, 0xe4, 0x07, 0x80, 0xca, 0xda, 0xda, 0xe3, - 0x65, 0xec, 0x43, 0x92, 0x00, 0x2b, 0xfc, 0xc0, 0x28, 0xcd, 0xb4, 0xb7, - 0xca, 0x50, 0xcd, 0xa2, 0x08, 0x62, 0x31, 0x16, 0x63, 0x4e, 0xf4, 0x00, - 0xb6, 0xe4, 0x2e, 0x8a, 0x94, 0x91, 0x0e, 0xe3, 0x66, 0xb5, 0xfb, 0xd6, - 0x7b, 0x8c, 0x41, 0xa4, 0x5a, 0xc6, 0xe5, 0x78, 0xaa, 0x84, 0x23, 0x30, - 0xdd, 0x50, 0x65, 0xbf, 0x8f, 0xe1, 0x98, 0xc4, 0x5d, 0x71, 0xe5, 0x0c, - 0x36, 0x38, 0x30, 0xad, 0x81, 0x3b, 0x4c, 0xbd, 0x21, 0x25, 0x7c, 0x25, - 0x09, 0xf2, 0x1e, 0x8e, 0x04, 0xe1, 0xd5, 0x0c, 0x8e, 0x1f, 0x3a, 0xd2, - 0x3a, 0xf5, 0x0d, 0x01, 0x6f, 0x5e, 0x0a, 0x22, 0xbd, 0x3d, 0xe9, 0x3c, - 0xea, 0xa5, 0x53, 0x24, 0x65, 0xee, 0x4c, 0x6f, 0x3e, 0xc3, 0xa4, 0xd6, - 0xc3, 0xdf, 0x67, 0x4f, 0x50, 0x40, 0xa2, 0xa0, 0x83, 0xab, 0x08, 0xa0, - 0x8f, 0xca, 0x1f, 0x58, 0x38, 0x62, 0x8b, 0xf2, 0x9c, 0x2d, 0x7b, 0x3d, - 0xd8, 0x99, 0x96, 0xd9, 0xb2, 0x76, 0x2a, 0xef, 0x6b, 0x8e, 0x36, 0x1f, - 0x2e, 0x81, 0x93, 0x0c, 0x8a, 0xb2, 0x2e, 0xa0, 0x34, 0x53, 0x71, 0xca, - 0x53, 0x5a, 0x33, 0xa5, 0x59, 0x86, 0xc0, 0x16, 0xf7, 0xef, 0xbd, 0x32, - 0xa8, 0xb4, 0xeb, 0x61, 0xe4, 0x75, 0x05, 0x01, 0x21, 0x85, 0xa8, 0xfc, - 0x21, 0x21, 0x24, 0x9e, 0x49, 0x09, 0x94, 0x7d, 0xae, 0x05, 0x90, 0x7e, - 0xd0, 0xe4, 0x62, 0x28, 0xf9, 0x99, 0x23, 0xdb, 0x4b, 0xc1, 0x66, 0xad, - 0xda, 0xfd, 0x9d, 0x70, 0x84, 0x86, 0xbd, 0x4e, 0x51, 0x99, 0x83, 0x59, - 0x1f, 0x86, 0x80, 0x49, 0x65, 0x4e, 0x1c, 0x8e, 0xfc, 0xcd, 0x05, 0x7d, - 0xb2, 0xe2, 0x13, 0xba, 0x3c, 0xeb, 0xa2, 0x06, 0x57, 0x8a, 0xe5, 0x3b, - 0x8f, 0x3a, 0x92, 0xd0, 0x3a, 0xb8, 0x18, 0x5a, 0x26, 0x05, 0x15, 0x00, - 0xae, 0x13, 0xa7, 0x92, 0xf1, 0x05, 0x4c, 0xc2, 0xf6, 0xf3, 0x69, 0xd1, - 0x1a, 0x64, 0xc2, 0xe3, 0xa8, 0x65, 0x61, 0x6e, 0x36, 0x47, 0x05, 0x12, - 0xe1, 0x30, 0x38, 0xd9, 0x5d, 0xfd, 0xc9, 0xa1, 0x9c, 0x89, 0x3a, 0x5e, - 0xc3, 0x38, 0x36, 0xc4, 0xe1, 0x12, 0x01, 0x27, 0x41, 0xe1, 0x73, 0x9f, - 0xb8, 0x30, 0x10, 0xf5, 0xbb, 0xb9, 0x6d, 0xcf, 0xfb, 0xbd, 0x74, 0xb1, - 0x6e, 0xad, 0x0b, 0xf6, 0x5a, 0x53, 0x44, 0xb8, 0xf3, 0xaf, 0xf5, 0x6d, - 0x86, 0xd4, 0x26, 0x40, 0xb3, 0xec, 0x4c, 0x10, 0xac, 0xe5, 0x88, 0xbd, - 0x26, 0x38, 0x7c, 0xf4, 0xde, 0x6a, 0x8b, 0x6e, 0x0c, 0x51, 0x0f, 0x3c, - 0xd7, 0x90, 0x8e, 0xe9, 0xae, 0x85, 0x8a, 0x67, 0x89, 0x03, 0xbd, 0x2b, - 0x8c, 0x6e, 0xd0, 0x99, 0x88, 0xc8, 0x90, 0x49, 0x51, 0x24, 0xa3, 0x6d, - 0xe8, 0xd9, 0x2e, 0xd9, 0x6d, 0xfe, 0x50, 0x5b, 0x70, 0xb0, 0x34, 0x4b, - 0x88, 0x17, 0x48, 0x58, 0xb2, 0x81, 0xa6, 0x02, 0x91, 0x3b, 0xb6, 0xd0, - 0x0f, 0xa0, 0x8e, 0x68, 0x5f, 0xd9, 0xc2, 0x25, 0xc0, 0xea, 0x9d, 0x23, - 0x8b, 0x6a, 0x94, 0x06, 0x07, 0x52, 0xb2, 0x7a, 0x3c, 0x7f, 0x0f, 0xd7, - 0x24, 0x92, 0x5e, 0xd7, 0x81, 0x46, 0xac, 0x1d, 0x3e, 0x4a, 0xa7, 0x12, - 0x10, 0x95, 0xc0, 0x16, 0x4f, 0xac, 0x92, 0x18, 0x0f, 0xef, 0x8a, 0x92, - 0x9c, 0xb9, 0x7f, 0x1a, 0x1f, 0x56, 0xe7, 0xa7, 0x96, 0xad, 0x88, 0xe8, - 0x9a, 0x4b, 0x4e, 0x04, 0x6a, 0x4f, 0x72, 0x61, 0x62, 0xe7, 0x3f, 0xa8, - 0x0a, 0xd9, 0x65, 0x99, 0x29, 0x2b, 0x88, 0x4e, 0xde, 0xde, 0xee, 0x14, - 0xdc, 0x99, 0x1b, 0xc3, 0x7f, 0x9a, 0xd9, 0x99, 0x41, 0xcd, 0x07, 0x88, - 0x42, 0x7b, 0x1f, 0xa2, 0xae, 0x2b, 0x33, 0x3b, 0xf4, 0xf5, 0xb4, 0xee, - 0x53, 0xf0, 0xf2, 0x25, 0x1d, 0x67, 0x60, 0x73, 0xfa, 0x92, 0x59, 0x60, - 0xc6, 0xfd, 0xb6, 0x0b, 0xa8, 0xef, 0xd7, 0xf7, 0xab, 0x4f, 0x6e, 0x97, - 0x3b, 0xad, 0x16, 0xa7, 0x3d, 0x46, 0xe5, 0x3c, 0x8a, 0xed, 0x3e, 0xe8, - 0x91, 0xf1, 0x14, 0xe5, 0xb2, 0xb0, 0x05, 0x23, 0xc6, 0xae, 0xd6, 0x66, - 0x47, 0x8c, 0x19, 0x43, 0x99, 0x3a, 0x68, 0xa9, 0xab, 0xe7, 0xd8, 0xb4, - 0xea, 0x26, 0xfd, 0x5a, 0x51, 0xcb, 0xc5, 0xa0, 0xf7, 0x4a, 0x7c, 0x82, - 0x69, 0x06, 0x93, 0x7e, 0xbb, 0xe6, 0x22, 0xd6, 0x6e, 0xa9, 0xf0, 0xb9, - 0x9a, 0xcf, 0x94, 0x38, 0x00, 0x00, 0xe1, 0xbf, 0xe6, 0xf4, 0x8d, 0x5b, - 0x8a, 0x0a, 0x03, 0x2d, 0x8f, 0x39, 0x61, 0xbc, 0xe0, 0xc6, 0xe0, 0x1e, - 0x3d, 0xe1, 0x95, 0xd9, 0xea, 0x75, 0xc6, 0x00, 0x95, 0x74, 0x2c, 0xb3, - 0x07, 0xd8, 0x41, 0x64, 0x9a, 0xae, 0xfd, 0x13, 0x9a, 0xc8, 0xf5, 0xaa, - 0x46, 0xa6, 0xb6, 0xe3, 0x84, 0x9f, 0x9a, 0x3e, 0xbf, 0xbb, 0x6c, 0x8b, - 0x2b, 0xb0, 0x55, 0xa9, 0x75, 0x61, 0x51, 0x7c, 0x04, 0xc8, 0x55, 0x5a, - 0x5c, 0xf0, 0xf5, 0x5d, 0x5a, 0x18, 0x5b, 0xf0, 0x4d, 0x2a, 0x89, 0x27, - 0xcc, 0x44, 0x5d, 0xc8, 0x51, 0xa1, 0x65, 0xfa, 0x52, 0xe5, 0x5a, 0xf3, - 0x46, 0xb4, 0x50, 0x59, 0x22, 0xf1, 0xb1, 0x77, 0x8d, 0xa0, 0x2d, 0x91, - 0x9a, 0x00, 0xb1, 0x94, 0xb3, 0xb1, 0x12, 0x73, 0x21, 0xff, 0x9b, 0x3d, - 0x72, 0x72, 0xe1, 0xa9, 0xe4, 0x35, 0x67, 0x19, 0x53, 0x8a, 0x2c, 0xcc, - 0xdb, 0x71, 0x39, 0x2b, 0x91, 0x76, 0xe4, 0x38, 0xcf, 0x50, 0x22, 0xbc, - 0xad, 0x58, 0x37, 0xf8, 0x48, 0x35, 0x02, 0x5b, 0x6c, 0xbf, 0xd8, 0x28, - 0xba, 0x58, 0x69, 0x5b, 0x7f, 0x0f, 0x6c, 0x08, 0x89, 0x6e, 0xeb, 0x70, - 0xa2, 0x9f, 0x79, 0x90, 0xa4, 0x3e, 0x33, 0x63, 0x68, 0x27, 0xd0, 0x1e, - 0x1f, 0xb8, 0x3d, 0x3a, 0xcf, 0xe6, 0x68, 0xaf, 0x13, 0xc2, 0x57, 0x32, - 0x8a, 0x33, 0x86, 0x4e, 0xaf, 0xde, 0xb5, 0xcd, 0xd8, 0x95, 0xc5, 0x86, - 0x61, 0x30, 0x48, 0x0e, 0x8c, 0x48, 0x20, 0x7c, 0xa9, 0xc5, 0x8f, 0xef, - 0xcd, 0xd9, 0xbb, 0x13, 0x16, 0x01, 0x9f, 0xc4, 0x0f, 0x29, 0x81, 0x0c, - 0x21, 0x50, 0xe1, 0x2d, 0x18, 0x49, 0xe8, 0x14, 0xf2, 0x0f, 0x33, 0x3a, - 0xb9, 0x0b, 0x56, 0xe8, 0xb8, 0x6b, 0x67, 0xed, 0x36, 0x37, 0x93, 0x18, - 0xc9, 0xeb, 0xa8, 0xab, 0xe3, 0x0a, 0x47, 0x84, 0x3b, 0x99, 0x42, 0xa0, - 0x5e, 0x6d, 0xba, 0xc6, 0x64, 0x70, 0x52, 0xfc, 0x31, 0x1e, 0x94, 0x21, - 0xbf, 0x2e, 0xfd, 0xb4, 0x9a, 0x0d, 0x94, 0x0a, 0xf8, 0x16, 0x65, 0xb4, - 0xbc, 0x1a, 0xa7, 0x40, 0x96, 0x67, 0x77, 0xee, 0x29, 0x3a, 0x81, 0x2f, - 0xee, 0xfb, 0x73, 0xfc, 0x47, 0x06, 0xa1, 0x86, 0xc5, 0x69, 0x8a, 0x31, - 0xab, 0xc0, 0xd4, 0x06, 0x75, 0x4c, 0x7d, 0xc3, 0x39, 0x75, 0xc5, 0x0e, - 0x51, 0x95, 0x78, 0xff, 0x18, 0xef, 0xe1, 0x47, 0x9a, 0xfc, 0xa5, 0xe4, - 0x90, 0xcf, 0xd2, 0x21, 0x61, 0x6d, 0x1a, 0xde, 0xcc, 0xab, 0x87, 0x2f, - 0x76, 0x4e, 0xe7, 0xce, 0xb8, 0x64, 0x79, 0x57, 0x6b, 0x41, 0x1f, 0xb3, - 0xd1, 0x98, 0x36, 0x30, 0xed, 0xfc, 0xf4, 0x93, 0x69, 0x76, 0xbb, 0x91, - 0x61, 0x79, 0x6b, 0x29, 0x51, 0x10, 0x00, 0xc1, 0x9b, 0xe5, 0xaa, 0xc3, - 0xae, 0xc4, 0xa9, 0x24, 0x12, 0x2c, 0x73, 0xce, 0xd4, 0xa7, 0x5a, 0xcc, - 0x8c, 0xb8, 0x03, 0x14, 0x2f, 0x30, 0x02, 0x1c, 0xac, 0x42, 0x28, 0xfa, - 0xbf, 0x13, 0xbe, 0xdb, 0xb0, 0x0a, 0xe1, 0xff, 0xb2, 0x99, 0xdd, 0xa5, - 0xbc, 0xa7, 0x91, 0x02, 0x42, 0x02, 0xb3, 0xc5, 0xd1, 0x22, 0x25, 0x8c, - 0x5a, 0x08, 0x5e, 0xc8, 0x5b, 0xed, 0x3e, 0xd7, 0xf0, 0xc5, 0x7d, 0x9e, - 0x7d, 0x81, 0xfe, 0x69, 0xb0, 0x50, 0x8e, 0x31, 0x0c, 0x27, 0x4e, 0x27, - 0x79, 0xa8, 0x22, 0x56, 0xa1, 0x2d, 0x91, 0x46, 0xc5, 0x68, 0xbb, 0xb2, - 0x80, 0x6b, 0xaf, 0x09, 0x95, 0x01, 0xe3, 0xd3, 0xc9, 0x5a, 0x0b, 0x41, - 0xc1, 0xb1, 0xa6, 0x79, 0x31, 0x71, 0x45, 0x9a, 0x20, 0xc3, 0xf3, 0x98, - 0xb7, 0x03, 0xef, 0x76, 0x9d, 0x5f, 0xdc, 0xf3, 0x53, 0x0e, 0x1b, 0x4e, - 0x7d, 0xbb, 0x44, 0x54, 0xb4, 0xc8, 0x16, 0x14, 0x62, 0x32, 0x75, 0xd8, - 0x79, 0x1a, 0x16, 0xe1, 0xfb, 0x01, 0xaa, 0xb9, 0x70, 0x86, 0xf1, 0xf9, - 0x29, 0xca, 0x43, 0x74, 0x67, 0xf7, 0xe4, 0x04, 0x74, 0xa7, 0xf2, 0xb3, - 0xc8, 0x27, 0x57, 0x07, 0x30, 0x65, 0x9f, 0xf9, 0x96, 0x29, 0xd7, 0x61, - 0x1e, 0x1c, 0xc3, 0x05, 0x21, 0xe3, 0xf5, 0x4e, 0x48, 0xa2, 0xcf, 0x6a, - 0xd3, 0xe7, 0xd6, 0xe7, 0x15, 0x5c, 0x3e, 0xcf, 0x9a, 0x1c, 0x4b, 0xf6, - 0xc3, 0x68, 0x04, 0xd0, 0x7d, 0xa6, 0x83, 0x55, 0x9b, 0x83, 0x7d, 0xf1, - 0xea, 0x6f, 0x41, 0xa5, 0x9b, 0x83, 0x1a, 0xac, 0x28, 0x7b, 0x4e, 0xef, - 0x74, 0x37, 0x19, 0x62, 0xb8, 0x8b, 0x75, 0xf3, 0x75, 0x0e, 0xf5, 0x84, - 0x62, 0x3f, 0x65, 0xa0, 0x65, 0x62, 0x67, 0x29, 0xe9, 0x80, 0x68, 0xb0, - 0x0b, 0x46, 0x59, 0xa6, 0x95, 0xb5, 0xfb, 0xbb, 0x6e, 0x91, 0x08, 0x3a, - 0x4f, 0x6e, 0xa7, 0xea, 0x5c, 0x6e, 0x65, 0x5f, 0xa4, 0xe4, 0x26, 0xcd, - 0x9e, 0x83, 0xf0, 0x5e, 0xa9, 0x7a, 0x53, 0xbd, 0x43, 0x96, 0x25, 0xd2, - 0xc3, 0x5b, 0x54, 0x19, 0x0c, 0x33, 0xaa, 0xa8, 0xed, 0xa2, 0x3b, 0x57, - 0xa0, 0xbb, 0x37, 0x90, 0x8c, 0x1b, 0x25, 0x7b, 0xb2, 0xd5, 0xf3, 0x99, - 0xec, 0xec, 0x95, 0x62, 0xda, 0x51, 0x50, 0xc8, 0xcb, 0x7d, 0x77, 0xfb, - 0x76, 0x6f, 0x7f, 0x72, 0xd0, 0xd0, 0x0a, 0x36, 0xda, 0x53, 0xf1, 0x22, - 0x43, 0x2f, 0x18, 0x75, 0x7c, 0x8d, 0x6d, 0x5a, 0xc5, 0xbc, 0x4e, 0x60, - 0x1e, 0x6b, 0xed, 0xa5, 0xfc, 0x47, 0x48, 0xd0, 0x64, 0x2d, 0x07, 0xc5, - 0x7b, 0xf9, 0xa2, 0x38, 0x96, 0x46, 0xe9, 0x66, 0xd6, 0x6f, 0xbd, 0xde, - 0x10, 0xe2, 0x2c, 0xc9, 0x03, 0x42, 0xe8, 0xac, 0x07, 0x5b, 0x50, 0x44, - 0x83, 0x9e, 0x16, 0xc3, 0x73, 0x29, 0x68, 0xf5, 0x68, 0x65, 0x4b, 0x45, - 0x88, 0x43, 0xba, 0x08, 0xee, 0xc0, 0x24, 0x9f, 0x80, 0x4f, 0x65, 0x9c, - 0x5a, 0xc4, 0xfd, 0x65, 0x3f, 0x73, 0xf9, 0xa6, 0xd2, 0x72, 0x2d, 0xbb, - 0xd1, 0x5b, 0x2f, 0x2d, 0x7d, 0x41, 0x45, 0x2c, 0x3e, 0xfb, 0xaa, 0x91, - 0x0c, 0xbb, 0x54, 0x79, 0xf3, 0x9f, 0xac, 0x25, 0x1f, 0x53, 0x22, 0x11, - 0x64, 0x88, 0xe9, 0xbd, 0xf0, 0x2f, 0xa6, 0xd0, 0xdf, 0x5d, 0xf2, 0x7a, - 0xbb, 0xed, 0x0e, 0x09, 0xec, 0x6b, 0x18, 0x6f, 0xf0, 0xa9, 0x08, 0x3f, - 0xc4, 0x31, 0x4f, 0x0f, 0xec, 0x71, 0x51, 0xf7, 0x71, 0xbe, 0xd5, 0x2a, - 0xab, 0xe1, 0x6c, 0x42, 0xad, 0x55, 0x65, 0x05, 0xb1, 0x3d, 0x78, 0x70, - 0xf0, 0xc1, 0xb5, 0xc3, 0x1c, 0xc6, 0x21, 0xb9, 0x04, 0x19, 0x3a, 0x8e, - 0xbe, 0xbb, 0x84, 0x3a, 0x30, 0x2c, 0x0a, 0xa6, 0x44, 0x15, 0x86, 0x09, - 0x05, 0x7d, 0x12, 0xa7, 0x79, 0x59, 0x63, 0x02, 0x11, 0xcf, 0x30, 0xc2, - 0xf3, 0xea, 0xff, 0x10, 0x82, 0xe7, 0x06, 0x81, 0x6f, 0x7d, 0x02, 0x96, - 0x52, 0x0f, 0xe6, 0xca, 0xcf, 0x07, 0x42, 0x03, 0xe7, 0x95, 0x8d, 0xbf, - 0x45, 0xbf, 0x95, 0xad, 0x29, 0x69, 0xcf, 0x0f, 0x6d, 0xaa, 0x60, 0xce, - 0xa3, 0x1d, 0xe0, 0xd9, 0xfb, 0x06, 0x54, 0x36, 0xe8, 0x24, 0xb1, 0x16, - 0xaf, 0x82, 0x24, 0x67, 0x58, 0x7b, 0xe4, 0x14, 0x24, 0x11, 0xee, 0x8f, - 0xb4, 0xb2, 0xdc, 0xf9, 0xea, 0x15, 0x5e, 0xb7, 0x42, 0x64, 0x46, 0x58, - 0x7a, 0xe2, 0x44, 0x6f, 0x90, 0x1a, 0xb7, 0x31, 0xc5, 0xf2, 0xee, 0x24, - 0x6b, 0xb2, 0x0b, 0x16, 0xcc, 0x34, 0x1e, 0xc5, 0xf1, 0xd1, 0xa6, 0x0e, - 0x31, 0x4e, 0x2b, 0x17, 0xf6, 0xf8, 0xc8, 0x76, 0xcb, 0x17, 0x6d, 0x15, - 0x85, 0x4f, 0x34, 0xbd, 0x94, 0x88, 0x64, 0x8e, 0x8a, 0x87, 0x16, 0x25, - 0x03, 0x5d, 0x17, 0xc9, 0xc1, 0x04, 0x96, 0xa3, 0x3c, 0xed, 0xe2, 0x6b, - 0xee, 0xfb, 0x5e, 0xfa, 0xc2, 0xbd, 0x74, 0x0a, 0x89, 0x83, 0xab, 0x45, - 0x32, 0x82, 0xf8, 0x44, 0x42, 0xd5, 0x45, 0xbc, 0x46, 0xc0, 0xce, 0xbc, - 0xeb, 0xf9, 0xf3, 0xae, 0x4d, 0x0b, 0xed, 0x6d, 0xbf, 0x0c, 0x2a, 0x29, - 0xc2, 0xc6, 0x91, 0xd2, 0x73, 0xc4, 0xd3, 0x18, 0x27, 0x85, 0x1d, 0xae, - 0x40, 0x37, 0xa7, 0x20, 0xf8, 0x84, 0x6c, 0xdc, 0x71, 0x3e, 0x27, 0x10, - 0x09, 0xde, 0xa8, 0xb3, 0x4a, 0x5c, 0xc8, 0xf5, 0x80, 0x4a, 0x36, 0xaf, - 0xed, 0xb2, 0xae, 0xd5, 0xc4, 0x45, 0x7d, 0xa7, 0x0f, 0x46, 0xd9, 0x44, - 0xfa, 0xf1, 0x7e, 0x9c, 0x76, 0x45, 0x21, 0xa5, 0x62, 0x01, 0xc1, 0x7e, - 0x7b, 0xa0, 0xab, 0xce, 0xdd, 0xe4, 0x46, 0xb9, 0x28, 0x42, 0xdf, 0xfc, - 0x99, 0x61, 0x89, 0x66, 0xec, 0xa6, 0x77, 0x05, 0xa7, 0x7a, 0x8a, 0xb9, - 0x3a, 0x2d, 0x66, 0x0b, 0x11, 0x13, 0xcb, 0xf7, 0xff, 0x2c, 0x90, 0xa1, - 0x5c, 0x99, 0x93, 0xbb, 0xbd, 0xc7, 0x6f, 0xfa, 0x98, 0xaf, 0xc4, 0x10, - 0x5d, 0xc5, 0xd5, 0x68, 0xef, 0xca, 0xb0, 0x7e, 0x85, 0xd8, 0xf9, 0xd9, - 0xb8, 0x42, 0x6c, 0xed, 0xb8, 0x60, 0x32, 0x18, 0x5d, 0xbc, 0x44, 0xf7, - 0x8e, 0xb3, 0xac, 0xaf, 0x8e, 0x05, 0xd3, 0x3e, 0x3c, 0x4d, 0x04, 0xa6, - 0xfe, 0x48, 0x9e, 0xf8, 0x73, 0xd9, 0xc2, 0x89, 0x6b, 0x4f, 0xd6, 0xa2, - 0xa6, 0x61, 0x0e, 0x22, 0xf0, 0x9d, 0xc8, 0xbe, 0x96, 0x34, 0x8c, 0x7c, - 0xfc, 0xe9, 0x69, 0x47, 0x1b, 0xb6, 0x3c, 0x27, 0x43, 0x66, 0x0c, 0x97, - 0x1c, 0x0d, 0x8f, 0x09, 0x69, 0x18, 0xce, 0x16, 0xb7, 0x9b, 0x13, 0xa4, - 0xd7, 0x65, 0x47, 0xb8, 0xa5, 0x0c, 0x24, 0xd2, 0x46, 0xc6, 0xcf, 0x26, - 0x43, 0x44, 0x8c, 0x3c, 0xf3, 0x3a, 0xbc, 0xb9, 0x34, 0x17, 0x31, 0xd7, - 0x61, 0xe3, 0xb5, 0x8a, 0xab, 0xca, 0x41, 0x2f, 0x02, 0x86, 0xf7, 0xb2, - 0xc8, 0x57, 0xc4, 0x3e, 0xad, 0x2d, 0xc4, 0x55, 0x4f, 0x09, 0xe2, 0xcc, - 0x9c, 0x19, 0xe3, 0xe1, 0xde, 0xb8, 0xd7, 0x4f, 0xb7, 0x42, 0x48, 0xe1, - 0x47, 0xaf, 0xef, 0x00, 0x13, 0x43, 0x20, 0x46, 0xd3, 0xe6, 0x7c, 0x1c, - 0xf8, 0x18, 0x92, 0xd6, 0xd9, 0x67, 0x47, 0xd5, 0xea, 0xa2, 0x64, 0xb0, - 0x08, 0xc2, 0x5a, 0x63, 0x04, 0x06, 0xb9, 0x93, 0x83, 0xee, 0x17, 0xaf, - 0xfb, 0x8e, 0x3a, 0x3f, 0xbf, 0x88, 0xdc, 0xdd, 0x41, 0xfb, 0xf3, 0xff, - 0x1c, 0xfd, 0xca, 0x3c, 0xac, 0x9d, 0xed, 0x6c, 0xc0, 0x3f, 0xc5, 0xc1, - 0xbf, 0x8f, 0xc2, 0xbe, 0x16, 0xf5, 0xaf, 0x3a, 0xfd, 0xef, 0xa1, 0x20, - 0x2b, 0x1b, 0x97, 0x7f, 0x08, 0xfd, 0x51, 0x75, 0x2f, 0x3b, 0xfb, 0x7f, - 0x22, 0xc6, 0xfc, 0x15, 0xe2, 0x68, 0x67, 0x65, 0xfb, 0x4f, 0x81, 0x18, - 0xbf, 0x02, 0xc1, 0x56, 0x0e, 0x3f, 0xe2, 0x10, 0x10, 0xa5, 0x00, 0x7f, - 0xd2, 0x8d, 0x19, 0xff, 0x7a, 0x06, 0xf8, 0x97, 0xff, 0xa9, 0x22, 0x63, - 0xfc, 0x35, 0x46, 0x00, 0x90, 0x01, 0xa4, 0xc6, 0x80, 0xea, 0x3b, 0x32, - 0x23, 0x08, 0xbf, 0xfc, 0x30, 0xf6, 0x4f, 0xff, 0x3b, 0xee, 0x4d, 0x1d, - 0xf8, 0x3a, 0x6e, 0x34, 0xe0, 0x86, 0x2a, 0x7c, 0x1d, 0xdc, 0x4c, 0x99, - 0xf6, 0xff, 0x82, 0xfd, 0xee, 0x7f, 0x07, 0xbf, 0x29, 0xfe, 0x5e, 0x07, - 0xff, 0x31, 0x1f, 0x7f, 0x48, 0xc1, 0xd7, 0x51, 0x9f, 0x7f, 0xf8, 0x89, - 0xf2, 0xbb, 0xff, 0x89, 0xfa, 0x27, 0x5d, 0xf8, 0x17, 0x2a, 0xde, 0x95, - 0x71, 0x20, 0xfc, 0xea, 0xd5, 0xd7, 0x71, 0x73, 0xdb, 0x7f, 0xe2, 0xfc, - 0xf2, 0x7f, 0xca, 0xf6, 0xa6, 0x96, 0x7c, 0x3d, 0x5b, 0x0d, 0x84, 0x7f, - 0x54, 0x96, 0xaf, 0x93, 0x79, 0x7b, 0xfe, 0x7b, 0xa5, 0xb9, 0xa9, 0xba, - 0x5e, 0x27, 0x4b, 0x44, 0xfc, 0xa3, 0x06, 0xfb, 0x77, 0x44, 0xbf, 0xfb, - 0xdf, 0x89, 0x6e, 0x4a, 0x76, 0xd7, 0x89, 0xda, 0x90, 0xff, 0x2c, 0xe0, - 0xfd, 0x27, 0x4c, 0x37, 0xc5, 0xb6, 0xeb, 0x4c, 0xee, 0x28, 0xff, 0x20, - 0xbd, 0x5d, 0xa7, 0x8a, 0x49, 0xfd, 0xf7, 0xa8, 0x6e, 0x6a, 0x49, 0xd7, - 0xa9, 0x4e, 0x50, 0xff, 0xac, 0x2c, 0xfd, 0x1d, 0xd3, 0xef, 0xfe, 0x77, - 0xa6, 0x9b, 0xaa, 0xcf, 0x75, 0xa6, 0x66, 0xb4, 0x7f, 0xd4, 0x80, 0xfe, - 0x13, 0xb2, 0x9b, 0x62, 0xc9, 0x8d, 0xf5, 0x82, 0xfe, 0x47, 0xe9, 0xe4, - 0x3f, 0x21, 0xba, 0x79, 0x85, 0x7b, 0x9d, 0xa8, 0x1b, 0xeb, 0x8f, 0x17, - 0xba, 0x7f, 0xb7, 0xa6, 0xfe, 0x37, 0xa2, 0x9b, 0x5f, 0x87, 0xd7, 0x89, - 0xc6, 0x88, 0xfe, 0xd7, 0x6f, 0xc5, 0x7f, 0x5a, 0xc4, 0xbf, 0xfc, 0xef, - 0x84, 0x37, 0x8f, 0xee, 0xd7, 0x09, 0x0b, 0x49, 0xff, 0xf6, 0x20, 0xff, - 0xef, 0x93, 0xfc, 0xa9, 0x05, 0x5c, 0xdf, 0x81, 0x54, 0xa9, 0xfe, 0xea, - 0xb1, 0xff, 0x49, 0xee, 0x37, 0x9b, 0xf5, 0xf5, 0xdc, 0x3d, 0xa8, 0x6e, - 0xb6, 0xee, 0xff, 0x36, 0x69, 0xf4, 0x1b, 0x49, 0xcb, 0x53, 0xff, 0x4f, - 0xc3, 0xbb, 0x8e, 0xac, 0xff, 0xed, 0x67, 0xcf, 0xf8, 0xdd, 0xff, 0x13, - 0x32, 0xf6, 0x0d, 0x64, 0x57, 0xea, 0xdf, 0xba, 0xee, 0xff, 0x5f, 0xf8, - 0x27, 0xd4, 0xbf, 0x75, 0xea, 0xff, 0x16, 0xfe, 0xe6, 0xcb, 0xec, 0xa2, - 0xfe, 0xab, 0x23, 0x5f, 0x87, 0x95, 0x67, 0xf8, 0x59, 0xde, 0xdf, 0xfd, - 0x3f, 0xc1, 0x62, 0xde, 0x80, 0x5d, 0xa7, 0xbe, 0x71, 0x22, 0xf8, 0x6f, - 0xc1, 0x31, 0x6e, 0x80, 0xe3, 0xd0, 0x5c, 0x3f, 0x45, 0xfc, 0x7b, 0xd8, - 0x28, 0x3f, 0xfe, 0xba, 0x0a, 0x40, 0x72, 0xf5, 0xcf, 0xf9, 0x6a, 0x9b, - 0x11, 0xa6, 0xf9, 0x31, 0xfa, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x01, - 0x81, 0x55, 0x99, 0xb6, 0x26, 0x00, 0x00, - }, - "conf/content/git-bare.zip", - ) -} - -func conf_etc_supervisord_conf() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x8c, 0x94, - 0xc1, 0x6e, 0xdb, 0x30, 0x0c, 0x86, 0xcf, 0xd3, 0x53, 0xf0, 0xb0, 0x63, - 0x1a, 0x77, 0xc5, 0x76, 0x49, 0xe1, 0xcb, 0x30, 0x60, 0x97, 0x0d, 0x01, - 0x8a, 0xed, 0x54, 0x04, 0x86, 0x6c, 0xd1, 0xb6, 0x10, 0x4b, 0x32, 0x28, - 0xaa, 0x6b, 0x76, 0xd8, 0xb3, 0x8f, 0x72, 0xdc, 0x35, 0xc1, 0x92, 0x26, - 0x39, 0xc4, 0xb1, 0xf2, 0xf3, 0x23, 0x4d, 0xf2, 0xf7, 0x63, 0xf2, 0xf6, - 0xb9, 0xea, 0x99, 0xc7, 0x2a, 0x22, 0x3d, 0x21, 0x6d, 0x54, 0x6b, 0x07, - 0x2c, 0x0b, 0x76, 0x63, 0x11, 0xd3, 0x28, 0x67, 0x36, 0x06, 0x5a, 0xc6, - 0xd0, 0x6c, 0xe1, 0xf4, 0xe7, 0x1e, 0x46, 0xcd, 0x3d, 0x70, 0x80, 0x5d, - 0x48, 0x04, 0x59, 0x89, 0x0c, 0x99, 0xa2, 0xd4, 0xe3, 0x2b, 0xc2, 0x6c, - 0xd4, 0x10, 0xba, 0x09, 0x2e, 0xd7, 0x03, 0xb6, 0x59, 0xca, 0xfd, 0x69, - 0xf0, 0x81, 0x08, 0xb2, 0x68, 0x82, 0xce, 0x94, 0xca, 0xe9, 0xe7, 0x7a, - 0xc7, 0x18, 0xcb, 0x4f, 0xb7, 0xdf, 0x3f, 0x9f, 0xa9, 0x6d, 0x8f, 0x11, - 0xa5, 0x75, 0xc9, 0x41, 0xb4, 0xbf, 0x11, 0x42, 0x0b, 0x33, 0x01, 0x6a, - 0x6c, 0x03, 0x21, 0x50, 0x60, 0xcd, 0x36, 0xf8, 0x7f, 0xe4, 0x5a, 0x37, - 0xdb, 0x34, 0xc6, 0xf2, 0xc3, 0xed, 0x1b, 0xd8, 0x89, 0xec, 0x93, 0xab, - 0x91, 0x32, 0x33, 0xc7, 0xa0, 0x81, 0x34, 0xbe, 0xd0, 0x63, 0xc6, 0x0d, - 0xf8, 0x84, 0x43, 0xf9, 0x4b, 0x93, 0x7f, 0x9b, 0x34, 0xe3, 0xac, 0x6f, - 0xc3, 0x02, 0x0c, 0xd6, 0xa9, 0x5b, 0x40, 0x8e, 0x5a, 0x00, 0x93, 0x6e, - 0x50, 0x8d, 0xd6, 0x9c, 0x1a, 0x8b, 0x59, 0xca, 0x1f, 0x67, 0x66, 0xb2, - 0x8f, 0x90, 0x6a, 0x9a, 0xfd, 0xc3, 0xf9, 0x60, 0x34, 0xba, 0xe0, 0xcb, - 0x56, 0x0f, 0x11, 0xaf, 0xa9, 0x86, 0x92, 0x3f, 0x9a, 0x80, 0x8e, 0xa0, - 0x61, 0x0f, 0x51, 0x4e, 0x4a, 0x35, 0xb9, 0x43, 0x77, 0x1f, 0xaf, 0x78, - 0xb2, 0xe3, 0x56, 0x45, 0xd6, 0xc4, 0xd2, 0xa8, 0xa9, 0x3e, 0x83, 0xb1, - 0x21, 0x3b, 0x72, 0xa0, 0x98, 0xa1, 0x23, 0x85, 0x26, 0x96, 0x77, 0xb7, - 0x17, 0x3a, 0xff, 0x3f, 0x34, 0x07, 0x62, 0x8c, 0x47, 0xbc, 0x24, 0x2b, - 0x5d, 0x52, 0x08, 0x7c, 0x55, 0x89, 0x99, 0x67, 0xb0, 0xd5, 0x69, 0x60, - 0xc8, 0x91, 0xaa, 0xe9, 0xed, 0x60, 0x64, 0x88, 0xc6, 0x52, 0x5e, 0x59, - 0xd9, 0x66, 0x1a, 0x1b, 0xeb, 0x19, 0xa9, 0x95, 0x99, 0xac, 0x5e, 0x5b, - 0xb3, 0x51, 0x07, 0x4e, 0x39, 0xd4, 0x54, 0xf2, 0x25, 0x95, 0xec, 0xa0, - 0x84, 0x33, 0x8a, 0x95, 0xd3, 0xdb, 0xbc, 0xca, 0xd6, 0x57, 0x87, 0xc7, - 0x47, 0xce, 0x69, 0x78, 0x90, 0x0c, 0x93, 0x3b, 0x13, 0x0d, 0x65, 0x76, - 0xec, 0xaa, 0x28, 0x2e, 0x38, 0xf4, 0x3e, 0x3f, 0x83, 0xcc, 0x6b, 0x56, - 0xc3, 0xcf, 0x87, 0x6f, 0x00, 0xb2, 0xee, 0xf3, 0xd1, 0x6c, 0x53, 0xc9, - 0x23, 0x8d, 0xeb, 0x48, 0xbb, 0x55, 0x17, 0xba, 0xb8, 0x51, 0x4d, 0x70, - 0x4e, 0x7b, 0x23, 0x05, 0x17, 0xb9, 0x71, 0xc5, 0x97, 0xbc, 0xc0, 0x41, - 0x92, 0x14, 0x5d, 0xc8, 0x36, 0x2f, 0x22, 0x35, 0x45, 0x67, 0xb9, 0x4f, - 0xf5, 0x52, 0xb4, 0x72, 0x2a, 0x37, 0x31, 0x5f, 0x62, 0x31, 0xcd, 0x75, - 0x19, 0xfb, 0x77, 0xf7, 0xd0, 0xa3, 0xf8, 0xca, 0xa5, 0xc8, 0xe2, 0x31, - 0xe0, 0x5e, 0x3c, 0x86, 0x7a, 0x00, 0xa9, 0x7e, 0x01, 0x5e, 0xc6, 0xf1, - 0x07, 0xa4, 0x90, 0xf7, 0x5f, 0xd7, 0x0f, 0xeb, 0xf5, 0x0f, 0x18, 0xec, - 0x16, 0x95, 0x4e, 0x1c, 0xa6, 0x78, 0xc9, 0xcc, 0x94, 0x50, 0x45, 0x36, - 0x21, 0x71, 0xf5, 0x62, 0xd5, 0x12, 0x8e, 0x5f, 0x1a, 0x37, 0x39, 0xe3, - 0x8d, 0x88, 0x90, 0x28, 0xbf, 0x3f, 0xd4, 0xfe, 0xe7, 0x05, 0xbd, 0x28, - 0xc2, 0x24, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x75, 0xb0, 0x31, - 0xf7, 0x04, 0x00, 0x00, - }, - "conf/etc/supervisord.conf", - ) -} - -func conf_gitignore_android() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x44, 0x8e, - 0xcd, 0x4a, 0x05, 0x31, 0x0c, 0x85, 0xf7, 0x7d, 0x8a, 0xc0, 0xdd, 0xa8, - 0xc8, 0xcc, 0x3b, 0x88, 0x3f, 0x20, 0x0a, 0xae, 0xdc, 0x4a, 0xa6, 0xcd, - 0xf4, 0x86, 0x09, 0x6d, 0x48, 0x3b, 0x17, 0x7d, 0x7b, 0xdb, 0x32, 0xdc, - 0xbb, 0x09, 0x9c, 0x7e, 0x1f, 0x3d, 0xe7, 0x04, 0x4f, 0x3b, 0x4b, 0x05, - 0x54, 0x15, 0xf6, 0x58, 0x39, 0x27, 0x58, 0x59, 0xa8, 0xb8, 0x87, 0x09, - 0x75, 0x1b, 0xf7, 0xc7, 0xb9, 0x13, 0xbc, 0xf6, 0x47, 0x58, 0xb3, 0x41, - 0x3d, 0x13, 0x3c, 0xa3, 0x5c, 0x78, 0x83, 0xef, 0xcf, 0x26, 0x04, 0xfa, - 0xed, 0xc2, 0x3b, 0x5e, 0x10, 0xbc, 0x60, 0x29, 0xd7, 0x0f, 0x46, 0xea, - 0xec, 0x8d, 0x12, 0x19, 0x56, 0x0a, 0x07, 0x5a, 0x38, 0xcd, 0x2e, 0x52, - 0x3b, 0x1d, 0x1a, 0x06, 0xa1, 0x83, 0x4c, 0x71, 0xa4, 0xd9, 0x2d, 0x6d, - 0x56, 0x18, 0xfc, 0x23, 0x7b, 0x14, 0xf0, 0x39, 0xad, 0x1c, 0x77, 0xbb, - 0x4d, 0x84, 0xbb, 0x12, 0x36, 0x50, 0xac, 0xe7, 0x47, 0xa0, 0xea, 0xef, - 0x9d, 0x74, 0x71, 0x52, 0xcb, 0x4a, 0x56, 0x99, 0x46, 0xf3, 0x97, 0xe5, - 0xb8, 0xa3, 0xb5, 0xe2, 0x2c, 0x81, 0x0c, 0xe2, 0x75, 0xc9, 0xf2, 0x07, - 0x2f, 0x5e, 0x58, 0x0b, 0x39, 0x3d, 0xa4, 0xf9, 0x3f, 0x00, 0x00, 0xff, - 0xff, 0x00, 0x96, 0x67, 0x2c, 0x0e, 0x01, 0x00, 0x00, - }, - "conf/gitignore/Android", - ) -} - -func conf_gitignore_c() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x24, 0x8d, - 0x3d, 0x0e, 0xc2, 0x30, 0x0c, 0x85, 0xf7, 0x9c, 0xc2, 0x52, 0x17, 0xe8, - 0x90, 0x53, 0xc0, 0x16, 0x89, 0x81, 0x81, 0x39, 0x3f, 0x46, 0x18, 0xa2, - 0xba, 0x8a, 0x53, 0x51, 0x6e, 0x8f, 0x9d, 0x0e, 0xfe, 0x86, 0x4f, 0x7e, - 0xef, 0x4d, 0x70, 0x4b, 0x6f, 0xcc, 0x1d, 0x9e, 0x54, 0x51, 0xdc, 0xec, - 0x59, 0xef, 0xc3, 0xce, 0x4d, 0x10, 0x28, 0xb5, 0xd8, 0x68, 0xd8, 0x4a, - 0x49, 0x19, 0x4d, 0xdf, 0x5f, 0xb1, 0x61, 0x01, 0x1e, 0x31, 0x81, 0x13, - 0x2d, 0xd9, 0xc3, 0x83, 0x96, 0xc2, 0x5f, 0x81, 0x4b, 0x08, 0x72, 0xd6, - 0xcf, 0x52, 0xab, 0x52, 0x78, 0xc0, 0xcf, 0x66, 0x7e, 0xd6, 0xa1, 0xf9, - 0xeb, 0x8e, 0x79, 0xeb, 0x31, 0x1d, 0x73, 0xb8, 0xa3, 0x8d, 0x6e, 0xdd, - 0xea, 0xd7, 0xf5, 0x1f, 0x00, 0x00, 0xff, 0xff, 0xca, 0x54, 0xa9, 0x22, - 0x8f, 0x00, 0x00, 0x00, - }, - "conf/gitignore/C", - ) -} - -func conf_gitignore_c_sharp() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x6c, 0x54, - 0x4d, 0x6f, 0xe3, 0x36, 0x10, 0xbd, 0xf3, 0x57, 0x0c, 0xe0, 0xa2, 0xed, - 0x6a, 0x13, 0x09, 0x28, 0x8a, 0x5e, 0x7a, 0x4a, 0x9c, 0xdd, 0x24, 0xc0, - 0x36, 0x09, 0x6c, 0x6f, 0xb7, 0x80, 0x61, 0x18, 0x14, 0x39, 0x96, 0x18, - 0x53, 0x24, 0xcb, 0x8f, 0xc4, 0xee, 0xa1, 0xbf, 0xbd, 0x43, 0x4a, 0x6e, - 0xb2, 0xbb, 0xb9, 0x3c, 0x51, 0xc3, 0x99, 0xe1, 0xf0, 0xcd, 0xf0, 0xcd, - 0xe0, 0x32, 0x29, 0x2d, 0xe1, 0xa3, 0xd5, 0x12, 0x7d, 0x80, 0x9f, 0x8f, - 0x36, 0x81, 0xe0, 0x06, 0xf6, 0x88, 0x0e, 0x5a, 0x65, 0x40, 0xed, 0x80, - 0x6c, 0x3f, 0x49, 0xd0, 0x6a, 0x8f, 0x67, 0x10, 0x2d, 0x84, 0x68, 0x3d, - 0x82, 0xd4, 0x3a, 0x00, 0x37, 0x12, 0x9c, 0x6c, 0xc3, 0x3b, 0xb6, 0xbe, - 0x6c, 0x37, 0xca, 0x34, 0x6c, 0x7d, 0x6f, 0x37, 0xed, 0x63, 0xc3, 0xd8, - 0x0c, 0x86, 0x10, 0x31, 0x44, 0x28, 0xe0, 0x31, 0x24, 0x1d, 0x03, 0x5b, - 0xd1, 0xcf, 0x62, 0x5a, 0xb3, 0xd9, 0x0c, 0x6e, 0x3b, 0x93, 0x93, 0xfd, - 0xa9, 0x42, 0xe2, 0x1a, 0x96, 0x31, 0x49, 0x65, 0x29, 0x62, 0x70, 0xd6, - 0x73, 0x7f, 0x84, 0x9d, 0xd2, 0x18, 0xce, 0xa0, 0x2d, 0x35, 0x4e, 0x39, - 0xce, 0xf2, 0xa9, 0x39, 0xb6, 0x6c, 0x42, 0x87, 0x06, 0x3d, 0x8f, 0x28, - 0xa1, 0x3d, 0x82, 0xb3, 0x2e, 0x69, 0xee, 0xbf, 0xc9, 0xc7, 0xa5, 0x3c, - 0xb7, 0x26, 0xd4, 0xb9, 0xa8, 0xcf, 0x01, 0xfd, 0x79, 0x70, 0x28, 0xd4, - 0x4e, 0x89, 0x31, 0x05, 0xab, 0xea, 0x90, 0x2c, 0x61, 0xa2, 0xbd, 0xfc, - 0xa3, 0x4d, 0x2d, 0xad, 0x08, 0x91, 0xb2, 0xe6, 0x2a, 0x27, 0x8a, 0x4e, - 0x57, 0x58, 0x5f, 0xc9, 0x0d, 0xb6, 0xa9, 0xa3, 0xbb, 0x2e, 0xfc, 0x06, - 0x35, 0xf2, 0x80, 0x0d, 0x3b, 0xfc, 0xf6, 0x6b, 0xc3, 0xaa, 0xad, 0xaa, - 0x05, 0xa1, 0xcb, 0x58, 0x2b, 0xbd, 0x27, 0x1c, 0x30, 0x72, 0xfa, 0xd8, - 0xf6, 0x91, 0xd0, 0x89, 0x3e, 0xa3, 0x6c, 0x33, 0x76, 0xa2, 0xa0, 0x24, - 0xf4, 0xc1, 0xe5, 0x83, 0xdb, 0x7c, 0x7c, 0xd4, 0x6d, 0x41, 0x55, 0x30, - 0xfb, 0xc7, 0x21, 0xef, 0x6a, 0xdb, 0x11, 0x3e, 0x05, 0x17, 0x84, 0x28, - 0x8b, 0x90, 0x17, 0x75, 0xe1, 0xa6, 0x94, 0x39, 0x5d, 0x7a, 0xfe, 0xfe, - 0x3d, 0x75, 0x50, 0xf4, 0x38, 0xdd, 0x4e, 0xd1, 0xa1, 0x54, 0x5a, 0xcd, - 0x5d, 0xbe, 0xa9, 0x11, 0x39, 0xbb, 0x75, 0x68, 0x82, 0xdc, 0xe5, 0x33, - 0x09, 0x5f, 0x62, 0x27, 0xc2, 0x9c, 0xb7, 0x39, 0x36, 0x57, 0xe3, 0x02, - 0x86, 0x30, 0x9e, 0x3b, 0xe2, 0x21, 0xbb, 0x5f, 0x27, 0x25, 0xb9, 0x11, - 0x08, 0x17, 0x29, 0xda, 0x81, 0x47, 0x65, 0x0d, 0xac, 0xac, 0xd5, 0x7b, - 0x15, 0xc9, 0xab, 0x73, 0xcb, 0xcc, 0x5d, 0x76, 0x5c, 0xe0, 0xb2, 0xe7, - 0xde, 0xa1, 0x07, 0x45, 0xd3, 0x02, 0xf5, 0xdd, 0x87, 0x15, 0x08, 0x2b, - 0x95, 0xe9, 0x4a, 0x57, 0x94, 0x61, 0xdb, 0xff, 0x5d, 0xaa, 0x1c, 0x70, - 0x37, 0xf7, 0xc9, 0x14, 0x96, 0x8c, 0x28, 0xab, 0x8a, 0xd5, 0xd5, 0xb4, - 0x22, 0x0a, 0x04, 0xd7, 0xf5, 0x61, 0xd0, 0xd9, 0xf3, 0xd6, 0x50, 0x87, - 0x68, 0x08, 0x7b, 0x85, 0xd4, 0x1d, 0x9b, 0xa2, 0x4b, 0x11, 0x76, 0x65, - 0x8e, 0x81, 0xad, 0x3f, 0xe0, 0xe6, 0xe0, 0x7c, 0xae, 0x9d, 0x5c, 0xaf, - 0xac, 0x78, 0xf0, 0xf6, 0x11, 0x45, 0x1c, 0xcb, 0xa0, 0xee, 0xa6, 0x01, - 0x4d, 0x1c, 0x0b, 0x9f, 0x26, 0xc8, 0xfa, 0x53, 0x49, 0x2f, 0xee, 0x4d, - 0x61, 0xb7, 0x47, 0xed, 0x9a, 0xd7, 0xd6, 0x9b, 0x6c, 0xa8, 0xea, 0x9b, - 0xc3, 0xea, 0x4d, 0xeb, 0xfc, 0x0d, 0x6b, 0xdf, 0x8b, 0x37, 0xad, 0xfb, - 0x37, 0xad, 0xee, 0x3b, 0xeb, 0x4d, 0x1c, 0xf4, 0x2f, 0xdf, 0x59, 0xfb, - 0x38, 0x72, 0x31, 0xd7, 0x4a, 0xec, 0xcf, 0xef, 0x73, 0x47, 0xa4, 0xf2, - 0xb4, 0x6d, 0xfd, 0x91, 0xb9, 0xd4, 0x6a, 0x15, 0xfa, 0xbc, 0xff, 0x30, - 0x2e, 0xe1, 0x0b, 0xb6, 0x70, 0x5f, 0x98, 0x22, 0x82, 0x27, 0xe3, 0x89, - 0xcf, 0xbb, 0x74, 0x8d, 0x11, 0x1e, 0xb8, 0xd8, 0xf3, 0x8e, 0xde, 0xd5, - 0xd5, 0x4b, 0x9e, 0xc9, 0x94, 0x9d, 0xbe, 0x28, 0x23, 0xed, 0x73, 0x80, - 0x8b, 0x7f, 0x12, 0x3d, 0xdb, 0xf1, 0x61, 0x4c, 0x09, 0x45, 0x38, 0x50, - 0xd2, 0x42, 0x58, 0x2d, 0x82, 0xc4, 0xdd, 0x6b, 0xff, 0x65, 0xd1, 0x0c, - 0xee, 0x1c, 0x4c, 0xd9, 0x5e, 0xd5, 0x79, 0xe1, 0xdc, 0xe9, 0xd4, 0xa2, - 0x1b, 0xf7, 0xb1, 0x27, 0x29, 0x9a, 0x14, 0x65, 0x12, 0x14, 0x16, 0xfe, - 0xd6, 0x5f, 0x89, 0xc7, 0x7a, 0x15, 0x37, 0xf4, 0x5b, 0x9e, 0x60, 0xb6, - 0x54, 0x74, 0xf6, 0x3c, 0x4f, 0x3d, 0x23, 0x2e, 0xa8, 0xb5, 0x97, 0x39, - 0x74, 0x19, 0x36, 0xf1, 0xa8, 0x71, 0x3d, 0x17, 0x1b, 0xeb, 0xea, 0x8a, - 0xfd, 0xfb, 0x43, 0x76, 0x93, 0xed, 0x20, 0x35, 0xbb, 0x3e, 0xe9, 0xc6, - 0x76, 0x6e, 0x25, 0xc2, 0x8c, 0x7a, 0x4f, 0x1a, 0xb2, 0xa3, 0x29, 0x58, - 0xdc, 0x5e, 0x34, 0x4b, 0xa5, 0x9f, 0xd0, 0x6b, 0xd5, 0xf5, 0x31, 0xbf, - 0x86, 0xcc, 0xf8, 0x28, 0x05, 0x54, 0x68, 0x72, 0xf0, 0x23, 0xa9, 0x01, - 0x49, 0x54, 0x9c, 0x34, 0x68, 0xe7, 0xed, 0x40, 0x63, 0x6d, 0x28, 0x24, - 0x96, 0xd1, 0x36, 0x40, 0x73, 0x78, 0x0a, 0x2c, 0x4e, 0x59, 0x38, 0x39, - 0x18, 0x7c, 0xa6, 0x57, 0xf5, 0xed, 0x73, 0xa3, 0xb0, 0x40, 0x83, 0x58, - 0x9f, 0xb2, 0x8f, 0x49, 0x39, 0x11, 0x66, 0x6c, 0xa4, 0x18, 0xa4, 0xca, - 0x48, 0x04, 0x51, 0x70, 0x52, 0x28, 0x78, 0x46, 0xe8, 0xf9, 0x13, 0x42, - 0xa7, 0x22, 0xfc, 0x7e, 0xfe, 0x8e, 0x6d, 0x3f, 0xbb, 0xce, 0x73, 0x89, - 0x8b, 0x52, 0xd1, 0xf6, 0x63, 0x0e, 0x6e, 0xd8, 0x98, 0xaa, 0x6a, 0xd8, - 0xb4, 0xfb, 0xc9, 0x76, 0x55, 0xfd, 0xd7, 0x1f, 0x9f, 0xfe, 0x0b, 0x00, - 0x00, 0xff, 0xff, 0xfe, 0xac, 0xdb, 0x69, 0xf1, 0x05, 0x00, 0x00, - }, - "conf/gitignore/C Sharp", - ) -} - -func conf_gitignore_c_() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x52, 0x56, - 0x70, 0xce, 0xcf, 0x2d, 0xc8, 0xcc, 0x49, 0x4d, 0x51, 0xf0, 0x4f, 0xca, - 0x4a, 0x4d, 0x2e, 0x51, 0x48, 0x03, 0x72, 0x8a, 0xb9, 0xb4, 0xf4, 0x8a, - 0x73, 0xf2, 0x81, 0x24, 0x98, 0xc8, 0xe7, 0xe2, 0x42, 0x52, 0xe7, 0x52, - 0x99, 0x97, 0x98, 0x9b, 0x99, 0xac, 0x90, 0x93, 0x99, 0x54, 0x94, 0x58, - 0x94, 0x09, 0x51, 0x0c, 0x52, 0x96, 0x52, 0x09, 0x14, 0x42, 0x51, 0x1a, - 0x5c, 0x92, 0x58, 0x82, 0xa6, 0x32, 0x27, 0x31, 0x13, 0x4c, 0x02, 0x89, - 0x44, 0x2e, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa4, 0xe6, 0x21, 0x26, - 0x7e, 0x00, 0x00, 0x00, - }, - "conf/gitignore/C++", - ) -} - -func conf_gitignore_google_go() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x3c, 0x8e, - 0x41, 0x4b, 0xc4, 0x30, 0x10, 0x85, 0xef, 0xf3, 0x2b, 0x06, 0xf6, 0xa2, - 0x45, 0x22, 0x0a, 0x8a, 0x57, 0x51, 0xbc, 0x7a, 0xd8, 0xa3, 0x48, 0x49, - 0xd3, 0x69, 0x77, 0x96, 0x36, 0x13, 0x33, 0x53, 0xe9, 0xfe, 0x7b, 0xa7, - 0xae, 0xee, 0xe1, 0xf1, 0xde, 0x4b, 0x5e, 0x3e, 0xb2, 0xc3, 0x17, 0x99, - 0x0b, 0x4f, 0xd4, 0xe3, 0x7b, 0x77, 0xa4, 0x64, 0x38, 0x78, 0xd1, 0x1b, - 0xdc, 0x5b, 0x34, 0x4e, 0x18, 0x73, 0x8f, 0xaf, 0xa7, 0x1c, 0x67, 0xcf, - 0x13, 0x77, 0x8a, 0x57, 0xfb, 0x43, 0xac, 0x97, 0xb5, 0x5e, 0x43, 0x13, - 0xc4, 0x15, 0x5d, 0x2a, 0x00, 0x3b, 0x7c, 0x93, 0xa9, 0xa7, 0xaa, 0xd0, - 0x4a, 0x77, 0x84, 0xd6, 0x48, 0x6d, 0x3b, 0x7d, 0xae, 0xe9, 0xc0, 0xe6, - 0x2f, 0x96, 0x4a, 0xa8, 0x85, 0x12, 0x0f, 0x4e, 0xa4, 0xd5, 0x28, 0x2b, - 0x4b, 0xd6, 0xdb, 0x52, 0x69, 0xe0, 0x95, 0xd4, 0x39, 0x1f, 0x0f, 0x8f, - 0x4f, 0xdf, 0x5f, 0x9f, 0xf0, 0xe7, 0x41, 0x16, 0x47, 0x34, 0x21, 0x8d, - 0x72, 0x17, 0x46, 0x39, 0xa7, 0xfb, 0x90, 0xa0, 0x75, 0x6f, 0x7b, 0x1a, - 0x96, 0xfc, 0x5f, 0x46, 0xb1, 0x53, 0x21, 0xdd, 0x56, 0xbf, 0x9d, 0xd6, - 0x22, 0xd5, 0x42, 0x03, 0xe7, 0x8f, 0xcc, 0x91, 0xf3, 0x76, 0xe7, 0x08, - 0x5a, 0xe9, 0x27, 0x00, 0x00, 0xff, 0xff, 0x3c, 0xab, 0x59, 0x6f, 0xfb, - 0x00, 0x00, 0x00, - }, - "conf/gitignore/Google Go", - ) -} - -func conf_gitignore_java() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x1c, 0xcb, - 0xb1, 0x6a, 0xc3, 0x30, 0x10, 0xc6, 0xf1, 0x5d, 0x4f, 0x71, 0xe0, 0xa5, - 0x35, 0x45, 0x82, 0x8e, 0xdd, 0xdb, 0xc1, 0x60, 0xe8, 0xd0, 0xdd, 0x5c, - 0xe5, 0x8b, 0x25, 0xe7, 0xe4, 0x13, 0x3a, 0xc5, 0xca, 0xe3, 0x47, 0xc9, - 0xf2, 0x1f, 0x3e, 0x7e, 0xdf, 0x68, 0x3d, 0xa3, 0xaa, 0x31, 0x03, 0xcc, - 0xf2, 0x1f, 0x99, 0xe0, 0x4f, 0x84, 0x15, 0x2e, 0x52, 0x60, 0xc2, 0x13, - 0xe1, 0x6d, 0xfa, 0x9c, 0xbf, 0xdf, 0x8d, 0x4d, 0x75, 0xb7, 0x35, 0x65, - 0xf7, 0x94, 0xbf, 0xe8, 0xaf, 0xb8, 0x11, 0xfc, 0x74, 0xaf, 0x30, 0x98, - 0xd1, 0xee, 0x58, 0x7a, 0xdb, 0xab, 0xd4, 0xdb, 0xd1, 0x19, 0x4b, 0xbd, - 0x21, 0x43, 0x42, 0x1f, 0xe2, 0x41, 0xe0, 0x0b, 0x6a, 0x00, 0x96, 0x4d, - 0x3f, 0x40, 0x89, 0x20, 0xd4, 0x9a, 0xbf, 0x9c, 0x6b, 0xad, 0xf5, 0xf7, - 0x89, 0xd6, 0x4b, 0x72, 0x74, 0xb8, 0x55, 0xda, 0xc1, 0x82, 0xab, 0x0b, - 0xc4, 0xd9, 0x51, 0x29, 0x52, 0x96, 0x20, 0x55, 0xb3, 0x54, 0x7b, 0x4f, - 0x6c, 0x82, 0x2e, 0x7d, 0x5c, 0x72, 0x5c, 0xc7, 0x47, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xe7, 0xd6, 0xf7, 0xa4, 0xbc, 0x00, 0x00, 0x00, - }, - "conf/gitignore/Java", - ) -} - -func conf_gitignore_objective_c() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x44, 0x90, - 0xb1, 0x4e, 0xc4, 0x30, 0x10, 0x44, 0xfb, 0xfb, 0x8a, 0x91, 0xd2, 0xe2, - 0xa4, 0xbf, 0x86, 0x82, 0x86, 0x92, 0x8e, 0xda, 0xb2, 0xf7, 0x9c, 0x45, - 0x89, 0x37, 0x5a, 0xaf, 0x41, 0xf7, 0xf7, 0xac, 0x13, 0x09, 0x9a, 0x28, - 0xd2, 0x8c, 0xe7, 0x3d, 0x7b, 0xc2, 0x9b, 0x24, 0x89, 0x1f, 0x92, 0xdb, - 0x6d, 0xba, 0x4d, 0xf8, 0x24, 0x28, 0x25, 0xd9, 0x77, 0xaa, 0x19, 0xb1, - 0x44, 0xae, 0xcd, 0x10, 0x73, 0xe6, 0x5a, 0x60, 0x2b, 0x61, 0x14, 0x91, - 0xd9, 0x3b, 0x26, 0xfa, 0x84, 0x09, 0x9e, 0xd2, 0x15, 0x73, 0x61, 0xe3, - 0x52, 0x45, 0x69, 0xc6, 0xbb, 0xfc, 0xd0, 0x37, 0xa9, 0x8f, 0x79, 0x84, - 0xb6, 0x4a, 0xdf, 0x32, 0xbe, 0x7a, 0x2e, 0x84, 0x87, 0xe8, 0xd9, 0x6f, - 0xb4, 0x3d, 0x5e, 0xce, 0xbd, 0x43, 0xa5, 0x21, 0x3a, 0x2b, 0x49, 0xf5, - 0x1f, 0x25, 0x38, 0xd9, 0x58, 0x2a, 0x39, 0xde, 0xee, 0x3e, 0xb2, 0x9a, - 0x1d, 0xf7, 0x65, 0x29, 0x9d, 0x33, 0xb5, 0x39, 0x0d, 0xdb, 0xc3, 0x25, - 0x66, 0xd1, 0xb2, 0xf4, 0xe6, 0x5e, 0xd7, 0x37, 0xfc, 0x27, 0xab, 0xed, - 0xdb, 0x74, 0x71, 0x03, 0x87, 0x4b, 0x2b, 0x38, 0x2c, 0x8c, 0x34, 0xfc, - 0xc9, 0x07, 0xae, 0xa1, 0xb9, 0x4c, 0x22, 0x3f, 0x5b, 0x4d, 0x65, 0x7b, - 0x3d, 0x9f, 0x60, 0x5c, 0x71, 0xf9, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xa9, - 0x17, 0x4f, 0x2a, 0x18, 0x01, 0x00, 0x00, - }, - "conf/gitignore/Objective-C", - ) -} - -func conf_gitignore_python() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x34, 0x8f, - 0xb1, 0x4e, 0xc4, 0x30, 0x0c, 0x86, 0x77, 0x3f, 0x45, 0x24, 0xb6, 0x93, - 0xce, 0x2c, 0x88, 0x17, 0x80, 0x85, 0x01, 0x89, 0x01, 0x26, 0x84, 0xaa, - 0x34, 0xf1, 0x95, 0x40, 0x1a, 0x47, 0xb6, 0xa9, 0xda, 0xb7, 0x27, 0xe9, - 0xf5, 0x86, 0x44, 0xf6, 0xf7, 0xff, 0x89, 0x7f, 0x9f, 0xb0, 0x6e, 0x9f, - 0x81, 0xe3, 0x17, 0xc0, 0x9d, 0x7b, 0x72, 0xb4, 0x1a, 0x15, 0x4d, 0x5c, - 0x14, 0x4e, 0xa8, 0xdc, 0xe1, 0x9b, 0x0f, 0xbf, 0x7e, 0xa2, 0x0e, 0x68, - 0x9a, 0xae, 0xf7, 0x39, 0x95, 0x0b, 0x43, 0x4c, 0x6a, 0x30, 0xfe, 0xa5, - 0x1c, 0xa1, 0x31, 0x85, 0xea, 0xc5, 0x14, 0xc6, 0x54, 0x60, 0xf1, 0x02, - 0xba, 0xcb, 0x91, 0x16, 0xca, 0x5c, 0xcf, 0xbb, 0x01, 0x53, 0x51, 0xf3, - 0x39, 0x53, 0xc4, 0x70, 0x99, 0x20, 0xa7, 0xb1, 0x9f, 0xc7, 0x07, 0x18, - 0x86, 0xba, 0x05, 0x1f, 0xbe, 0x69, 0x18, 0xfa, 0xc8, 0x97, 0xc3, 0x26, - 0x2e, 0x73, 0xff, 0x37, 0xd5, 0x73, 0x2b, 0xd0, 0x56, 0xeb, 0xea, 0x47, - 0x49, 0xe6, 0x8c, 0xd4, 0xdc, 0xbd, 0x0b, 0xbc, 0x90, 0xb4, 0x74, 0x4e, - 0xa8, 0x72, 0x9f, 0x8e, 0x37, 0x02, 0x68, 0xbc, 0x42, 0x61, 0xa5, 0x6e, - 0x55, 0x5c, 0xe7, 0xdc, 0x1f, 0xbf, 0x8b, 0x2f, 0x9a, 0xbd, 0x1d, 0x2b, - 0xce, 0xfb, 0x8a, 0xaf, 0xe2, 0x9e, 0xaf, 0x39, 0x49, 0x00, 0x67, 0xc1, - 0x78, 0xeb, 0xf6, 0x9c, 0x58, 0x85, 0x7f, 0x28, 0x58, 0x2b, 0xb6, 0xa6, - 0x1c, 0xdd, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x02, 0xf0, 0xe2, 0xc0, - 0x3a, 0x01, 0x00, 0x00, - }, - "conf/gitignore/Python", - ) -} - -func conf_gitignore_ruby() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x2c, 0x8c, - 0xbd, 0xaa, 0xc3, 0x30, 0x0c, 0x46, 0x77, 0x3d, 0x45, 0xe0, 0x6e, 0x19, - 0xec, 0x67, 0xb8, 0x50, 0x0a, 0x5d, 0xbb, 0x75, 0x0a, 0xb2, 0xac, 0x18, - 0x53, 0xff, 0x21, 0xa9, 0x85, 0xbe, 0x7d, 0x4d, 0xd2, 0xe1, 0x20, 0xf1, - 0x71, 0x38, 0xab, 0x4b, 0x5c, 0x61, 0x75, 0x12, 0x08, 0x5c, 0x78, 0xb5, - 0x58, 0x18, 0x1c, 0xf5, 0xb6, 0xe7, 0x04, 0xd4, 0xdf, 0x2c, 0x98, 0x18, - 0x6e, 0x4d, 0x0d, 0x4b, 0xe1, 0x78, 0xcd, 0x85, 0x15, 0x4a, 0x0e, 0xfe, - 0x54, 0xc5, 0x57, 0x6c, 0x30, 0x9e, 0x09, 0x24, 0x76, 0x02, 0x1d, 0x4c, - 0x5e, 0x78, 0x74, 0x31, 0x05, 0x63, 0x35, 0x6f, 0x75, 0x9c, 0xcf, 0x2c, - 0x69, 0xee, 0x6d, 0x3b, 0x86, 0x09, 0xfc, 0x2d, 0x8f, 0xff, 0xfb, 0x65, - 0x41, 0xb1, 0xbc, 0x23, 0x4d, 0xdf, 0x7d, 0xf0, 0x88, 0x6c, 0xbf, 0x3b, - 0xf1, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb1, 0xca, 0xf7, 0x91, 0x9e, - 0x00, 0x00, 0x00, - }, - "conf/gitignore/Ruby", - ) -} - -func conf_license_affero_gpl() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0xc4, 0xbd, - 0x5b, 0x73, 0xdb, 0x46, 0x96, 0x38, 0xfe, 0xde, 0x9f, 0xa2, 0x8b, 0x2f, - 0x91, 0xaa, 0x68, 0x25, 0x4e, 0x66, 0x92, 0x9d, 0x64, 0x2a, 0x55, 0xb4, - 0x44, 0xc7, 0xac, 0x91, 0x25, 0xad, 0x24, 0xc7, 0xe3, 0x47, 0x90, 0x68, - 0x8a, 0x58, 0x83, 0x00, 0x17, 0x0d, 0x48, 0xe6, 0x7e, 0xfa, 0xff, 0xb9, - 0xf6, 0x05, 0x24, 0xed, 0xfc, 0xe7, 0xe5, 0x97, 0xda, 0xad, 0xb1, 0x24, - 0xa0, 0xfb, 0xf4, 0xe9, 0x73, 0xbf, 0xe1, 0x8f, 0x9b, 0x0f, 0x76, 0xf6, - 0xf6, 0xed, 0xfc, 0xfe, 0xd6, 0xfe, 0x31, 0xbf, 0x99, 0xdf, 0xcf, 0xae, - 0xed, 0xdd, 0x87, 0x37, 0xd7, 0x8b, 0x4b, 0x0b, 0xff, 0x3f, 0xbf, 0x79, - 0x98, 0x1b, 0x7b, 0xfc, 0xbf, 0x3f, 0x5d, 0xe7, 0xab, 0xb6, 0xb1, 0x3f, - 0x4d, 0xed, 0xeb, 0x7f, 0xd8, 0x9b, 0xf6, 0xd9, 0x6d, 0x97, 0xae, 0xb3, - 0x3f, 0xfe, 0xf0, 0xc3, 0x2f, 0xc6, 0xd8, 0xcb, 0x76, 0xb7, 0xef, 0xaa, - 0xa7, 0x4d, 0x6f, 0xcf, 0x2e, 0xcf, 0xe9, 0x97, 0xf6, 0x6d, 0xe7, 0x9c, - 0x7d, 0x68, 0xd7, 0xfd, 0x4b, 0xd1, 0x39, 0xfb, 0xb6, 0x1d, 0x9a, 0xb2, - 0xe8, 0x61, 0x85, 0xa9, 0x5d, 0x34, 0xab, 0x0b, 0xfb, 0xcf, 0x4d, 0xdf, - 0xef, 0x7e, 0xfd, 0xfe, 0xfb, 0xb5, 0x5f, 0x5f, 0xb4, 0xdd, 0xd3, 0xf7, - 0xbf, 0x1b, 0x3b, 0x7f, 0x76, 0xdd, 0xbe, 0x6d, 0x9c, 0xad, 0xbc, 0xdd, - 0xb9, 0x6e, 0x5b, 0xf5, 0xbd, 0x2b, 0x6d, 0xdf, 0xda, 0x15, 0xac, 0x6e, - 0x8b, 0xa6, 0xb4, 0x65, 0xe5, 0xfb, 0xae, 0x5a, 0x0e, 0xbd, 0xb3, 0xf0, - 0xec, 0x12, 0xd6, 0xdb, 0xe2, 0x1f, 0x2b, 0xe7, 0x8d, 0x6d, 0xd7, 0xb6, - 0xdf, 0xc0, 0x9b, 0x75, 0xb5, 0x72, 0x8d, 0x77, 0xb6, 0x6c, 0x57, 0xc3, - 0xd6, 0x35, 0xfd, 0xd4, 0xc2, 0xf3, 0x76, 0xb5, 0x29, 0x9a, 0xa7, 0xaa, - 0x79, 0xb2, 0x55, 0x8f, 0xcb, 0x37, 0x6d, 0x6f, 0x8b, 0xba, 0x6e, 0x5f, - 0x5c, 0x79, 0x61, 0x4e, 0x1d, 0x99, 0xfe, 0xbb, 0xeb, 0x5c, 0xb1, 0x5d, - 0xd6, 0x0e, 0x9f, 0x7a, 0xdc, 0x38, 0x4b, 0x08, 0x5c, 0xaf, 0x5d, 0xd7, - 0xda, 0x3f, 0x5c, 0xe3, 0xba, 0xa2, 0xb6, 0x77, 0xc3, 0x12, 0x36, 0xb5, - 0xd7, 0xb2, 0x31, 0x2c, 0x5f, 0xd8, 0x35, 0x9c, 0x7e, 0x4a, 0x80, 0xd7, - 0x6e, 0xdd, 0x07, 0xa0, 0xd6, 0x6d, 0x67, 0xbc, 0xe2, 0x04, 0x4f, 0xd4, - 0xf6, 0x1b, 0xc0, 0xe2, 0xe7, 0xaa, 0x29, 0x3d, 0x9e, 0xe0, 0xa5, 0xed, - 0x3e, 0xfb, 0xa9, 0xf5, 0x3b, 0xb7, 0xaa, 0xd6, 0xd5, 0x0a, 0x40, 0xdc, - 0xdb, 0xd2, 0xf9, 0xea, 0xa9, 0x61, 0x4c, 0xc0, 0x22, 0x43, 0xe7, 0xcc, - 0xaa, 0x6d, 0x01, 0x41, 0x84, 0x4e, 0xfb, 0x52, 0xf5, 0x1b, 0x38, 0xb9, - 0x83, 0xcd, 0xb6, 0xdb, 0xa1, 0xa9, 0xfa, 0xbd, 0xad, 0x1a, 0xfe, 0x45, - 0x01, 0x3b, 0xc2, 0xa2, 0x8d, 0xeb, 0x71, 0x5d, 0xeb, 0x5d, 0x07, 0x58, - 0xb3, 0xba, 0xff, 0x85, 0x1e, 0x49, 0x80, 0xf3, 0x08, 0x9d, 0xdd, 0xb6, - 0xbe, 0xb7, 0x47, 0x40, 0xdc, 0x75, 0xc5, 0xaa, 0x47, 0x88, 0x18, 0x46, - 0x8b, 0x7f, 0x55, 0xc8, 0x0c, 0x40, 0xd6, 0x17, 0x9f, 0xe1, 0xf1, 0x97, - 0x62, 0x6f, 0xf7, 0xed, 0xd0, 0xd1, 0xf9, 0xcb, 0x76, 0x8b, 0x30, 0xfb, - 0x8d, 0xae, 0x44, 0x97, 0xe0, 0x08, 0x36, 0x5a, 0xe4, 0xc2, 0xda, 0x37, - 0x7b, 0x80, 0xbb, 0xe9, 0xbb, 0xc2, 0xf7, 0x53, 0x83, 0x2f, 0x1e, 0x47, - 0x2a, 0xef, 0x57, 0x35, 0xbd, 0x6b, 0x4a, 0xc6, 0xc4, 0xd3, 0x50, 0x74, - 0x05, 0xfc, 0xec, 0xc6, 0xfb, 0x99, 0x83, 0xfd, 0x00, 0x8b, 0x48, 0x2e, - 0x48, 0xbe, 0x84, 0xe4, 0x02, 0x0e, 0xd3, 0x3e, 0x75, 0xc5, 0xf6, 0xd5, - 0x2b, 0x58, 0x68, 0x8b, 0x80, 0x23, 0x56, 0x91, 0x34, 0x3a, 0xb7, 0x2d, - 0x2a, 0x78, 0x0a, 0x97, 0x8b, 0x17, 0x85, 0x78, 0xc1, 0x45, 0xaa, 0xde, - 0xdb, 0x01, 0xb0, 0xe8, 0x09, 0x75, 0x1f, 0x37, 0x0e, 0xb0, 0xef, 0xf0, - 0xb2, 0x8a, 0xcf, 0xb8, 0x2e, 0xbe, 0x14, 0x50, 0x37, 0xc5, 0x3f, 0xe1, - 0xcb, 0x9d, 0x03, 0x62, 0xe9, 0x90, 0xf4, 0x60, 0x33, 0x01, 0x73, 0x8a, - 0x04, 0x68, 0x76, 0x1d, 0x1c, 0x0e, 0x70, 0x70, 0xfb, 0x8d, 0x63, 0xa7, - 0x04, 0x10, 0xa1, 0xed, 0x37, 0x45, 0x8f, 0x67, 0x37, 0x9b, 0xe2, 0x99, - 0x71, 0x9a, 0xe0, 0x3c, 0x61, 0x14, 0xe6, 0x8f, 0x03, 0xf8, 0xec, 0x99, - 0x60, 0xa8, 0x7b, 0x62, 0xb2, 0x84, 0x15, 0xb6, 0xb6, 0x5a, 0xe3, 0x92, - 0x40, 0x53, 0x7e, 0x73, 0x3e, 0x0d, 0x5b, 0xc0, 0x19, 0x56, 0xae, 0x7a, - 0xc6, 0x97, 0x87, 0x6e, 0x85, 0x4b, 0x96, 0x40, 0x58, 0x1d, 0x10, 0x58, - 0x63, 0x9f, 0x5c, 0x4f, 0x3c, 0x45, 0x2f, 0x9a, 0x17, 0xb8, 0x12, 0xf8, - 0x31, 0x79, 0x15, 0x9f, 0x49, 0xee, 0x3d, 0x6c, 0x0f, 0xaf, 0x03, 0x2a, - 0x2d, 0xc0, 0xb6, 0x62, 0xe8, 0x70, 0x91, 0x06, 0x68, 0xf5, 0xc5, 0x10, - 0x9c, 0x72, 0x45, 0xc0, 0x0c, 0x08, 0x67, 0x58, 0xee, 0x73, 0xd3, 0xbe, - 0x84, 0x75, 0xcb, 0x16, 0xd7, 0xf4, 0xb8, 0x32, 0xe0, 0x97, 0x6f, 0xe5, - 0xca, 0x3d, 0xbb, 0x1a, 0xb9, 0xc3, 0xf3, 0x4b, 0xb8, 0xc9, 0xd7, 0xe8, - 0x0a, 0xf6, 0xe9, 0xdd, 0xaa, 0x67, 0x2a, 0x22, 0x11, 0xe6, 0x0d, 0xb3, - 0xd4, 0x0b, 0x90, 0x6e, 0xef, 0x76, 0xfe, 0x57, 0x7b, 0xf6, 0xfa, 0xdc, - 0x16, 0x1e, 0x2e, 0xbe, 0x27, 0x8e, 0x66, 0x41, 0xd7, 0x36, 0xd9, 0x81, - 0x18, 0xce, 0xb3, 0x1f, 0xcf, 0xe1, 0x2c, 0x70, 0xe1, 0x06, 0x61, 0x24, - 0x79, 0xa4, 0x62, 0xe1, 0x65, 0x53, 0xad, 0x36, 0xf6, 0x09, 0xd0, 0xe8, - 0xe9, 0x00, 0xb5, 0x7b, 0x02, 0x70, 0x48, 0xce, 0x79, 0x92, 0xac, 0x22, - 0xe8, 0xa6, 0xc9, 0xe5, 0x19, 0x58, 0xf3, 0x7b, 0x62, 0xca, 0xb2, 0x5a, - 0xef, 0xb3, 0xfd, 0xe8, 0xb0, 0x33, 0xe0, 0x69, 0x60, 0x9f, 0xb2, 0xe8, - 0xf6, 0x76, 0x09, 0x07, 0x5c, 0x03, 0x12, 0x01, 0x95, 0x25, 0x90, 0x5c, - 0x53, 0x22, 0xc9, 0x21, 0xd5, 0x12, 0xc5, 0x7e, 0x17, 0xa8, 0xa3, 0x62, - 0xc4, 0x98, 0x6a, 0x0b, 0x47, 0x07, 0x29, 0x0e, 0x22, 0xd2, 0x03, 0x59, - 0x95, 0xc8, 0x5e, 0xf0, 0x7c, 0xef, 0xba, 0xa6, 0x60, 0xf9, 0x1a, 0x18, - 0x06, 0xf7, 0x95, 0xfb, 0x98, 0xe2, 0x4d, 0xc3, 0xcf, 0x7b, 0xa3, 0x34, - 0xf1, 0x52, 0x01, 0x7d, 0xee, 0x40, 0x4a, 0x96, 0xb8, 0x13, 0x48, 0x5b, - 0x80, 0x68, 0x0b, 0xa4, 0xff, 0x5c, 0x54, 0x75, 0x01, 0x82, 0x93, 0xb8, - 0x87, 0x65, 0x48, 0x99, 0xdc, 0x4d, 0x6b, 0xaa, 0x66, 0xd5, 0x76, 0xbb, - 0x16, 0xc4, 0x18, 0x32, 0xc1, 0xfb, 0xa2, 0xd9, 0xa7, 0x0f, 0x1c, 0xd0, - 0x2b, 0xfe, 0xff, 0xc6, 0x15, 0x1d, 0x88, 0x00, 0x60, 0x05, 0x40, 0x8c, - 0x71, 0xb0, 0xc0, 0xd0, 0x15, 0x4f, 0xf0, 0xe3, 0x92, 0x91, 0xd3, 0x39, - 0x3f, 0xd4, 0x3d, 0x1e, 0x3c, 0x91, 0x90, 0xb0, 0xf8, 0x3b, 0x10, 0xf4, - 0x70, 0xa0, 0xe9, 0x48, 0x32, 0x46, 0x0e, 0x07, 0xc8, 0x4b, 0xbc, 0xd1, - 0x5c, 0x54, 0xfa, 0x29, 0x5f, 0x21, 0x2f, 0x0b, 0x48, 0xda, 0xdb, 0x35, - 0x9c, 0x8a, 0x6f, 0x0a, 0xcf, 0xb8, 0x6c, 0x87, 0xfe, 0xc2, 0xa8, 0x5a, - 0x38, 0xa1, 0x0f, 0x58, 0x95, 0x21, 0x8e, 0x3f, 0xd3, 0x95, 0xf0, 0x6d, - 0x56, 0xb0, 0xa1, 0xe0, 0x98, 0x0e, 0x53, 0xbb, 0x9e, 0x00, 0x27, 0x5c, - 0xf3, 0x02, 0xc5, 0x0a, 0x58, 0xc3, 0x23, 0x63, 0xe0, 0x33, 0x2a, 0xbe, - 0x91, 0x38, 0x61, 0x5b, 0x8b, 0x07, 0x02, 0xc8, 0x6a, 0x57, 0x78, 0xd6, - 0x6b, 0xde, 0xa4, 0xec, 0xd9, 0xb7, 0xc9, 0x52, 0x17, 0xff, 0xbf, 0xb4, - 0x57, 0x90, 0x37, 0x99, 0x1a, 0x82, 0x1b, 0x63, 0xed, 0x43, 0xe4, 0x43, - 0xa8, 0xf4, 0x03, 0x50, 0x34, 0xe2, 0x92, 0x10, 0xe5, 0xe2, 0xc1, 0x52, - 0x40, 0x98, 0x1e, 0x7c, 0x24, 0x08, 0x23, 0xa0, 0x05, 0x7d, 0x05, 0x17, - 0xb4, 0x40, 0xd1, 0xfb, 0xbf, 0x43, 0x05, 0x98, 0xa6, 0xbf, 0xf1, 0xe5, - 0x21, 0xe1, 0xa0, 0xb8, 0x1e, 0x29, 0x30, 0x80, 0x04, 0x49, 0xb7, 0x2a, - 0x55, 0xa4, 0x24, 0x42, 0x69, 0x9d, 0x03, 0xa2, 0x18, 0xee, 0x86, 0xa6, - 0x11, 0xec, 0x76, 0x8a, 0x1b, 0x43, 0x8c, 0xc1, 0xaf, 0x80, 0xa0, 0xe0, - 0xc5, 0x2f, 0x08, 0x4f, 0x20, 0xb3, 0x5b, 0x64, 0x69, 0xb9, 0x88, 0x81, - 0xf5, 0xe8, 0xe1, 0xcd, 0x4d, 0xe1, 0x66, 0x4c, 0x21, 0x8f, 0x01, 0x8e, - 0xf8, 0xc6, 0x2a, 0xa4, 0x7a, 0x5e, 0x6e, 0x2a, 0x0c, 0x7f, 0x78, 0xab, - 0x82, 0x04, 0x06, 0xde, 0x7c, 0x0d, 0x78, 0xe6, 0xf4, 0xc6, 0xb6, 0x75, - 0x09, 0x87, 0x17, 0x65, 0x0d, 0xb6, 0x05, 0xdc, 0x0a, 0xea, 0x04, 0x78, - 0xe3, 0xeb, 0x37, 0x8a, 0xd4, 0x45, 0x7b, 0xfb, 0x0d, 0x73, 0x0a, 0x3f, - 0x0e, 0x0a, 0xaa, 0xf0, 0x99, 0x6e, 0x01, 0xc8, 0xda, 0xed, 0x0e, 0x9f, - 0xb3, 0xbe, 0xda, 0xc2, 0x65, 0x75, 0xf6, 0xa9, 0x2d, 0x6a, 0x4f, 0x38, - 0x01, 0xba, 0xa8, 0x3c, 0x9c, 0x15, 0x60, 0x83, 0xb7, 0x41, 0x68, 0x44, - 0x48, 0xc8, 0x98, 0x0a, 0xa8, 0x96, 0x53, 0x28, 0x4c, 0x77, 0xd7, 0x6c, - 0x80, 0xc9, 0xcf, 0x9b, 0xc2, 0x1b, 0x26, 0x5a, 0x64, 0x62, 0x14, 0xf7, - 0xa7, 0x5f, 0x14, 0x91, 0xa9, 0xfc, 0x03, 0xaf, 0xd1, 0x8e, 0x78, 0x8f, - 0x60, 0x4c, 0x3a, 0x54, 0x59, 0xd1, 0xde, 0x0b, 0x24, 0x0e, 0xa2, 0x68, - 0x55, 0xa1, 0x4e, 0x80, 0xd7, 0x3c, 0x9b, 0x01, 0x20, 0x21, 0xab, 0x9e, - 0x84, 0x19, 0xca, 0x22, 0x14, 0xb2, 0xb0, 0x46, 0x22, 0x67, 0x95, 0x07, - 0x19, 0xf3, 0x2b, 0xb6, 0xab, 0xd6, 0x2d, 0xda, 0x87, 0xa7, 0xad, 0xc3, - 0xc7, 0xf9, 0xfd, 0xfb, 0x07, 0x3b, 0xbb, 0xb9, 0xb2, 0x97, 0xb7, 0x37, - 0x57, 0x8b, 0xc7, 0xc5, 0xed, 0xcd, 0x03, 0x3e, 0xfc, 0xc3, 0x05, 0xe8, - 0xa0, 0x75, 0xd5, 0xf0, 0x8e, 0xf4, 0xfe, 0xe4, 0x31, 0x51, 0x04, 0x13, - 0xb6, 0x08, 0x88, 0x02, 0xf4, 0xe8, 0x3f, 0xe9, 0xe1, 0xbf, 0xc9, 0x9f, - 0xbc, 0x5e, 0x30, 0xb7, 0x27, 0x20, 0xb1, 0x3d, 0x58, 0x05, 0xae, 0x80, - 0xc3, 0x05, 0xdd, 0xf4, 0xaa, 0xae, 0xc0, 0x4a, 0xa8, 0x8b, 0x17, 0xd1, - 0x81, 0xc5, 0x6e, 0x47, 0x0c, 0x3c, 0xb2, 0x36, 0x8d, 0x5a, 0x9b, 0xc8, - 0xc6, 0x40, 0x0b, 0xde, 0x6d, 0x2b, 0xc4, 0xd5, 0xb0, 0x42, 0xce, 0xdb, - 0x16, 0xfe, 0x73, 0x00, 0xdf, 0x81, 0x1d, 0x4c, 0xf2, 0x3f, 0x85, 0x1e, - 0x25, 0x76, 0xd8, 0x93, 0x44, 0x3d, 0x71, 0xa9, 0x5c, 0x48, 0xc9, 0x97, - 0x44, 0x12, 0xd4, 0x28, 0xf4, 0xd6, 0xce, 0x0b, 0xd8, 0x4c, 0x1e, 0x61, - 0x5b, 0xb9, 0x2c, 0x81, 0xeb, 0x89, 0x1c, 0xbc, 0x9d, 0x80, 0x66, 0x9c, - 0xc0, 0x53, 0x13, 0x79, 0xc1, 0xf9, 0x09, 0xdd, 0xcc, 0x04, 0x2f, 0x15, - 0x6c, 0x05, 0xd0, 0x55, 0x13, 0x92, 0xc3, 0x4b, 0x54, 0x57, 0x65, 0x05, - 0x42, 0x60, 0x00, 0x0c, 0xa0, 0x35, 0x01, 0x4e, 0x44, 0xd1, 0x54, 0xff, - 0x57, 0x44, 0xb4, 0x3f, 0xb6, 0x76, 0xc2, 0x9a, 0x13, 0x16, 0x61, 0xd8, - 0x18, 0x51, 0xea, 0x52, 0xac, 0x3b, 0xd0, 0x87, 0x68, 0xdb, 0x95, 0xc5, - 0x8e, 0xfc, 0x01, 0xfc, 0x61, 0x07, 0x2a, 0x46, 0xaf, 0x03, 0xdf, 0x31, - 0xa8, 0x16, 0x41, 0xee, 0xfb, 0x0d, 0x09, 0x12, 0x92, 0x52, 0xac, 0x61, - 0xd4, 0x12, 0x88, 0x3a, 0x7c, 0x2a, 0x18, 0x06, 0xac, 0xb3, 0xa2, 0x11, - 0x99, 0x8f, 0xc2, 0xa3, 0x31, 0xee, 0x0b, 0x98, 0xd0, 0xf4, 0x1e, 0x4b, - 0x99, 0x44, 0x5d, 0x11, 0x70, 0x80, 0x0c, 0x61, 0xea, 0x42, 0x00, 0x4f, - 0xa4, 0xc0, 0x44, 0x60, 0x32, 0xa0, 0x02, 0xeb, 0x0a, 0xf5, 0x00, 0xbe, - 0x82, 0xc0, 0xf3, 0xbf, 0x26, 0xcb, 0x82, 0x75, 0xd8, 0x84, 0x36, 0x4e, - 0x9f, 0x12, 0x53, 0x61, 0xb2, 0x02, 0x75, 0xdf, 0xc1, 0x33, 0xf8, 0xbb, - 0x89, 0xa0, 0xc2, 0x55, 0x02, 0x30, 0xe8, 0xc0, 0x26, 0xec, 0x29, 0x97, - 0x9d, 0x2c, 0x4f, 0xab, 0x1b, 0xb1, 0x79, 0xe4, 0xcf, 0x01, 0xc9, 0x20, - 0x8d, 0x77, 0xc5, 0x13, 0xe8, 0xf1, 0x43, 0x3c, 0x97, 0x44, 0x26, 0x64, - 0x9f, 0xb1, 0xa7, 0x02, 0xda, 0x8c, 0xf5, 0x87, 0xe8, 0x31, 0x93, 0x62, - 0xef, 0xa5, 0x1d, 0xea, 0x92, 0x6d, 0x5c, 0x34, 0x91, 0x4a, 0xd0, 0x07, - 0xab, 0x1e, 0x48, 0x17, 0xe0, 0x50, 0x43, 0xa7, 0x82, 0x1f, 0xeb, 0x4a, - 0x0d, 0x0b, 0xb8, 0x9c, 0x35, 0xde, 0x06, 0x99, 0x31, 0x42, 0x70, 0x48, - 0xed, 0xc0, 0xc4, 0xf8, 0x44, 0xbc, 0x23, 0x60, 0x86, 0xa9, 0x75, 0x5f, - 0x56, 0x0e, 0x2e, 0xda, 0x7d, 0x71, 0xab, 0xa1, 0x17, 0x67, 0x10, 0x59, - 0xdf, 0xa0, 0xdc, 0x03, 0x73, 0x0b, 0x89, 0x48, 0x6c, 0x2d, 0xd6, 0xd4, - 0x60, 0xa1, 0x3f, 0x17, 0x6c, 0x43, 0xe3, 0x9d, 0xdd, 0xc9, 0x39, 0x91, - 0x10, 0xc0, 0x7a, 0xa9, 0x07, 0x90, 0x9e, 0x41, 0x9c, 0x98, 0x4c, 0x9c, - 0x9c, 0xd1, 0x61, 0xdb, 0xa8, 0xae, 0x53, 0xd9, 0x02, 0xa6, 0xb5, 0x1a, - 0x03, 0xc1, 0x4a, 0x12, 0x9d, 0xc4, 0x4a, 0x82, 0x8d, 0x49, 0xd4, 0xb0, - 0x68, 0x66, 0x80, 0x95, 0x03, 0x1e, 0x12, 0x19, 0xf1, 0x74, 0x59, 0xe8, - 0x88, 0x3d, 0x83, 0x78, 0x41, 0xa5, 0xea, 0xc1, 0xcd, 0xa8, 0xeb, 0x70, - 0x13, 0x80, 0xa3, 0x67, 0x37, 0x26, 0x77, 0xe4, 0x53, 0xe4, 0x79, 0xa4, - 0xa0, 0x5d, 0x72, 0x04, 0x92, 0x0d, 0xae, 0xc1, 0xed, 0x65, 0x69, 0x83, - 0xc4, 0x8f, 0xeb, 0xaa, 0xa7, 0xd1, 0x76, 0xc1, 0xf6, 0x67, 0x3f, 0x02, - 0x2d, 0x35, 0x27, 0xae, 0x18, 0x79, 0x84, 0xea, 0x81, 0x16, 0x64, 0x67, - 0xc2, 0x9a, 0x5d, 0x3b, 0x3c, 0x6d, 0x40, 0x51, 0x04, 0x9c, 0x8a, 0xf6, - 0xe6, 0x1b, 0x07, 0x65, 0x61, 0xc1, 0xdb, 0x6b, 0xfc, 0xda, 0x89, 0x72, - 0x67, 0x9b, 0x57, 0x7c, 0x72, 0x86, 0x1f, 0x30, 0xa3, 0x4a, 0x2f, 0xec, - 0xf3, 0xec, 0x78, 0x03, 0xfa, 0xc5, 0xba, 0x00, 0x85, 0x0f, 0xf8, 0xde, - 0xd5, 0xc5, 0x1e, 0x84, 0xc6, 0x6c, 0x87, 0xc7, 0xea, 0x2a, 0xbc, 0xaa, - 0x6b, 0x32, 0xab, 0x6f, 0x5a, 0xf0, 0x55, 0x41, 0x78, 0xa8, 0xad, 0xe1, - 0xbe, 0xf4, 0x48, 0x20, 0x74, 0x62, 0x72, 0x34, 0xe4, 0xf2, 0x0a, 0xde, - 0xb1, 0x41, 0xc9, 0x42, 0x38, 0x87, 0x85, 0xb6, 0x55, 0x03, 0x3f, 0x01, - 0x99, 0x3d, 0x57, 0xa4, 0xca, 0xcd, 0xda, 0x15, 0x7d, 0xf0, 0xb8, 0xd0, - 0x17, 0x08, 0x3b, 0x03, 0x97, 0x17, 0xc9, 0xde, 0x91, 0xdc, 0x1a, 0xda, - 0x3f, 0xf8, 0x04, 0xa6, 0x87, 0x4b, 0x62, 0x2b, 0x40, 0xb0, 0x54, 0xf4, - 0x62, 0x8b, 0xd0, 0xc1, 0x41, 0x15, 0x77, 0xe8, 0xcd, 0xee, 0x49, 0x41, - 0xa9, 0xe4, 0xb1, 0x67, 0x42, 0xb0, 0x42, 0x1b, 0xe9, 0x21, 0xe4, 0x85, - 0x4a, 0x5c, 0x44, 0xb1, 0x87, 0x4a, 0x75, 0xda, 0x54, 0xc0, 0x7a, 0x12, - 0x96, 0x8c, 0x55, 0x5a, 0x83, 0xd6, 0x8d, 0x82, 0x59, 0xd5, 0x0a, 0x43, - 0xba, 0x01, 0xdf, 0x0a, 0xb5, 0x52, 0x05, 0x5a, 0x99, 0x2f, 0x26, 0x44, - 0x55, 0xa2, 0x00, 0x5f, 0xac, 0xd1, 0x55, 0x4c, 0xee, 0x01, 0x14, 0xae, - 0x27, 0x27, 0xa2, 0x80, 0x6d, 0x3d, 0xc9, 0x4e, 0x3a, 0x24, 0xda, 0x77, - 0x05, 0x69, 0x1a, 0xb8, 0xe9, 0x1d, 0x89, 0xe5, 0xa8, 0x6b, 0x0a, 0x03, - 0x1c, 0x3b, 0x4c, 0xd9, 0x17, 0x67, 0x8c, 0xc3, 0xc5, 0xa0, 0x07, 0xca, - 0x22, 0x86, 0x56, 0xda, 0x3a, 0xd7, 0x7b, 0xde, 0x7f, 0xd5, 0xc1, 0x5f, - 0x3b, 0xb5, 0x86, 0x5e, 0x5f, 0xd8, 0x07, 0xb6, 0xfa, 0x2e, 0xc1, 0x70, - 0x0a, 0xaa, 0x7f, 0x92, 0x98, 0x82, 0x13, 0xf6, 0xda, 0x33, 0x71, 0xc4, - 0xd6, 0x01, 0xba, 0xe3, 0x20, 0xe3, 0xe0, 0xcf, 0xdb, 0x4c, 0xce, 0x53, - 0xf4, 0x83, 0xd9, 0x32, 0x65, 0x56, 0x62, 0x86, 0xaa, 0x47, 0xa5, 0x74, - 0xbb, 0xfc, 0x1f, 0x47, 0x12, 0x1c, 0x97, 0x8f, 0xbc, 0xd5, 0xb4, 0xcd, - 0x2b, 0xb1, 0xe3, 0x74, 0xd1, 0x22, 0x13, 0xbc, 0x0f, 0x7d, 0x81, 0xa2, - 0xab, 0xb4, 0x0b, 0x45, 0x5a, 0x7c, 0x3d, 0x41, 0x24, 0xf3, 0x23, 0x0b, - 0xe4, 0x8a, 0xfe, 0x06, 0xae, 0x64, 0xb5, 0xaa, 0x8a, 0xda, 0x78, 0x5d, - 0xa1, 0x44, 0xd3, 0x82, 0xcd, 0xb8, 0x02, 0x59, 0xb3, 0x7d, 0x02, 0x9d, - 0x87, 0x16, 0xb7, 0x3c, 0xe0, 0xed, 0xb2, 0x2d, 0x81, 0x9f, 0xda, 0x43, - 0x67, 0x27, 0x6c, 0xe4, 0xd5, 0xb0, 0x67, 0x2c, 0xe0, 0x1d, 0x20, 0xdb, - 0xaf, 0x06, 0xb4, 0xf8, 0xc4, 0xcf, 0xdb, 0x22, 0x1a, 0x6a, 0x70, 0xdb, - 0x07, 0xf0, 0xaf, 0xd0, 0xcc, 0x75, 0xe2, 0x35, 0x7a, 0x72, 0xf8, 0x80, - 0x3b, 0xc8, 0x65, 0x2a, 0xb6, 0x2d, 0x3c, 0x97, 0xb8, 0x6d, 0x78, 0x6c, - 0x92, 0xac, 0x22, 0x5e, 0x74, 0x89, 0x78, 0x47, 0x0f, 0x7b, 0x8f, 0xf7, - 0x7c, 0x5d, 0x2d, 0xbb, 0x02, 0x85, 0xda, 0x84, 0xb5, 0xa3, 0x48, 0xe5, - 0x68, 0x46, 0x08, 0x8f, 0x06, 0xf5, 0x21, 0xba, 0xd5, 0x04, 0xdd, 0x4a, - 0x4f, 0x21, 0x29, 0x81, 0x9d, 0xd8, 0xd6, 0x4e, 0x28, 0xff, 0xac, 0x38, - 0x47, 0xe4, 0xc9, 0xdb, 0xa5, 0x22, 0xa1, 0x81, 0x8b, 0x01, 0xb9, 0x20, - 0xf7, 0x03, 0x72, 0x6e, 0xf5, 0xb9, 0x78, 0x62, 0x21, 0xff, 0xbe, 0xf8, - 0x1f, 0x40, 0xc2, 0x25, 0x88, 0xab, 0xb6, 0x09, 0xf1, 0x42, 0x36, 0x3d, - 0x45, 0x2a, 0x45, 0x93, 0x00, 0x36, 0xa0, 0xc7, 0x4d, 0xf2, 0x38, 0xf1, - 0xf8, 0xf2, 0x9c, 0x2d, 0x7e, 0xa0, 0xf6, 0x86, 0x6d, 0x2d, 0x16, 0xac, - 0xea, 0x3b, 0x04, 0x80, 0x25, 0x5c, 0x07, 0xa8, 0x3c, 0xd8, 0x17, 0x59, - 0x1f, 0x48, 0x0d, 0x4c, 0x70, 0x56, 0x67, 0x85, 0x3d, 0x24, 0x1c, 0xba, - 0x30, 0x06, 0x0e, 0x2c, 0x8a, 0xf0, 0xac, 0xe8, 0x24, 0x7f, 0xa0, 0x50, - 0xd4, 0xeb, 0x20, 0x5d, 0x12, 0xfd, 0x24, 0xc4, 0x03, 0x50, 0xf4, 0xcc, - 0x4c, 0x46, 0x50, 0x4c, 0x84, 0x6c, 0x90, 0xe5, 0x5a, 0xd8, 0xf4, 0x0b, - 0xc0, 0x25, 0xa4, 0x0a, 0xcc, 0x81, 0x8f, 0xa2, 0xad, 0x06, 0x82, 0x07, - 0x90, 0xb9, 0xd2, 0x97, 0xcc, 0xd9, 0x67, 0xd7, 0x35, 0xae, 0x46, 0x11, - 0xdf, 0x94, 0x20, 0x44, 0x3c, 0xdd, 0x31, 0xa3, 0x06, 0xcc, 0x53, 0xd0, - 0x78, 0x8a, 0x03, 0x75, 0x29, 0xc5, 0xc3, 0xc3, 0x1b, 0xe0, 0x87, 0xcd, - 0x59, 0x85, 0x64, 0xb0, 0x3f, 0x47, 0x8d, 0xcc, 0x07, 0x64, 0xc1, 0x9d, - 0x53, 0x05, 0x38, 0x72, 0x7e, 0xca, 0x76, 0x09, 0x6e, 0x5f, 0xd5, 0xae, - 0x63, 0x4a, 0x64, 0xa7, 0x10, 0x6c, 0xd7, 0x18, 0x5f, 0xe4, 0xe7, 0x80, - 0x8b, 0x22, 0xdb, 0x32, 0xb7, 0x81, 0x10, 0xe8, 0xe3, 0x7b, 0xb8, 0x26, - 0x32, 0x78, 0xa0, 0xd0, 0xcb, 0x16, 0x04, 0x84, 0xdf, 0xb5, 0x1c, 0x42, - 0x61, 0x41, 0x93, 0x89, 0x93, 0x2a, 0x5f, 0x93, 0x88, 0x4a, 0x90, 0x54, - 0xd7, 0x66, 0xec, 0x93, 0x36, 0xce, 0x69, 0xcc, 0x92, 0x4c, 0xfa, 0xde, - 0x21, 0x8e, 0x81, 0x61, 0xeb, 0x5a, 0x88, 0x67, 0xcd, 0x70, 0xc6, 0xb3, - 0x92, 0x98, 0x3e, 0x27, 0xc0, 0xc8, 0x1b, 0x4e, 0x36, 0xa3, 0x68, 0x58, - 0x9b, 0x46, 0x84, 0xf8, 0xa8, 0x4c, 0xf0, 0x84, 0x4f, 0x90, 0x95, 0xbb, - 0x9e, 0x42, 0x2c, 0x14, 0x5a, 0x6d, 0x6b, 0x78, 0xac, 0x45, 0x47, 0x30, - 0xd8, 0x0d, 0x59, 0x48, 0xa4, 0x07, 0x23, 0xcd, 0x31, 0xa1, 0x2b, 0xcf, - 0xe9, 0xb2, 0xdf, 0x79, 0x33, 0x66, 0x57, 0x42, 0x2a, 0x1f, 0xa4, 0x7e, - 0xb5, 0x1b, 0xba, 0x1d, 0xae, 0xdc, 0xb7, 0x2d, 0x1b, 0xe1, 0xf2, 0x07, - 0x74, 0x85, 0x63, 0xfc, 0x07, 0x63, 0xa9, 0x1a, 0xce, 0x53, 0xda, 0xd5, - 0x98, 0x4b, 0x62, 0x74, 0x02, 0x56, 0x81, 0x26, 0x10, 0x99, 0xec, 0xa9, - 0xe7, 0x20, 0x23, 0x57, 0x9a, 0xf8, 0x72, 0xce, 0x96, 0x0c, 0x2d, 0x9c, - 0xea, 0x2d, 0x12, 0xe8, 0x97, 0x02, 0xd9, 0x62, 0x6a, 0x8f, 0xdd, 0xa3, - 0x09, 0xaa, 0x3f, 0x31, 0x24, 0x82, 0xbb, 0x66, 0xd7, 0x55, 0x4d, 0x56, - 0x95, 0x6f, 0x57, 0xa8, 0xd1, 0x4b, 0x66, 0x57, 0xb9, 0x4d, 0xfe, 0xa3, - 0xc4, 0x4a, 0x05, 0xed, 0x1c, 0x9c, 0x74, 0x63, 0xe6, 0xe2, 0xa0, 0x77, - 0x09, 0x6a, 0x4c, 0xd0, 0xc6, 0xe9, 0x8b, 0x7d, 0x53, 0x6c, 0x39, 0x9c, - 0x62, 0xea, 0xaa, 0xf9, 0x8c, 0x72, 0x7b, 0x58, 0x06, 0xd4, 0xa8, 0x55, - 0x10, 0xbc, 0x81, 0x93, 0x69, 0x00, 0x89, 0x95, 0x4c, 0x8d, 0xaa, 0xd3, - 0x25, 0x06, 0xfd, 0xfb, 0x6a, 0x8b, 0x56, 0x48, 0x59, 0xf4, 0x85, 0x06, - 0x57, 0xc4, 0x97, 0x25, 0xaf, 0x97, 0x49, 0x61, 0x0d, 0x4e, 0x2d, 0x78, - 0x4f, 0xfd, 0x8b, 0x73, 0x0d, 0x23, 0xd9, 0xa4, 0x30, 0x24, 0x01, 0x7f, - 0xc0, 0xae, 0xcf, 0xd0, 0xab, 0x0c, 0x72, 0x0c, 0xaf, 0x44, 0xe5, 0x19, - 0x0d, 0x05, 0xb3, 0x5f, 0xc3, 0xb0, 0x9d, 0x37, 0x18, 0xb4, 0xed, 0x9c, - 0xb2, 0x81, 0x2d, 0x86, 0xbe, 0x05, 0x90, 0xe5, 0x80, 0xec, 0x8d, 0x1d, - 0xee, 0x9d, 0x6d, 0x67, 0x78, 0xbb, 0xaf, 0xc3, 0x92, 0xb3, 0xea, 0x58, - 0xee, 0x85, 0x08, 0xa8, 0x2f, 0xb6, 0xc9, 0xc9, 0x7e, 0xbc, 0xb0, 0x6f, - 0x0a, 0x0f, 0x92, 0xe9, 0x2e, 0x38, 0x24, 0xec, 0x46, 0xce, 0xc0, 0x2f, - 0xe4, 0xc0, 0xb0, 0x7d, 0xa2, 0x94, 0x43, 0x79, 0xc4, 0x80, 0x22, 0xa2, - 0xd4, 0x3f, 0xab, 0x11, 0x87, 0x21, 0x08, 0xd4, 0x36, 0x07, 0x41, 0xe3, - 0x3b, 0x0d, 0xa6, 0x22, 0xba, 0x29, 0xb3, 0x01, 0xa7, 0x78, 0x6e, 0xd9, - 0x69, 0x51, 0x5b, 0x8e, 0xe9, 0xaa, 0x47, 0x32, 0x34, 0x49, 0x08, 0x03, - 0x1f, 0xdf, 0xba, 0x5e, 0x83, 0x32, 0xba, 0xbf, 0xfb, 0x82, 0x5e, 0x4f, - 0x85, 0x76, 0x6b, 0x01, 0x56, 0x03, 0xc6, 0x3e, 0x28, 0xa4, 0x3d, 0x34, - 0x75, 0xb5, 0xad, 0x70, 0x8d, 0x3c, 0xd4, 0xac, 0xb2, 0xe5, 0xd0, 0xeb, - 0x13, 0xe7, 0x14, 0x9c, 0x16, 0xb0, 0xdf, 0xf9, 0x56, 0x34, 0x7c, 0x86, - 0x9e, 0x52, 0xf4, 0x21, 0xc9, 0x61, 0x95, 0x9f, 0x29, 0x00, 0x9b, 0x80, - 0x43, 0x5a, 0x90, 0x43, 0xc5, 0xb2, 0x12, 0x87, 0xc2, 0x1a, 0x0a, 0x54, - 0x92, 0x6a, 0x41, 0x95, 0x07, 0xff, 0xf0, 0x7d, 0xd5, 0x83, 0x9f, 0xc0, - 0xb6, 0x78, 0x5c, 0x7c, 0x7c, 0x3e, 0x50, 0xd8, 0x4d, 0xfb, 0x02, 0xce, - 0xf1, 0x13, 0xc7, 0xcf, 0x3b, 0x23, 0x77, 0x82, 0x81, 0xe2, 0xa2, 0xe2, - 0x6c, 0x42, 0x88, 0x34, 0x23, 0x7f, 0x3c, 0x17, 0x35, 0xeb, 0x67, 0x1f, - 0x51, 0xba, 0xdc, 0xe7, 0x3e, 0x21, 0x5d, 0xf0, 0x27, 0x70, 0x35, 0xd1, - 0x4c, 0x46, 0x8f, 0x67, 0x4a, 0x88, 0x11, 0x4f, 0x80, 0x9d, 0xda, 0x0c, - 0x2c, 0x1f, 0x53, 0x11, 0xe0, 0xda, 0x62, 0x16, 0x87, 0x8d, 0xeb, 0xe0, - 0xcf, 0xa6, 0xd1, 0x26, 0x50, 0x7d, 0x35, 0xda, 0x47, 0x85, 0xdc, 0x85, - 0x66, 0x01, 0x09, 0xc6, 0x17, 0x0c, 0x52, 0x49, 0xbe, 0x09, 0x63, 0x0c, - 0x40, 0x34, 0x94, 0x0d, 0x52, 0x68, 0xc4, 0x68, 0x1f, 0x6d, 0x2e, 0x31, - 0x1c, 0x1f, 0x68, 0xcc, 0xb7, 0x48, 0x32, 0x2c, 0x87, 0x0d, 0xe0, 0x62, - 0x53, 0x3c, 0x4b, 0xa0, 0x73, 0xcb, 0x2e, 0x5c, 0x6e, 0xcb, 0x82, 0x47, - 0x51, 0x0f, 0x1e, 0x2e, 0xa2, 0x66, 0x5f, 0x03, 0xe0, 0x22, 0x89, 0xae, - 0x01, 0x55, 0x4a, 0xe2, 0xa0, 0xcc, 0x03, 0xc9, 0x58, 0xd5, 0x2c, 0x79, - 0xf1, 0xb9, 0x18, 0x40, 0x45, 0xb1, 0x2c, 0x81, 0xa3, 0x84, 0x52, 0x35, - 0xdb, 0x83, 0x01, 0xc4, 0x3d, 0xe1, 0xc2, 0x28, 0x07, 0xf8, 0xb1, 0x13, - 0x81, 0x4c, 0x19, 0x1c, 0x3d, 0x0a, 0xbb, 0xa0, 0xdc, 0xea, 0x2a, 0xb6, - 0xcf, 0x44, 0x43, 0x30, 0x86, 0x8d, 0x38, 0x85, 0x24, 0xba, 0xc2, 0xcd, - 0x11, 0x6d, 0x90, 0xde, 0xd9, 0x0c, 0x21, 0xae, 0x9e, 0x01, 0x39, 0xba, - 0x34, 0x23, 0x47, 0xb5, 0xdb, 0xc1, 0xa3, 0xba, 0xc3, 0x9b, 0x49, 0x31, - 0x01, 0x2c, 0x41, 0x17, 0xb4, 0x74, 0x9b, 0xa2, 0x5e, 0x4f, 0x85, 0xbf, - 0xe9, 0x57, 0x1c, 0x83, 0xa8, 0x30, 0xce, 0xcb, 0xa1, 0x44, 0x04, 0x65, - 0x4a, 0x8c, 0x4c, 0x67, 0xa3, 0xa3, 0x03, 0x22, 0x36, 0xd5, 0x92, 0x42, - 0x1b, 0x80, 0x76, 0x62, 0x19, 0x75, 0xf0, 0x39, 0x46, 0xc6, 0x19, 0x38, - 0x43, 0x2b, 0x86, 0x63, 0xb8, 0x32, 0x1e, 0x1c, 0x28, 0xc7, 0x4b, 0x40, - 0xbb, 0xa2, 0xb0, 0x3e, 0xdf, 0xd7, 0xa6, 0xda, 0xb1, 0x0a, 0x82, 0x37, - 0x89, 0x56, 0x2f, 0x03, 0xde, 0x24, 0xd8, 0x01, 0xeb, 0x33, 0xc9, 0xaf, - 0xaa, 0x6e, 0x35, 0x6c, 0xd1, 0x0f, 0x40, 0x0b, 0x3f, 0x4b, 0xa1, 0x23, - 0x8d, 0xa0, 0xc5, 0x2e, 0x41, 0x53, 0x97, 0xd1, 0x28, 0x09, 0x18, 0x38, - 0x39, 0x06, 0x3b, 0xad, 0x7d, 0x20, 0x73, 0x51, 0xa2, 0xac, 0x79, 0xa2, - 0xfc, 0x37, 0x8c, 0xc1, 0x90, 0x3a, 0x79, 0xfd, 0x83, 0x41, 0xd2, 0xa2, - 0xd4, 0x04, 0xa0, 0x1c, 0x33, 0x78, 0xbe, 0xe8, 0xf6, 0x04, 0xe0, 0x4f, - 0x17, 0x28, 0x47, 0x30, 0xa5, 0x86, 0x2b, 0x7c, 0xe0, 0xdc, 0x13, 0x3b, - 0xe5, 0xf7, 0xcc, 0xb0, 0x6f, 0x11, 0x3d, 0x33, 0xd0, 0x56, 0xaf, 0x2e, - 0x09, 0xe4, 0x67, 0x34, 0x27, 0x61, 0xd5, 0x6b, 0x61, 0xc7, 0x9b, 0x36, - 0xbb, 0x3c, 0x54, 0xa5, 0x40, 0x22, 0x4b, 0xd4, 0xd3, 0x60, 0xeb, 0x96, - 0x41, 0xed, 0xa3, 0xc5, 0xb4, 0x5e, 0x3b, 0x8e, 0x0d, 0xc0, 0x86, 0x9b, - 0xa6, 0xad, 0xdb, 0x27, 0x54, 0x26, 0xe0, 0x5b, 0x16, 0x94, 0xa9, 0x88, - 0x38, 0x4a, 0x82, 0x42, 0xc0, 0xf6, 0x76, 0x3d, 0xd4, 0xa0, 0xcd, 0x6b, - 0xa2, 0x1b, 0x38, 0xf0, 0x93, 0x70, 0x87, 0x3c, 0x8f, 0xce, 0x10, 0x18, - 0x61, 0xaf, 0x5f, 0xab, 0x0a, 0xfa, 0xb8, 0xb8, 0xbb, 0x4d, 0x04, 0x47, - 0xdf, 0xb9, 0x02, 0x7c, 0xf5, 0xa2, 0x04, 0xb7, 0x96, 0xf3, 0x46, 0x3f, - 0xfe, 0x60, 0xaf, 0x00, 0x0d, 0x54, 0x12, 0xf1, 0xfa, 0x1f, 0xff, 0xf8, - 0x19, 0x79, 0xca, 0x68, 0x10, 0x9d, 0x02, 0xb1, 0x4a, 0x22, 0x4a, 0xaa, - 0x0e, 0x83, 0x45, 0x8c, 0xa4, 0x55, 0x86, 0x06, 0xd8, 0x12, 0xb5, 0xba, - 0x9e, 0x21, 0xc9, 0x35, 0x33, 0x83, 0x91, 0x54, 0xc8, 0x65, 0xe5, 0x94, - 0x93, 0xb6, 0x05, 0x22, 0x02, 0x0f, 0x2b, 0xa9, 0x45, 0xb8, 0x34, 0xf2, - 0x28, 0x80, 0xf8, 0x97, 0x15, 0xe8, 0x90, 0xf1, 0x36, 0x19, 0xce, 0xac, - 0xee, 0x67, 0xf3, 0x90, 0x09, 0xe7, 0x78, 0xd2, 0x57, 0xd1, 0x07, 0x64, - 0xc4, 0xb3, 0x40, 0x05, 0xb3, 0xb5, 0x5b, 0x55, 0x44, 0x30, 0x22, 0x92, - 0x8f, 0xa8, 0x47, 0x22, 0x62, 0xd4, 0xd4, 0x68, 0xc8, 0x82, 0x65, 0x3a, - 0x66, 0x51, 0x56, 0x85, 0x1c, 0xf4, 0xf3, 0xab, 0xba, 0xa8, 0xb6, 0x74, - 0x12, 0xca, 0xf8, 0xf7, 0xa2, 0xb2, 0x48, 0x91, 0xd9, 0x58, 0xf9, 0x00, - 0x28, 0xce, 0x22, 0xf6, 0xa9, 0x9b, 0x45, 0x7e, 0x21, 0xdb, 0xe4, 0xf0, - 0x6b, 0xd7, 0xa0, 0x74, 0x25, 0x27, 0x12, 0x44, 0x3a, 0x1a, 0xdf, 0xa9, - 0x89, 0x4b, 0xb6, 0xc9, 0x94, 0xd9, 0x9d, 0xa4, 0x6a, 0xd5, 0x31, 0x95, - 0x01, 0xd7, 0x7e, 0x27, 0xc8, 0x94, 0x93, 0x05, 0x6c, 0x1e, 0x5c, 0x9a, - 0x39, 0x8e, 0x4d, 0xba, 0xbd, 0xbf, 0x5d, 0x24, 0x7c, 0xfb, 0xa7, 0x16, - 0xae, 0x5c, 0x72, 0x40, 0x2d, 0xd5, 0x40, 0x72, 0xbb, 0xa3, 0xda, 0x16, - 0x3d, 0x98, 0xe8, 0xe7, 0xef, 0x7c, 0x66, 0xd2, 0xb0, 0x72, 0x09, 0xe9, - 0xd8, 0x8a, 0x53, 0x73, 0x88, 0x3c, 0x60, 0x96, 0x6a, 0xd8, 0x1e, 0x17, - 0xd3, 0x8d, 0xdf, 0x81, 0xc3, 0xdf, 0x0e, 0xbe, 0xa6, 0xca, 0x1a, 0x93, - 0x84, 0xb1, 0xe0, 0x37, 0x92, 0x2e, 0x42, 0xca, 0x76, 0x18, 0xaf, 0x97, - 0x02, 0x9c, 0xaf, 0x06, 0xbb, 0x7e, 0x33, 0x9f, 0x9d, 0xdb, 0xe1, 0x8d, - 0x61, 0x94, 0x1b, 0x59, 0x96, 0x7f, 0xcf, 0x22, 0x26, 0x18, 0x82, 0xb9, - 0xd1, 0x84, 0xe6, 0x4f, 0xb3, 0x37, 0x18, 0x41, 0x51, 0xf3, 0xe4, 0x39, - 0xa4, 0x6e, 0x4a, 0xf1, 0xdf, 0x31, 0x2f, 0xd5, 0xa9, 0x29, 0x2e, 0x22, - 0xe8, 0x97, 0x98, 0xd4, 0x60, 0x52, 0x2a, 0xbf, 0x02, 0x80, 0xe0, 0xaf, - 0x58, 0x82, 0xe7, 0xba, 0xe2, 0x54, 0x1e, 0xa0, 0x47, 0x63, 0x6e, 0xbf, - 0x11, 0x18, 0x4f, 0xc4, 0x3c, 0xe0, 0xbe, 0xc5, 0x4c, 0xc3, 0x89, 0x18, - 0x18, 0x3c, 0xd5, 0x6a, 0x34, 0x7b, 0x1c, 0x0d, 0x0f, 0x17, 0xc9, 0x75, - 0x15, 0xb8, 0x0d, 0x55, 0x79, 0x20, 0x5d, 0x35, 0xad, 0xfc, 0x1b, 0x95, - 0x51, 0x44, 0x6b, 0x7a, 0x29, 0x68, 0x48, 0x18, 0x65, 0x04, 0x5c, 0x87, - 0x6a, 0x09, 0x80, 0x07, 0x77, 0xbb, 0x16, 0x85, 0x5e, 0x17, 0x03, 0x85, - 0x52, 0xb7, 0xc0, 0x99, 0x2a, 0x34, 0x77, 0xd7, 0x8e, 0xad, 0xe2, 0xbf, - 0xa7, 0xc4, 0xf6, 0x5e, 0x6d, 0x3b, 0xb1, 0x8c, 0xa5, 0x8a, 0xeb, 0x28, - 0xd5, 0xa5, 0x91, 0xfe, 0x03, 0x43, 0x55, 0xac, 0x8d, 0x71, 0x60, 0x2c, - 0xf8, 0xdc, 0x95, 0x58, 0x8a, 0xd9, 0x4b, 0x12, 0x7b, 0xd1, 0xa0, 0x58, - 0x4a, 0xb5, 0x2a, 0x22, 0x9c, 0x09, 0x26, 0x82, 0x5e, 0xed, 0xdf, 0x8e, - 0x51, 0xac, 0xa4, 0xb9, 0x9c, 0xa4, 0x69, 0xd6, 0x52, 0xf8, 0x11, 0x15, - 0xd9, 0xaf, 0x9c, 0xa8, 0x2b, 0xce, 0xc9, 0x78, 0xe5, 0xa8, 0x1f, 0x2a, - 0xfb, 0x15, 0x20, 0x6c, 0x9f, 0x04, 0x19, 0x8f, 0x12, 0x25, 0xa1, 0x5b, - 0x50, 0x45, 0xcb, 0x54, 0x12, 0xd7, 0x01, 0xaa, 0xe0, 0x20, 0x11, 0xe6, - 0x2c, 0x9f, 0xb1, 0xb8, 0xa5, 0xc4, 0x72, 0x05, 0xde, 0x6b, 0xf9, 0x1f, - 0xed, 0x45, 0x05, 0x68, 0xf4, 0x7e, 0xc8, 0x83, 0x1e, 0x73, 0x27, 0x98, - 0x33, 0x52, 0x4d, 0xcd, 0xfc, 0xc0, 0xcf, 0x0a, 0xae, 0x68, 0x99, 0x5f, - 0xd4, 0x54, 0x16, 0xaf, 0x90, 0x62, 0x47, 0x72, 0x1a, 0x2f, 0x65, 0x11, - 0xf1, 0x0f, 0xe8, 0x10, 0x29, 0xa2, 0xf1, 0x02, 0x71, 0x85, 0xc9, 0x09, - 0xc6, 0x99, 0xc8, 0x41, 0x57, 0xe7, 0x4c, 0x2b, 0x78, 0x46, 0xb5, 0x61, - 0x49, 0x45, 0x80, 0xf0, 0xeb, 0x82, 0x27, 0x9c, 0x44, 0xe2, 0x92, 0xcc, - 0x1f, 0xbe, 0xaf, 0x87, 0xe2, 0x9c, 0x21, 0xc6, 0x12, 0xe1, 0x39, 0xcb, - 0x65, 0x01, 0xb0, 0x2b, 0xf0, 0x45, 0xeb, 0xbd, 0xf3, 0x9a, 0x05, 0x2e, - 0x62, 0x8e, 0x6c, 0xb4, 0xc0, 0x0b, 0xe8, 0x6c, 0x8e, 0x9b, 0x63, 0x7e, - 0x9e, 0x45, 0xc0, 0x34, 0xe5, 0xc7, 0x91, 0xaa, 0x0f, 0xd2, 0x82, 0x69, - 0xa3, 0x64, 0x54, 0x82, 0x78, 0x26, 0xa2, 0x9b, 0xaa, 0xf4, 0x20, 0xa8, - 0x53, 0xf5, 0x21, 0x8e, 0x99, 0x94, 0x7c, 0x91, 0x37, 0x3a, 0x95, 0x2b, - 0x7b, 0x2a, 0xba, 0xb2, 0xc6, 0x04, 0x3e, 0xda, 0xda, 0x18, 0x2f, 0xdf, - 0x20, 0xeb, 0x60, 0x08, 0x9e, 0x42, 0x8a, 0xae, 0x1c, 0x3b, 0x2e, 0x5c, - 0x00, 0xd0, 0x30, 0xa6, 0x73, 0x1f, 0x2c, 0xc5, 0xa5, 0x7a, 0xab, 0xd1, - 0xa0, 0x7b, 0x29, 0xf6, 0x1c, 0x8b, 0x4c, 0x22, 0x34, 0x4c, 0x9c, 0x0d, - 0xb8, 0x36, 0x15, 0x12, 0x22, 0x6b, 0xe7, 0x64, 0x51, 0xa9, 0xdf, 0xa2, - 0x92, 0x30, 0xef, 0x00, 0x70, 0x96, 0xe7, 0xa2, 0x1c, 0x4a, 0x0d, 0x73, - 0x59, 0x5b, 0x9e, 0xdb, 0x45, 0xa2, 0x2e, 0x37, 0x85, 0xff, 0x4a, 0xaa, - 0x05, 0x30, 0x45, 0xf2, 0x8a, 0xad, 0x67, 0x4e, 0x7e, 0xd0, 0x2a, 0x27, - 0x13, 0x2f, 0xbf, 0x21, 0x6e, 0x24, 0xbe, 0x94, 0x29, 0xaf, 0xf1, 0x4e, - 0x72, 0xa0, 0x10, 0x99, 0x26, 0x16, 0x61, 0xcf, 0x4a, 0x77, 0x3a, 0xbd, - 0x0b, 0xeb, 0x6c, 0x5a, 0x82, 0x4e, 0x11, 0x62, 0x10, 0xe4, 0xf8, 0x90, - 0x2d, 0x4e, 0xb6, 0xbe, 0xc4, 0xe1, 0x39, 0x60, 0x18, 0x6c, 0x85, 0xdc, - 0x86, 0x62, 0xfa, 0x61, 0xcc, 0x2b, 0xe6, 0x24, 0x0b, 0x57, 0xba, 0x1d, - 0x96, 0x1d, 0x36, 0xbd, 0x26, 0xcc, 0xf3, 0x30, 0x14, 0xd7, 0x1e, 0x81, - 0xd5, 0xde, 0x70, 0x9a, 0x88, 0x0c, 0xa7, 0xac, 0x76, 0x2a, 0x33, 0x74, - 0x48, 0xbe, 0xe7, 0x2b, 0x00, 0x60, 0x4b, 0x8a, 0xea, 0x6b, 0x86, 0x54, - 0xc3, 0x3a, 0x6c, 0x6e, 0x6c, 0x31, 0xb3, 0x82, 0xfa, 0x24, 0x44, 0xe7, - 0xa7, 0xe8, 0x30, 0xa2, 0xb3, 0x8b, 0xa9, 0xe9, 0xe7, 0xb6, 0x1e, 0xb6, - 0x52, 0xa0, 0xe2, 0xfb, 0x16, 0x0b, 0xa2, 0xf0, 0x6f, 0x59, 0x3a, 0x52, - 0x4d, 0x81, 0x24, 0xc5, 0xdc, 0x98, 0x49, 0xf1, 0xf4, 0x84, 0x04, 0x8d, - 0x79, 0xdb, 0x4a, 0x21, 0x8d, 0x28, 0xa2, 0xc3, 0xf7, 0x3e, 0x2b, 0xaa, - 0x52, 0x95, 0x2f, 0x90, 0x1b, 0x0d, 0xa1, 0xb2, 0x69, 0x46, 0x4a, 0x96, - 0xcb, 0x5b, 0x00, 0x80, 0xcc, 0x70, 0x6a, 0x0f, 0xd6, 0xff, 0x4e, 0x6a, - 0x29, 0xcd, 0xd2, 0x81, 0x48, 0x40, 0x94, 0x48, 0xf4, 0x2b, 0xe6, 0xf5, - 0xc5, 0xe9, 0x65, 0x47, 0x06, 0x53, 0x4f, 0x0d, 0xb9, 0x6c, 0xc7, 0xae, - 0x8f, 0xb2, 0xf4, 0xf0, 0x7f, 0x7a, 0xa2, 0x18, 0xd3, 0x5c, 0x15, 0x03, - 0x57, 0x08, 0xfa, 0x4c, 0x0e, 0xa5, 0xd6, 0x43, 0xcc, 0x7d, 0x46, 0x5b, - 0x41, 0x17, 0x22, 0xda, 0xf9, 0x39, 0xd5, 0xa9, 0x37, 0x60, 0xac, 0x88, - 0x3a, 0x7d, 0x0b, 0x97, 0x73, 0x42, 0x97, 0xe6, 0x81, 0x92, 0x23, 0x01, - 0xe3, 0xa0, 0x01, 0x59, 0x18, 0x99, 0xa8, 0x01, 0x3d, 0x48, 0x66, 0x44, - 0xfe, 0xdf, 0x4f, 0x2a, 0xc2, 0x24, 0xa1, 0xb7, 0x05, 0xc6, 0x04, 0xda, - 0x79, 0x85, 0x05, 0x78, 0x24, 0xf3, 0x8e, 0x46, 0xc4, 0x46, 0x9b, 0x8d, - 0x4d, 0x1a, 0xa6, 0xa7, 0xc6, 0x45, 0xc5, 0x0a, 0xc2, 0x27, 0x51, 0xa9, - 0x97, 0x61, 0xbf, 0x51, 0x30, 0x9d, 0x0c, 0x03, 0x70, 0x7b, 0x40, 0xdb, - 0x90, 0xad, 0x46, 0x09, 0xbd, 0xcd, 0xde, 0x93, 0x0d, 0xcc, 0xb6, 0x01, - 0xcb, 0xac, 0xb3, 0x18, 0x9f, 0x4e, 0x9e, 0x38, 0x42, 0xa3, 0xe7, 0x53, - 0xa9, 0x43, 0x2a, 0x9a, 0x2a, 0x14, 0xf6, 0xd1, 0x12, 0xc7, 0x43, 0x7d, - 0xd5, 0x17, 0xb6, 0x56, 0x0a, 0x5b, 0x0e, 0x1d, 0xc7, 0xcf, 0x74, 0x75, - 0x5e, 0x90, 0x35, 0x18, 0x48, 0xae, 0x76, 0xcb, 0xd5, 0x03, 0x44, 0xb3, - 0x14, 0xa3, 0xd5, 0xea, 0x3f, 0x92, 0x3f, 0x5c, 0xa4, 0x1a, 0x55, 0xfb, - 0xff, 0xd3, 0x33, 0x17, 0x2c, 0xd4, 0x3a, 0xf4, 0xdf, 0x1b, 0xb6, 0x02, - 0xa7, 0x96, 0xa4, 0x3e, 0x5b, 0x7b, 0xa0, 0x87, 0xc1, 0x74, 0x40, 0x7e, - 0xc1, 0x1a, 0xc9, 0xbd, 0x2b, 0x3a, 0x0e, 0xdd, 0x26, 0x8f, 0xb0, 0xe6, - 0x4c, 0xe2, 0x4f, 0x6a, 0x4c, 0xee, 0x58, 0x5b, 0x11, 0xb1, 0x77, 0x82, - 0x99, 0xc4, 0xc8, 0xe4, 0xc0, 0x12, 0x07, 0x35, 0xc2, 0x51, 0xc0, 0x9c, - 0xc0, 0xf4, 0x0e, 0xe6, 0x30, 0xc4, 0xc9, 0x54, 0x2d, 0x2e, 0xaa, 0x5b, - 0xeb, 0xf6, 0x12, 0x4c, 0x49, 0x26, 0x93, 0x8a, 0x67, 0xf9, 0x12, 0x82, - 0x31, 0xfd, 0xb5, 0xb8, 0x2d, 0x6b, 0xf8, 0xf4, 0x72, 0x02, 0x05, 0x08, - 0x44, 0x62, 0x47, 0x9d, 0x0c, 0x3e, 0x4e, 0x8f, 0xd3, 0x03, 0x1f, 0x84, - 0x10, 0xfe, 0xd7, 0xe9, 0x61, 0xaa, 0x19, 0x52, 0xb2, 0xdc, 0x45, 0x8b, - 0x6f, 0x5b, 0xae, 0x06, 0x90, 0xa8, 0x11, 0xb0, 0x9e, 0x6f, 0x1b, 0x29, - 0x38, 0xe1, 0x04, 0xb8, 0xee, 0x89, 0xbe, 0x54, 0x9a, 0xd3, 0x10, 0x7b, - 0x26, 0x46, 0xbf, 0x82, 0x59, 0x4c, 0x54, 0x85, 0xe5, 0xc3, 0xb1, 0x3e, - 0x50, 0xdc, 0x83, 0xaf, 0x51, 0x3f, 0x9a, 0xdc, 0x07, 0xf5, 0x91, 0x05, - 0x5a, 0x9e, 0xe2, 0x82, 0x44, 0x0b, 0x4e, 0xe8, 0x39, 0x91, 0xae, 0xb9, - 0x77, 0x99, 0x5e, 0x9d, 0x54, 0x74, 0x24, 0x17, 0x76, 0x48, 0x8f, 0x08, - 0x61, 0x5a, 0x86, 0x79, 0x0c, 0xc0, 0xd4, 0x86, 0xd3, 0xd2, 0x62, 0x72, - 0x52, 0xbd, 0x06, 0x95, 0x38, 0x50, 0xdc, 0xae, 0x56, 0x85, 0x27, 0xcb, - 0x8c, 0xdd, 0x51, 0x4c, 0xa9, 0x63, 0x06, 0x03, 0x03, 0x0b, 0xf8, 0x3b, - 0xb2, 0xc7, 0x68, 0x15, 0x8d, 0x2b, 0x27, 0x55, 0xe9, 0xe5, 0x71, 0xf0, - 0x59, 0x87, 0x06, 0xe6, 0x09, 0x7e, 0x24, 0x9f, 0x84, 0x9f, 0x58, 0xaa, - 0x81, 0xf8, 0xf3, 0x32, 0xda, 0x45, 0x27, 0x18, 0x7f, 0x29, 0xde, 0x18, - 0xb1, 0x33, 0xdf, 0x91, 0xa0, 0x9f, 0x33, 0x33, 0x14, 0xa7, 0x27, 0x2a, - 0xad, 0x31, 0xa9, 0x74, 0xf6, 0x84, 0x51, 0x0a, 0x62, 0x31, 0xa6, 0x20, - 0xbe, 0x8f, 0x73, 0x36, 0x2d, 0x19, 0x83, 0x31, 0x4a, 0x9d, 0x57, 0x85, - 0x9e, 0xbe, 0x70, 0xf1, 0xa8, 0x38, 0x73, 0x51, 0x20, 0x90, 0x54, 0x6e, - 0x13, 0x7f, 0xc9, 0x9b, 0x13, 0x05, 0xd0, 0x2a, 0xeb, 0xa1, 0xe3, 0xe8, - 0x20, 0x53, 0x03, 0x2b, 0xaa, 0x60, 0x27, 0x89, 0x63, 0x60, 0x13, 0x9f, - 0xf7, 0x2f, 0xd1, 0xdd, 0xc8, 0x03, 0x4e, 0xd0, 0x44, 0x05, 0x22, 0x9c, - 0x78, 0x26, 0x48, 0xc4, 0xc3, 0xd0, 0x25, 0x73, 0x51, 0xea, 0x0f, 0x68, - 0x77, 0x7a, 0x92, 0x94, 0x98, 0xf1, 0xb8, 0xf2, 0x8f, 0xd9, 0x3b, 0x14, - 0xa2, 0x0a, 0xd9, 0x9f, 0x71, 0x64, 0x88, 0xe5, 0x01, 0xc9, 0x3b, 0x44, - 0x7b, 0x8c, 0xe6, 0xec, 0xcf, 0x69, 0x0d, 0x2e, 0xf6, 0x65, 0x61, 0xe7, - 0xd3, 0x2b, 0x90, 0x42, 0xae, 0x24, 0xf2, 0x9d, 0xe8, 0x5f, 0x76, 0xc8, - 0xd1, 0x45, 0xaa, 0xd8, 0xeb, 0x5a, 0x81, 0x00, 0x4e, 0xa2, 0xc3, 0x60, - 0x6b, 0x80, 0xdd, 0x17, 0x0c, 0x8a, 0xe4, 0x94, 0xbe, 0xa0, 0x55, 0x5f, - 0xb4, 0xf2, 0x78, 0x5d, 0x71, 0xca, 0xf0, 0x24, 0x76, 0x01, 0x85, 0xf7, - 0x99, 0x9b, 0xf1, 0x12, 0xcb, 0x93, 0xc1, 0xac, 0xf6, 0x54, 0x12, 0x73, - 0xfa, 0xf5, 0xa9, 0xf0, 0x06, 0x42, 0xab, 0xc1, 0xcd, 0xb4, 0x79, 0x68, - 0xec, 0x85, 0xe6, 0x85, 0xfa, 0xa0, 0x2a, 0x54, 0x65, 0xc4, 0xbc, 0xb5, - 0x47, 0x4a, 0xe6, 0x6c, 0xb3, 0xcf, 0xbc, 0x49, 0x2f, 0x5c, 0xe3, 0x4e, - 0x72, 0xcd, 0x40, 0x71, 0xc1, 0x9d, 0x73, 0xdd, 0xab, 0xbe, 0x7d, 0x85, - 0xff, 0xcb, 0xe5, 0x5f, 0xa1, 0xe4, 0x4f, 0x31, 0x4c, 0xeb, 0x20, 0xe4, - 0x55, 0xc3, 0xf1, 0x02, 0x4e, 0x04, 0x3a, 0x2a, 0x2a, 0x61, 0xdc, 0x1d, - 0xc9, 0x84, 0xe7, 0xb9, 0x41, 0x5c, 0x42, 0x28, 0x34, 0x8b, 0x05, 0x76, - 0x58, 0x85, 0xce, 0xd2, 0x76, 0x4d, 0x0a, 0x43, 0xae, 0x49, 0xb2, 0xd5, - 0xa1, 0x32, 0x3b, 0x70, 0x8d, 0x84, 0x6f, 0xc4, 0xd7, 0x4e, 0xc4, 0x44, - 0x19, 0xda, 0x2e, 0xd0, 0x43, 0x20, 0xed, 0x02, 0x64, 0x94, 0x04, 0x1f, - 0x13, 0x00, 0xd1, 0x4f, 0xc0, 0x24, 0x45, 0x1a, 0xf6, 0xa8, 0x24, 0x03, - 0x83, 0x07, 0x0e, 0xf1, 0x92, 0xe3, 0x2c, 0x86, 0xcc, 0x91, 0x25, 0xdf, - 0x41, 0x0a, 0x06, 0xc6, 0x5d, 0x86, 0x44, 0x76, 0x99, 0x67, 0x53, 0x0e, - 0x44, 0x61, 0x52, 0x86, 0x84, 0xc1, 0x78, 0xf4, 0xc3, 0x50, 0x87, 0x4e, - 0x08, 0x94, 0x44, 0x43, 0x53, 0xed, 0xa0, 0x1f, 0xb6, 0xec, 0x64, 0xd0, - 0x23, 0xea, 0xe8, 0x84, 0x4a, 0x27, 0xd3, 0x63, 0x13, 0x1d, 0x9d, 0x1a, - 0xae, 0x85, 0x1c, 0x69, 0xf4, 0xcc, 0x1c, 0xf0, 0x56, 0x5a, 0x30, 0x83, - 0x95, 0x36, 0xa9, 0x5e, 0xd5, 0x87, 0x41, 0x97, 0x16, 0x5b, 0xd0, 0xb8, - 0x53, 0xd3, 0x22, 0x21, 0xc3, 0xdf, 0xc1, 0xef, 0x2e, 0x35, 0x79, 0xe5, - 0xa3, 0x06, 0xd4, 0xcc, 0x71, 0x48, 0x79, 0x93, 0x72, 0xae, 0x79, 0xb5, - 0xd8, 0x36, 0x42, 0xb1, 0x68, 0x0c, 0x1f, 0x80, 0x30, 0xc0, 0x2a, 0x48, - 0x2c, 0x1b, 0x44, 0x27, 0x01, 0xde, 0x43, 0x2b, 0xb7, 0x6a, 0x84, 0xef, - 0xe8, 0x90, 0x45, 0xb0, 0x1e, 0x2a, 0x29, 0xfb, 0xcb, 0x0e, 0x3b, 0x35, - 0x65, 0x3b, 0x2c, 0xfb, 0xf5, 0x50, 0x73, 0x43, 0x43, 0xcc, 0x3a, 0xc0, - 0xd5, 0xb4, 0xf5, 0x33, 0xe3, 0x79, 0x5d, 0x3c, 0x73, 0x4f, 0x02, 0x59, - 0x1e, 0x05, 0x09, 0xd4, 0xb7, 0xa3, 0x0a, 0x2a, 0xa3, 0xfb, 0x04, 0xf5, - 0x44, 0xb5, 0x5a, 0x49, 0x89, 0x15, 0xba, 0x3d, 0x53, 0x3b, 0xc9, 0x10, - 0x95, 0xd5, 0x55, 0x9b, 0x7e, 0xbf, 0x23, 0x5b, 0xb1, 0xe5, 0x2a, 0x3a, - 0x20, 0xaf, 0x50, 0x46, 0x04, 0x44, 0xba, 0xaa, 0x0b, 0x16, 0x0c, 0x0a, - 0xfb, 0x28, 0x2c, 0xa1, 0x79, 0xe3, 0x81, 0x9c, 0x0a, 0x92, 0xc5, 0xf9, - 0xe6, 0x96, 0x0f, 0x41, 0x0c, 0x52, 0x50, 0xbb, 0x60, 0x2c, 0xb8, 0x19, - 0x3d, 0x6a, 0xc0, 0x4d, 0x1f, 0x14, 0x4a, 0xbe, 0x22, 0xf7, 0x05, 0x83, - 0xf8, 0xa4, 0xd9, 0x88, 0x9c, 0x77, 0x9c, 0x09, 0x00, 0xc0, 0xa9, 0xff, - 0x87, 0xab, 0xec, 0x08, 0x30, 0xac, 0x30, 0x0a, 0x66, 0xe4, 0x51, 0xb4, - 0x8f, 0x20, 0xd7, 0xcb, 0x4a, 0xd6, 0xa0, 0x80, 0x01, 0xb2, 0x60, 0x5f, - 0x50, 0xd5, 0x91, 0x89, 0x76, 0x01, 0x2a, 0xf5, 0x72, 0x40, 0x6b, 0x9a, - 0x51, 0x85, 0x51, 0xe4, 0xb0, 0x01, 0x83, 0x3b, 0x34, 0xb4, 0x34, 0xd9, - 0x02, 0xf8, 0x1b, 0xd8, 0x4f, 0xca, 0x15, 0x29, 0x03, 0x41, 0xd6, 0x04, - 0xd2, 0x18, 0x05, 0x35, 0x39, 0x6c, 0xe6, 0xa4, 0x80, 0x31, 0x69, 0x7c, - 0xa2, 0xb3, 0x50, 0x25, 0xfc, 0x82, 0xeb, 0x76, 0xd8, 0x41, 0x5e, 0x90, - 0xa4, 0xa2, 0x7f, 0x6b, 0x79, 0x50, 0xca, 0x62, 0x49, 0x85, 0xe0, 0x16, - 0x8e, 0xd5, 0x96, 0x7e, 0x8a, 0xb4, 0xb1, 0x72, 0x25, 0x26, 0x06, 0xa6, - 0x58, 0xfd, 0xb0, 0x69, 0x3b, 0xa9, 0x58, 0xb7, 0x9f, 0xdd, 0x9e, 0xd1, - 0xcb, 0x82, 0xaf, 0x8a, 0x6b, 0xab, 0xc0, 0x25, 0x14, 0x4b, 0xe1, 0x10, - 0x05, 0x11, 0xb8, 0x5e, 0xe8, 0xb0, 0x61, 0xc4, 0x1f, 0x89, 0x6e, 0x68, - 0x3d, 0x5e, 0x06, 0x20, 0x4a, 0x20, 0x73, 0xa4, 0x1f, 0x89, 0xba, 0xf1, - 0xfc, 0x69, 0x8b, 0xce, 0x65, 0xe0, 0x61, 0x54, 0xc8, 0xf8, 0x01, 0x4b, - 0x15, 0xdd, 0x58, 0xcd, 0x48, 0xb2, 0xb1, 0xaf, 0x9a, 0x01, 0x85, 0xc1, - 0xd0, 0x90, 0x1c, 0x15, 0xc3, 0xb7, 0x4f, 0x9b, 0x5d, 0x58, 0x68, 0x19, - 0x95, 0x92, 0xd8, 0x0a, 0xd8, 0x72, 0xe9, 0x22, 0x5c, 0x18, 0xa6, 0x59, - 0x58, 0x0c, 0x70, 0xa8, 0x88, 0xcf, 0xc5, 0xa5, 0x39, 0x94, 0xda, 0x5c, - 0x3a, 0x72, 0xf3, 0xf3, 0x7c, 0x10, 0x52, 0xce, 0x12, 0xcb, 0x5c, 0xb0, - 0xbb, 0x8d, 0xee, 0x6f, 0xb1, 0xce, 0x92, 0x68, 0xcd, 0x81, 0xa8, 0x4c, - 0x43, 0xb1, 0x2a, 0xf4, 0xc5, 0xe3, 0xc3, 0xed, 0x38, 0xad, 0x97, 0x56, - 0xe5, 0xac, 0xa5, 0x8f, 0x91, 0xdd, 0xc0, 0x14, 0xbb, 0xb1, 0x36, 0x28, - 0xb1, 0xf6, 0x57, 0xab, 0x01, 0x3d, 0x35, 0x6f, 0x42, 0x12, 0x93, 0xd5, - 0x61, 0xa1, 0x5b, 0x25, 0x9c, 0x28, 0x15, 0x23, 0xeb, 0x34, 0x3a, 0x8a, - 0x4b, 0x46, 0xda, 0x34, 0xd9, 0x6d, 0x62, 0x59, 0x8b, 0x54, 0x56, 0x27, - 0x3a, 0x2e, 0x98, 0x76, 0x52, 0x5f, 0xb5, 0x73, 0xfd, 0x80, 0x3d, 0xc2, - 0x6a, 0x97, 0x1a, 0xf6, 0xa0, 0xa9, 0x54, 0xe5, 0xec, 0x68, 0x78, 0x33, - 0x87, 0xd0, 0x93, 0x72, 0x84, 0x9f, 0xc0, 0x12, 0xfe, 0x3f, 0x29, 0x38, - 0x76, 0xe6, 0xa8, 0x0a, 0xe3, 0x73, 0xe7, 0xf1, 0x6d, 0x45, 0x2a, 0x85, - 0x12, 0x97, 0x2e, 0xf5, 0x7b, 0x8d, 0x34, 0xf1, 0x9d, 0xe2, 0x31, 0xec, - 0x16, 0x1e, 0x24, 0x81, 0x94, 0x46, 0xb4, 0x43, 0xa4, 0x87, 0x62, 0x3a, - 0xa6, 0xc2, 0x86, 0x67, 0x56, 0x6c, 0x78, 0xd7, 0x4d, 0xcb, 0x09, 0xe0, - 0xc4, 0x0e, 0x84, 0xb7, 0x7b, 0xea, 0xf2, 0xe5, 0xa4, 0x10, 0x1a, 0x7b, - 0xfb, 0x94, 0xb7, 0x46, 0x34, 0x29, 0x9d, 0x65, 0x6c, 0x79, 0x67, 0x18, - 0xa7, 0xc2, 0xbd, 0x50, 0x6e, 0x96, 0x06, 0x53, 0x0d, 0xd1, 0x9d, 0x2c, - 0xc8, 0xba, 0xe3, 0xfe, 0xf6, 0xfd, 0x79, 0x28, 0x5b, 0x4a, 0xe1, 0x4f, - 0xfc, 0xa8, 0x53, 0x47, 0x3f, 0xac, 0xd0, 0x2b, 0xcc, 0x68, 0x09, 0xe5, - 0xb2, 0x74, 0x39, 0x75, 0xe9, 0xd1, 0x76, 0xa4, 0x72, 0x74, 0xcd, 0x1e, - 0x11, 0x41, 0x0f, 0x3b, 0x0c, 0x21, 0x73, 0x6d, 0x84, 0xe4, 0x7e, 0x88, - 0x67, 0x23, 0xdb, 0x04, 0x3c, 0x74, 0xc9, 0x51, 0x42, 0xab, 0xa5, 0xd0, - 0xd5, 0x54, 0x48, 0xc9, 0x1c, 0xa0, 0x27, 0x50, 0x73, 0xf5, 0xad, 0x45, - 0x51, 0x51, 0x04, 0x07, 0xa8, 0x30, 0xea, 0x13, 0x88, 0xb9, 0x5f, 0x3a, - 0x0a, 0x8b, 0xbc, 0x6c, 0x5c, 0x73, 0x90, 0x84, 0x42, 0x41, 0xe5, 0xea, - 0x75, 0x28, 0xa4, 0xd0, 0x74, 0x66, 0x89, 0xb2, 0xcc, 0x71, 0x31, 0x14, - 0x69, 0x2b, 0x12, 0xf7, 0x31, 0x75, 0xcc, 0xd2, 0x47, 0x37, 0x02, 0x58, - 0x9e, 0xab, 0xb6, 0x46, 0x74, 0xf0, 0xe1, 0x86, 0x9a, 0x4b, 0xf6, 0x50, - 0x60, 0xf7, 0xed, 0x0a, 0xab, 0x1b, 0xd7, 0xa2, 0x8c, 0x63, 0x55, 0x5d, - 0xb1, 0xea, 0x5a, 0xef, 0xd3, 0x85, 0xa4, 0x44, 0xe3, 0x2b, 0xbc, 0xc0, - 0x52, 0xe1, 0xe4, 0x3d, 0xab, 0x35, 0x4c, 0x01, 0xb9, 0x34, 0xef, 0x79, - 0x94, 0x79, 0xb8, 0x33, 0x89, 0x5e, 0x0e, 0x31, 0x11, 0xed, 0x45, 0x34, - 0x3a, 0xff, 0x00, 0x30, 0x47, 0xad, 0xde, 0x92, 0x1f, 0xb1, 0xa3, 0x9a, - 0xe1, 0xd3, 0x05, 0xc3, 0x66, 0x5c, 0x38, 0x27, 0xbe, 0x2b, 0xed, 0xae, - 0x9e, 0x23, 0x08, 0x69, 0x92, 0x87, 0x68, 0x0a, 0x82, 0x55, 0xf2, 0x82, - 0x00, 0x03, 0xa2, 0x40, 0x9b, 0x11, 0x4d, 0x0c, 0x0d, 0xa6, 0x45, 0x28, - 0xf1, 0x8e, 0x01, 0x4a, 0x29, 0x7e, 0x10, 0x4f, 0x8b, 0xb0, 0xf5, 0xcb, - 0x85, 0x9d, 0xc5, 0xbc, 0xcc, 0xa3, 0xd3, 0x80, 0xea, 0x24, 0xf9, 0x6d, - 0x4c, 0x70, 0x60, 0x3b, 0x58, 0xe7, 0xd2, 0xd2, 0x1b, 0xa4, 0x71, 0xa9, - 0x97, 0x3e, 0x08, 0x6f, 0x6a, 0xdb, 0x19, 0xd2, 0xac, 0xd4, 0xe3, 0x70, - 0x47, 0x05, 0xf7, 0x02, 0x52, 0xbd, 0x61, 0xe3, 0xb8, 0xe9, 0xa7, 0x73, - 0xaa, 0xf6, 0x62, 0xca, 0xed, 0xc2, 0x1c, 0x07, 0x82, 0x77, 0x2e, 0x24, - 0x03, 0x25, 0xb9, 0x26, 0x2d, 0x9b, 0xe0, 0x9c, 0x98, 0xa6, 0x3b, 0xc8, - 0x8c, 0x04, 0x69, 0xc0, 0x35, 0x23, 0xdc, 0xe4, 0x86, 0x75, 0x62, 0xec, - 0xb3, 0x83, 0xd9, 0xcc, 0xcd, 0x34, 0x69, 0xb1, 0x7a, 0x1a, 0xc8, 0xca, - 0x6a, 0x31, 0x8c, 0xaa, 0x54, 0x4e, 0x38, 0x71, 0xac, 0xef, 0xa0, 0xe7, - 0x09, 0xab, 0xda, 0x48, 0xd3, 0x15, 0x47, 0x61, 0x37, 0x1c, 0xf9, 0xd6, - 0x2a, 0xf5, 0xb4, 0x86, 0x36, 0xe4, 0x6d, 0x39, 0xfc, 0x87, 0x7f, 0x11, - 0x0e, 0x24, 0x53, 0x3e, 0xe6, 0x93, 0x8c, 0x0a, 0xf4, 0x56, 0xdb, 0x9b, - 0x79, 0x6d, 0x4e, 0x57, 0x1d, 0xc1, 0x82, 0x8e, 0x55, 0x78, 0x42, 0x93, - 0x84, 0xdb, 0x17, 0xcc, 0x41, 0x79, 0x08, 0x16, 0xcf, 0xb1, 0x02, 0xd2, - 0x63, 0x1f, 0x3f, 0xc1, 0xc9, 0x82, 0x18, 0x0e, 0x56, 0x1d, 0x2b, 0x8d, - 0xc1, 0x63, 0x14, 0xd2, 0xe3, 0xcf, 0xad, 0x28, 0x20, 0x3e, 0xb7, 0xad, - 0x94, 0xcb, 0x1c, 0xdf, 0x46, 0xf3, 0xd9, 0x45, 0x2f, 0x2d, 0x4a, 0x28, - 0xe6, 0x28, 0xe0, 0x83, 0x49, 0x7d, 0x46, 0x9b, 0xa1, 0xb4, 0xc4, 0xd9, - 0x09, 0x2a, 0x11, 0xe4, 0x69, 0xd4, 0x2c, 0xd6, 0xed, 0x4a, 0xbe, 0xa8, - 0x7d, 0x11, 0x30, 0xe0, 0x3d, 0x74, 0xe2, 0xc0, 0x8f, 0x42, 0x9f, 0x9d, - 0xfd, 0x8f, 0x17, 0x3d, 0xe0, 0xa8, 0xd2, 0xfb, 0xe2, 0x3c, 0x26, 0x1b, - 0x28, 0xc4, 0x62, 0x4e, 0x80, 0x8f, 0x72, 0x42, 0x84, 0xe2, 0x54, 0x72, - 0xc7, 0x12, 0x17, 0x21, 0x8f, 0x29, 0xcf, 0x49, 0xe5, 0x75, 0x77, 0x94, - 0x3e, 0xd4, 0xf9, 0x0e, 0x14, 0xef, 0x3d, 0x5a, 0xf7, 0x11, 0x77, 0x93, - 0xba, 0xad, 0x1e, 0xaf, 0x91, 0x3a, 0x51, 0xb4, 0xf4, 0x4d, 0x67, 0x87, - 0xb4, 0xd8, 0x4b, 0xa5, 0x72, 0x37, 0x25, 0x70, 0x6e, 0xba, 0x91, 0x22, - 0x38, 0xac, 0x63, 0x01, 0x48, 0x8f, 0x00, 0x18, 0x6e, 0x91, 0xba, 0x04, - 0xc4, 0x70, 0x8e, 0xca, 0x28, 0xc2, 0xb4, 0xa1, 0x2e, 0x69, 0x2a, 0xb6, - 0xa3, 0xab, 0xd3, 0xb5, 0xcf, 0xbf, 0x2a, 0x28, 0xf2, 0x32, 0x25, 0xfa, - 0x53, 0x4c, 0x7e, 0x5c, 0x49, 0x41, 0x12, 0x79, 0x93, 0x5a, 0x7e, 0x81, - 0xf9, 0x2d, 0xcc, 0x79, 0x51, 0x9b, 0x4c, 0xa5, 0x46, 0x44, 0x88, 0x49, - 0x69, 0x39, 0xb3, 0x06, 0x6a, 0xc6, 0x45, 0x0e, 0xde, 0xbe, 0xfe, 0x3b, - 0x09, 0xd3, 0xd7, 0x3f, 0x8f, 0x61, 0xf8, 0x0d, 0x6d, 0x4c, 0x4d, 0x42, - 0xdc, 0x87, 0x76, 0x53, 0x72, 0x5b, 0xba, 0xe7, 0xa0, 0xbe, 0x62, 0x0b, - 0x4f, 0x12, 0x7e, 0xe6, 0x94, 0x5b, 0x28, 0x7b, 0xe1, 0xd4, 0x28, 0xa3, - 0x0b, 0xe8, 0x3f, 0xa4, 0x1d, 0x7c, 0x70, 0x07, 0x62, 0xfd, 0x61, 0xa7, - 0xb1, 0xc5, 0x83, 0x6c, 0x2b, 0x2d, 0x22, 0x19, 0x57, 0xcd, 0xc9, 0x32, - 0xea, 0x39, 0x3d, 0x87, 0x96, 0x47, 0xc1, 0xce, 0x76, 0xd5, 0x47, 0xe8, - 0x57, 0xe7, 0xc8, 0xfe, 0xa1, 0xe6, 0x0d, 0x28, 0x25, 0xf8, 0x5e, 0x99, - 0x0e, 0x86, 0x9b, 0x7c, 0xaa, 0x9a, 0xe0, 0xdc, 0x46, 0x9a, 0x15, 0xf0, - 0x63, 0xc7, 0x2d, 0xff, 0xfd, 0x98, 0xb3, 0x43, 0xfe, 0x5d, 0x38, 0xcb, - 0x12, 0xfb, 0x6e, 0xbb, 0xcf, 0x24, 0x4f, 0x65, 0x89, 0x80, 0xa1, 0x17, - 0x6a, 0xdb, 0xf3, 0x49, 0xf4, 0x30, 0x84, 0x61, 0x18, 0x90, 0x22, 0xcc, - 0x8a, 0x89, 0x47, 0x29, 0xcf, 0xe1, 0x72, 0xe4, 0xb2, 0xf1, 0xc9, 0x81, - 0x27, 0xf9, 0x88, 0xaa, 0xc4, 0x8b, 0xd7, 0x18, 0x06, 0x8d, 0xdb, 0x29, - 0xb6, 0xfc, 0x0f, 0x4e, 0xef, 0xb7, 0xdd, 0xe8, 0x26, 0x82, 0x8f, 0xae, - 0x00, 0xc7, 0x8d, 0xdc, 0x39, 0x96, 0x11, 0xd6, 0x8c, 0x4c, 0x4c, 0xb6, - 0x20, 0xb1, 0x8d, 0xaa, 0xea, 0x3a, 0x70, 0x66, 0xf0, 0x78, 0x5c, 0xc7, - 0x28, 0xee, 0x07, 0xa5, 0x11, 0xb6, 0x42, 0x6b, 0xf8, 0x04, 0x43, 0x31, - 0x8d, 0x8f, 0xb3, 0x73, 0x29, 0x96, 0x20, 0xe1, 0xc7, 0xc7, 0x7d, 0xd7, - 0x29, 0xa5, 0x61, 0xc2, 0x7b, 0xdb, 0x64, 0x65, 0x75, 0xf1, 0x24, 0x54, - 0x17, 0x91, 0x1e, 0xa3, 0x90, 0x04, 0x51, 0x40, 0xfe, 0x3e, 0xaf, 0xf1, - 0x40, 0xe9, 0xec, 0xb3, 0xe3, 0xda, 0x33, 0xed, 0xb2, 0x1d, 0x5d, 0xa3, - 0x54, 0xde, 0x9c, 0x33, 0x17, 0xf2, 0x58, 0x20, 0x8a, 0x3e, 0x60, 0x43, - 0xc6, 0xb0, 0x15, 0xb5, 0x4d, 0xe0, 0x24, 0x56, 0xfb, 0xc8, 0x18, 0x5d, - 0x2b, 0xae, 0x9b, 0x7d, 0xfa, 0x9c, 0x68, 0x4e, 0x2e, 0x19, 0x3a, 0xba, - 0x6e, 0x68, 0x36, 0x06, 0x03, 0xa9, 0xa5, 0x0a, 0x76, 0x09, 0x17, 0xe3, - 0x0f, 0x47, 0x11, 0x10, 0xba, 0x03, 0x58, 0xca, 0x8d, 0x8a, 0xd8, 0xc6, - 0xd5, 0x26, 0xa4, 0xb3, 0x31, 0x3c, 0x01, 0xf6, 0x1d, 0xca, 0xb5, 0x89, - 0x84, 0xe6, 0x4d, 0x28, 0x05, 0x25, 0xf3, 0x06, 0xcf, 0x2e, 0x9c, 0x88, - 0xf1, 0x03, 0xcd, 0x11, 0x85, 0xca, 0xdb, 0x18, 0x60, 0x57, 0xe5, 0x9a, - 0x17, 0x00, 0x96, 0x54, 0xbb, 0x24, 0x4e, 0x8f, 0x6a, 0xf7, 0x8a, 0x4b, - 0xed, 0xd9, 0xeb, 0x29, 0x44, 0x40, 0x1c, 0x2b, 0x4b, 0x4a, 0x14, 0xb4, - 0x3d, 0x55, 0xf3, 0x56, 0xb0, 0xb3, 0xa8, 0x06, 0x67, 0x61, 0x8f, 0x1c, - 0x24, 0x0a, 0x6c, 0xd1, 0xb3, 0x7c, 0x01, 0x8e, 0xba, 0xce, 0xd0, 0x36, - 0x39, 0x18, 0xd3, 0x15, 0xe0, 0x33, 0x61, 0x41, 0x9b, 0x2c, 0x48, 0x96, - 0xc5, 0xb1, 0x49, 0x10, 0xdc, 0xda, 0x92, 0xd5, 0x44, 0xa7, 0xa6, 0x5f, - 0xa2, 0xff, 0x8f, 0x29, 0x96, 0x48, 0x94, 0xf9, 0xc9, 0x93, 0xa4, 0x7c, - 0xda, 0x4f, 0x9b, 0x0c, 0x15, 0xcb, 0x33, 0xf3, 0xf8, 0xc6, 0x31, 0xa8, - 0xd1, 0x6f, 0xa3, 0x1a, 0x76, 0x3f, 0x00, 0xe3, 0x3d, 0x4b, 0xc1, 0xce, - 0x29, 0xf8, 0xd3, 0x18, 0x05, 0x81, 0xcb, 0x66, 0xee, 0x01, 0xd0, 0x5f, - 0xf1, 0x0d, 0xe8, 0xbc, 0x86, 0x4c, 0x74, 0xb2, 0x0e, 0x42, 0x11, 0x5e, - 0x28, 0x60, 0x4b, 0x9b, 0x99, 0xa6, 0x54, 0x32, 0x02, 0x28, 0xa0, 0x1b, - 0x90, 0xa0, 0xc2, 0x01, 0xe1, 0xe6, 0x33, 0x24, 0x98, 0x21, 0xe4, 0x75, - 0x72, 0x1d, 0x85, 0x9c, 0x30, 0xb3, 0xb8, 0x22, 0x8a, 0x32, 0x07, 0xc9, - 0x8e, 0xcc, 0x50, 0x0e, 0x36, 0xfe, 0xec, 0xa0, 0x20, 0x2b, 0xe1, 0x9f, - 0x76, 0xcc, 0x51, 0x53, 0x35, 0xa8, 0xa4, 0x64, 0x5d, 0x12, 0xc3, 0xb1, - 0xe5, 0x36, 0x29, 0x78, 0x52, 0x9b, 0x2b, 0xcc, 0x28, 0x41, 0xd9, 0xd7, - 0xab, 0x01, 0x1e, 0x9d, 0x80, 0xdf, 0x0c, 0xc7, 0x00, 0x90, 0x44, 0xd3, - 0xbc, 0x86, 0x1c, 0x57, 0xe2, 0x08, 0xa0, 0x34, 0x08, 0xde, 0xff, 0xba, - 0x20, 0x07, 0xa5, 0x6a, 0x38, 0x1e, 0x91, 0xd6, 0x7d, 0x50, 0x3f, 0x5a, - 0xe8, 0x18, 0x89, 0x23, 0x9b, 0x46, 0x37, 0x27, 0x0d, 0xdd, 0x04, 0x03, - 0x2a, 0x43, 0x0f, 0xc6, 0x74, 0xa0, 0xa4, 0xc3, 0x32, 0x40, 0xf4, 0x8b, - 0xd1, 0x40, 0x85, 0xb3, 0x80, 0x98, 0x4a, 0xfa, 0x46, 0xd8, 0xc9, 0x0f, - 0xbb, 0x19, 0xd9, 0x8d, 0x87, 0xdb, 0x3d, 0xb7, 0x95, 0xf8, 0x99, 0x54, - 0x2f, 0x97, 0x77, 0x59, 0xf5, 0x72, 0x00, 0x97, 0x4e, 0xbc, 0x4a, 0xe7, - 0xa9, 0x28, 0xc7, 0xa7, 0xd5, 0x0b, 0x24, 0x4a, 0xfa, 0x64, 0xe8, 0xcb, - 0x61, 0x2b, 0x94, 0xe3, 0x08, 0x0b, 0x06, 0xb6, 0x0a, 0xf8, 0xdb, 0x6e, - 0x93, 0x89, 0xad, 0xd7, 0x1c, 0xfa, 0x78, 0x97, 0x14, 0x85, 0x91, 0xf1, - 0x8e, 0xf5, 0x8f, 0x3c, 0x9f, 0x8d, 0xdc, 0xef, 0xa3, 0x26, 0x62, 0x2f, - 0x96, 0x70, 0x67, 0xc2, 0x14, 0x3d, 0xce, 0xbb, 0x26, 0xa1, 0xea, 0xb1, - 0x01, 0x68, 0x29, 0x46, 0x44, 0xf1, 0x05, 0x76, 0x80, 0xcf, 0x4d, 0x30, - 0x42, 0x39, 0xa1, 0x2c, 0x91, 0x61, 0x0a, 0xa8, 0x81, 0xb3, 0x52, 0x1f, - 0xb5, 0x23, 0xb3, 0xae, 0xaa, 0xa6, 0x34, 0xeb, 0xaa, 0xc9, 0x91, 0x98, - 0x37, 0xf6, 0xc4, 0x5e, 0x60, 0xa4, 0xda, 0x82, 0xc7, 0x08, 0x4c, 0x63, - 0x6d, 0x95, 0x2c, 0x6e, 0x64, 0x71, 0x9c, 0x25, 0x45, 0xec, 0x8d, 0x0c, - 0xb4, 0x96, 0x9c, 0x25, 0x3f, 0x1b, 0xd1, 0x01, 0xe2, 0x88, 0x86, 0x40, - 0x24, 0x36, 0x0c, 0xc5, 0x95, 0x71, 0x7a, 0x1c, 0x37, 0x0c, 0xff, 0xfc, - 0x83, 0x2d, 0xc9, 0xaa, 0x59, 0xf7, 0x72, 0x13, 0xd4, 0x8f, 0x11, 0x48, - 0xf4, 0x3d, 0xf8, 0xb6, 0x2d, 0x61, 0x3d, 0x6b, 0x42, 0xfa, 0x4b, 0x48, - 0x34, 0x09, 0x12, 0x93, 0x33, 0x1d, 0x1c, 0x49, 0xdf, 0xa0, 0x93, 0x54, - 0xce, 0x27, 0x67, 0x31, 0xdf, 0x3e, 0x8b, 0x8c, 0xd9, 0xaa, 0xd8, 0x4e, - 0x58, 0x57, 0x1d, 0x56, 0xb6, 0x54, 0x5b, 0x17, 0x9c, 0x91, 0xa8, 0xdc, - 0x44, 0xd6, 0xc0, 0xd2, 0x27, 0x29, 0x46, 0xfb, 0x69, 0xd9, 0x3e, 0x3d, - 0x8f, 0x7e, 0x9c, 0x19, 0x83, 0x1b, 0x9b, 0x0e, 0x56, 0x83, 0x24, 0x18, - 0xe3, 0xaa, 0x01, 0xbf, 0x3f, 0xa5, 0xf8, 0x35, 0x52, 0xf1, 0x01, 0xe0, - 0xec, 0x82, 0xe3, 0xcc, 0x40, 0x71, 0x70, 0x2f, 0xca, 0x07, 0xfc, 0xeb, - 0x01, 0x8f, 0xe5, 0x81, 0x9c, 0x10, 0xd6, 0x8b, 0x5c, 0x89, 0x18, 0x0b, - 0x4c, 0x86, 0xc1, 0x5f, 0x99, 0xc8, 0x81, 0xd6, 0x14, 0xf9, 0x65, 0x01, - 0x15, 0x5a, 0xbe, 0x11, 0x36, 0xa0, 0x83, 0xe2, 0x69, 0x0e, 0xb9, 0xf9, - 0x42, 0xf5, 0x4a, 0x78, 0x98, 0xd6, 0xa2, 0x88, 0x5c, 0xd8, 0xbb, 0x94, - 0xd2, 0x8b, 0x3e, 0xbd, 0xea, 0x84, 0x02, 0xa6, 0x49, 0xdb, 0x9b, 0xfd, - 0x5f, 0xb0, 0x9f, 0xc8, 0x2f, 0x6d, 0xc3, 0x84, 0x10, 0x1c, 0xe6, 0x94, - 0xcd, 0x92, 0xd4, 0xaa, 0x04, 0x13, 0xb4, 0x6c, 0x56, 0xbd, 0x8c, 0xd6, - 0x0c, 0xe2, 0xec, 0x1f, 0x17, 0x14, 0xfd, 0xdb, 0x51, 0xeb, 0x12, 0x7a, - 0x1a, 0x62, 0x8c, 0x4a, 0xfa, 0xf0, 0x1d, 0x77, 0xb4, 0x8d, 0xda, 0x25, - 0xb4, 0x76, 0x32, 0x4d, 0x8e, 0x14, 0x2b, 0x1e, 0x97, 0x31, 0xea, 0x35, - 0x03, 0x45, 0xc9, 0xe5, 0x2a, 0x0a, 0x28, 0x08, 0x4c, 0xea, 0xf2, 0xcb, - 0x2a, 0x92, 0x62, 0xf7, 0xe3, 0xac, 0x59, 0x81, 0xdc, 0x2c, 0xb8, 0x94, - 0x3b, 0x4c, 0x4b, 0x39, 0x2c, 0x39, 0xa4, 0x68, 0x3e, 0x99, 0xcc, 0x92, - 0x85, 0x28, 0x34, 0xc5, 0x05, 0x30, 0x69, 0xa7, 0xc1, 0x37, 0x12, 0xe0, - 0x26, 0x01, 0x4b, 0xe0, 0xc1, 0xe1, 0x4d, 0x24, 0xe4, 0x03, 0x75, 0x68, - 0xd8, 0xa0, 0x08, 0x58, 0x4a, 0x1a, 0xb8, 0xd1, 0xbc, 0xa0, 0x6c, 0x69, - 0x36, 0x7a, 0x28, 0x2d, 0x40, 0x46, 0x49, 0xcd, 0x1c, 0x99, 0x97, 0x1f, - 0x1f, 0xd3, 0x20, 0x5c, 0x73, 0x3e, 0x6a, 0xc3, 0x74, 0xd2, 0x89, 0xcd, - 0x9e, 0x23, 0x0f, 0xdc, 0x49, 0x78, 0x5f, 0x84, 0xb9, 0x74, 0xeb, 0x1d, - 0xb9, 0x84, 0x7c, 0xa8, 0x1a, 0x06, 0xe3, 0xc2, 0x8c, 0x1d, 0x6e, 0x3d, - 0x64, 0x24, 0x1f, 0x34, 0x98, 0x4e, 0xa5, 0x20, 0x80, 0xec, 0x0a, 0x51, - 0x58, 0x11, 0x07, 0x07, 0x7c, 0xcf, 0xe3, 0x86, 0xa4, 0xdc, 0x17, 0x2d, - 0xe5, 0x99, 0x6a, 0x3e, 0x79, 0x44, 0x8c, 0xe9, 0xab, 0xf6, 0x05, 0x28, - 0x1a, 0xe7, 0xba, 0x02, 0xa1, 0x69, 0xe1, 0x0b, 0xbd, 0x44, 0xc3, 0xa9, - 0x82, 0xe4, 0x39, 0xd1, 0x6b, 0x95, 0x67, 0x55, 0x32, 0xed, 0xaa, 0x72, - 0xca, 0x27, 0x06, 0xee, 0xa1, 0x7f, 0x19, 0x9c, 0x89, 0xa9, 0x34, 0xe2, - 0x4e, 0x83, 0xb5, 0xc0, 0x11, 0x67, 0xb9, 0x15, 0x1e, 0xf4, 0x42, 0x7b, - 0xfa, 0x81, 0x53, 0x11, 0x64, 0x7f, 0x65, 0x88, 0xcd, 0x79, 0x01, 0xc3, - 0xce, 0x32, 0xb4, 0x06, 0x53, 0x13, 0xda, 0xf6, 0xc4, 0x7d, 0x99, 0x15, - 0x61, 0x6d, 0x99, 0xe6, 0x42, 0x48, 0xb2, 0x04, 0x1b, 0x32, 0x9d, 0x31, - 0x36, 0x6b, 0xec, 0x04, 0xa3, 0x78, 0xe8, 0x3c, 0xc5, 0xfc, 0xcf, 0x84, - 0x2d, 0xfe, 0x34, 0x23, 0x14, 0x72, 0x4e, 0xbc, 0x0f, 0xb7, 0x6a, 0xf2, - 0xc0, 0xab, 0x74, 0x24, 0x17, 0x9b, 0x60, 0x31, 0x8f, 0x8b, 0xec, 0x52, - 0x93, 0x07, 0xe6, 0xb8, 0xea, 0x16, 0x5c, 0x46, 0x7d, 0x86, 0x2a, 0xd4, - 0xd8, 0xf0, 0x38, 0x5c, 0x63, 0xeb, 0xba, 0x27, 0xa6, 0x9c, 0x74, 0xde, - 0x17, 0xc9, 0xb7, 0x53, 0xec, 0xca, 0x53, 0x6f, 0xb8, 0x8e, 0x59, 0xab, - 0xb6, 0x1a, 0x7b, 0x78, 0x3a, 0x29, 0x73, 0xe7, 0x24, 0x11, 0xa1, 0x1a, - 0x94, 0x46, 0x7a, 0x56, 0x14, 0xc2, 0xc9, 0x15, 0xa7, 0xe2, 0x83, 0x2b, - 0x4d, 0xb0, 0x38, 0x37, 0x3c, 0x80, 0x75, 0x3b, 0xc8, 0xa2, 0x51, 0x9e, - 0x6b, 0xbf, 0x01, 0xe7, 0x5a, 0x38, 0xd9, 0xbe, 0xff, 0x0e, 0x9b, 0x03, - 0x5d, 0x49, 0x5d, 0x94, 0x1c, 0x86, 0xa1, 0x24, 0x27, 0x78, 0x11, 0x20, - 0xa4, 0x4b, 0x76, 0x10, 0x86, 0xba, 0x34, 0x14, 0x89, 0x8b, 0xe6, 0x16, - 0xa6, 0x45, 0xab, 0x76, 0xa0, 0xf6, 0x04, 0xb6, 0xb8, 0xc0, 0x7c, 0xae, - 0x07, 0x84, 0x4b, 0xba, 0x14, 0xc7, 0x7d, 0x15, 0x27, 0x13, 0x75, 0xe9, - 0x11, 0x02, 0xb9, 0x9e, 0x80, 0x09, 0xcd, 0x19, 0x33, 0xfe, 0x3b, 0x15, - 0xf5, 0xf7, 0xa3, 0x91, 0xb0, 0xd2, 0xf2, 0x17, 0x54, 0xbd, 0x5b, 0xaf, - 0xb1, 0xe4, 0xea, 0xc0, 0x6c, 0x16, 0x7f, 0x1b, 0x25, 0xcf, 0x11, 0x17, - 0xca, 0x6b, 0xe6, 0x4d, 0xda, 0x0c, 0x43, 0xee, 0x73, 0xd4, 0x92, 0x8f, - 0x2a, 0x9f, 0xfa, 0xde, 0x4f, 0x19, 0xd2, 0xd9, 0x68, 0x08, 0x71, 0x0a, - 0x4d, 0xba, 0x7f, 0xe4, 0x58, 0x1c, 0xdd, 0xdc, 0xb5, 0xfb, 0xa2, 0x96, - 0x4c, 0x59, 0x9b, 0x94, 0xd0, 0x71, 0xf7, 0x56, 0x84, 0x65, 0x0c, 0xc7, - 0xa9, 0xd9, 0x4a, 0xfb, 0xf4, 0xc4, 0x38, 0x6d, 0x02, 0x39, 0x1c, 0xcb, - 0xcc, 0x98, 0x5e, 0x4d, 0x56, 0x2c, 0x4c, 0x89, 0xa5, 0x57, 0xdc, 0x06, - 0xc9, 0xf7, 0x4f, 0x15, 0xa9, 0xf4, 0x33, 0x25, 0x7d, 0xb0, 0xa5, 0x74, - 0xc0, 0x50, 0x09, 0xa6, 0xcf, 0x9e, 0xd4, 0x89, 0x37, 0x89, 0xa1, 0x2e, - 0x0f, 0x47, 0x81, 0x5d, 0xc6, 0x2c, 0xc8, 0x94, 0xb5, 0x12, 0x88, 0x15, - 0xae, 0x9a, 0x99, 0xc6, 0xca, 0x46, 0x1a, 0x50, 0x5d, 0xd4, 0xcc, 0x8a, - 0x88, 0x99, 0x2e, 0x44, 0xbd, 0xd2, 0xa1, 0x70, 0xb8, 0x4f, 0x2c, 0x7c, - 0x92, 0xae, 0x92, 0xd7, 0xaf, 0x2f, 0xec, 0x1d, 0xed, 0xee, 0xe3, 0xc8, - 0xb9, 0x86, 0xa3, 0x8e, 0x6d, 0x37, 0xd1, 0xc2, 0x9b, 0x91, 0xc9, 0x88, - 0x3c, 0x15, 0x22, 0xba, 0xd4, 0x13, 0x70, 0xc4, 0x8d, 0x1f, 0x29, 0xe9, - 0x64, 0x30, 0x5d, 0x36, 0x2d, 0x46, 0xff, 0x0c, 0x3b, 0x51, 0x1b, 0x1b, - 0x2b, 0x1e, 0x23, 0xfc, 0x36, 0xf8, 0x38, 0x9b, 0x30, 0x36, 0x42, 0x68, - 0x89, 0x82, 0x80, 0x09, 0xdc, 0x98, 0x42, 0x1d, 0xc6, 0xef, 0x85, 0x1e, - 0x92, 0xec, 0xc9, 0x38, 0x0c, 0x27, 0x45, 0xbb, 0x64, 0xa9, 0x50, 0xbe, - 0x65, 0xbf, 0x36, 0xa0, 0x78, 0x5c, 0x99, 0x4c, 0xe3, 0xa8, 0xd3, 0x10, - 0x76, 0x58, 0x78, 0x1a, 0x8b, 0x96, 0x6a, 0xcc, 0x9a, 0xe1, 0x5c, 0x51, - 0x31, 0x72, 0xe0, 0x76, 0x50, 0x91, 0xb2, 0xa9, 0xaf, 0xbf, 0x9d, 0xaa, - 0xa6, 0xc0, 0xe1, 0x79, 0x94, 0x16, 0x4c, 0x6e, 0x9c, 0x0c, 0x6e, 0x30, - 0xe6, 0x1a, 0x34, 0x77, 0x43, 0x4b, 0xb8, 0x39, 0x2c, 0x99, 0x5e, 0x8f, - 0x89, 0x83, 0xc2, 0x85, 0xdc, 0x23, 0x2d, 0x69, 0xb1, 0x31, 0x52, 0xa6, - 0x06, 0xa3, 0x32, 0x62, 0x10, 0x6a, 0x66, 0x9a, 0x8f, 0x7a, 0x12, 0x24, - 0x4a, 0x3c, 0xd1, 0x00, 0xb0, 0x91, 0xa1, 0xa4, 0xbc, 0x7f, 0xac, 0xa5, - 0xf7, 0xc8, 0xde, 0xcc, 0xd1, 0x26, 0x0d, 0xbc, 0xd2, 0x81, 0xe2, 0x30, - 0x97, 0xa9, 0x5c, 0x64, 0x5b, 0x4f, 0xe2, 0xc0, 0xb7, 0x58, 0x58, 0xa1, - 0xe1, 0x55, 0x23, 0x57, 0xe4, 0xb5, 0xf3, 0x9d, 0x9a, 0xd2, 0x68, 0xdc, - 0x11, 0x22, 0x8d, 0x43, 0x76, 0x9e, 0x1e, 0x09, 0x05, 0xaf, 0x59, 0xa8, - 0x80, 0x52, 0x0d, 0x23, 0xed, 0x39, 0xe7, 0xf6, 0xce, 0x08, 0x75, 0x62, - 0x84, 0x15, 0x14, 0xd7, 0x08, 0xe3, 0x07, 0x70, 0xea, 0x61, 0x57, 0x97, - 0x38, 0x55, 0x2b, 0x48, 0x9d, 0x57, 0x3c, 0x33, 0x27, 0x73, 0xb9, 0x13, - 0xd1, 0x9f, 0x13, 0xe1, 0x09, 0x1a, 0x44, 0xe3, 0xc2, 0xf0, 0x48, 0x0b, - 0xaa, 0xcb, 0xc2, 0xbb, 0x14, 0x46, 0xe7, 0x6a, 0x77, 0xe2, 0x72, 0x66, - 0xf1, 0x38, 0xf6, 0x85, 0xa7, 0x52, 0x7c, 0xc5, 0x24, 0xe1, 0xdd, 0xe5, - 0xe0, 0xa7, 0x08, 0x83, 0x03, 0x59, 0xda, 0xfd, 0x89, 0x95, 0xde, 0x2c, - 0x44, 0x68, 0xb0, 0xb7, 0xaa, 0x2b, 0x8a, 0x3e, 0x4d, 0xf2, 0x43, 0xb2, - 0x90, 0x68, 0xf6, 0x1a, 0x1e, 0x31, 0xf0, 0xa8, 0x93, 0xe8, 0x14, 0xa7, - 0xdf, 0xab, 0x9e, 0xe3, 0x6f, 0xd2, 0x5f, 0x86, 0xc5, 0x01, 0xad, 0xb8, - 0x2f, 0x3c, 0x89, 0x96, 0x2a, 0x90, 0x68, 0x98, 0x06, 0x79, 0xb7, 0x94, - 0x38, 0x3d, 0x0b, 0x63, 0xe7, 0x1a, 0x5d, 0xf9, 0xc0, 0x16, 0xa6, 0xf1, - 0xf6, 0xf1, 0x1d, 0xde, 0xef, 0xd9, 0x35, 0x05, 0x37, 0x72, 0xd2, 0x64, - 0xf9, 0x41, 0xe2, 0xfe, 0xfc, 0x44, 0x3a, 0x7b, 0xf2, 0xfc, 0x82, 0x07, - 0x30, 0xd2, 0x3d, 0x4f, 0xa4, 0xf8, 0x7c, 0x14, 0x34, 0xe1, 0xe2, 0x06, - 0xb6, 0x2e, 0xc2, 0x80, 0x4c, 0x19, 0xe8, 0xce, 0xb5, 0xea, 0x27, 0x4e, - 0x7b, 0x70, 0x2e, 0x25, 0x8d, 0xb4, 0x99, 0x9d, 0xd6, 0x3d, 0x56, 0xe5, - 0x34, 0x32, 0x5f, 0x71, 0x8c, 0x0a, 0x40, 0x4d, 0x5d, 0x81, 0x35, 0xdb, - 0xe0, 0xcd, 0x01, 0xa8, 0xdc, 0xa5, 0x76, 0xb2, 0x38, 0x35, 0x35, 0x18, - 0x74, 0x48, 0x44, 0x5e, 0x46, 0x4c, 0x29, 0x00, 0x13, 0x46, 0x9a, 0xd3, - 0x28, 0x6f, 0xac, 0x9b, 0xd4, 0xbe, 0xe8, 0xf2, 0x9b, 0x2d, 0x49, 0x56, - 0x6b, 0xdb, 0x0b, 0x13, 0xe7, 0x2b, 0x87, 0x4d, 0x46, 0x2d, 0x0f, 0x41, - 0x49, 0x53, 0x95, 0x41, 0x3e, 0x89, 0x99, 0x43, 0x0c, 0xa6, 0x0f, 0x09, - 0x55, 0x0c, 0x8e, 0x26, 0xa5, 0xaf, 0xda, 0x20, 0x76, 0xe2, 0xac, 0x70, - 0x06, 0x8c, 0x39, 0xb6, 0x26, 0x6c, 0x1e, 0x0b, 0x55, 0x31, 0x19, 0xf8, - 0xc4, 0x8e, 0x87, 0xc3, 0x59, 0xa1, 0xec, 0xa3, 0x50, 0x41, 0x8a, 0xa0, - 0x28, 0x99, 0xca, 0x8e, 0x46, 0xcb, 0x88, 0x20, 0xd8, 0x49, 0xae, 0x7c, - 0x1a, 0x85, 0x09, 0x93, 0xcb, 0xce, 0x7e, 0x0a, 0x3b, 0x4c, 0x53, 0x89, - 0x64, 0xfe, 0x82, 0x44, 0x3a, 0x2c, 0x23, 0xa0, 0x12, 0x82, 0x52, 0x28, - 0x85, 0x98, 0xa2, 0x4e, 0xdd, 0xa6, 0xe0, 0x11, 0xc5, 0x56, 0x00, 0x9c, - 0x78, 0xf8, 0xaf, 0x31, 0xb1, 0xe8, 0xe0, 0xc2, 0x10, 0x99, 0x91, 0x4c, - 0x4a, 0x18, 0xce, 0x63, 0x79, 0xba, 0x2b, 0x2a, 0x06, 0x0d, 0x01, 0x8c, - 0x48, 0xcb, 0xca, 0x14, 0x94, 0xa4, 0x64, 0xd9, 0x1c, 0x84, 0xb7, 0xd9, - 0xe6, 0xe9, 0xd8, 0xfe, 0xd2, 0x98, 0x0b, 0x03, 0xc6, 0x8d, 0x83, 0xc7, - 0x7a, 0x2b, 0x4d, 0xfe, 0x26, 0x6b, 0x9f, 0xe0, 0xb0, 0xa6, 0xa5, 0x1e, - 0x15, 0xb6, 0x73, 0x82, 0x9a, 0xe1, 0x12, 0x6e, 0xb6, 0x59, 0x34, 0x29, - 0x6a, 0x64, 0x01, 0x1b, 0x7a, 0xee, 0x24, 0xee, 0x82, 0x96, 0x2c, 0x93, - 0x43, 0x5d, 0xb9, 0x67, 0x17, 0x8b, 0x30, 0x84, 0xeb, 0x70, 0x5e, 0x78, - 0xe7, 0x87, 0x82, 0x0b, 0xb2, 0xd8, 0x6c, 0x86, 0x63, 0x36, 0x2e, 0x1b, - 0x93, 0x8a, 0xca, 0xb5, 0xce, 0x8b, 0xea, 0x40, 0x8f, 0xc9, 0x45, 0xb3, - 0x6c, 0x4b, 0xa6, 0x01, 0xa4, 0x0e, 0x32, 0xf9, 0x6e, 0x58, 0x41, 0x3a, - 0xa8, 0xaf, 0x05, 0x4f, 0x88, 0x27, 0x3c, 0x3d, 0x70, 0x9d, 0xa9, 0x7d, - 0x9d, 0xf2, 0x87, 0xc7, 0xe4, 0x10, 0x99, 0x05, 0x69, 0x75, 0xb0, 0xf3, - 0xe2, 0xbc, 0x1e, 0x1b, 0xa0, 0x13, 0x0c, 0xb4, 0x30, 0x5a, 0x48, 0xab, - 0x7d, 0x03, 0x6c, 0xaa, 0x30, 0x4c, 0x48, 0x68, 0xe0, 0x59, 0x75, 0xda, - 0x5f, 0xea, 0x29, 0x1d, 0x78, 0xd3, 0xcd, 0x11, 0x2a, 0xa1, 0xef, 0x27, - 0x30, 0xf8, 0xa8, 0x11, 0xb2, 0x10, 0x36, 0x93, 0xb2, 0x84, 0x7c, 0x70, - 0x38, 0x57, 0xec, 0x5e, 0xc9, 0xb7, 0x60, 0xc3, 0x8f, 0x02, 0xe1, 0x94, - 0xa9, 0x0e, 0xa3, 0x0d, 0xc4, 0x60, 0x9d, 0x8d, 0x11, 0x03, 0x5b, 0x4d, - 0x70, 0xfe, 0x48, 0x57, 0x91, 0x4a, 0x69, 0xbb, 0x3d, 0x75, 0xc6, 0x1e, - 0x1b, 0x91, 0xc7, 0x79, 0x3a, 0x1e, 0xf6, 0x07, 0xa7, 0x4b, 0xaa, 0x87, - 0xb8, 0x32, 0x7c, 0x1a, 0x26, 0xbe, 0xf8, 0xb1, 0xfb, 0xc2, 0xb6, 0xb5, - 0x8f, 0x43, 0xbd, 0xe2, 0xbc, 0x05, 0xb6, 0x0c, 0xa2, 0xa3, 0x33, 0x2a, - 0x4f, 0x0a, 0xd6, 0x4b, 0x2c, 0x41, 0xca, 0xcb, 0x51, 0x4f, 0x7b, 0x21, - 0x17, 0xb9, 0xd3, 0x35, 0x56, 0x0e, 0x8c, 0x2a, 0x89, 0xe4, 0x90, 0xf1, - 0x1a, 0xdd, 0x60, 0x54, 0x4c, 0x91, 0x3c, 0x43, 0x12, 0x30, 0x29, 0xa8, - 0x94, 0x5c, 0xa0, 0x91, 0x5c, 0xd3, 0x12, 0x2d, 0x48, 0x29, 0x22, 0x8d, - 0xed, 0x8e, 0x14, 0x27, 0xd3, 0x8f, 0x65, 0x30, 0x80, 0xb1, 0xe4, 0x84, - 0xd4, 0xe0, 0xae, 0xd8, 0x6f, 0xa9, 0xce, 0xa9, 0x8d, 0x09, 0x05, 0xd9, - 0x21, 0x9b, 0x4a, 0x21, 0xa3, 0x69, 0x34, 0xbe, 0x2a, 0x43, 0x02, 0xf7, - 0x5c, 0x98, 0x2f, 0x62, 0x65, 0x34, 0xa3, 0x2f, 0xdd, 0x6f, 0xbc, 0x36, - 0xdb, 0x66, 0x53, 0x1d, 0x69, 0x1e, 0x44, 0x75, 0x0c, 0xbc, 0xb2, 0x24, - 0xd1, 0x38, 0xdd, 0x01, 0x77, 0x68, 0xe0, 0x75, 0x4a, 0x6d, 0x49, 0x29, - 0xf9, 0x8c, 0x05, 0x3e, 0x4d, 0x27, 0x3d, 0x94, 0x0a, 0x79, 0x27, 0x5e, - 0x26, 0xd2, 0x42, 0x11, 0xad, 0x14, 0xef, 0x9c, 0x71, 0xfd, 0x5c, 0xe5, - 0xe4, 0xa3, 0x1d, 0xe2, 0xaf, 0xb7, 0x5e, 0x27, 0x34, 0x9f, 0xb3, 0xf2, - 0xc0, 0x24, 0x04, 0xc0, 0x41, 0x2d, 0x8e, 0x5c, 0xe2, 0xd9, 0x94, 0xc7, - 0xb6, 0x0e, 0x2c, 0x2a, 0x75, 0xee, 0x5e, 0x4c, 0x0f, 0x6d, 0xd3, 0xf6, - 0x2a, 0x13, 0x29, 0x3b, 0x7b, 0x84, 0x81, 0x25, 0x91, 0x82, 0xb0, 0x39, - 0x8a, 0x11, 0x94, 0x3c, 0xd3, 0x41, 0x08, 0x34, 0x8a, 0x35, 0x13, 0x1a, - 0x4b, 0x73, 0x9c, 0xe0, 0x67, 0x08, 0x84, 0x6e, 0xa7, 0x31, 0xea, 0xfe, - 0xe3, 0x7f, 0xd9, 0xf7, 0x45, 0x07, 0xb7, 0x85, 0x1f, 0x93, 0xd2, 0xfa, - 0xa2, 0x4d, 0xa5, 0xa3, 0x65, 0x93, 0xb0, 0x5f, 0xe8, 0xd4, 0xa0, 0x61, - 0x72, 0xdd, 0x10, 0x72, 0x7c, 0xe2, 0x4e, 0x27, 0xa5, 0x3a, 0xe4, 0x20, - 0x63, 0x01, 0x24, 0x56, 0x1e, 0x84, 0x69, 0x6c, 0xf1, 0xf3, 0x24, 0xeb, - 0x10, 0xa6, 0xc9, 0xe6, 0x8a, 0x4b, 0x61, 0x0a, 0xc8, 0xb6, 0x60, 0x22, - 0x2f, 0x5d, 0x5e, 0x39, 0x19, 0xc2, 0xee, 0x69, 0xa6, 0x53, 0x0f, 0x2a, - 0x83, 0xad, 0x5e, 0xff, 0x78, 0x81, 0xc3, 0xad, 0x1e, 0x06, 0xb0, 0x32, - 0xe8, 0x51, 0xb8, 0xef, 0x5b, 0x5c, 0xd1, 0x7f, 0x47, 0x5f, 0xcb, 0x2a, - 0xdb, 0xad, 0xda, 0x6f, 0xa3, 0x79, 0x7f, 0x1c, 0xa2, 0x28, 0x65, 0x4e, - 0x99, 0x3d, 0x53, 0xff, 0x90, 0xc6, 0xd9, 0x0d, 0x34, 0x19, 0x86, 0xd3, - 0x19, 0x89, 0xfd, 0x18, 0x81, 0x3d, 0xb7, 0x52, 0xc5, 0x86, 0x85, 0x0f, - 0x65, 0xb5, 0x0a, 0x65, 0xf9, 0xba, 0xc5, 0xb1, 0x94, 0xdb, 0x5e, 0xe7, - 0xdb, 0x01, 0x22, 0x51, 0xdd, 0xe2, 0xbe, 0x21, 0x36, 0x74, 0xfa, 0xdd, - 0x8b, 0x68, 0x7e, 0x82, 0xb1, 0x92, 0x08, 0x9a, 0x5c, 0xc5, 0xfb, 0x56, - 0xc6, 0x1b, 0x68, 0x6b, 0x99, 0xaf, 0xb6, 0x43, 0xdd, 0x17, 0x8d, 0xe3, - 0x91, 0x44, 0x5c, 0xa9, 0x77, 0x30, 0x99, 0x2b, 0x0b, 0x09, 0xe8, 0x88, - 0x14, 0xed, 0x14, 0xc3, 0x48, 0x05, 0x1d, 0x3d, 0xbe, 0x26, 0xea, 0xe5, - 0x20, 0x2e, 0x9f, 0x86, 0x7f, 0x04, 0x40, 0x90, 0xf1, 0x05, 0x0d, 0x3f, - 0x19, 0x87, 0x8a, 0x54, 0x26, 0x22, 0x6a, 0x29, 0x80, 0x17, 0x73, 0xe2, - 0xda, 0x5d, 0x47, 0x39, 0x77, 0xb2, 0x75, 0xc1, 0xa3, 0xc7, 0x11, 0x2a, - 0xea, 0xc7, 0x91, 0x09, 0x14, 0x5a, 0x30, 0x83, 0xc5, 0x93, 0xf0, 0x2c, - 0xbc, 0x05, 0x02, 0x66, 0x9b, 0xa8, 0x7c, 0x33, 0x2a, 0xc5, 0x94, 0x2e, - 0x15, 0xf9, 0xb2, 0x16, 0xc7, 0x02, 0x03, 0xda, 0x96, 0x2d, 0xd9, 0x7f, - 0x6d, 0xf6, 0xbd, 0x8b, 0x0c, 0x4b, 0xc1, 0x05, 0xa7, 0x44, 0xc3, 0xba, - 0x43, 0x26, 0xe6, 0xea, 0x4c, 0xad, 0x51, 0xcb, 0x9b, 0xc7, 0xd2, 0x69, - 0x46, 0xaf, 0x7f, 0xba, 0xb0, 0xf7, 0x6e, 0xdb, 0xc2, 0x09, 0x6f, 0xc4, - 0xde, 0x5e, 0xc4, 0xb9, 0xef, 0xbf, 0x61, 0xb5, 0x77, 0xb4, 0x40, 0x4f, - 0x7f, 0x01, 0xe7, 0x3f, 0xaf, 0x0e, 0x14, 0xdc, 0xc7, 0x12, 0x48, 0x13, - 0x10, 0x43, 0x14, 0x72, 0xd0, 0xb9, 0xc2, 0x85, 0x0f, 0xc9, 0x0c, 0x77, - 0xf6, 0x77, 0xc3, 0x67, 0x90, 0x4c, 0x18, 0x3d, 0x92, 0x7c, 0x8f, 0xa0, - 0xa3, 0x23, 0xd6, 0xb1, 0x9b, 0xf6, 0x70, 0x78, 0x3d, 0xd5, 0x1d, 0xd2, - 0x96, 0xb2, 0x93, 0x09, 0x1d, 0xa4, 0xe4, 0xbb, 0x25, 0xe3, 0xf0, 0xcf, - 0xa9, 0xaf, 0x84, 0xfe, 0xc8, 0x5f, 0x63, 0x4b, 0x32, 0x3c, 0x07, 0x4e, - 0x86, 0x89, 0x0e, 0x55, 0xba, 0xba, 0x18, 0x7a, 0x1a, 0x05, 0xcf, 0xbe, - 0x18, 0x73, 0xb4, 0x39, 0xf6, 0xdb, 0x8d, 0xe0, 0xd1, 0x9f, 0x22, 0xd3, - 0x2f, 0x0c, 0x14, 0x0f, 0x23, 0x00, 0x0a, 0xd0, 0x56, 0x61, 0x60, 0x9a, - 0xf4, 0xc0, 0x16, 0x61, 0xec, 0x47, 0xe8, 0x55, 0x97, 0xaf, 0x4f, 0xc9, - 0x90, 0x9b, 0xa3, 0xc0, 0xb0, 0x40, 0x4e, 0x67, 0x09, 0x9f, 0xee, 0xf6, - 0x97, 0x2c, 0xad, 0x4d, 0x5a, 0xf9, 0xc3, 0x47, 0x51, 0xb4, 0x7b, 0xed, - 0x2b, 0xdf, 0x56, 0xd2, 0x22, 0xa4, 0xe4, 0x5b, 0x52, 0x65, 0x66, 0x85, - 0x73, 0x85, 0x88, 0x46, 0x20, 0x42, 0xec, 0xe1, 0x3f, 0x27, 0xc9, 0xe0, - 0xf8, 0x8c, 0x47, 0xf9, 0x34, 0x9f, 0x45, 0x73, 0xe2, 0x28, 0x97, 0x83, - 0x3c, 0x9a, 0x5a, 0x4d, 0xd9, 0x17, 0x52, 0xa4, 0x8e, 0xfa, 0xe8, 0x57, - 0x60, 0x4e, 0x7d, 0x9e, 0x89, 0xfb, 0x1d, 0xd9, 0x89, 0x30, 0x71, 0x70, - 0x4c, 0x1c, 0x46, 0x9c, 0x4e, 0x07, 0x19, 0x7d, 0x61, 0x44, 0x9a, 0xb7, - 0x8e, 0xd7, 0xc8, 0x53, 0xad, 0x48, 0xda, 0x45, 0x92, 0x8d, 0x48, 0xa1, - 0x4a, 0xb2, 0xd0, 0xe3, 0x79, 0x60, 0x05, 0x18, 0x2d, 0xfc, 0x8e, 0x67, - 0x0d, 0xad, 0x1f, 0x34, 0xa8, 0x21, 0x0c, 0xb8, 0x21, 0x7b, 0x9d, 0x7a, - 0x93, 0xd3, 0x8a, 0x2b, 0xe5, 0xaa, 0xbf, 0x80, 0x02, 0x96, 0x4c, 0x7f, - 0x43, 0xc9, 0x04, 0x77, 0x04, 0xaf, 0xff, 0x99, 0x7d, 0xa9, 0x6c, 0x14, - 0x88, 0xc3, 0xf3, 0x9e, 0xfa, 0x12, 0x25, 0xd7, 0x50, 0xcb, 0xa8, 0xbb, - 0x4e, 0x56, 0x93, 0x2f, 0xae, 0x25, 0x1f, 0x26, 0x92, 0x08, 0xdf, 0x5f, - 0xf9, 0x78, 0x16, 0x0b, 0x76, 0xcc, 0x1f, 0x22, 0xda, 0xe0, 0x7f, 0x69, - 0xa2, 0x26, 0xa0, 0x21, 0x5d, 0xce, 0x10, 0x12, 0x30, 0xa6, 0x20, 0xf3, - 0x21, 0x71, 0x24, 0xd7, 0xae, 0xea, 0xaa, 0xd0, 0x3e, 0x2e, 0x65, 0xb2, - 0xf1, 0x2b, 0x53, 0x88, 0x5d, 0x04, 0x96, 0xab, 0x56, 0xf1, 0x85, 0x12, - 0x5b, 0x98, 0xf0, 0x4b, 0x64, 0x46, 0xbe, 0x9f, 0x43, 0x5b, 0x00, 0xdd, - 0x82, 0xdd, 0xb1, 0x15, 0x1b, 0x0e, 0x34, 0x5d, 0xd7, 0x24, 0x89, 0x4d, - 0xa5, 0x33, 0x40, 0x11, 0x8f, 0xe2, 0x25, 0x6b, 0x15, 0xa9, 0x63, 0x00, - 0x0c, 0x20, 0x91, 0xe8, 0x13, 0xcd, 0x80, 0x93, 0x2c, 0x43, 0xa9, 0xa1, - 0x09, 0xdd, 0x0c, 0x52, 0x74, 0xac, 0xee, 0x47, 0xa8, 0x59, 0xe7, 0x17, - 0xf2, 0x16, 0xc2, 0xe3, 0x28, 0x33, 0x23, 0x94, 0x4d, 0x44, 0x0a, 0x60, - 0xf3, 0x4d, 0x8c, 0xb6, 0xb3, 0x15, 0x25, 0xa6, 0x58, 0x1f, 0xb9, 0x8e, - 0xa0, 0xe1, 0x0a, 0x7e, 0x12, 0x53, 0x49, 0x6c, 0xf1, 0xc4, 0x17, 0x9f, - 0x24, 0xd0, 0xa3, 0x85, 0x7c, 0x0a, 0xa8, 0x09, 0x80, 0xf2, 0x67, 0x48, - 0xc6, 0x10, 0xd8, 0xec, 0x8b, 0x59, 0xfd, 0x98, 0x8a, 0x4c, 0xa4, 0xa2, - 0xc3, 0x82, 0xcc, 0xe0, 0x2b, 0x32, 0xba, 0xf6, 0xc9, 0xc7, 0xb1, 0x78, - 0x7b, 0x75, 0x31, 0xbe, 0x49, 0x50, 0xb1, 0x7a, 0x71, 0xb5, 0x69, 0x35, - 0x49, 0xa6, 0x6b, 0x51, 0xf8, 0x33, 0x80, 0x69, 0x8e, 0x81, 0x99, 0x10, - 0xbb, 0x5a, 0x96, 0x29, 0xa0, 0x07, 0xd7, 0x09, 0xf4, 0xf3, 0x65, 0xcf, - 0x9f, 0x56, 0x84, 0xbf, 0x94, 0xfa, 0xd1, 0xc2, 0xf5, 0x80, 0x83, 0xad, - 0xcc, 0xf8, 0x93, 0x80, 0xdf, 0xe6, 0x07, 0x5c, 0x49, 0xda, 0x47, 0xb4, - 0xab, 0x04, 0x77, 0xf8, 0xce, 0x4b, 0x48, 0x2f, 0x2f, 0x3e, 0xcc, 0x53, - 0xfb, 0x11, 0x69, 0x69, 0xe1, 0x51, 0x92, 0x29, 0x52, 0xa3, 0x8b, 0x31, - 0x43, 0xab, 0xeb, 0x1b, 0x1a, 0x79, 0x4a, 0x8d, 0x99, 0x6b, 0xba, 0x5e, - 0x35, 0xfa, 0xc3, 0x59, 0x10, 0xb9, 0x4f, 0x12, 0xb9, 0x4b, 0x6b, 0x76, - 0xdb, 0x2e, 0xd6, 0x88, 0x9b, 0xb4, 0xfb, 0x24, 0xa9, 0x62, 0x03, 0xe5, - 0x9a, 0xbe, 0x91, 0x98, 0xab, 0x23, 0xa3, 0x1d, 0x7b, 0xe7, 0xa5, 0x0c, - 0xbf, 0x3d, 0x52, 0x67, 0x45, 0xf6, 0xa9, 0x7c, 0x64, 0x50, 0x2d, 0x01, - 0x3a, 0x96, 0x94, 0x81, 0x33, 0x99, 0x83, 0x0d, 0x9d, 0x91, 0x28, 0x0b, - 0xc2, 0xbf, 0x5f, 0x84, 0x06, 0x05, 0x26, 0xac, 0x8f, 0xd2, 0xa2, 0xc0, - 0xe2, 0xef, 0xdd, 0xfc, 0x7e, 0x6e, 0x17, 0x0f, 0xf6, 0xe6, 0xd6, 0x7e, - 0x9c, 0xdd, 0xdf, 0xcf, 0x6e, 0x1e, 0x3f, 0xd9, 0xb7, 0xb7, 0xf7, 0xf8, - 0x07, 0x7b, 0x77, 0x7f, 0xfb, 0xc7, 0xfd, 0xec, 0xfd, 0xd4, 0x3e, 0xde, - 0xd2, 0xcf, 0xf3, 0x7f, 0x3f, 0xce, 0x6f, 0x1e, 0xed, 0xdd, 0xfc, 0xfe, - 0xfd, 0xe2, 0xf1, 0x71, 0x7e, 0x65, 0xdf, 0x7c, 0x32, 0xb3, 0xbb, 0xbb, - 0xeb, 0xc5, 0xe5, 0xec, 0xcd, 0xf5, 0xdc, 0x5e, 0xcf, 0x3e, 0xe2, 0xf7, - 0xbb, 0xfe, 0x7d, 0x39, 0xbf, 0x7b, 0xb4, 0x1f, 0xdf, 0xcd, 0x6f, 0xec, - 0x2d, 0x2e, 0xff, 0x71, 0xf1, 0x30, 0xb7, 0x0f, 0x8f, 0x33, 0x7c, 0x61, - 0x71, 0x63, 0x3f, 0xde, 0x2f, 0x1e, 0x17, 0x37, 0x7f, 0xd0, 0x82, 0x97, - 0xb7, 0x77, 0x9f, 0xee, 0x17, 0x7f, 0xbc, 0x7b, 0x34, 0xef, 0x6e, 0xaf, - 0xaf, 0xe6, 0xf7, 0xf4, 0xb9, 0xb4, 0xef, 0x61, 0x77, 0x7a, 0xd1, 0xde, - 0xcd, 0xee, 0x1f, 0x17, 0xf3, 0x07, 0x84, 0xe3, 0xcf, 0xc5, 0xd5, 0x3c, - 0x85, 0xc9, 0x4e, 0x66, 0x0f, 0x00, 0xf6, 0xc4, 0x7e, 0x5c, 0x3c, 0xbe, - 0xbb, 0xfd, 0xf0, 0x18, 0x80, 0x37, 0xb7, 0x6f, 0x61, 0x91, 0x4f, 0xf6, - 0x5f, 0x8b, 0x9b, 0xab, 0xa9, 0x9d, 0x2f, 0x68, 0xa1, 0xf9, 0xbf, 0xef, - 0xee, 0xe7, 0x0f, 0x0f, 0x00, 0x00, 0xac, 0xbd, 0x78, 0x0f, 0x10, 0xcf, - 0xe1, 0x8f, 0x8b, 0x9b, 0xcb, 0xeb, 0x0f, 0x57, 0x00, 0xcb, 0xd4, 0xbe, - 0x81, 0x15, 0x6e, 0x6e, 0x1f, 0xed, 0xf5, 0x02, 0x4e, 0x06, 0x8f, 0x3d, - 0xde, 0x4e, 0x0d, 0xee, 0x26, 0xcf, 0xea, 0xea, 0x08, 0x0c, 0xac, 0xff, - 0x7e, 0x7e, 0x7f, 0xf9, 0x0e, 0x7e, 0x9c, 0xbd, 0x59, 0x5c, 0x2f, 0x00, - 0x5f, 0xf8, 0x8d, 0xb7, 0xb7, 0x8b, 0xc7, 0x1b, 0xd8, 0x82, 0x70, 0x37, - 0x63, 0xc8, 0x2f, 0x3f, 0x5c, 0xcf, 0xee, 0xcd, 0xdd, 0x87, 0xfb, 0xbb, - 0xdb, 0x87, 0xf9, 0x85, 0x65, 0x14, 0xc2, 0x22, 0x80, 0xf0, 0xfb, 0xc5, - 0xc3, 0xbf, 0x2c, 0x9c, 0x40, 0x10, 0xfb, 0xdf, 0x1f, 0x66, 0x61, 0x21, - 0xc0, 0x2e, 0xac, 0xf1, 0x7e, 0x76, 0x73, 0x39, 0xc7, 0xbd, 0x92, 0x33, - 0x1b, 0xb8, 0x26, 0x3c, 0xae, 0xfd, 0x74, 0xfb, 0x01, 0xf5, 0x06, 0x9c, - 0xfb, 0xfa, 0x2a, 0x43, 0x0a, 0x22, 0x6a, 0x6e, 0xaf, 0xe6, 0x6f, 0xe7, - 0x97, 0x8f, 0x8b, 0x3f, 0xe7, 0x53, 0x7c, 0x12, 0xb6, 0x79, 0xf8, 0xf0, - 0x7e, 0x2e, 0xf8, 0x7e, 0x78, 0x84, 0x45, 0xcd, 0xec, 0xfa, 0xda, 0xde, - 0xcc, 0x2f, 0x01, 0xde, 0xd9, 0xfd, 0x27, 0xfb, 0x30, 0xbf, 0xff, 0x73, - 0x71, 0x49, 0x78, 0xb8, 0x9f, 0xdf, 0xcd, 0x16, 0xf7, 0x88, 0xa5, 0xcb, - 0xdb, 0xfb, 0x7b, 0x5c, 0xe5, 0xf6, 0x86, 0xc9, 0xe8, 0xe7, 0x0b, 0x6e, - 0x71, 0x08, 0x69, 0xb7, 0x6b, 0xad, 0x9d, 0x67, 0xc1, 0x71, 0x83, 0x14, - 0x34, 0xff, 0x13, 0xe9, 0xe3, 0xc3, 0xcd, 0x35, 0x62, 0xe2, 0x7e, 0xfe, - 0xdf, 0x1f, 0xe0, 0xac, 0x48, 0x25, 0x36, 0xa7, 0x12, 0x5c, 0x7f, 0xf6, - 0xc7, 0xfd, 0x9c, 0x10, 0x9d, 0xd0, 0x84, 0xf9, 0xb8, 0x00, 0xc0, 0xf0, - 0xf6, 0x02, 0x61, 0x58, 0x26, 0x8c, 0x29, 0xbd, 0x02, 0x7f, 0x88, 0x84, - 0xf1, 0x09, 0x48, 0xec, 0xd6, 0xbe, 0xbf, 0xbd, 0x5a, 0xbc, 0xc5, 0x6b, - 0x11, 0xc2, 0xb9, 0xbc, 0xbd, 0xf9, 0x73, 0xfe, 0xe9, 0xc1, 0xa4, 0x58, - 0x01, 0x3c, 0x47, 0x92, 0x9d, 0xbd, 0xb9, 0x45, 0xc4, 0xbc, 0x01, 0x40, - 0x16, 0x04, 0x0f, 0x40, 0x80, 0x58, 0xc2, 0x7b, 0xbb, 0x9a, 0xbd, 0x9f, - 0xfd, 0x31, 0x7f, 0x48, 0x28, 0x03, 0xf7, 0x34, 0xf2, 0x1d, 0xec, 0xa9, - 0x7d, 0xb8, 0x9b, 0x5f, 0x2e, 0xf0, 0x1f, 0xf0, 0x77, 0xa0, 0x47, 0x20, - 0x80, 0x6b, 0x46, 0xd5, 0xcd, 0x03, 0x9c, 0x15, 0xaf, 0x16, 0x7e, 0x21, - 0x8b, 0xd8, 0x19, 0xdc, 0x31, 0xae, 0x80, 0xc4, 0xc9, 0xf7, 0x68, 0x3e, - 0x00, 0x23, 0x20, 0x01, 0xde, 0x28, 0xe1, 0xc0, 0xde, 0xf8, 0xbb, 0x14, - 0xd8, 0xb3, 0xb8, 0xf7, 0x21, 0x51, 0xda, 0xeb, 0xdb, 0x07, 0xa4, 0x40, - 0x73, 0x35, 0x7b, 0x9c, 0x59, 0x82, 0x18, 0xfe, 0xf7, 0xcd, 0x1c, 0x9f, - 0xbe, 0x9f, 0xdf, 0x00, 0xa2, 0x88, 0xc7, 0x66, 0x97, 0x97, 0x1f, 0xee, - 0x81, 0xdf, 0xf0, 0x09, 0x7c, 0x03, 0xa0, 0x79, 0xf8, 0x00, 0x1c, 0xb8, - 0xb8, 0xe1, 0xdb, 0xc0, 0xf3, 0x12, 0x8b, 0x2f, 0xee, 0xaf, 0x8c, 0x32, - 0x19, 0xd1, 0xed, 0xdb, 0xd9, 0xe2, 0xfa, 0xc3, 0xfd, 0x98, 0xf0, 0x70, - 0xe7, 0x5b, 0x40, 0x21, 0x2e, 0x49, 0x04, 0x98, 0xdc, 0x04, 0x3f, 0xf1, - 0x70, 0x3e, 0x35, 0x78, 0xf9, 0x76, 0xf1, 0x16, 0xb6, 0xba, 0x7c, 0x27, - 0xd7, 0x66, 0x33, 0x56, 0xfe, 0x64, 0xdf, 0xc1, 0x55, 0xbc, 0x99, 0xc3, - 0x63, 0xb3, 0xab, 0x3f, 0x17, 0xc4, 0x8e, 0xb2, 0x0f, 0x00, 0xb9, 0x10, - 0x9c, 0xc0, 0xe9, 0x68, 0x05, 0xc1, 0x23, 0x53, 0xdf, 0x2f, 0x17, 0xec, - 0x58, 0xe2, 0x87, 0x59, 0x02, 0x05, 0x3e, 0x1c, 0xb4, 0x4a, 0xa5, 0x3a, - 0xac, 0xcc, 0x84, 0x5e, 0xe8, 0xcb, 0xc2, 0x07, 0xeb, 0x8c, 0x90, 0x63, - 0x13, 0x48, 0x18, 0x35, 0xc3, 0xf5, 0xde, 0x12, 0xa0, 0x58, 0x3a, 0xb1, - 0x86, 0xea, 0x16, 0x47, 0x6e, 0x70, 0x0b, 0x15, 0xcf, 0xb7, 0x96, 0x2a, - 0x7b, 0x91, 0xc2, 0x3d, 0x35, 0xed, 0x71, 0xa1, 0xba, 0x41, 0x73, 0xd1, - 0xbd, 0xb0, 0x77, 0x34, 0x90, 0x1b, 0x48, 0x4e, 0x0f, 0xdb, 0xcc, 0xb2, - 0x52, 0xf1, 0x22, 0x91, 0x23, 0x1c, 0x0a, 0xb6, 0xaa, 0x5b, 0xee, 0x47, - 0xc6, 0xf6, 0xaa, 0x2f, 0xf4, 0xa5, 0x0e, 0x6f, 0x30, 0xb2, 0xba, 0xf4, - 0x6d, 0x8d, 0x53, 0x1c, 0x68, 0x7c, 0x37, 0x1b, 0x23, 0x68, 0x88, 0x57, - 0xcf, 0x55, 0x9d, 0xc0, 0x7e, 0x24, 0x72, 0x97, 0xb9, 0xc3, 0x5a, 0xce, - 0x9c, 0x75, 0xa8, 0xc5, 0xf6, 0x96, 0x1c, 0x11, 0xb1, 0xe9, 0x9e, 0xf3, - 0xf0, 0x07, 0x45, 0x90, 0xb8, 0x1d, 0x5c, 0xc5, 0xd0, 0x8d, 0x87, 0x0b, - 0x1f, 0xf9, 0x0f, 0xe8, 0x92, 0xee, 0xf9, 0xc4, 0xe7, 0x30, 0xe3, 0x7f, - 0xef, 0xf8, 0xeb, 0x62, 0x33, 0x42, 0x11, 0x17, 0x15, 0x3e, 0x6a, 0x83, - 0xc3, 0x27, 0x54, 0x79, 0x37, 0x60, 0xc1, 0x0a, 0x00, 0x3e, 0xc9, 0x63, - 0xca, 0xd7, 0xa5, 0x6c, 0xa1, 0x26, 0x6e, 0xfc, 0x74, 0x06, 0x8f, 0x3d, - 0xa7, 0x4f, 0x87, 0x49, 0x9e, 0x4e, 0xce, 0xf1, 0x44, 0xdd, 0xb6, 0x1e, - 0x34, 0x77, 0x2b, 0x59, 0xc0, 0xc1, 0x8f, 0x3a, 0x9c, 0xa7, 0x92, 0x9f, - 0xf3, 0x3d, 0x4f, 0xd2, 0xc2, 0xf2, 0xd1, 0x0d, 0xe5, 0x75, 0x42, 0x31, - 0xb2, 0x64, 0x67, 0xab, 0xde, 0xe4, 0x9f, 0x22, 0x66, 0xab, 0xc8, 0xe9, - 0xe7, 0xea, 0xf9, 0xab, 0x26, 0xc9, 0x27, 0xb7, 0x93, 0x6f, 0x8f, 0x87, - 0x2c, 0xa7, 0x4f, 0x1b, 0x1f, 0x1e, 0xa5, 0x52, 0x71, 0x8a, 0xa5, 0xfd, - 0x85, 0x84, 0xa4, 0xa3, 0x31, 0xab, 0x0d, 0x7c, 0xc1, 0x1d, 0xd0, 0xca, - 0xd4, 0x05, 0x79, 0x53, 0xbe, 0x58, 0xe3, 0xd1, 0x10, 0xe2, 0xf0, 0xf6, - 0x56, 0x1f, 0x06, 0x8b, 0x8a, 0x7b, 0x7e, 0xa8, 0x94, 0x2d, 0x69, 0xf6, - 0xe0, 0xaf, 0x06, 0x61, 0xea, 0x53, 0x87, 0xe6, 0xd7, 0x7b, 0x43, 0xf6, - 0x97, 0xc4, 0xd4, 0x93, 0xd9, 0x9a, 0xf9, 0x68, 0x6c, 0x5a, 0x89, 0x96, - 0xf0, 0x1b, 0x8a, 0x26, 0x91, 0x25, 0xae, 0x33, 0x08, 0xc9, 0x35, 0x9a, - 0xac, 0xe2, 0x17, 0x49, 0x6b, 0xf6, 0x7f, 0xf1, 0x2b, 0x96, 0xbb, 0x96, - 0x02, 0x23, 0x1c, 0xe5, 0xd2, 0x19, 0x4e, 0xeb, 0x21, 0x4c, 0x18, 0xc6, - 0xd3, 0xac, 0xd1, 0x44, 0x15, 0xe2, 0xfa, 0x27, 0xa2, 0x93, 0xde, 0xd7, - 0x49, 0x83, 0xc9, 0xf9, 0xbf, 0xf3, 0xd4, 0xd4, 0x26, 0x4b, 0x2f, 0xbb, - 0xca, 0xad, 0x31, 0x8f, 0x57, 0x58, 0x1d, 0x91, 0x25, 0x69, 0x9a, 0x8b, - 0xdf, 0x65, 0x36, 0x96, 0x5a, 0x59, 0x67, 0x97, 0xe7, 0xf6, 0x9f, 0x38, - 0x23, 0xf1, 0x77, 0xd8, 0x81, 0x96, 0x68, 0xb5, 0x89, 0xf4, 0x77, 0xde, - 0x97, 0x62, 0x19, 0xbb, 0x58, 0x3c, 0x94, 0x5d, 0xf7, 0xaf, 0xe1, 0x7b, - 0xe3, 0xd9, 0x25, 0x57, 0xbd, 0xcd, 0xbe, 0xce, 0x2d, 0xdd, 0x6b, 0xc7, - 0xf3, 0xda, 0x7f, 0xc5, 0x58, 0x2e, 0x7c, 0x62, 0xcd, 0x53, 0xff, 0xe7, - 0xd7, 0x2d, 0xfa, 0xa9, 0xfa, 0x36, 0x07, 0xf1, 0x83, 0x58, 0xd4, 0xc3, - 0xbd, 0x70, 0x67, 0x79, 0xef, 0xf3, 0xf9, 0xa1, 0xbb, 0x73, 0x71, 0x1c, - 0x0f, 0xf1, 0xb8, 0xe1, 0x43, 0x6a, 0x1b, 0xcc, 0x75, 0x69, 0xc7, 0x98, - 0x7a, 0xb2, 0xc0, 0x5c, 0x70, 0xab, 0x3c, 0x22, 0x19, 0x7d, 0x55, 0xb5, - 0xda, 0x50, 0x91, 0xa8, 0xe5, 0xf6, 0x5b, 0xfa, 0xe5, 0x6a, 0x5e, 0x4b, - 0x23, 0xf1, 0x51, 0x66, 0x71, 0x0f, 0xe0, 0xd8, 0x00, 0x03, 0x1c, 0x9f, - 0xb2, 0xbf, 0x6c, 0xb4, 0xbf, 0x1e, 0x1c, 0xbb, 0x87, 0xb8, 0xc2, 0x5f, - 0x70, 0xd5, 0x35, 0xad, 0xc6, 0x9e, 0xb4, 0x4e, 0x32, 0xc3, 0x1c, 0x59, - 0x4a, 0xe5, 0xa1, 0xda, 0x3e, 0xaf, 0xf6, 0xfc, 0xe6, 0xfa, 0x32, 0xf2, - 0x30, 0x19, 0x93, 0x17, 0x31, 0xcb, 0x1e, 0x23, 0x70, 0x00, 0x16, 0xe5, - 0x38, 0xfb, 0xcf, 0x4d, 0xdf, 0xef, 0x7e, 0xfd, 0xfe, 0xfb, 0x97, 0x97, - 0x97, 0x8b, 0xa7, 0x66, 0xb8, 0x68, 0xbb, 0xa7, 0xef, 0xb5, 0x12, 0xe9, - 0xfb, 0xdf, 0x01, 0xae, 0x19, 0x56, 0x95, 0x62, 0x3f, 0x58, 0x3a, 0x75, - 0x07, 0xe7, 0xdb, 0xb0, 0x40, 0xa5, 0xd4, 0x0c, 0x7f, 0xc1, 0x9e, 0x3e, - 0xc7, 0x80, 0x21, 0xe8, 0xae, 0x6d, 0x70, 0xa0, 0x19, 0x7e, 0xc6, 0xa6, - 0xd8, 0x61, 0x51, 0x15, 0x1c, 0x31, 0xa9, 0x0d, 0x49, 0x66, 0x5d, 0xae, - 0x8a, 0xf8, 0x91, 0x4d, 0x06, 0x95, 0x3f, 0x8b, 0xfd, 0x95, 0xa0, 0xa8, - 0x09, 0x5f, 0xf4, 0xdc, 0x47, 0x6c, 0xf1, 0x80, 0x76, 0x2e, 0x66, 0x49, - 0x86, 0xcc, 0x89, 0xce, 0x65, 0xcd, 0x14, 0xc6, 0xe5, 0xf0, 0x07, 0xe0, - 0xb9, 0x4e, 0x54, 0xbf, 0x66, 0x70, 0x3c, 0xee, 0xde, 0xa5, 0xe4, 0x08, - 0x6b, 0xb8, 0xa5, 0x26, 0x58, 0x98, 0x05, 0xf0, 0x6b, 0x42, 0xf1, 0x4b, - 0x5e, 0x1c, 0x1c, 0xd7, 0xb9, 0xd1, 0x85, 0x9d, 0xe8, 0xc7, 0xdb, 0x28, - 0x3c, 0xc7, 0x9d, 0x7c, 0xae, 0x28, 0x7d, 0x80, 0x81, 0x73, 0x9b, 0x20, - 0xf7, 0x9f, 0x9d, 0x09, 0xd9, 0xb7, 0x32, 0x14, 0xac, 0xf3, 0xc7, 0x96, - 0xf8, 0x63, 0x01, 0x7b, 0x9f, 0xc4, 0xdf, 0x65, 0x94, 0xaa, 0x0c, 0xdc, - 0xa3, 0x6f, 0x7b, 0x05, 0x67, 0x91, 0xf4, 0x39, 0x19, 0x2e, 0xca, 0x1e, - 0x4b, 0xd7, 0xf7, 0x52, 0x75, 0x15, 0xfb, 0x8e, 0xf5, 0x93, 0x5b, 0xbf, - 0x11, 0x11, 0x84, 0x96, 0x88, 0x9f, 0xd4, 0x79, 0x0d, 0x89, 0xdd, 0xc3, - 0x81, 0x7b, 0x9f, 0x46, 0x68, 0x47, 0x44, 0x12, 0xae, 0x1c, 0xa0, 0xae, - 0xdd, 0x63, 0x5d, 0x8b, 0x44, 0xce, 0xe3, 0xb7, 0x30, 0xf4, 0xbb, 0x8e, - 0xae, 0x3b, 0xa7, 0xca, 0x3e, 0xf4, 0x2f, 0x81, 0x63, 0xf9, 0xa3, 0x7b, - 0x94, 0xfb, 0xc4, 0x39, 0x58, 0x3c, 0x07, 0x4e, 0x05, 0x67, 0xb4, 0xb1, - 0x26, 0xb1, 0x98, 0x23, 0x0c, 0xf7, 0xc7, 0x39, 0x3b, 0xe1, 0xcb, 0x2f, - 0x6f, 0x43, 0x65, 0x45, 0x4e, 0xa3, 0x48, 0xf7, 0xd9, 0xc7, 0x45, 0xd9, - 0x42, 0xc2, 0x5f, 0x88, 0x57, 0x1b, 0xd8, 0x89, 0x3e, 0x15, 0x0e, 0xb8, - 0x30, 0xdf, 0x60, 0x88, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x0c, 0xd2, - 0xa8, 0x4c, 0xc3, 0x86, 0x00, 0x00, - }, - "conf/license/Affero GPL", - ) -} - -func conf_license_apache_v2_license() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0xdc, 0x5a, - 0xdf, 0x73, 0x1b, 0x47, 0x72, 0x7e, 0xf7, 0x5f, 0x31, 0x41, 0x55, 0x2a, - 0x64, 0xd5, 0x0a, 0xd2, 0x39, 0x77, 0x49, 0x4e, 0x7e, 0xa2, 0x45, 0xea, - 0x8c, 0x44, 0x06, 0x55, 0x04, 0x15, 0xc5, 0x8f, 0x83, 0xdd, 0x59, 0x60, - 0xa2, 0xc5, 0x0e, 0x3c, 0xb3, 0x4b, 0x10, 0x71, 0xf9, 0x7f, 0xcf, 0xd7, - 0x3d, 0x3f, 0x17, 0x00, 0x65, 0xa5, 0xf2, 0x76, 0x2c, 0xd7, 0x9d, 0x00, - 0xec, 0xf4, 0xf4, 0xf4, 0x8f, 0xaf, 0xbf, 0xee, 0xd9, 0x9b, 0xbd, 0xac, - 0xb7, 0x4a, 0x7c, 0xd0, 0xb5, 0xea, 0x9d, 0xfa, 0x4e, 0xbc, 0xfc, 0xf7, - 0x9f, 0xca, 0x3a, 0x6d, 0x7a, 0xf1, 0xfd, 0xfc, 0x4d, 0x25, 0xfe, 0x5d, - 0xf6, 0xa3, 0xb4, 0x47, 0xf1, 0xfd, 0x9b, 0x37, 0x7f, 0x7e, 0x71, 0xd1, - 0x76, 0x18, 0xf6, 0x6f, 0x5f, 0xbf, 0x3e, 0x1c, 0x0e, 0x73, 0xc9, 0xdb, - 0xcc, 0x8d, 0xdd, 0xbc, 0xee, 0xfc, 0x56, 0xee, 0xf5, 0x77, 0xb4, 0xf0, - 0xf1, 0xee, 0xe1, 0xe7, 0x95, 0xb8, 0x59, 0xde, 0x8a, 0x77, 0xf7, 0xcb, - 0xdb, 0xc5, 0xe3, 0xe2, 0x7e, 0xb9, 0x12, 0xef, 0xef, 0x1f, 0xc4, 0xa7, - 0xd5, 0x5d, 0x25, 0x1e, 0xee, 0x3e, 0x3e, 0xdc, 0xdf, 0x7e, 0x7a, 0x47, - 0x5f, 0x57, 0xfc, 0xd4, 0xed, 0x62, 0xf5, 0xf8, 0xb0, 0xf8, 0xf1, 0x13, - 0x7d, 0xc3, 0x02, 0xfe, 0x34, 0x17, 0xb7, 0xaa, 0xd5, 0xbd, 0x1e, 0xa0, - 0x9c, 0x9b, 0x7f, 0x17, 0xb4, 0x99, 0x85, 0x13, 0xcd, 0x84, 0xdb, 0xca, - 0xae, 0x13, 0x3b, 0x25, 0x7b, 0x31, 0xe0, 0xa4, 0x83, 0xb2, 0x3b, 0x27, - 0x64, 0xdf, 0x88, 0xda, 0xf4, 0x8d, 0x5f, 0x25, 0x5a, 0x63, 0xc5, 0xe8, - 0x54, 0x25, 0xac, 0xda, 0x5b, 0xd3, 0x8c, 0x35, 0x7d, 0x5d, 0x05, 0x51, - 0xf4, 0x6c, 0xa3, 0xdd, 0x60, 0xf5, 0x7a, 0xa4, 0xef, 0x85, 0x74, 0xa2, - 0xa1, 0x2d, 0x55, 0x23, 0xd6, 0x47, 0xb1, 0x52, 0xb5, 0x17, 0xf2, 0x27, - 0xc8, 0xb7, 0x66, 0xdc, 0x6c, 0xc5, 0x5f, 0x85, 0x69, 0xf1, 0x41, 0xe3, - 0x39, 0x53, 0x8f, 0x3b, 0xd5, 0x0f, 0xa7, 0x7a, 0x19, 0x7b, 0xa6, 0x58, - 0x6d, 0xf6, 0x47, 0xab, 0x37, 0xdb, 0x41, 0x98, 0x43, 0xaf, 0xac, 0x80, - 0x4a, 0x58, 0xa8, 0x87, 0xa3, 0x90, 0xe3, 0xb0, 0x35, 0x56, 0xff, 0x0f, - 0xef, 0x17, 0xe4, 0x5c, 0x5a, 0x31, 0x6c, 0xe5, 0x20, 0xb0, 0xe9, 0xc6, - 0x4a, 0x2c, 0xec, 0x37, 0xfc, 0x50, 0xb0, 0x43, 0xa1, 0x80, 0xda, 0xc8, - 0x4e, 0xdc, 0xb1, 0xe8, 0x33, 0x25, 0xc6, 0x9e, 0x0e, 0xc8, 0xda, 0x2b, - 0x21, 0x6b, 0x96, 0x12, 0xb5, 0x80, 0x19, 0xf0, 0x6c, 0x10, 0x63, 0xf0, - 0x40, 0x50, 0x50, 0x2b, 0xe7, 0xb7, 0x86, 0x41, 0x07, 0x6b, 0xba, 0x4a, - 0x48, 0xab, 0xe2, 0x87, 0x8e, 0x95, 0xae, 0xe8, 0x34, 0xf4, 0xed, 0xd8, - 0x37, 0x58, 0x56, 0x9b, 0xdd, 0xce, 0xf4, 0x41, 0x52, 0x78, 0x50, 0x1c, - 0xf4, 0xb0, 0xf5, 0x72, 0xfc, 0x86, 0x73, 0xf1, 0xde, 0x58, 0xd6, 0x63, - 0x3f, 0xda, 0xbd, 0x41, 0xc4, 0x64, 0xab, 0x26, 0x87, 0x47, 0x1f, 0xcd, - 0x82, 0x94, 0x19, 0x1f, 0xc5, 0x89, 0x2b, 0x7d, 0xed, 0x97, 0x9a, 0x83, - 0xb2, 0x15, 0xdc, 0x67, 0xe1, 0x25, 0x52, 0x42, 0xf7, 0xfe, 0xdf, 0x95, - 0x18, 0x8c, 0xa8, 0x25, 0x9c, 0x4e, 0xcf, 0x05, 0x29, 0xfe, 0x27, 0xb6, - 0x80, 0x15, 0x3b, 0xd9, 0xcb, 0x8d, 0x22, 0xe7, 0xd1, 0xbe, 0x6e, 0xac, - 0xb7, 0x41, 0xb1, 0x4a, 0x1c, 0xb6, 0x8a, 0x8f, 0x0f, 0xef, 0xf3, 0xbe, - 0x92, 0x65, 0x97, 0x96, 0x39, 0x68, 0x8a, 0x26, 0x48, 0xb9, 0xd2, 0xd0, - 0x84, 0xdd, 0xe3, 0xb6, 0x7a, 0x4f, 0x92, 0x5a, 0xdd, 0xc2, 0x9a, 0x7b, - 0x65, 0x6b, 0x12, 0x7d, 0xf5, 0x97, 0x37, 0xff, 0x78, 0xcd, 0xdb, 0x19, - 0x98, 0xc7, 0x1b, 0x3e, 0x0a, 0x1a, 0x07, 0x37, 0xc0, 0xea, 0xe4, 0x03, - 0xb8, 0xc9, 0x2a, 0x17, 0x25, 0x42, 0xe4, 0x5a, 0xf5, 0x30, 0x42, 0xad, - 0xe1, 0xca, 0x89, 0xf4, 0x42, 0xcf, 0xec, 0xf2, 0x5f, 0xcc, 0x38, 0x13, - 0x57, 0x58, 0x4b, 0xff, 0xb2, 0xb3, 0xeb, 0xd2, 0xeb, 0xf8, 0x8f, 0x6c, - 0xf2, 0xa4, 0x9b, 0x91, 0x64, 0x59, 0x51, 0xc6, 0x47, 0x10, 0xa0, 0x9e, - 0xa1, 0xad, 0x76, 0xa4, 0x08, 0xf4, 0xde, 0x69, 0xe7, 0x38, 0xe0, 0x39, - 0xce, 0x7c, 0x12, 0xb0, 0x5b, 0xce, 0x42, 0x6d, 0x85, 0xdd, 0x6a, 0xa4, - 0x20, 0xd2, 0x6b, 0x77, 0x1a, 0x69, 0x7b, 0xab, 0x5a, 0x65, 0x2d, 0x96, - 0xf3, 0xaf, 0x2d, 0x5b, 0xfc, 0x0b, 0x6d, 0xb1, 0x33, 0x8d, 0xc6, 0xd1, - 0x24, 0x67, 0x55, 0x74, 0xb0, 0xee, 0xeb, 0x6e, 0x64, 0x53, 0x20, 0x09, - 0x45, 0x6f, 0x06, 0xd1, 0xe9, 0x9d, 0xa6, 0xdd, 0xe1, 0x47, 0x67, 0xda, - 0xe1, 0x40, 0xe1, 0xe5, 0x78, 0x43, 0x38, 0xa5, 0x81, 0xf5, 0x63, 0xee, - 0xb1, 0xa0, 0x20, 0xc6, 0x3f, 0x50, 0xc5, 0xfc, 0x6f, 0xf5, 0x66, 0xb4, - 0xfc, 0x3b, 0xdc, 0xd2, 0xa9, 0x02, 0x3e, 0xee, 0xd7, 0xff, 0x8d, 0x50, - 0x38, 0x57, 0x5d, 0xf6, 0x47, 0xff, 0x1d, 0xdc, 0x31, 0x76, 0x9c, 0x1f, - 0xad, 0x35, 0x3b, 0xfc, 0x58, 0x6f, 0x65, 0x0f, 0xad, 0x63, 0x82, 0x20, - 0x2a, 0x7a, 0x47, 0x4f, 0xca, 0x18, 0x50, 0xfc, 0x4d, 0x17, 0x3e, 0xb6, - 0x42, 0x0a, 0x6f, 0x1e, 0x16, 0x57, 0x4d, 0x0f, 0x18, 0x64, 0x9c, 0x1c, - 0x13, 0x69, 0xb3, 0xd7, 0x94, 0x50, 0x86, 0x95, 0x0b, 0xc7, 0xdc, 0x20, - 0x12, 0x70, 0x06, 0x7c, 0x3d, 0x39, 0x70, 0x89, 0x5e, 0x38, 0xe9, 0x93, - 0x47, 0x6f, 0x47, 0x72, 0x7c, 0xee, 0xee, 0x54, 0xa3, 0xa5, 0x18, 0x8e, - 0xfb, 0xf2, 0xd8, 0x9f, 0x8d, 0xfd, 0x72, 0x06, 0x0a, 0x07, 0x7c, 0xc9, - 0x1a, 0x33, 0x0e, 0x51, 0xa4, 0xe5, 0x14, 0xd0, 0x7d, 0x3c, 0x46, 0x4a, - 0x00, 0x6f, 0xba, 0x70, 0xac, 0x9d, 0x6c, 0x00, 0x24, 0x4f, 0x52, 0x77, - 0x72, 0xdd, 0xc5, 0xfc, 0x2f, 0x70, 0xa9, 0x22, 0x34, 0xa5, 0x00, 0xac, - 0x65, 0x08, 0x25, 0x99, 0x70, 0x21, 0xa2, 0x1b, 0xcc, 0x80, 0x87, 0x13, - 0xbc, 0x79, 0x4b, 0xe1, 0x61, 0xcd, 0x66, 0x95, 0xc3, 0x40, 0xb5, 0x85, - 0x2d, 0x14, 0xb5, 0x0d, 0x22, 0xae, 0x70, 0x00, 0xf5, 0x2c, 0x77, 0x7b, - 0xec, 0x8c, 0x85, 0x80, 0x76, 0x84, 0xb9, 0x5f, 0x48, 0x4f, 0xde, 0xec, - 0xf7, 0x0a, 0x3b, 0x3f, 0x23, 0x99, 0x3a, 0x73, 0xb8, 0xce, 0x56, 0xb8, - 0x55, 0x56, 0x3f, 0xc1, 0x8a, 0x4f, 0x4a, 0x90, 0x41, 0xdc, 0xec, 0x34, - 0x02, 0x68, 0x8f, 0xcb, 0x36, 0x08, 0xa7, 0x0f, 0x92, 0xbc, 0x0d, 0xa2, - 0xe2, 0x6b, 0xe9, 0xc8, 0x79, 0x3d, 0xa7, 0x62, 0x43, 0x7b, 0x50, 0xf4, - 0x23, 0x7a, 0x3c, 0x56, 0xd1, 0x56, 0xec, 0x2e, 0xca, 0x85, 0xc3, 0x56, - 0xd7, 0xdb, 0x02, 0x0c, 0xe0, 0xac, 0x01, 0x35, 0x00, 0x99, 0x69, 0xd5, - 0x93, 0x66, 0x57, 0x52, 0x14, 0xc3, 0x34, 0x21, 0x4f, 0x84, 0x82, 0x85, - 0x8d, 0x8d, 0x9f, 0x20, 0x22, 0xb8, 0xb9, 0xcc, 0xa6, 0x20, 0x8c, 0xaa, - 0x9c, 0x72, 0x88, 0x14, 0xb6, 0xbe, 0xc4, 0x66, 0xa6, 0xe3, 0xa4, 0xc0, - 0x32, 0xbd, 0xd1, 0x3d, 0x76, 0x39, 0xf7, 0xf9, 0x39, 0x1e, 0x47, 0x9c, - 0x6a, 0x27, 0xe9, 0x5f, 0x89, 0x53, 0xf3, 0x05, 0xeb, 0x51, 0x34, 0x07, - 0xdf, 0xb1, 0xf8, 0x50, 0x35, 0xac, 0xda, 0x49, 0x9d, 0xf2, 0x53, 0xed, - 0xa5, 0xe5, 0x48, 0x21, 0xbb, 0xf0, 0x31, 0x76, 0xca, 0xaa, 0xee, 0x88, - 0x3c, 0xe8, 0xbf, 0xb0, 0xe1, 0xd6, 0x88, 0x16, 0x8a, 0x93, 0x5e, 0xee, - 0xd4, 0x75, 0x74, 0xba, 0x06, 0x10, 0xd9, 0x56, 0xd6, 0x5c, 0x24, 0xaa, - 0xa2, 0x46, 0x26, 0xa3, 0x9e, 0x29, 0x45, 0xd6, 0x51, 0xa6, 0xcd, 0x5e, - 0x7f, 0x47, 0x50, 0x1e, 0x6a, 0xfc, 0x45, 0x8f, 0x9f, 0xe6, 0x40, 0x4a, - 0xd9, 0x62, 0xbf, 0x64, 0xc0, 0x90, 0x70, 0xb1, 0x96, 0x26, 0x3d, 0x48, - 0xd8, 0xc4, 0x27, 0x1c, 0xc3, 0x4d, 0x60, 0x22, 0x51, 0x92, 0xf1, 0xb6, - 0xe1, 0x55, 0xf8, 0xfd, 0x25, 0xe5, 0xab, 0x22, 0x29, 0x06, 0x42, 0x7d, - 0x83, 0xad, 0xbb, 0x08, 0xdb, 0x6e, 0x5c, 0x03, 0x3b, 0x02, 0x78, 0x44, - 0xde, 0xc1, 0xd1, 0xc5, 0x9a, 0xb3, 0x7a, 0x21, 0x15, 0x78, 0x23, 0xc6, - 0xf1, 0x33, 0x5a, 0x11, 0xbd, 0xcc, 0xe5, 0xee, 0xab, 0xd5, 0xa2, 0x24, - 0x2a, 0x84, 0xca, 0xbc, 0x3d, 0xc5, 0xfb, 0x5a, 0xc1, 0x98, 0x2d, 0x4c, - 0xf1, 0x32, 0x79, 0xf9, 0xb6, 0x6a, 0x2f, 0x66, 0xe9, 0x4c, 0xb3, 0x20, - 0xcb, 0xd7, 0xfb, 0x04, 0xcb, 0x58, 0xa4, 0x3a, 0x24, 0xa0, 0x35, 0x00, - 0xe3, 0x8a, 0xbc, 0xb0, 0x96, 0x1d, 0xc7, 0xd1, 0xc1, 0xd2, 0xba, 0x9e, - 0xc9, 0xc7, 0xd8, 0x07, 0xeb, 0x0b, 0xca, 0x82, 0xd2, 0xe8, 0x2a, 0x1b, - 0x8a, 0xec, 0x34, 0xb8, 0x9c, 0x2c, 0x6c, 0x7f, 0x57, 0x7d, 0xb5, 0x14, - 0x25, 0xec, 0x2a, 0xf7, 0xc0, 0x7f, 0x59, 0x27, 0x20, 0xa2, 0xee, 0x68, - 0x71, 0x07, 0x4a, 0x09, 0x69, 0x45, 0xc9, 0x4a, 0x54, 0xc8, 0x1d, 0xdd, - 0xa0, 0x76, 0xae, 0x84, 0x70, 0xd4, 0xdc, 0x51, 0x51, 0x09, 0xa9, 0xb9, - 0x46, 0x86, 0x27, 0xbc, 0xfb, 0xa9, 0xf2, 0x79, 0xb6, 0x92, 0xb8, 0x56, - 0x69, 0xf4, 0xaa, 0x80, 0x91, 0x49, 0x14, 0x14, 0xd6, 0x26, 0xbb, 0x81, - 0xe3, 0xd6, 0xa3, 0xe3, 0x2a, 0xcf, 0x3b, 0xee, 0x18, 0x2f, 0x03, 0x8d, - 0xfc, 0xcc, 0x88, 0x97, 0x4b, 0x93, 0x7a, 0x8e, 0x46, 0x98, 0x9e, 0x35, - 0xc6, 0x23, 0x8e, 0xe2, 0xf6, 0xba, 0x1e, 0xcd, 0xe8, 0x90, 0xbc, 0x3b, - 0x69, 0xbf, 0x10, 0xf4, 0xd9, 0xcc, 0x8e, 0x22, 0xe5, 0x52, 0x4e, 0x6f, - 0x7a, 0xc6, 0x7e, 0x84, 0x22, 0xf9, 0x88, 0x0d, 0x7b, 0x31, 0x12, 0x09, - 0xac, 0x66, 0x4b, 0xd8, 0x5b, 0x8a, 0x32, 0x57, 0xe7, 0xb3, 0xf3, 0x14, - 0x3e, 0xe1, 0xd7, 0xe9, 0xd8, 0x31, 0x03, 0xff, 0x90, 0xf2, 0x94, 0x06, - 0x24, 0x7c, 0xdc, 0x9d, 0x6c, 0x2a, 0xb6, 0x50, 0x66, 0xad, 0x10, 0x4f, - 0xa0, 0x8c, 0x8a, 0x91, 0x1c, 0x4a, 0x97, 0xfb, 0xe4, 0x24, 0x74, 0xea, - 0xd7, 0x11, 0xf1, 0xd3, 0xd1, 0xb6, 0xb5, 0x81, 0xbd, 0x7d, 0xb9, 0x26, - 0xc2, 0x5b, 0xa4, 0x9f, 0x07, 0xa2, 0xef, 0xe7, 0xe2, 0x6f, 0x44, 0xab, - 0x68, 0xdb, 0x77, 0xe9, 0xf8, 0x91, 0x59, 0x89, 0xd5, 0xe8, 0x8b, 0x6b, - 0x88, 0xd5, 0x8b, 0xcd, 0x4c, 0x91, 0x66, 0x25, 0x2a, 0x2b, 0x54, 0x49, - 0x51, 0x18, 0x48, 0x10, 0x84, 0x40, 0x67, 0x66, 0x71, 0xcc, 0x0b, 0x40, - 0x0e, 0x71, 0x4a, 0x30, 0xbc, 0xbd, 0x1a, 0x60, 0x99, 0x18, 0x7e, 0x80, - 0xbe, 0xae, 0x39, 0x68, 0xe2, 0x1a, 0xbd, 0xe9, 0x5f, 0xb1, 0xe7, 0x1d, - 0x4e, 0x4c, 0x1f, 0x5f, 0x81, 0xf5, 0xd8, 0x0d, 0x35, 0x4e, 0xe6, 0x28, - 0xbb, 0xe1, 0xf8, 0xaa, 0xb5, 0x0a, 0x9f, 0x34, 0x88, 0xdd, 0x93, 0xa9, - 0x09, 0xc8, 0xcf, 0xaa, 0x79, 0xe8, 0xff, 0x68, 0xc3, 0xd8, 0x6d, 0x61, - 0x05, 0x72, 0x6c, 0x4f, 0x71, 0x7c, 0x86, 0x74, 0x19, 0xce, 0xf7, 0xe3, - 0x1a, 0x6b, 0x61, 0x45, 0x04, 0xea, 0xbe, 0x93, 0x08, 0xf4, 0xf4, 0x0d, - 0x74, 0xf6, 0xa5, 0xd6, 0xf1, 0x37, 0x81, 0x58, 0x94, 0x7d, 0x5b, 0x49, - 0xf3, 0x13, 0x16, 0x33, 0x59, 0x3e, 0xdb, 0xf1, 0x42, 0x39, 0x67, 0x6c, - 0xf1, 0x0e, 0xfa, 0xe7, 0xc2, 0x41, 0x1f, 0x25, 0x81, 0xee, 0xdf, 0x81, - 0x77, 0xae, 0xb0, 0x4c, 0xed, 0x07, 0x4a, 0x30, 0xb4, 0x1c, 0x43, 0xa4, - 0x48, 0x50, 0xd0, 0xf9, 0x86, 0xe8, 0x5a, 0xec, 0xfd, 0x59, 0x0b, 0xef, - 0x81, 0xae, 0x43, 0xd8, 0x56, 0x3e, 0x29, 0x66, 0x79, 0x51, 0x21, 0xee, - 0xa3, 0x4d, 0xdb, 0x12, 0xcf, 0x43, 0x11, 0x50, 0x1d, 0xe0, 0xd7, 0xff, - 0x2f, 0x10, 0xc5, 0xd8, 0xc1, 0x3b, 0x26, 0xe1, 0x40, 0x20, 0xca, 0x81, - 0x15, 0x32, 0xcc, 0xc4, 0x93, 0x91, 0x09, 0xbc, 0x8f, 0xe2, 0xae, 0x72, - 0xbf, 0xef, 0xa8, 0xdd, 0x34, 0x3d, 0x9c, 0xce, 0x56, 0x26, 0xec, 0x0a, - 0xaa, 0xd5, 0x9d, 0xd4, 0xb0, 0xb7, 0x7f, 0xb6, 0x38, 0x1c, 0xac, 0xc8, - 0x42, 0x4a, 0xeb, 0x26, 0xdc, 0xec, 0x91, 0xbd, 0xce, 0x49, 0xab, 0x39, - 0x3b, 0x5b, 0x0b, 0xf4, 0x89, 0x1d, 0x8d, 0xd2, 0xb1, 0xf6, 0x95, 0x89, - 0x7f, 0xe5, 0xae, 0xd1, 0x06, 0x9b, 0x5e, 0x85, 0x8a, 0x08, 0xf8, 0x03, - 0x23, 0x49, 0xac, 0x9e, 0x97, 0x9d, 0x2e, 0x88, 0x07, 0xf2, 0x1d, 0x6e, - 0xa8, 0xb6, 0x50, 0xdf, 0x93, 0xbc, 0xa9, 0x72, 0x61, 0x8b, 0x03, 0xb9, - 0x22, 0xd6, 0xba, 0xb9, 0x58, 0xb4, 0xe4, 0xff, 0xd4, 0x0b, 0x39, 0x20, - 0x15, 0xc5, 0x74, 0x72, 0xca, 0xa0, 0x37, 0x5e, 0x05, 0xb9, 0x91, 0xf4, - 0x33, 0x83, 0x5c, 0x68, 0xdc, 0xaf, 0x72, 0xc1, 0x4a, 0xdc, 0xda, 0x1a, - 0xe7, 0x5e, 0xb1, 0xc1, 0xe8, 0x18, 0xb5, 0x19, 0x89, 0x3f, 0xf9, 0xcf, - 0xf0, 0xbc, 0x14, 0x9d, 0x3c, 0xb8, 0x51, 0x0f, 0x74, 0xd4, 0x4e, 0x6d, - 0x7c, 0x11, 0x80, 0xc5, 0xa2, 0xf2, 0x99, 0x13, 0x9c, 0xa0, 0xe2, 0xd7, - 0x00, 0x8e, 0x6b, 0x82, 0x57, 0xdc, 0x85, 0x56, 0x3b, 0xcb, 0xa9, 0xb3, - 0x73, 0x8e, 0xf1, 0x58, 0xd1, 0x1f, 0x3b, 0x66, 0xaa, 0x10, 0xe3, 0xa9, - 0xd8, 0x34, 0x12, 0x23, 0x65, 0x8a, 0xcd, 0x68, 0xc8, 0x94, 0xd8, 0x68, - 0xe4, 0x1c, 0x0b, 0x25, 0x2f, 0xb2, 0x2a, 0x5f, 0x1d, 0x28, 0x45, 0xc9, - 0x7b, 0x31, 0x56, 0xa4, 0x8b, 0x84, 0xad, 0xc1, 0x97, 0x31, 0xf8, 0x92, - 0x75, 0x21, 0x8d, 0xfa, 0xc4, 0xc6, 0x43, 0xc1, 0x9f, 0xe7, 0xe2, 0x41, - 0x95, 0x93, 0xa1, 0x39, 0x6f, 0xbd, 0x93, 0xc7, 0x8c, 0x6c, 0xa7, 0x28, - 0x04, 0x1c, 0xd4, 0x91, 0xdb, 0x4c, 0xf0, 0xe8, 0x2b, 0x2c, 0x8f, 0x5d, - 0x42, 0xb4, 0x11, 0x9b, 0x8d, 0x00, 0x39, 0x8e, 0x23, 0x62, 0x34, 0xf8, - 0x7f, 0x93, 0x2a, 0xf2, 0xb4, 0x6d, 0xf6, 0x25, 0xfc, 0x05, 0x24, 0xab, - 0x72, 0x2b, 0xc4, 0x06, 0xc9, 0xa1, 0xb5, 0x53, 0xca, 0x7b, 0xb9, 0x35, - 0x1d, 0x7a, 0x22, 0x5f, 0xdf, 0x23, 0x76, 0xbd, 0xfd, 0x2e, 0xf5, 0x55, - 0xd7, 0xfe, 0xa4, 0x23, 0x22, 0x6d, 0x43, 0xfa, 0x92, 0x7a, 0xbe, 0xdf, - 0x80, 0x5b, 0x35, 0x8e, 0x48, 0xa0, 0x55, 0x52, 0xdf, 0xd4, 0x1d, 0xd2, - 0xdf, 0xd9, 0x41, 0x25, 0xd7, 0x87, 0xd3, 0x4e, 0xe2, 0x07, 0x2e, 0xa3, - 0x71, 0xcf, 0x75, 0xb1, 0xa7, 0x1f, 0xdc, 0x64, 0x2a, 0x4d, 0x7d, 0x14, - 0xf5, 0xef, 0x7e, 0xa8, 0x63, 0x29, 0x84, 0xd0, 0x3e, 0xe8, 0x9e, 0xe2, - 0xc4, 0x77, 0x8f, 0xae, 0xd8, 0x9e, 0x20, 0x2e, 0x85, 0x34, 0xc9, 0xa4, - 0xd6, 0x7d, 0xc3, 0xc6, 0x50, 0x5e, 0xce, 0x74, 0xe7, 0xba, 0xd8, 0xd9, - 0xaa, 0x01, 0x09, 0x56, 0x45, 0xde, 0x5c, 0xb4, 0xf0, 0xdc, 0x1d, 0x40, - 0xa3, 0xd3, 0xc3, 0x15, 0x1b, 0xa7, 0x0d, 0x73, 0x40, 0x54, 0x94, 0x61, - 0xb9, 0x3a, 0x56, 0x21, 0xba, 0x2b, 0x82, 0xc5, 0x46, 0x11, 0x6f, 0xaa, - 0x0a, 0x32, 0xc1, 0x21, 0x3a, 0xe4, 0x74, 0x0b, 0x67, 0xf3, 0x23, 0x88, - 0x0b, 0xfa, 0x9c, 0x42, 0x2a, 0xfd, 0x65, 0xe6, 0xe6, 0xd1, 0x33, 0xca, - 0x60, 0xe5, 0x1a, 0xc3, 0x84, 0x16, 0x55, 0x86, 0x8e, 0x49, 0xe6, 0xf4, - 0x19, 0x67, 0x87, 0x5c, 0xb8, 0xfc, 0x49, 0xce, 0x4b, 0xf5, 0xd4, 0x68, - 0xcd, 0x35, 0x81, 0x56, 0xf2, 0x7f, 0x68, 0xfc, 0xc8, 0xd5, 0xb3, 0xe5, - 0xfd, 0xe3, 0xe2, 0xdd, 0xdd, 0x0c, 0xc9, 0xf7, 0x3c, 0xb0, 0xbd, 0x29, - 0xed, 0xc2, 0x1e, 0x44, 0xb9, 0x8b, 0x7d, 0xca, 0xec, 0x2a, 0x20, 0xe0, - 0x42, 0xa6, 0x9c, 0x59, 0x96, 0xfd, 0x55, 0x88, 0x8a, 0xad, 0xa7, 0x84, - 0x0f, 0x65, 0xc3, 0x3d, 0x66, 0x0e, 0x3a, 0x75, 0xd1, 0xac, 0x04, 0x4a, - 0x92, 0xe6, 0xbc, 0x85, 0x98, 0x00, 0x6a, 0x8c, 0x0c, 0xfe, 0x20, 0x7c, - 0x84, 0xea, 0x5b, 0xec, 0x5a, 0x88, 0xb9, 0x6c, 0xe1, 0x8b, 0x76, 0xe5, - 0x60, 0x83, 0x8c, 0x4e, 0x49, 0x47, 0xed, 0x54, 0x39, 0xa5, 0x0f, 0x4b, - 0x72, 0xb6, 0x82, 0x18, 0x61, 0xd3, 0xb7, 0x51, 0x4d, 0x19, 0x75, 0xcc, - 0xb6, 0xce, 0x16, 0x9a, 0x44, 0x95, 0xfb, 0xaa, 0x0e, 0x3f, 0x94, 0x60, - 0x3e, 0x09, 0xb2, 0x32, 0xaf, 0xa7, 0x03, 0x28, 0xa1, 0xdb, 0x8c, 0x33, - 0x54, 0x32, 0x37, 0xb9, 0x02, 0x9e, 0xcb, 0x37, 0xb6, 0x3a, 0xb7, 0xb2, - 0x8c, 0x5c, 0xaf, 0x98, 0x72, 0x85, 0xde, 0xe0, 0x82, 0x95, 0xda, 0x93, - 0x4c, 0x61, 0x02, 0x81, 0x0e, 0xd0, 0x3b, 0x0b, 0x02, 0x6d, 0xf3, 0x8a, - 0x0e, 0x79, 0x4c, 0xbe, 0xe9, 0x69, 0x3e, 0x87, 0x86, 0x99, 0x88, 0x85, - 0x92, 0x68, 0x42, 0x1f, 0xb7, 0xbe, 0x0b, 0x23, 0xfc, 0x3a, 0x37, 0x73, - 0xe1, 0x6f, 0x26, 0x0f, 0xbe, 0x95, 0x4e, 0x43, 0x3e, 0xf4, 0x10, 0xb9, - 0x79, 0x25, 0x86, 0x32, 0x55, 0x27, 0xe4, 0x16, 0x23, 0xd6, 0x71, 0x32, - 0x9b, 0x4f, 0x65, 0x43, 0x36, 0x0d, 0xfd, 0xdb, 0x52, 0xbf, 0x53, 0x46, - 0x64, 0x21, 0x25, 0xaa, 0x1e, 0x2c, 0xf4, 0x2d, 0x99, 0x50, 0x79, 0xeb, - 0x3b, 0x38, 0xa2, 0x3c, 0x13, 0xf7, 0x53, 0x34, 0xde, 0x68, 0x1a, 0xd5, - 0x37, 0xe3, 0x2e, 0xd2, 0xd6, 0x49, 0xc4, 0x44, 0x60, 0xf1, 0xfd, 0x5f, - 0x74, 0xe7, 0x29, 0xa6, 0xb1, 0x81, 0xe3, 0x10, 0x03, 0x66, 0xb8, 0x98, - 0x4c, 0x3c, 0xad, 0x42, 0xcf, 0xe4, 0x79, 0x80, 0x1d, 0x4f, 0xe3, 0xcf, - 0x1b, 0xe6, 0xa5, 0x7b, 0x8b, 0x8b, 0x26, 0xca, 0x5d, 0x05, 0xd3, 0x56, - 0x1e, 0xd6, 0x7b, 0x02, 0x70, 0x32, 0xf8, 0x2a, 0x5c, 0x41, 0x42, 0xc2, - 0x39, 0x4a, 0x95, 0x69, 0x24, 0xa7, 0x89, 0xb5, 0x4e, 0x58, 0xee, 0x05, - 0x06, 0x9f, 0x47, 0x7b, 0x17, 0xae, 0x8c, 0xbc, 0x98, 0xe2, 0xae, 0xc8, - 0xb4, 0x17, 0xb4, 0xa9, 0x72, 0xda, 0xb4, 0xdc, 0x2c, 0x1e, 0x5f, 0x68, - 0x45, 0xca, 0xe9, 0x5c, 0x4a, 0x25, 0x96, 0x47, 0x5b, 0x17, 0xd3, 0xbc, - 0xac, 0xc0, 0xd9, 0x6d, 0xd5, 0xa4, 0x0a, 0x27, 0xd6, 0x4d, 0xb3, 0x64, - 0xa6, 0xd2, 0x14, 0x47, 0x93, 0xb1, 0x4c, 0xea, 0x54, 0x4e, 0x3a, 0x81, - 0x89, 0x43, 0xfe, 0xc2, 0xcd, 0x4e, 0xb8, 0x09, 0xf0, 0xbd, 0x6a, 0x66, - 0x81, 0x6e, 0x2e, 0x3e, 0xf5, 0xa8, 0xa2, 0x8e, 0x9d, 0xa6, 0x9e, 0xb1, - 0x51, 0xad, 0xa9, 0xfd, 0x65, 0x89, 0xc5, 0x05, 0x49, 0x9a, 0x6f, 0x1c, - 0x4f, 0x59, 0x64, 0x31, 0xcc, 0x2a, 0xc6, 0x58, 0x2f, 0x8e, 0xae, 0x32, - 0xd3, 0xa7, 0x1d, 0x4f, 0x07, 0x39, 0x9e, 0xea, 0xad, 0xcb, 0xe9, 0xf3, - 0xff, 0xa5, 0x35, 0x0b, 0x34, 0x8b, 0xd5, 0x2c, 0x02, 0xc6, 0x8b, 0xf0, - 0xd4, 0xb5, 0x89, 0xb7, 0x8f, 0x7e, 0xfd, 0xd2, 0x0c, 0xb4, 0x28, 0xdd, - 0xde, 0x70, 0x7d, 0x59, 0x1b, 0xdf, 0x94, 0x51, 0xda, 0x6e, 0xb8, 0xbd, - 0xa3, 0x32, 0xc2, 0xaa, 0xb9, 0x11, 0xe5, 0xc0, 0xa9, 0x46, 0xf9, 0x8b, - 0x20, 0x4a, 0x83, 0xc2, 0x25, 0x61, 0x23, 0xcf, 0x2e, 0xfc, 0x80, 0x14, - 0x56, 0x4c, 0x2d, 0xd1, 0x06, 0x3d, 0x1d, 0x07, 0xfe, 0x31, 0x64, 0x08, - 0x77, 0x64, 0xea, 0x59, 0xd5, 0x05, 0xc4, 0x33, 0xf0, 0x26, 0x83, 0x58, - 0xb5, 0x91, 0xd6, 0xdf, 0x2b, 0x9d, 0xf6, 0x1e, 0xe1, 0x2e, 0xe0, 0x5f, - 0x00, 0x85, 0x91, 0x80, 0x38, 0x82, 0xc5, 0x82, 0x47, 0x37, 0x86, 0x91, - 0x73, 0xf0, 0x94, 0xbb, 0xb8, 0x11, 0x22, 0xc3, 0x87, 0x0b, 0x35, 0x4f, - 0x5f, 0xe2, 0x35, 0x86, 0xdc, 0xd1, 0xdc, 0x2c, 0x31, 0x1a, 0x9a, 0x7a, - 0x29, 0xfb, 0x44, 0x33, 0xfd, 0xf0, 0x11, 0x3a, 0x85, 0x18, 0xf6, 0x0f, - 0xc7, 0xa0, 0x8d, 0x1a, 0x57, 0x79, 0xea, 0x14, 0xda, 0x54, 0xab, 0x7e, - 0x1d, 0x75, 0xb8, 0x3d, 0xa2, 0x82, 0xee, 0xe0, 0x13, 0x2a, 0xe9, 0xec, - 0x52, 0x14, 0x7e, 0xb3, 0xa3, 0xeb, 0x69, 0xd2, 0x06, 0x56, 0x06, 0xef, - 0xa8, 0x71, 0xc0, 0xe0, 0x8a, 0xd4, 0x74, 0xd0, 0xa4, 0xf6, 0x6c, 0x3e, - 0x1b, 0xb3, 0x29, 0xfa, 0x2d, 0x54, 0x83, 0x0b, 0x25, 0xc0, 0x5b, 0xea, - 0x5f, 0xe7, 0xe2, 0x56, 0x3b, 0x6e, 0x9d, 0xe8, 0xd2, 0xb6, 0x15, 0x9f, - 0xc1, 0x3f, 0x61, 0x97, 0x63, 0x4a, 0x82, 0xa4, 0xea, 0xfa, 0xe8, 0x1b, - 0x58, 0xee, 0xbc, 0xa9, 0xc5, 0xca, 0x30, 0xc0, 0x5e, 0xe4, 0xe6, 0x25, - 0x4f, 0xc1, 0xaa, 0xec, 0xb0, 0x90, 0xfb, 0x2e, 0xab, 0x7a, 0x45, 0xba, - 0xd2, 0xd0, 0xe0, 0xb4, 0x45, 0x2d, 0x9f, 0xa6, 0xf1, 0xe5, 0xc4, 0xb9, - 0xd7, 0x34, 0xd7, 0x02, 0xe4, 0xcf, 0x6e, 0x56, 0x62, 0xb1, 0x9a, 0x89, - 0x1f, 0x6f, 0x56, 0x8b, 0x55, 0x34, 0xee, 0xe7, 0xc5, 0xe3, 0x4f, 0xf7, - 0x9f, 0x1e, 0xc5, 0xe7, 0x9b, 0x87, 0x87, 0x9b, 0xe5, 0xe3, 0xe2, 0x6e, - 0x25, 0xee, 0x1f, 0xca, 0x6b, 0xf9, 0xfb, 0xf7, 0xe2, 0x66, 0xf9, 0x8b, - 0xf8, 0x8f, 0xc5, 0xf2, 0x16, 0x74, 0x47, 0xfb, 0x1b, 0xe0, 0x67, 0x9a, - 0x8e, 0xba, 0x7c, 0x12, 0xcd, 0xb8, 0xd2, 0x14, 0x63, 0xd2, 0x9c, 0x41, - 0x3c, 0x27, 0x95, 0x11, 0xa7, 0x8e, 0x68, 0x72, 0xd9, 0x54, 0xdc, 0x10, - 0xd9, 0x73, 0x88, 0x85, 0x31, 0x1f, 0x17, 0x8f, 0x1f, 0xee, 0x2a, 0x58, - 0x7d, 0xf9, 0x6a, 0xb1, 0x7c, 0xff, 0xb0, 0x58, 0xfe, 0xed, 0xee, 0xe7, - 0xbb, 0xe5, 0x63, 0x25, 0x7e, 0xbe, 0x7b, 0x78, 0xf7, 0x13, 0xb4, 0xbc, - 0xf9, 0x71, 0xf1, 0x61, 0xf1, 0xf8, 0x0b, 0x87, 0xd0, 0xfb, 0xc5, 0xe3, - 0xf2, 0x6e, 0xe5, 0x5f, 0x1f, 0xb8, 0x09, 0x32, 0x3e, 0xde, 0x3c, 0xc0, - 0x61, 0x9f, 0x3e, 0xdc, 0x3c, 0x88, 0x8f, 0x9f, 0x1e, 0x3e, 0xde, 0xaf, - 0xee, 0x7c, 0xb5, 0xf5, 0xb7, 0x85, 0x1d, 0xdd, 0x2c, 0x40, 0xff, 0x3d, - 0x36, 0xd5, 0x7c, 0xeb, 0xc0, 0x37, 0x33, 0xbe, 0x2b, 0x9c, 0x86, 0x0b, - 0x3c, 0x67, 0xcd, 0xde, 0x6a, 0xa2, 0xe7, 0x7c, 0xe0, 0x16, 0xd1, 0x45, - 0x8f, 0x70, 0xfc, 0x65, 0xc4, 0x2d, 0xe6, 0xa5, 0x7e, 0xda, 0xe8, 0x1c, - 0x38, 0x11, 0x1d, 0x37, 0xc2, 0xb5, 0x76, 0x8c, 0xec, 0xce, 0xd4, 0x3a, - 0xb5, 0xc9, 0x1e, 0xd4, 0xc3, 0x3d, 0x2b, 0x4f, 0x63, 0xcb, 0x8b, 0xd6, - 0xf3, 0x66, 0xd6, 0xc7, 0xde, 0xbf, 0xcd, 0xf1, 0x39, 0x9a, 0x94, 0x16, - 0x7d, 0xd0, 0x72, 0xad, 0x3b, 0xbe, 0x3c, 0x5f, 0x50, 0xe5, 0x15, 0xa0, - 0x3f, 0xfd, 0xc0, 0x7a, 0x78, 0x19, 0xf8, 0xaa, 0xe3, 0x61, 0x27, 0x74, - 0x44, 0xa7, 0x5d, 0x8c, 0x5a, 0xe2, 0x4d, 0x16, 0x02, 0x68, 0x28, 0x47, - 0x06, 0xbd, 0xda, 0x74, 0x1a, 0xec, 0xab, 0x56, 0xd7, 0x55, 0xba, 0xed, - 0xae, 0x26, 0xa3, 0xdc, 0x34, 0xf9, 0xf9, 0xc3, 0x78, 0xbf, 0xf2, 0x44, - 0x81, 0x66, 0xfa, 0x9d, 0x5e, 0x33, 0xa1, 0x63, 0xe5, 0x36, 0x34, 0x8f, - 0x48, 0xf7, 0x16, 0x71, 0xcb, 0x81, 0xde, 0x40, 0x70, 0x7c, 0x3b, 0x7e, - 0x39, 0x3f, 0x3c, 0x7a, 0x4e, 0xca, 0x07, 0x0d, 0x65, 0xa2, 0xcb, 0x3a, - 0xcd, 0x1b, 0x87, 0x89, 0x00, 0xbb, 0x56, 0xee, 0xe4, 0x66, 0x3a, 0xc3, - 0xa7, 0xd5, 0xf1, 0x95, 0x80, 0xfc, 0x72, 0x80, 0xdb, 0x2b, 0xba, 0x5b, - 0x2f, 0x6e, 0x9f, 0x91, 0x50, 0x20, 0xb6, 0xfe, 0x2a, 0x81, 0x08, 0x8c, - 0x9f, 0xe9, 0xd2, 0x85, 0x5c, 0x10, 0x1a, 0x11, 0x9a, 0x66, 0x6e, 0xd0, - 0x9b, 0xc6, 0xd5, 0xd6, 0xdf, 0x99, 0x53, 0x15, 0x4f, 0xb5, 0x9a, 0x6e, - 0x8d, 0x4f, 0x1b, 0x5d, 0xb6, 0xe6, 0x98, 0x30, 0x66, 0xf4, 0xdf, 0xe8, - 0x3e, 0x38, 0xb3, 0xc0, 0xd5, 0x72, 0x62, 0x70, 0xf5, 0xd5, 0x3b, 0xf1, - 0xa8, 0x15, 0x1d, 0xbb, 0x33, 0x3e, 0x60, 0x37, 0xc6, 0x34, 0x07, 0xdd, - 0x95, 0xb3, 0xc3, 0x2f, 0x28, 0xca, 0x66, 0xbf, 0x97, 0x34, 0x25, 0x24, - 0x4e, 0x30, 0x92, 0xe2, 0xad, 0xd4, 0xdd, 0x68, 0x7d, 0x35, 0x92, 0x5d, - 0x3b, 0xf6, 0x99, 0xdc, 0x70, 0x11, 0xbc, 0xf0, 0x26, 0x08, 0xdd, 0x02, - 0x50, 0xf0, 0x96, 0xf6, 0xf0, 0x1b, 0x2b, 0x87, 0xc0, 0xa1, 0x38, 0x24, - 0x82, 0x7e, 0x3a, 0x88, 0x0b, 0x32, 0xd2, 0x30, 0x5d, 0x36, 0x4f, 0x9a, - 0x2f, 0x49, 0xdb, 0xf0, 0xfa, 0x06, 0x32, 0x20, 0x18, 0x21, 0xbe, 0xdc, - 0x10, 0xc4, 0xfb, 0x0c, 0xf8, 0xeb, 0x5c, 0xdc, 0xd4, 0x54, 0x13, 0xc8, - 0x0a, 0x11, 0x79, 0x69, 0xe7, 0x9b, 0x5c, 0xa8, 0x8b, 0xa4, 0xf8, 0xbc, - 0x25, 0xea, 0x3e, 0x4d, 0xd7, 0xd3, 0xcb, 0xc2, 0xaf, 0x5e, 0xb7, 0x45, - 0x16, 0x5a, 0x6f, 0x8d, 0xf1, 0x53, 0x50, 0x9e, 0x74, 0x4e, 0x2e, 0xdb, - 0x79, 0xe6, 0x0a, 0xde, 0xd6, 0x2a, 0xc6, 0x13, 0x40, 0x1d, 0x6b, 0x28, - 0xfb, 0x5a, 0xf9, 0x43, 0xec, 0xfd, 0x18, 0x34, 0xa0, 0xdf, 0x91, 0xe3, - 0x4e, 0xed, 0x7a, 0x7a, 0xb5, 0x24, 0x0f, 0xc4, 0xbc, 0x59, 0xbb, 0xa8, - 0xbb, 0x30, 0xeb, 0x2e, 0x4c, 0xa1, 0x98, 0xb7, 0xbc, 0x26, 0xd8, 0x21, - 0xe6, 0xeb, 0xaf, 0x5a, 0x70, 0x1e, 0xca, 0x97, 0xd0, 0x5f, 0x69, 0x37, - 0xb9, 0xee, 0x41, 0x83, 0xf1, 0x93, 0x39, 0x50, 0x27, 0xe4, 0x5b, 0xc9, - 0x64, 0x30, 0xb6, 0x67, 0x21, 0x38, 0x9f, 0x8f, 0xdf, 0x68, 0xe9, 0xbb, - 0xe2, 0x36, 0x24, 0x71, 0xee, 0x70, 0x2d, 0xc2, 0x43, 0xdc, 0xf0, 0x35, - 0x01, 0x69, 0x86, 0x51, 0xd6, 0x97, 0x99, 0x4e, 0xbe, 0x45, 0xc9, 0x88, - 0x9e, 0x27, 0x45, 0x45, 0x18, 0x84, 0x99, 0x30, 0xf5, 0x4c, 0xba, 0xf5, - 0xf8, 0x4c, 0x09, 0xef, 0xf3, 0x9d, 0x6d, 0xd3, 0x26, 0xdb, 0x34, 0xaa, - 0x45, 0xbb, 0xe2, 0x57, 0x80, 0x19, 0x37, 0x17, 0x46, 0xe7, 0xd2, 0xee, - 0x18, 0x89, 0x22, 0xb9, 0x4e, 0x56, 0xcc, 0xe9, 0x3c, 0x5a, 0x9b, 0x6f, - 0xcb, 0xc2, 0xe4, 0x18, 0x98, 0x8c, 0xae, 0x9c, 0x9a, 0x55, 0x3f, 0x44, - 0xad, 0xce, 0xe7, 0xc6, 0xeb, 0x63, 0x20, 0x1b, 0xf9, 0x40, 0x47, 0xb2, - 0x40, 0xb6, 0x69, 0x22, 0xf3, 0x87, 0x22, 0x1a, 0x0b, 0xda, 0x98, 0x74, - 0xf1, 0x01, 0x7c, 0xb7, 0xbc, 0xa5, 0xba, 0x7a, 0xe9, 0x35, 0x38, 0xfe, - 0xfd, 0xe6, 0xe3, 0x47, 0x3c, 0xb2, 0xf8, 0xaf, 0xb7, 0xe4, 0x42, 0x9e, - 0x16, 0x00, 0x51, 0x8f, 0xe1, 0xf5, 0x85, 0xf2, 0xd5, 0x3d, 0xfa, 0x8d, - 0x55, 0x39, 0xa4, 0xbb, 0x24, 0xfc, 0x3d, 0x7e, 0xe3, 0x82, 0x2a, 0xbc, - 0x46, 0x31, 0x9d, 0x26, 0x44, 0x5a, 0x6d, 0x90, 0x35, 0x16, 0x6d, 0xf8, - 0x10, 0xa7, 0x1a, 0x55, 0xee, 0xe4, 0x5b, 0xad, 0xba, 0xc6, 0x09, 0x14, - 0x08, 0x24, 0xbb, 0x07, 0xfd, 0x35, 0xdd, 0x52, 0x2a, 0x44, 0xe6, 0xec, - 0xb7, 0xdf, 0x67, 0xb9, 0x49, 0xa1, 0xc9, 0x44, 0xa8, 0x76, 0xc7, 0x18, - 0x4c, 0x8c, 0xaa, 0xa1, 0xeb, 0x2b, 0x3a, 0xe9, 0xb9, 0xb8, 0xba, 0x35, - 0xfd, 0x3f, 0xa5, 0xf7, 0x05, 0x8a, 0x1c, 0x8d, 0xc2, 0xff, 0xe1, 0x5a, - 0x70, 0xb7, 0xce, 0x6d, 0xaa, 0x03, 0xbd, 0x40, 0x24, 0x80, 0xe2, 0x27, - 0x3d, 0x42, 0x77, 0x50, 0x94, 0xed, 0xe2, 0x6e, 0x96, 0x72, 0xc5, 0x1d, - 0x81, 0xe7, 0xcf, 0xe9, 0x22, 0x94, 0x9b, 0x7a, 0xaf, 0x00, 0x70, 0x02, - 0x0b, 0x3b, 0x47, 0x17, 0x54, 0xfe, 0xe9, 0x30, 0x27, 0x8d, 0x28, 0xce, - 0xcf, 0xfa, 0xb8, 0x41, 0x94, 0x11, 0x63, 0xf5, 0x6d, 0x17, 0xd3, 0xcc, - 0x7d, 0x2c, 0xc6, 0xf1, 0x6a, 0x75, 0xad, 0xf2, 0x2b, 0x2b, 0x7c, 0x43, - 0x1a, 0x35, 0x71, 0xb4, 0x70, 0x06, 0xe5, 0x78, 0x70, 0x4d, 0x18, 0x3c, - 0xa3, 0x5a, 0x31, 0xbd, 0xf9, 0x0c, 0x2f, 0xbf, 0x90, 0x9a, 0x08, 0x3c, - 0x9d, 0xee, 0xe3, 0x83, 0xe5, 0xe2, 0xbd, 0x6b, 0x1a, 0xcf, 0xe4, 0x21, - 0x87, 0xb4, 0xf5, 0x96, 0x6e, 0xac, 0x7d, 0x30, 0xe4, 0xcb, 0xc4, 0xdf, - 0x8e, 0xf8, 0xfb, 0x5d, 0xfc, 0xc6, 0x7a, 0x43, 0xcf, 0x93, 0x5b, 0xd6, - 0xdf, 0xf9, 0xf1, 0x10, 0x24, 0x4d, 0xd1, 0x33, 0x4d, 0xc3, 0xa7, 0x2a, - 0x5f, 0x08, 0x15, 0x57, 0xf4, 0x40, 0x7a, 0xe7, 0xf2, 0xfa, 0x07, 0x12, - 0x11, 0xfb, 0x11, 0x02, 0x02, 0x5f, 0xbe, 0xc2, 0xf8, 0x3c, 0xd2, 0x78, - 0xdd, 0x87, 0x36, 0x94, 0xa1, 0x31, 0x45, 0x54, 0xa2, 0x38, 0x22, 0x77, - 0xfd, 0x66, 0xcd, 0xd3, 0x32, 0x39, 0x19, 0xd9, 0xc5, 0x40, 0x96, 0x43, - 0x0c, 0xf7, 0x3f, 0x7a, 0xe5, 0xf4, 0x03, 0xb8, 0xfb, 0x72, 0x75, 0xf7, - 0x0a, 0x2a, 0xf3, 0x92, 0x6f, 0x61, 0xe8, 0x2f, 0x71, 0x8f, 0xf0, 0xce, - 0x19, 0x89, 0x29, 0x46, 0x6a, 0xe7, 0x6f, 0x38, 0xd1, 0xa5, 0x41, 0xf9, - 0xc0, 0x4b, 0x0c, 0xfc, 0xff, 0x49, 0xbf, 0x23, 0xf1, 0x66, 0xb3, 0xad, - 0x94, 0x9a, 0xa8, 0x10, 0x83, 0x9c, 0x69, 0x0d, 0x62, 0x06, 0x47, 0xeb, - 0x37, 0x23, 0x02, 0x0e, 0x94, 0x00, 0x65, 0xa1, 0x3f, 0x7d, 0xb3, 0x2f, - 0x4c, 0x4b, 0x32, 0x5f, 0x77, 0xe7, 0xe7, 0x9a, 0xff, 0x6f, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xa8, 0x76, 0x8d, 0x12, 0x3b, 0x2c, 0x00, 0x00, - }, - "conf/license/Apache v2 License", - ) -} - -func conf_license_artistic_license_2_0() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x8c, 0x59, - 0x5b, 0x73, 0xe2, 0x48, 0xb2, 0x7e, 0xaf, 0x5f, 0x51, 0xd1, 0x2f, 0x63, - 0x47, 0xd0, 0x3e, 0xd3, 0x33, 0x73, 0xce, 0xd9, 0x9d, 0x37, 0xda, 0xe0, - 0xb6, 0x62, 0x31, 0xb0, 0x80, 0xdb, 0xe3, 0xc7, 0x42, 0x2a, 0x41, 0xad, - 0x85, 0x8a, 0xad, 0x92, 0x4c, 0xb3, 0xbf, 0x7e, 0xf3, 0x52, 0xa5, 0x0b, - 0xc8, 0x3b, 0x3b, 0x11, 0xd3, 0x61, 0x74, 0xc9, 0xca, 0xeb, 0x97, 0x5f, - 0xa6, 0x36, 0x7b, 0x2d, 0xc7, 0xae, 0x32, 0xbe, 0x32, 0xa9, 0x9c, 0x99, - 0x54, 0x97, 0x5e, 0xcb, 0x5f, 0xee, 0x7e, 0x16, 0x42, 0xb6, 0xff, 0xdd, - 0xdb, 0xe3, 0xd9, 0x99, 0xdd, 0xbe, 0x92, 0x37, 0xe9, 0xad, 0xfc, 0xe5, - 0xe7, 0x2f, 0xbf, 0x85, 0xdb, 0xd3, 0x77, 0xed, 0xce, 0xb6, 0xd4, 0xd2, - 0x78, 0x79, 0xd4, 0xee, 0x60, 0xaa, 0x4a, 0x67, 0xb2, 0xb2, 0x32, 0x85, - 0x37, 0xa4, 0x2a, 0x33, 0x99, 0x81, 0x64, 0x67, 0xb6, 0x75, 0xa5, 0x25, - 0x3c, 0xbb, 0x55, 0x95, 0x39, 0xe0, 0x4d, 0xa3, 0x7d, 0x38, 0xc0, 0xe6, - 0xb2, 0xda, 0xc3, 0xeb, 0x45, 0x38, 0x3b, 0xb3, 0x69, 0x7d, 0xd0, 0x65, - 0x35, 0x92, 0xf0, 0x92, 0x4c, 0xf7, 0xaa, 0xdc, 0x99, 0x72, 0x27, 0x4d, - 0x85, 0x67, 0x94, 0xb6, 0x92, 0xaa, 0x28, 0xec, 0x49, 0x67, 0x77, 0x42, - 0x2c, 0x9d, 0x56, 0x87, 0x6d, 0xa1, 0x85, 0xd8, 0x74, 0x25, 0x68, 0x5f, - 0xa9, 0x6d, 0x61, 0xfc, 0x5e, 0x7b, 0x10, 0xad, 0x65, 0x05, 0x8a, 0x79, - 0x59, 0x97, 0x99, 0x76, 0xf2, 0xb4, 0x37, 0xe9, 0x5e, 0x2a, 0xb9, 0x33, - 0xef, 0xba, 0x94, 0xb9, 0xd3, 0x5a, 0x7a, 0x9b, 0x57, 0x27, 0xe5, 0xb4, - 0x58, 0xaa, 0xf4, 0x4d, 0xed, 0xb4, 0x3c, 0xa8, 0xb3, 0xdc, 0x6a, 0xd6, - 0x32, 0x1b, 0xc9, 0x83, 0xcd, 0x4c, 0x4e, 0x7f, 0xb5, 0xb6, 0xc0, 0x0f, - 0x30, 0xee, 0x7f, 0xac, 0x93, 0x4e, 0x77, 0xae, 0xde, 0x09, 0x74, 0xa7, - 0x29, 0x2b, 0xd0, 0x1f, 0xd5, 0xad, 0xf6, 0xaa, 0x22, 0x15, 0x5a, 0x07, - 0x3e, 0xda, 0x02, 0xf5, 0x38, 0x28, 0x78, 0x0a, 0xfe, 0xf7, 0x70, 0xfc, - 0x41, 0x4b, 0x15, 0x22, 0x20, 0x52, 0x5b, 0x56, 0xce, 0x16, 0xd2, 0x82, - 0xb3, 0xe8, 0xcd, 0x4c, 0xbf, 0xeb, 0xc2, 0x1e, 0xd1, 0x23, 0xec, 0x2a, - 0x90, 0x18, 0x15, 0x05, 0x63, 0x0a, 0xd0, 0xbf, 0x32, 0x45, 0x21, 0xdf, - 0xb4, 0x3e, 0xa2, 0x9f, 0xe0, 0x9d, 0xc6, 0x10, 0xf5, 0xae, 0x4c, 0x01, - 0xae, 0x80, 0xbf, 0xbc, 0xb4, 0x47, 0x30, 0xd8, 0xdb, 0xda, 0xa5, 0x9a, - 0x02, 0xd3, 0xb3, 0x1d, 0x9c, 0xf9, 0x6a, 0x6b, 0x50, 0x03, 0xee, 0x15, - 0x27, 0x75, 0xbe, 0x88, 0xe6, 0x41, 0xbd, 0xa1, 0x8e, 0x0e, 0x62, 0xa1, - 0x51, 0x13, 0x0f, 0x47, 0xdb, 0xa2, 0x38, 0x4b, 0x5b, 0x57, 0xde, 0x64, - 0x3a, 0x06, 0x51, 0x34, 0x41, 0x34, 0x4e, 0xa7, 0x15, 0x3c, 0x70, 0x32, - 0xd5, 0x7e, 0xd8, 0x03, 0xf0, 0x4a, 0x0c, 0x43, 0xd0, 0xf7, 0x4e, 0xca, - 0x24, 0x27, 0x03, 0x38, 0x62, 0xd7, 0x99, 0x41, 0xf1, 0x67, 0xcd, 0x48, - 0x68, 0x5e, 0x83, 0xe5, 0x35, 0xdc, 0x22, 0xb7, 0x9c, 0xc1, 0x82, 0xa3, - 0xb3, 0x47, 0x8b, 0x17, 0xac, 0x20, 0xa5, 0x49, 0x86, 0x8e, 0x27, 0x8c, - 0xe8, 0x19, 0xbf, 0xb7, 0x75, 0x91, 0x49, 0x74, 0xb5, 0x4a, 0x3f, 0x88, - 0x0f, 0x7a, 0xc8, 0x6b, 0xfd, 0x26, 0x14, 0xd8, 0x92, 0xe7, 0xda, 0xa1, - 0xff, 0x59, 0x11, 0xf4, 0x72, 0xc7, 0x17, 0xe0, 0xba, 0x89, 0xce, 0x4d, - 0x69, 0x2a, 0x63, 0x4b, 0xcf, 0x75, 0xf1, 0xe9, 0x52, 0xde, 0x27, 0x79, - 0xd0, 0xaa, 0xe4, 0x74, 0x34, 0x65, 0x66, 0xde, 0x4d, 0x56, 0xab, 0xe2, - 0xc6, 0xdf, 0x4a, 0x48, 0x21, 0xeb, 0x76, 0xaa, 0x34, 0xff, 0x52, 0x28, - 0x00, 0x2e, 0x91, 0x84, 0x52, 0x1d, 0xc0, 0xf5, 0xa6, 0xa4, 0x37, 0xd2, - 0x46, 0x1a, 0xd8, 0x0f, 0x3a, 0xc8, 0xdc, 0x72, 0x72, 0xc0, 0xf1, 0xe0, - 0xe8, 0xc6, 0x7f, 0xcd, 0xe1, 0x25, 0x27, 0xa4, 0x6d, 0xce, 0x55, 0xe5, - 0x59, 0x1e, 0x21, 0xc9, 0xce, 0xec, 0xa9, 0x3d, 0xe4, 0x43, 0x1a, 0x9f, - 0xd2, 0xe8, 0x0a, 0x8c, 0x21, 0x68, 0x02, 0x42, 0x1d, 0x09, 0x39, 0x28, - 0x88, 0x81, 0x51, 0x05, 0x46, 0xbf, 0xe7, 0x40, 0x50, 0x49, 0xa5, 0xa9, - 0x75, 0x99, 0x2a, 0x41, 0x91, 0x0f, 0xc3, 0xfb, 0x13, 0x97, 0x37, 0x84, - 0x23, 0xd5, 0x59, 0xed, 0xb4, 0x8f, 0xca, 0x41, 0x9a, 0x7d, 0x22, 0xef, - 0x7e, 0x82, 0x50, 0xf4, 0xf5, 0xd3, 0xce, 0xdb, 0x12, 0x33, 0x4b, 0x9e, - 0x28, 0x40, 0x85, 0x79, 0xd3, 0x11, 0x4b, 0x46, 0xf4, 0x76, 0x5b, 0x6a, - 0x23, 0x54, 0x97, 0x2a, 0xf3, 0xdc, 0xd5, 0x2f, 0x9e, 0x12, 0x7e, 0x76, - 0xdd, 0x9e, 0x42, 0xc2, 0x42, 0x4e, 0x82, 0x8f, 0x31, 0x29, 0x72, 0xa8, - 0x1c, 0xdf, 0x2d, 0x68, 0xb9, 0x25, 0x41, 0xa2, 0x0f, 0x77, 0x6c, 0xcc, - 0x88, 0x91, 0x0c, 0x1c, 0xf2, 0x0e, 0x41, 0x7a, 0xd7, 0xbe, 0xa9, 0xc4, - 0x8e, 0xd0, 0x80, 0x07, 0x36, 0x27, 0x11, 0xd5, 0x1e, 0xb3, 0x90, 0x4e, - 0xb9, 0x93, 0xe3, 0x7e, 0x9e, 0x13, 0xc0, 0x80, 0xfb, 0x3d, 0x9c, 0x8e, - 0x92, 0xb4, 0x41, 0xb7, 0x93, 0x92, 0xeb, 0x0a, 0xc4, 0x28, 0x97, 0x91, - 0x8c, 0xef, 0xe0, 0x10, 0x90, 0x4c, 0xa6, 0x2a, 0xf9, 0x14, 0x60, 0x28, - 0x5e, 0x8e, 0xa6, 0x4e, 0x1a, 0x1b, 0xa2, 0xb5, 0xe0, 0x74, 0xc8, 0x2f, - 0x4a, 0x53, 0xc6, 0xe1, 0x7e, 0x11, 0x90, 0xe7, 0xd4, 0x1b, 0x83, 0x2a, - 0xc9, 0x80, 0x80, 0x6a, 0xef, 0x0d, 0x02, 0x05, 0xb8, 0x1b, 0x62, 0x81, - 0x88, 0xae, 0x0b, 0xcf, 0x5e, 0x8e, 0x49, 0xa8, 0xbc, 0xe6, 0xa2, 0x4d, - 0xed, 0xe1, 0x88, 0x01, 0xb3, 0x9c, 0x2a, 0xdd, 0xf4, 0x1d, 0xa1, 0x00, - 0xca, 0x22, 0xdf, 0xc5, 0x06, 0x0c, 0x75, 0xe7, 0xb5, 0xde, 0x2b, 0x57, - 0x76, 0xc0, 0xfd, 0x07, 0xad, 0xbb, 0x99, 0x91, 0xeb, 0x4e, 0x85, 0x43, - 0x47, 0x70, 0x3b, 0x2e, 0x81, 0xe6, 0x15, 0xb0, 0x25, 0x78, 0x1d, 0xe0, - 0xa2, 0x63, 0x66, 0xeb, 0x09, 0x5f, 0x1f, 0x8f, 0xd6, 0x55, 0xa1, 0x72, - 0x3a, 0x4f, 0x91, 0xc1, 0x6d, 0xde, 0x53, 0x91, 0x20, 0x10, 0x55, 0x00, - 0x37, 0x9a, 0x1b, 0x0e, 0x2a, 0xd2, 0xa9, 0x7d, 0xd0, 0xa6, 0xc9, 0xe6, - 0x18, 0xaf, 0x18, 0x94, 0x4f, 0xd0, 0x0f, 0x72, 0x34, 0xbe, 0x5f, 0x36, - 0xd2, 0xe4, 0xd8, 0xc0, 0xb0, 0xec, 0x50, 0xe0, 0x56, 0xeb, 0x92, 0xab, - 0xac, 0x69, 0x2d, 0xa0, 0x16, 0xde, 0xc5, 0x3b, 0xcd, 0x55, 0x69, 0x4b, - 0x40, 0x50, 0x70, 0x3f, 0x01, 0xb2, 0xfe, 0x71, 0x04, 0x1d, 0x0c, 0x82, - 0xaa, 0xd3, 0xff, 0xac, 0xa1, 0xc9, 0x69, 0x4e, 0x13, 0x4e, 0xdc, 0xab, - 0xa4, 0x8d, 0x2a, 0x5e, 0xe6, 0x4d, 0xb7, 0x26, 0xda, 0xaa, 0x6e, 0xf4, - 0x23, 0x0d, 0xa8, 0xeb, 0x86, 0x26, 0x47, 0x52, 0x7c, 0x0d, 0x5d, 0x93, - 0xaf, 0x02, 0xf6, 0x03, 0x1a, 0x92, 0x1d, 0x43, 0x2a, 0x5d, 0xa9, 0x43, - 0xef, 0xf7, 0x55, 0x5a, 0xc0, 0x0d, 0x53, 0x02, 0xb8, 0x04, 0xbe, 0xd1, - 0xaa, 0x04, 0x81, 0xb9, 0x22, 0x23, 0xa0, 0xd4, 0xa4, 0x53, 0xa7, 0x08, - 0x39, 0x21, 0xd8, 0x6d, 0xbd, 0x44, 0xe3, 0xae, 0xf0, 0x1e, 0xbc, 0x67, - 0xa0, 0x5d, 0xa5, 0xb5, 0x23, 0x04, 0x7f, 0x8f, 0x8f, 0x41, 0x45, 0x31, - 0x42, 0x81, 0xd9, 0xa1, 0xdf, 0x37, 0x6e, 0x07, 0x0b, 0xb0, 0x8d, 0x2f, - 0xb5, 0x2b, 0xe4, 0x83, 0x05, 0xde, 0x40, 0x79, 0x1a, 0xeb, 0x20, 0xaf, - 0xab, 0xda, 0x35, 0x40, 0xb3, 0xa6, 0x86, 0xfa, 0x09, 0xf3, 0xea, 0xd0, - 0x71, 0x6c, 0xe8, 0xb3, 0x88, 0xab, 0xa3, 0x86, 0xd1, 0xb0, 0x18, 0xbe, - 0xd5, 0xba, 0x16, 0x80, 0x20, 0x37, 0xbb, 0xda, 0xf1, 0x5d, 0xc6, 0xa5, - 0x88, 0xef, 0x57, 0xc0, 0x7e, 0x38, 0xc2, 0xfd, 0xec, 0xea, 0xb8, 0x34, - 0xdc, 0x00, 0xd5, 0x2b, 0xcd, 0x87, 0xda, 0xed, 0x3f, 0x00, 0x98, 0x82, - 0x06, 0x5b, 0xf0, 0xb6, 0x0b, 0x18, 0x8a, 0xa6, 0x63, 0x15, 0x12, 0xe6, - 0x90, 0x1c, 0x40, 0xe7, 0xba, 0xa8, 0x28, 0xb5, 0x9d, 0x45, 0xb1, 0x18, - 0x68, 0x93, 0x22, 0xf8, 0x43, 0x97, 0xf3, 0xf8, 0x0c, 0x2b, 0x17, 0x0a, - 0x9e, 0xae, 0x16, 0xaa, 0xea, 0xf8, 0x9b, 0xdd, 0x40, 0xe2, 0x40, 0x59, - 0xb1, 0xc4, 0x16, 0xed, 0xc9, 0xd3, 0x68, 0xca, 0xb3, 0x67, 0xca, 0xc1, - 0xa9, 0x98, 0xf2, 0x9b, 0x2f, 0x10, 0x47, 0x80, 0x88, 0x4e, 0x11, 0xdb, - 0x52, 0x88, 0x9b, 0x2f, 0xb7, 0x52, 0x46, 0x2a, 0xd2, 0xe3, 0x20, 0xdc, - 0xe6, 0x07, 0x42, 0x8e, 0x92, 0x53, 0x60, 0x82, 0x15, 0x1f, 0x02, 0xcf, - 0x89, 0xcb, 0x9c, 0x67, 0x8f, 0x52, 0x93, 0xa9, 0x1d, 0xf1, 0x83, 0x53, - 0x38, 0x1d, 0x6c, 0x87, 0xd3, 0x53, 0xc6, 0x2e, 0x86, 0x0b, 0x3c, 0x0e, - 0xc0, 0x46, 0x20, 0xd8, 0x04, 0xca, 0xd1, 0xe6, 0x1f, 0xa9, 0x30, 0x00, - 0xc5, 0x1d, 0x93, 0xf9, 0xb0, 0x55, 0xcb, 0x0b, 0xbb, 0x7e, 0xba, 0x50, - 0x1e, 0x0c, 0xfe, 0x25, 0x18, 0x8c, 0x59, 0x38, 0xf9, 0x90, 0x2c, 0x0f, - 0x38, 0x3a, 0x5c, 0x12, 0xc3, 0x35, 0xd0, 0x81, 0x38, 0x6c, 0xd9, 0x60, - 0x3a, 0x10, 0x0a, 0x53, 0x1f, 0x06, 0x2d, 0x17, 0xa1, 0x05, 0xed, 0x30, - 0x0b, 0x3d, 0xa6, 0x08, 0xf9, 0x4b, 0x5e, 0x60, 0xf2, 0x85, 0x87, 0x08, - 0x8e, 0xb3, 0x1a, 0x31, 0x00, 0x9c, 0x2f, 0x80, 0x97, 0x47, 0x2d, 0x6d, - 0x2c, 0xf0, 0x4b, 0xe6, 0xe2, 0x29, 0x44, 0xca, 0x7b, 0x9b, 0x1a, 0x85, - 0x81, 0x05, 0x27, 0xa5, 0x85, 0x32, 0x07, 0x50, 0x1d, 0x50, 0x77, 0x4c, - 0x5e, 0x77, 0x74, 0xd5, 0x69, 0x0e, 0x0a, 0x41, 0xcf, 0xa5, 0x37, 0xd0, - 0x59, 0xd4, 0xc6, 0xce, 0x14, 0x1f, 0x53, 0xa6, 0x45, 0x0d, 0xad, 0x46, - 0x89, 0x58, 0x22, 0x5d, 0x0f, 0x75, 0xca, 0xe8, 0xe6, 0xd7, 0x8e, 0xb7, - 0xd5, 0xf1, 0x58, 0x9c, 0xc9, 0x35, 0xdb, 0x1a, 0x72, 0xdf, 0xfc, 0xd0, - 0x1e, 0x2c, 0x84, 0x2e, 0xa1, 0xb6, 0xa6, 0x30, 0xc0, 0x95, 0x02, 0xe0, - 0x71, 0xfb, 0xe7, 0x1e, 0x71, 0xe8, 0xa4, 0x30, 0xaa, 0x91, 0x75, 0x59, - 0x36, 0x95, 0xcf, 0x20, 0x16, 0x4b, 0x42, 0x94, 0xa6, 0xd0, 0x1a, 0x86, - 0x7e, 0x42, 0xea, 0xce, 0x04, 0x9e, 0x26, 0x8e, 0x12, 0x3b, 0xa6, 0x23, - 0xff, 0x5e, 0x27, 0xcb, 0x28, 0x38, 0x8f, 0x5c, 0x22, 0x4e, 0xe1, 0x25, - 0x5f, 0x73, 0xa5, 0x87, 0x8e, 0x73, 0x89, 0xad, 0x98, 0x9b, 0x93, 0x8b, - 0x4c, 0xbc, 0x2e, 0x8f, 0x0b, 0x86, 0x00, 0x67, 0x70, 0xa2, 0x81, 0xc7, - 0x7e, 0x1b, 0xce, 0x4f, 0x8a, 0xd3, 0xa5, 0xa0, 0xf6, 0x45, 0x79, 0xd3, - 0x4b, 0x29, 0xf1, 0x71, 0x4a, 0xa1, 0x4d, 0x44, 0x23, 0xe1, 0x42, 0xcc, - 0x4d, 0x25, 0x87, 0xe2, 0x78, 0x55, 0xd6, 0xb7, 0x03, 0xf9, 0x98, 0x16, - 0x5a, 0x39, 0x08, 0x6b, 0x04, 0x5d, 0xb9, 0xb7, 0x27, 0x04, 0x79, 0x66, - 0xf1, 0x5e, 0x34, 0x31, 0xba, 0xf6, 0x2e, 0x67, 0x11, 0x84, 0x87, 0x47, - 0x4f, 0x4c, 0xac, 0xc2, 0x00, 0x00, 0x11, 0xfe, 0xb4, 0x30, 0x8e, 0xf1, - 0xc3, 0xa4, 0x29, 0x6d, 0xf9, 0xd9, 0x47, 0x21, 0x39, 0xe0, 0x0f, 0xd2, - 0xdc, 0x11, 0x34, 0x45, 0x9d, 0xd6, 0x38, 0x80, 0xe2, 0x0f, 0x26, 0xa9, - 0x75, 0x11, 0x93, 0x68, 0x10, 0x61, 0x40, 0x73, 0x50, 0x1a, 0xb8, 0xe0, - 0x62, 0x3e, 0x8d, 0x91, 0xc8, 0x2d, 0x4e, 0xb9, 0x70, 0xd4, 0xef, 0x8c, - 0xfd, 0x37, 0xea, 0x56, 0xf2, 0x18, 0x36, 0x04, 0x40, 0x9d, 0x1c, 0x0c, - 0x69, 0x70, 0x99, 0x81, 0xa2, 0x19, 0xb5, 0x87, 0x2c, 0xe7, 0xd9, 0x78, - 0x28, 0x7d, 0xa0, 0xfe, 0x6c, 0x33, 0xc6, 0x0e, 0x92, 0x63, 0x4a, 0x8c, - 0x58, 0x80, 0x94, 0x15, 0xfd, 0x1a, 0x09, 0x6d, 0x73, 0x88, 0xd9, 0x86, - 0xbe, 0x76, 0xb3, 0x05, 0xdb, 0xe0, 0x30, 0xf0, 0x1f, 0x1f, 0x05, 0x63, - 0x71, 0x05, 0x68, 0xd2, 0x74, 0x98, 0xe1, 0x5c, 0x8b, 0xfc, 0x2c, 0x0c, - 0x1a, 0x30, 0x27, 0x97, 0x3c, 0xcc, 0x41, 0x07, 0x70, 0x51, 0x06, 0x76, - 0x35, 0x9c, 0xd2, 0xeb, 0xb2, 0x0c, 0xd3, 0xf1, 0x95, 0xf9, 0x77, 0x32, - 0x61, 0x36, 0xa6, 0xb2, 0xcc, 0x04, 0x12, 0x3b, 0xe4, 0xe3, 0x43, 0xed, - 0x91, 0xba, 0x29, 0xcc, 0x62, 0x1c, 0xcf, 0x82, 0xae, 0xbe, 0x1d, 0x10, - 0x49, 0x4a, 0x93, 0x60, 0xf4, 0xcc, 0x07, 0x2e, 0x8f, 0x96, 0xa7, 0x60, - 0x39, 0xed, 0x33, 0x22, 0xeb, 0xc6, 0xe9, 0x07, 0x46, 0x67, 0x4d, 0x53, - 0x46, 0x9f, 0xbe, 0x5f, 0x29, 0x04, 0x33, 0x2e, 0x8f, 0x6a, 0x21, 0x2b, - 0xae, 0x7b, 0xc3, 0x9f, 0x24, 0x0a, 0x13, 0x75, 0x12, 0x42, 0x19, 0x10, - 0x94, 0x32, 0xb7, 0x72, 0x30, 0x17, 0xb0, 0xff, 0x87, 0x27, 0xf0, 0x11, - 0xd5, 0x0c, 0xe6, 0xe4, 0x08, 0x6e, 0xd6, 0xcc, 0x47, 0xc2, 0x0d, 0x3a, - 0x04, 0xf7, 0x0c, 0xc5, 0xb9, 0x33, 0xc4, 0x85, 0xa9, 0x0d, 0xcb, 0xa1, - 0xbb, 0x3c, 0x19, 0xd6, 0xb7, 0xf6, 0x31, 0x6c, 0x1e, 0xdc, 0x49, 0xef, - 0xb7, 0x4c, 0x9c, 0xd7, 0x04, 0x74, 0x3a, 0x63, 0x79, 0x48, 0x7e, 0xf2, - 0x5a, 0xb3, 0x7b, 0x89, 0xca, 0xd0, 0xcb, 0xc1, 0xb7, 0x4c, 0x6d, 0x89, - 0xb5, 0xc2, 0x00, 0xdd, 0x59, 0xd4, 0xfc, 0x07, 0x1f, 0xf6, 0x67, 0x32, - 0x6a, 0x09, 0x39, 0x75, 0x8f, 0x93, 0x75, 0x6f, 0x9e, 0xc7, 0x43, 0x04, - 0x2c, 0x8c, 0xbf, 0xc1, 0xf5, 0x95, 0xe6, 0xfe, 0xc0, 0x0e, 0xe0, 0x0c, - 0x6b, 0xbc, 0x4f, 0x55, 0xa1, 0xaa, 0xc6, 0x85, 0x38, 0x54, 0x30, 0xe7, - 0x71, 0x76, 0x6f, 0xb6, 0x04, 0x3a, 0xdb, 0x2e, 0x3b, 0x0a, 0xdc, 0xeb, - 0x21, 0x3e, 0xd7, 0x6e, 0xc1, 0xae, 0xe0, 0xbd, 0xc1, 0xce, 0x07, 0xdb, - 0xac, 0x51, 0x06, 0xa8, 0x87, 0xbd, 0xae, 0x29, 0xdf, 0x20, 0x70, 0xeb, - 0x0b, 0x68, 0x01, 0xff, 0x3b, 0xdc, 0x02, 0x7a, 0x18, 0xfd, 0xe1, 0x39, - 0x51, 0xa4, 0x68, 0x45, 0x0e, 0xf1, 0x88, 0x88, 0x20, 0x48, 0x65, 0x0b, - 0x5d, 0x69, 0x2a, 0x60, 0x57, 0xa7, 0x0c, 0x22, 0x20, 0x06, 0x71, 0x1c, - 0x32, 0x7e, 0xa7, 0x7b, 0x81, 0xfa, 0xa8, 0xbe, 0xa4, 0x5c, 0x23, 0x6f, - 0xe8, 0x09, 0x09, 0x05, 0x2c, 0xde, 0x55, 0x61, 0x32, 0x19, 0x02, 0x0e, - 0xa4, 0xa2, 0x1d, 0x51, 0xbb, 0x94, 0xad, 0xd9, 0x46, 0xf9, 0xbe, 0x2e, - 0x23, 0x7c, 0x13, 0xc2, 0x2e, 0xe8, 0x4d, 0x5e, 0xc1, 0x9d, 0x03, 0x61, - 0x4d, 0x95, 0x73, 0x67, 0x82, 0x1c, 0x70, 0x21, 0x11, 0x97, 0xae, 0x44, - 0x4c, 0x89, 0x14, 0xb7, 0x7d, 0xa6, 0x24, 0x15, 0x68, 0x1b, 0x25, 0x48, - 0xab, 0xe0, 0x0f, 0x59, 0xea, 0xd3, 0x95, 0xe1, 0x99, 0x3e, 0x50, 0xb2, - 0xc1, 0x04, 0xad, 0x71, 0x06, 0xcf, 0x6b, 0x47, 0x9d, 0xb5, 0xa7, 0xac, - 0x48, 0xf2, 0xb8, 0xff, 0x22, 0x41, 0x6c, 0x63, 0x5f, 0x54, 0x14, 0xd0, - 0x23, 0xa6, 0x18, 0x1d, 0x4a, 0x46, 0x03, 0x83, 0xaf, 0xc8, 0x70, 0xd2, - 0x54, 0x39, 0x14, 0x16, 0x49, 0x0b, 0xfa, 0x2a, 0x5c, 0x11, 0xb6, 0x35, - 0xd2, 0x93, 0x8a, 0x77, 0x1a, 0x7b, 0xe0, 0x6e, 0xd9, 0xe5, 0xcd, 0x90, - 0x18, 0x39, 0xf0, 0x00, 0x1e, 0x38, 0x82, 0x8f, 0xa9, 0x77, 0xf8, 0xa6, - 0xe5, 0xb4, 0xfb, 0x3d, 0xa4, 0x67, 0xff, 0x37, 0x9c, 0x69, 0xd7, 0xdb, - 0x0f, 0x2c, 0xa0, 0x3e, 0x47, 0xf8, 0xef, 0xd2, 0x8c, 0xd2, 0x2b, 0xac, - 0x25, 0xd7, 0x61, 0x73, 0xf3, 0x1b, 0xff, 0x04, 0x1c, 0x38, 0x32, 0x91, - 0x12, 0xd7, 0x09, 0x36, 0x44, 0xf9, 0xc7, 0xbb, 0x9d, 0xd3, 0x3b, 0x55, - 0x85, 0x1e, 0x33, 0x33, 0xe5, 0x5b, 0x04, 0xab, 0x40, 0xa4, 0xc0, 0xa2, - 0xff, 0xef, 0x12, 0xce, 0xf0, 0x82, 0xee, 0x91, 0xad, 0x9b, 0x81, 0xfd, - 0x4f, 0xcb, 0xe5, 0xdd, 0x00, 0xeb, 0x61, 0xba, 0x44, 0x2f, 0x1d, 0x59, - 0x08, 0xf3, 0xea, 0x8b, 0x31, 0xa5, 0xa5, 0x9b, 0xf1, 0x60, 0x94, 0x38, - 0x40, 0xe1, 0x39, 0x58, 0x61, 0xb1, 0xa2, 0xfa, 0xab, 0x8e, 0x38, 0x8b, - 0x8a, 0x76, 0x49, 0x7b, 0x41, 0xe1, 0x7c, 0x7f, 0x56, 0x63, 0x68, 0xec, - 0xaf, 0x4b, 0x48, 0x08, 0x13, 0x68, 0x0c, 0x00, 0x34, 0x3a, 0xdc, 0x21, - 0x07, 0x66, 0xd0, 0x55, 0xae, 0x27, 0xe9, 0x8e, 0x48, 0xf3, 0xe0, 0x2e, - 0x58, 0xf4, 0xf0, 0xbe, 0x0e, 0xf3, 0xe5, 0x25, 0x10, 0xf6, 0x3c, 0x3a, - 0x04, 0x77, 0x42, 0xf9, 0x08, 0x3c, 0xd9, 0x80, 0x3a, 0x98, 0x91, 0x7f, - 0xb9, 0x1d, 0x1e, 0x47, 0x81, 0x59, 0xbc, 0xb5, 0x02, 0xf1, 0xf4, 0xcb, - 0xd8, 0x31, 0x98, 0x0a, 0x8e, 0x13, 0xf5, 0x08, 0xda, 0x8e, 0xe9, 0xc3, - 0x36, 0xf0, 0xfb, 0xee, 0x7c, 0x26, 0x0b, 0x74, 0x3e, 0x3f, 0xd7, 0x94, - 0x8a, 0x3d, 0xf1, 0xf2, 0x0f, 0x32, 0x72, 0x5b, 0x9b, 0x22, 0x93, 0x44, - 0x37, 0x3f, 0xab, 0x02, 0x99, 0x02, 0xcf, 0xf4, 0x78, 0x3b, 0x0e, 0xfd, - 0x71, 0xbb, 0x41, 0xde, 0x42, 0x07, 0x35, 0x1c, 0x8c, 0xd8, 0x66, 0x44, - 0xd8, 0xde, 0x7e, 0xe4, 0xc3, 0xb4, 0x19, 0x9e, 0x13, 0x3b, 0xc9, 0xd3, - 0x3c, 0xd8, 0xec, 0xc9, 0xf4, 0x0f, 0x1a, 0xad, 0x55, 0xd8, 0xfe, 0xd3, - 0x77, 0x10, 0x97, 0xab, 0x54, 0x5f, 0x6c, 0xc3, 0xb0, 0x76, 0x92, 0x4a, - 0x43, 0x54, 0x37, 0xd4, 0xba, 0xc1, 0xb5, 0x73, 0x78, 0xfd, 0xbe, 0x9d, - 0x7e, 0x96, 0xca, 0x55, 0xbc, 0x6b, 0xbc, 0x0c, 0x19, 0x44, 0xe4, 0xaf, - 0xb7, 0xf2, 0x85, 0x3a, 0xee, 0xcd, 0x9f, 0x10, 0xf6, 0xc0, 0xbc, 0x79, - 0x97, 0x9f, 0x3a, 0x73, 0xac, 0xfc, 0x2d, 0xbb, 0x02, 0xc6, 0x4d, 0xe4, - 0x24, 0xfa, 0x47, 0xa5, 0x19, 0x59, 0x89, 0x43, 0xd5, 0xfe, 0xfa, 0x7b, - 0x01, 0xd7, 0xc6, 0x28, 0x6c, 0xb5, 0x0e, 0x5e, 0x17, 0xef, 0xc8, 0xe5, - 0x53, 0x85, 0x6b, 0x86, 0x6e, 0x10, 0xc1, 0xc4, 0xed, 0x10, 0x50, 0x61, - 0x1b, 0x29, 0x3b, 0xd4, 0x92, 0xba, 0x02, 0x33, 0x06, 0xc5, 0x6b, 0x34, - 0xd1, 0x19, 0xfb, 0x70, 0xfd, 0x78, 0x35, 0x8d, 0x01, 0xab, 0xd2, 0x45, - 0x1e, 0xa6, 0xbf, 0xb0, 0x7a, 0xeb, 0x4f, 0x7d, 0xc3, 0x1f, 0x4c, 0xd0, - 0xcf, 0xdf, 0x74, 0xa9, 0x1d, 0x50, 0xb8, 0x25, 0x06, 0x8e, 0x73, 0x5e, - 0xdc, 0x7c, 0xf9, 0x19, 0x40, 0x69, 0x0c, 0x98, 0x5c, 0x23, 0xc1, 0xef, - 0xd2, 0xf5, 0x51, 0xff, 0x9b, 0xdd, 0x70, 0x1d, 0x0d, 0xac, 0x57, 0xe0, - 0xd0, 0x1d, 0x7e, 0xb2, 0x2a, 0xe3, 0x02, 0x70, 0x60, 0x91, 0x77, 0x27, - 0xbf, 0x9e, 0x99, 0xcf, 0x8d, 0x78, 0x8c, 0x3e, 0x07, 0xe0, 0xcc, 0x3a, - 0x6b, 0xdc, 0xeb, 0xaf, 0x35, 0xb8, 0x9c, 0x3e, 0x56, 0x7d, 0xc3, 0xe4, - 0x84, 0xc2, 0x22, 0x5a, 0xfd, 0xcf, 0xa3, 0x9e, 0x24, 0x7d, 0xb5, 0xde, - 0xec, 0x00, 0x5d, 0x47, 0xa2, 0xe8, 0xf4, 0x9e, 0x2f, 0xb8, 0x7a, 0x4a, - 0x3e, 0x9a, 0x36, 0x9a, 0xdd, 0x68, 0x8f, 0xe7, 0xb5, 0xf1, 0x16, 0xcd, - 0x98, 0x80, 0x9c, 0x0f, 0x7c, 0x80, 0xdf, 0xf5, 0xb0, 0x4e, 0x6d, 0x00, - 0x77, 0x55, 0xa2, 0xe4, 0x51, 0xc3, 0x15, 0x4a, 0x18, 0x58, 0xb0, 0x91, - 0x43, 0x86, 0xfa, 0x48, 0x44, 0x33, 0x81, 0x00, 0xd1, 0x99, 0x84, 0x86, - 0x75, 0xa1, 0x26, 0x86, 0x6b, 0x90, 0xe6, 0xf3, 0x4b, 0x78, 0x9f, 0xbf, - 0xcd, 0xd9, 0x5c, 0x5c, 0xf6, 0xd5, 0x2f, 0xb8, 0x65, 0xda, 0xf4, 0x3f, - 0xa6, 0x85, 0xaa, 0x85, 0x01, 0xbd, 0xe4, 0x3e, 0x40, 0x82, 0x68, 0xb2, - 0x0b, 0xeb, 0x36, 0x6c, 0xdb, 0x95, 0x53, 0x48, 0x40, 0xdc, 0xdb, 0x48, - 0xc0, 0x58, 0xf5, 0x8e, 0x5f, 0x9f, 0xe8, 0x17, 0xdf, 0xc0, 0x19, 0x87, - 0x3c, 0x5f, 0xd8, 0x9d, 0x8d, 0xa9, 0x32, 0xb0, 0x89, 0xbe, 0xf9, 0xf2, - 0xeb, 0xa5, 0x02, 0x01, 0x8e, 0x78, 0x60, 0xc0, 0x59, 0x5a, 0xff, 0x80, - 0x0b, 0x1e, 0x7c, 0x3b, 0xc2, 0xfa, 0x28, 0xb2, 0x13, 0xd4, 0xc4, 0x48, - 0x20, 0x7b, 0xfe, 0x6c, 0xf3, 0xcf, 0xa1, 0x3b, 0x1d, 0x55, 0xd5, 0x7e, - 0x89, 0xd3, 0xf1, 0xdb, 0xe4, 0x08, 0xc2, 0xf3, 0xce, 0x74, 0x7b, 0xc4, - 0x49, 0x6d, 0x71, 0x24, 0xc3, 0xdb, 0x50, 0x3a, 0x05, 0xaa, 0x0e, 0xff, - 0x4a, 0x73, 0xa0, 0x6f, 0x00, 0xcd, 0x36, 0xe7, 0x64, 0x50, 0x04, 0xed, - 0x38, 0x75, 0x6f, 0xe1, 0x7a, 0x49, 0x08, 0x88, 0xef, 0x85, 0xa3, 0x69, - 0x5d, 0x15, 0xcd, 0x20, 0x2e, 0xff, 0xc1, 0x02, 0x3e, 0x0c, 0x26, 0x14, - 0x6a, 0xfc, 0xbe, 0xa2, 0x9c, 0x81, 0x31, 0xc0, 0x94, 0xb9, 0x33, 0xb8, - 0x5c, 0x8f, 0xaf, 0x35, 0x7d, 0x35, 0x30, 0x38, 0x64, 0x57, 0xa6, 0xc2, - 0x14, 0x6e, 0x6c, 0xad, 0x0c, 0xf7, 0x23, 0xd1, 0x22, 0x1e, 0xce, 0x86, - 0xce, 0x7a, 0xff, 0x99, 0xd4, 0x21, 0x6e, 0x67, 0x6b, 0xc4, 0x5b, 0xfa, - 0x7d, 0x0b, 0x5d, 0x0c, 0x3f, 0x2e, 0x57, 0x9d, 0x0f, 0x7f, 0x30, 0x30, - 0x68, 0xfc, 0x92, 0x2e, 0x1a, 0x1e, 0x17, 0x8d, 0x45, 0xfc, 0xe1, 0x23, - 0x7d, 0x84, 0x6e, 0x92, 0xd7, 0x7c, 0x45, 0x3c, 0x07, 0x55, 0x1a, 0xe5, - 0xf9, 0xfb, 0x3c, 0xb2, 0xbd, 0x0f, 0x76, 0xf6, 0xe0, 0x32, 0xfe, 0xd2, - 0x8a, 0x4b, 0x41, 0x04, 0x27, 0x68, 0x56, 0x60, 0x91, 0xa5, 0x16, 0x0b, - 0x2c, 0xb3, 0x0a, 0xf9, 0x4d, 0x68, 0xd8, 0x1a, 0x88, 0x38, 0x82, 0x1b, - 0xf0, 0x8c, 0x52, 0x06, 0x37, 0x4f, 0x93, 0x66, 0x3f, 0x88, 0xd9, 0xf5, - 0x42, 0xdf, 0x5d, 0xab, 0xf3, 0xef, 0x62, 0xf3, 0x38, 0x95, 0xcb, 0xf1, - 0xfd, 0xdf, 0xc6, 0xdf, 0xa6, 0x32, 0x59, 0xcb, 0xe5, 0x6a, 0xf1, 0x3d, - 0x99, 0x4c, 0x27, 0xf2, 0xeb, 0xab, 0xc4, 0x5b, 0xf7, 0x8b, 0xe5, 0xeb, - 0x2a, 0xf9, 0xf6, 0xb8, 0x91, 0x8f, 0x8b, 0xd9, 0x64, 0xba, 0x92, 0xe3, - 0xf9, 0x04, 0x2e, 0xce, 0x37, 0xab, 0xe4, 0xeb, 0xf3, 0x66, 0xb1, 0x5a, - 0xcb, 0x4f, 0xe3, 0xb5, 0x48, 0xd6, 0x3f, 0xd1, 0x8d, 0x97, 0x64, 0xf3, - 0xb8, 0x78, 0xde, 0xc0, 0xdf, 0xaf, 0x72, 0xfa, 0xc7, 0x72, 0x35, 0x5d, - 0xaf, 0xe5, 0x62, 0x25, 0x93, 0xa7, 0xe5, 0x2c, 0x01, 0x99, 0x2f, 0xe3, - 0xd5, 0x6a, 0x3c, 0xdf, 0x24, 0xd3, 0xf5, 0x1d, 0x09, 0x0f, 0xd7, 0x45, - 0x7b, 0x5d, 0x2e, 0x1e, 0xe4, 0xd3, 0x74, 0x75, 0xff, 0x08, 0x3f, 0xc7, - 0x5f, 0x93, 0x59, 0xb2, 0x79, 0x1d, 0xc9, 0x87, 0x64, 0x33, 0x47, 0x49, - 0x0f, 0x20, 0x6a, 0x0c, 0xca, 0xae, 0x36, 0xc9, 0xfd, 0xf3, 0x6c, 0xbc, - 0x92, 0xcb, 0xe7, 0xd5, 0x72, 0xb1, 0x9e, 0x8e, 0xe0, 0x0c, 0x31, 0x5f, - 0xcc, 0x3f, 0x27, 0xf3, 0x87, 0x55, 0x32, 0xff, 0x36, 0x7d, 0x9a, 0xce, - 0x41, 0x87, 0xd5, 0x54, 0x4e, 0x92, 0xf5, 0xfd, 0x6c, 0x9c, 0x3c, 0xc1, - 0xd9, 0x9b, 0x05, 0x1d, 0x39, 0xfd, 0x63, 0x83, 0x37, 0x97, 0xd3, 0xd5, - 0x53, 0xb2, 0xd9, 0xb0, 0x9d, 0xaf, 0x8b, 0xe7, 0x95, 0x9c, 0x2d, 0xee, - 0xc7, 0x33, 0x31, 0x1b, 0xbf, 0xdc, 0xc9, 0xe7, 0xf9, 0x0c, 0x8f, 0x5b, - 0x4d, 0xff, 0xfe, 0x9c, 0xac, 0xf8, 0x11, 0xb8, 0x3e, 0x92, 0xf3, 0xc5, - 0xb5, 0x3b, 0x40, 0xa5, 0x8e, 0x37, 0xc0, 0x01, 0xb3, 0x99, 0xf8, 0x3a, - 0x95, 0xb3, 0x64, 0xfc, 0x75, 0x36, 0x65, 0x8d, 0xc1, 0x17, 0x13, 0x90, - 0x73, 0xbf, 0x19, 0xc9, 0x64, 0xde, 0xfe, 0x75, 0x0f, 0x6e, 0x06, 0x23, - 0x67, 0xa3, 0x20, 0x63, 0x0d, 0xc7, 0xc1, 0x85, 0x04, 0xb4, 0x98, 0x8c, - 0x9f, 0x20, 0x1c, 0x6b, 0x30, 0x21, 0x59, 0x83, 0x3d, 0xf0, 0x30, 0x49, - 0x79, 0x19, 0xbf, 0x4a, 0xf4, 0x2e, 0xf8, 0x08, 0x4d, 0x79, 0x5e, 0x4f, - 0xe3, 0x9f, 0x21, 0x80, 0x23, 0x39, 0xfd, 0x3e, 0x9d, 0xcb, 0xe4, 0x41, - 0x8c, 0x27, 0xdf, 0x93, 0x35, 0xa8, 0x1e, 0xef, 0x2f, 0xd6, 0xeb, 0x84, - 0xdd, 0x89, 0x97, 0xd6, 0xcf, 0xf7, 0x8f, 0x92, 0x0f, 0xb9, 0xfb, 0x77, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xaf, 0x26, 0x8b, 0xf2, 0xb7, 0x22, 0x00, - 0x00, - }, - "conf/license/Artistic License 2.0", - ) -} - -func conf_license_bsd_3_clause_license() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x94, 0x52, - 0xcd, 0x6e, 0xe3, 0x36, 0x10, 0xbe, 0xeb, 0x29, 0x06, 0x7b, 0xda, 0x14, - 0x42, 0xfa, 0x83, 0x9e, 0xda, 0x13, 0x2d, 0x31, 0x36, 0x01, 0x59, 0x52, - 0x49, 0x2a, 0x5e, 0x1f, 0x15, 0x89, 0x4e, 0x08, 0x58, 0x62, 0x40, 0xd1, - 0x09, 0xd2, 0xa2, 0xef, 0xde, 0x8f, 0xb4, 0x83, 0x78, 0xdb, 0x45, 0x8b, - 0x5e, 0x6c, 0x8a, 0xc3, 0xf9, 0xfe, 0x66, 0x0a, 0xf7, 0xfc, 0xe6, 0xed, - 0xe3, 0x53, 0xa0, 0xcf, 0xc3, 0x0d, 0xfd, 0xf4, 0xc3, 0x8f, 0x3f, 0x67, - 0xec, 0x78, 0xa4, 0x74, 0xb5, 0x90, 0x37, 0x8b, 0xf1, 0x2f, 0x66, 0xbc, - 0xcd, 0x32, 0x69, 0x46, 0xbb, 0x04, 0x6f, 0x1f, 0x4e, 0xc1, 0xba, 0x99, - 0xfa, 0x79, 0xa4, 0xd3, 0x62, 0xc8, 0xce, 0xb4, 0xb8, 0x93, 0x1f, 0x4c, - 0xba, 0x79, 0xb0, 0x73, 0xef, 0xdf, 0xe8, 0xe0, 0xfc, 0xb4, 0xe4, 0xf4, - 0x6a, 0xc3, 0x13, 0x39, 0x9f, 0xfe, 0xdd, 0x29, 0x64, 0x93, 0x1b, 0xed, - 0xc1, 0x0e, 0x7d, 0x04, 0xc8, 0xa9, 0xf7, 0x86, 0x9e, 0x8d, 0x9f, 0x6c, - 0x08, 0x66, 0xa4, 0x67, 0xef, 0x5e, 0xec, 0x88, 0x43, 0x78, 0xea, 0x03, - 0x7e, 0x0c, 0x40, 0x8e, 0x47, 0xf7, 0x6a, 0xe7, 0x47, 0x1a, 0xdc, 0x3c, - 0xda, 0xd8, 0xb4, 0xa4, 0xa6, 0xc9, 0x84, 0x5f, 0xb2, 0xec, 0x3b, 0xfa, - 0x5a, 0xd1, 0x42, 0xee, 0xf0, 0x2e, 0x65, 0x70, 0x23, 0x9e, 0x9d, 0x96, - 0x00, 0x03, 0xa1, 0x87, 0xc4, 0x88, 0xd7, 0x3f, 0xb8, 0x97, 0x58, 0x7a, - 0xf7, 0x3b, 0xbb, 0x60, 0x07, 0x93, 0xa3, 0x66, 0x97, 0x8c, 0xe8, 0x08, - 0xac, 0x08, 0x71, 0x4d, 0x36, 0x8f, 0x7f, 0x53, 0x02, 0xc2, 0xe1, 0xd8, - 0xdb, 0xc9, 0xf8, 0xdb, 0x6f, 0x29, 0x00, 0xd3, 0x55, 0x02, 0xef, 0x0a, - 0x60, 0x6d, 0x3c, 0x41, 0xd5, 0xbf, 0x88, 0x00, 0x7f, 0x94, 0xf1, 0x7f, - 0x45, 0xd0, 0xc5, 0xda, 0xe8, 0x86, 0xd3, 0x64, 0xe6, 0x90, 0x92, 0x05, - 0x16, 0x7a, 0xbe, 0x47, 0xee, 0x0e, 0x35, 0x4f, 0x53, 0x1f, 0x8c, 0xb7, - 0xfd, 0x71, 0xf9, 0xc8, 0x38, 0x0d, 0x26, 0x35, 0x5e, 0xc9, 0x4f, 0x8e, - 0x6a, 0x63, 0x53, 0x53, 0x2c, 0xce, 0xfd, 0x64, 0xa2, 0x98, 0x78, 0xfe, - 0xc3, 0xf9, 0xc7, 0x7e, 0xb6, 0xbf, 0x27, 0x86, 0x3f, 0x21, 0xfb, 0xe3, - 0x49, 0x0a, 0xde, 0x86, 0x98, 0x21, 0x64, 0x9f, 0xe1, 0x9c, 0x5f, 0xc0, - 0xfb, 0x46, 0x0f, 0x26, 0x2e, 0x09, 0x0c, 0x38, 0x32, 0xf3, 0x88, 0x5b, - 0x13, 0xf7, 0x01, 0x3a, 0x26, 0x17, 0x0c, 0x9d, 0x83, 0xc1, 0x9a, 0x8d, - 0x10, 0x88, 0x2d, 0xa3, 0x03, 0x0a, 0xef, 0x51, 0x2c, 0xee, 0x10, 0x5e, - 0xe3, 0xb8, 0x2f, 0xdb, 0x43, 0xcb, 0xb3, 0x19, 0xe2, 0xfa, 0xa0, 0xcd, - 0xc6, 0xa5, 0xf2, 0x71, 0x71, 0xe6, 0xf3, 0x0a, 0x2d, 0xcb, 0xd9, 0x80, - 0xde, 0x08, 0x45, 0xaa, 0xb9, 0xd3, 0x3b, 0x26, 0x39, 0xe1, 0xdc, 0xca, - 0xe6, 0x5e, 0x94, 0xbc, 0xa4, 0xd5, 0x9e, 0xf4, 0x86, 0x53, 0xd1, 0xb4, - 0x7b, 0x29, 0xd6, 0x1b, 0x4d, 0x9b, 0xa6, 0x2a, 0xb9, 0x54, 0xc4, 0xea, - 0x12, 0xb7, 0xb5, 0x96, 0x62, 0xd5, 0xe9, 0x06, 0x17, 0x9f, 0x98, 0x42, - 0xe7, 0xa7, 0x2c, 0x16, 0x58, 0xbd, 0x27, 0xfe, 0xa5, 0x95, 0x5c, 0x29, - 0x6a, 0x24, 0x89, 0x6d, 0x5b, 0x09, 0x80, 0x01, 0x5d, 0xb2, 0x5a, 0x0b, - 0xae, 0x72, 0x12, 0x75, 0x51, 0x75, 0xa5, 0xa8, 0xd7, 0x39, 0x01, 0x80, - 0xea, 0x46, 0x53, 0x25, 0xb6, 0x42, 0xe3, 0x99, 0x6e, 0xf2, 0x48, 0x9a, - 0xfd, 0xb3, 0x8d, 0x9a, 0x3b, 0xda, 0x72, 0x59, 0x6c, 0xf0, 0xc9, 0x56, - 0xa2, 0x12, 0x7a, 0x9f, 0x84, 0xdc, 0x09, 0x5d, 0x47, 0xae, 0x3b, 0x90, - 0x31, 0x6a, 0x99, 0xd4, 0xa2, 0xe8, 0x2a, 0x26, 0xa9, 0xed, 0x64, 0xdb, - 0x28, 0x4e, 0xb0, 0x95, 0x95, 0x42, 0x15, 0x15, 0x13, 0x5b, 0x5e, 0xde, - 0x82, 0x1d, 0x8c, 0xc4, 0xef, 0x79, 0xad, 0x49, 0x6d, 0x58, 0x55, 0x7d, - 0xd3, 0x65, 0xd4, 0xfe, 0x95, 0xc7, 0x15, 0x87, 0x48, 0xb6, 0xaa, 0x78, - 0x96, 0x98, 0xe0, 0xb2, 0x14, 0x92, 0x17, 0x3a, 0xda, 0xf9, 0x38, 0x15, - 0x48, 0x0e, 0xfa, 0xaa, 0x9c, 0x54, 0xcb, 0x0b, 0x11, 0x0f, 0xfc, 0x0b, - 0x87, 0x19, 0x26, 0xf7, 0xf9, 0x05, 0x53, 0xf1, 0xdf, 0x3a, 0x3c, 0x42, - 0x31, 0x2b, 0xd9, 0x96, 0xad, 0xe1, 0xed, 0xf3, 0x7f, 0x44, 0x82, 0x99, - 0x14, 0x9d, 0xe4, 0xdb, 0xa8, 0x19, 0x39, 0xa8, 0x6e, 0xa5, 0xb4, 0xd0, - 0x9d, 0xe6, 0xb4, 0x6e, 0x9a, 0x32, 0x06, 0x9d, 0x29, 0x2e, 0xef, 0x45, - 0xc1, 0xd5, 0xaf, 0x54, 0x35, 0x2a, 0xa5, 0xd5, 0x29, 0x9e, 0x53, 0xc9, - 0x34, 0x4b, 0xc4, 0x80, 0x40, 0x54, 0x28, 0xe3, 0xbc, 0xea, 0x94, 0x48, - 0xa1, 0x89, 0x5a, 0x73, 0x29, 0xbb, 0x56, 0x8b, 0xa6, 0xbe, 0x81, 0xf3, - 0x1d, 0x62, 0x91, 0x59, 0xc1, 0xd0, 0x5a, 0xa6, 0x74, 0x9b, 0x3a, 0x59, - 0x45, 0x42, 0x8d, 0xdc, 0x47, 0xd0, 0x98, 0x41, 0x0a, 0x3f, 0xa7, 0xdd, - 0x86, 0xe3, 0x5e, 0xc6, 0x40, 0x53, 0x52, 0x2c, 0x46, 0xa0, 0x90, 0x58, - 0xa1, 0xaf, 0x9e, 0x65, 0xe0, 0x43, 0x80, 0xfa, 0xca, 0x23, 0xd5, 0x7c, - 0x5d, 0x89, 0x35, 0xaf, 0x0b, 0x1e, 0xd5, 0x34, 0x11, 0x65, 0x27, 0x14, - 0xbf, 0xc1, 0xac, 0x84, 0x8a, 0x0f, 0xc4, 0x99, 0x76, 0xc7, 0xc0, 0xd9, - 0x25, 0xcb, 0x71, 0x46, 0x50, 0x95, 0xa5, 0xe3, 0xd5, 0xc6, 0xe6, 0x69, - 0x92, 0x24, 0xee, 0x88, 0x95, 0xf7, 0x22, 0xca, 0xbe, 0x3c, 0xc6, 0xec, - 0x95, 0xb8, 0xec, 0x49, 0x8a, 0xac, 0xd8, 0xd0, 0x39, 0xee, 0xdb, 0xbf, - 0x02, 0x00, 0x00, 0xff, 0xff, 0x84, 0xcd, 0xba, 0x22, 0xc1, 0x05, 0x00, - 0x00, - }, - "conf/license/BSD (3-Clause) License", - ) -} - -func conf_license_gpl_v2() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x9c, 0x7c, - 0x6d, 0x73, 0xdb, 0xc8, 0x91, 0xff, 0xfb, 0xf9, 0x14, 0x53, 0x7a, 0x63, - 0xa9, 0x8a, 0xa6, 0xd7, 0xce, 0x3f, 0xf9, 0x67, 0x57, 0x57, 0x57, 0x45, - 0x49, 0x94, 0xc5, 0x44, 0xa6, 0x14, 0x92, 0xb2, 0xa3, 0x77, 0x01, 0xc9, - 0xa1, 0x88, 0x18, 0x04, 0x78, 0x18, 0x40, 0x5a, 0x56, 0x2a, 0xdf, 0xfd, - 0xfa, 0xd7, 0xdd, 0x03, 0x0c, 0xf8, 0xe0, 0xdd, 0x4b, 0xea, 0xf6, 0x76, - 0x4d, 0x00, 0x33, 0x3d, 0xfd, 0xf8, 0xeb, 0x87, 0xf1, 0xe7, 0xf1, 0x93, - 0xfd, 0x3c, 0x1c, 0x0f, 0x27, 0x83, 0x7b, 0xfb, 0xf8, 0x74, 0x75, 0x3f, - 0xba, 0xb6, 0xf4, 0xcf, 0x70, 0x3c, 0x1d, 0x1a, 0x7b, 0xfc, 0x7f, 0x5f, - 0x5d, 0xe9, 0xd3, 0x22, 0xb7, 0x9f, 0x7a, 0xf6, 0x2f, 0x75, 0xee, 0xec, - 0xc7, 0x9f, 0x7f, 0xfe, 0x68, 0x8c, 0xbd, 0x2e, 0xb6, 0xbb, 0x32, 0x7d, - 0x59, 0x57, 0xf6, 0xfc, 0xfa, 0x82, 0x7e, 0xfc, 0xf3, 0xcf, 0x3d, 0x7e, - 0x64, 0x6f, 0x4b, 0xe7, 0xec, 0xb4, 0x58, 0x55, 0x6f, 0x49, 0xe9, 0xec, - 0x6d, 0x51, 0xe7, 0xcb, 0xa4, 0xa2, 0x05, 0x7a, 0x76, 0x94, 0x2f, 0xfa, - 0x3d, 0xfb, 0x5f, 0xeb, 0xaa, 0xda, 0xfe, 0xf2, 0xe1, 0xc3, 0xca, 0xaf, - 0xfa, 0x45, 0xf9, 0xf2, 0xe1, 0xbf, 0x8d, 0xfd, 0x23, 0xbe, 0x4a, 0xf2, - 0xef, 0x59, 0x9a, 0xdb, 0x69, 0x45, 0xdf, 0x57, 0x3d, 0x7b, 0x9b, 0xae, - 0xaa, 0xb5, 0xbd, 0xcd, 0x8a, 0xa2, 0xec, 0xd9, 0xab, 0xc2, 0x57, 0x58, - 0xe1, 0xcb, 0xc0, 0xfe, 0xf4, 0xe9, 0xe3, 0xc7, 0x9f, 0xde, 0x7f, 0xfc, - 0xc3, 0x4f, 0x1f, 0xed, 0xd3, 0x74, 0x60, 0xec, 0xf0, 0xd5, 0x95, 0xbb, - 0x82, 0xe8, 0x4a, 0xbd, 0xdd, 0xba, 0x72, 0x93, 0x56, 0x95, 0x5b, 0xda, - 0xaa, 0xb0, 0x0b, 0x22, 0xd0, 0x26, 0xf9, 0xd2, 0x2e, 0x53, 0x5f, 0x95, - 0xe9, 0xbc, 0xae, 0x9c, 0xa5, 0x77, 0xe7, 0x44, 0xcc, 0x06, 0x0f, 0x53, - 0xe7, 0x8d, 0x2d, 0x56, 0xb6, 0x5a, 0xd3, 0x97, 0x59, 0xba, 0x70, 0xb9, - 0x77, 0x76, 0x59, 0x2c, 0xea, 0x8d, 0xcb, 0x69, 0x7f, 0x7a, 0xdf, 0x2e, - 0xd6, 0x49, 0xfe, 0x92, 0xe6, 0x2f, 0x36, 0xad, 0xb0, 0x7c, 0x5e, 0x54, - 0x36, 0xc9, 0xb2, 0xe2, 0xcd, 0x2d, 0xfb, 0xe6, 0x14, 0xbb, 0xf8, 0x7f, - 0x8f, 0xa5, 0x4b, 0x36, 0xf3, 0xcc, 0xe1, 0xad, 0xd9, 0xda, 0x85, 0xe5, - 0xbd, 0x5d, 0x15, 0xa5, 0xdd, 0xd0, 0x61, 0xac, 0x0f, 0x0c, 0xc2, 0x3f, - 0x4b, 0xe7, 0xd3, 0x97, 0x5c, 0xc8, 0xae, 0x92, 0xef, 0xf4, 0xe3, 0x5b, - 0xb2, 0xb3, 0xbb, 0xa2, 0x2e, 0xcd, 0x8a, 0xb8, 0xb1, 0x2c, 0x36, 0x78, - 0xe2, 0xd7, 0xfc, 0x3e, 0x9d, 0x88, 0xe9, 0xa2, 0x13, 0x57, 0x7d, 0x6b, - 0xaf, 0x76, 0x74, 0x98, 0xbc, 0x2a, 0x13, 0x4f, 0x44, 0x57, 0xb4, 0x17, - 0x4b, 0xd8, 0xe5, 0xae, 0x4c, 0x32, 0xfb, 0x58, 0xcf, 0x69, 0x6b, 0x73, - 0xaf, 0xa7, 0xa3, 0x33, 0xa4, 0x79, 0xe5, 0xf2, 0xa5, 0x6c, 0xf5, 0x52, - 0x27, 0xc4, 0xf5, 0x8a, 0xc4, 0x85, 0xad, 0xec, 0x8f, 0xb6, 0xc2, 0x33, - 0x13, 0x68, 0x7e, 0xff, 0x9e, 0x5e, 0xd9, 0x80, 0x4e, 0x5f, 0xd3, 0x6b, - 0xd8, 0xb4, 0x39, 0x0e, 0x6d, 0x81, 0x77, 0xf9, 0xa0, 0xc4, 0x2b, 0xa2, - 0xd1, 0xdb, 0xda, 0x93, 0x0a, 0xf5, 0xc1, 0x89, 0xd4, 0x9b, 0x2e, 0x69, - 0x36, 0x90, 0x96, 0x6c, 0xb7, 0x19, 0x49, 0x04, 0x9b, 0x33, 0x7f, 0x58, - 0x30, 0xae, 0xab, 0x4c, 0xa6, 0x55, 0xa6, 0x77, 0x3e, 0xe2, 0x60, 0xce, - 0xa7, 0x49, 0xf2, 0x9d, 0x2d, 0xe8, 0x9b, 0xd2, 0x6e, 0xcb, 0xe2, 0xa5, - 0x4c, 0x36, 0xf6, 0x6d, 0x5d, 0x60, 0xe5, 0xba, 0x5a, 0x17, 0xa5, 0x27, - 0x2e, 0x6d, 0x48, 0x39, 0xe8, 0x4d, 0x53, 0x7b, 0x91, 0x29, 0x91, 0x74, - 0x3e, 0x2d, 0x36, 0x4e, 0x3f, 0x3b, 0xa5, 0xb8, 0x9d, 0xc3, 0x2d, 0x0a, - 0xd2, 0x21, 0x62, 0xdf, 0x7c, 0x67, 0x02, 0xb3, 0xef, 0x9d, 0xa7, 0x03, - 0xda, 0x13, 0x07, 0x4b, 0x73, 0x5f, 0xb9, 0x64, 0xd9, 0xbf, 0xb0, 0xf6, - 0xb9, 0xa8, 0xed, 0x22, 0xc9, 0xf9, 0xac, 0x3b, 0x2b, 0xb4, 0x30, 0xe7, - 0x95, 0x60, 0x4f, 0x02, 0x2c, 0x0a, 0x56, 0xad, 0x6f, 0x6b, 0x97, 0xdb, - 0x37, 0xe2, 0xeb, 0xd6, 0x25, 0xdf, 0xc1, 0x0c, 0x66, 0x6a, 0x20, 0xa4, - 0x87, 0x47, 0x20, 0xa8, 0x74, 0x2b, 0x57, 0x96, 0x38, 0x0d, 0x31, 0x40, - 0xe5, 0xd7, 0x83, 0x9e, 0x9a, 0x6d, 0x49, 0xfb, 0xd3, 0x01, 0x1f, 0xea, - 0x53, 0x94, 0xf9, 0x03, 0xd5, 0x8b, 0x45, 0x9a, 0x54, 0x50, 0x0a, 0xb3, - 0x4e, 0x5e, 0x45, 0xc0, 0x91, 0x72, 0x44, 0xf6, 0x24, 0x66, 0x74, 0x40, - 0x9f, 0x3d, 0x57, 0xd5, 0x29, 0x5f, 0x58, 0x13, 0x0c, 0xdb, 0x18, 0x31, - 0xe9, 0x95, 0xb6, 0xb6, 0xe9, 0x0a, 0x4b, 0xdb, 0xb7, 0xd4, 0xaf, 0x2f, - 0x7a, 0xcd, 0x56, 0x74, 0x96, 0x85, 0x4b, 0x5f, 0xb1, 0x48, 0x5d, 0x2e, - 0xb0, 0xf4, 0x92, 0x04, 0x53, 0x32, 0xc3, 0x5e, 0x1c, 0xd9, 0x5f, 0x65, - 0xc2, 0x87, 0xa4, 0xb3, 0xf4, 0xc7, 0xe8, 0x53, 0xbc, 0xa3, 0x8a, 0xda, - 0x51, 0x46, 0xfa, 0x9c, 0x74, 0xcf, 0x12, 0x8d, 0x0b, 0xa1, 0x12, 0x8b, - 0xe4, 0x36, 0x77, 0x6f, 0x42, 0x6f, 0xe0, 0xfb, 0xa5, 0xe8, 0x50, 0x58, - 0xee, 0x7b, 0x5e, 0xbc, 0x35, 0xeb, 0x2e, 0x0b, 0xac, 0xe9, 0xb1, 0x32, - 0xf1, 0xd9, 0xb3, 0x74, 0x66, 0x05, 0x3e, 0xad, 0xdc, 0xa2, 0x12, 0xcb, - 0x61, 0x3f, 0xe8, 0x59, 0x2a, 0xb9, 0x8b, 0x78, 0x59, 0x3a, 0x70, 0x6a, - 0x01, 0x25, 0xf2, 0xb2, 0x3c, 0x31, 0x63, 0x9e, 0x2e, 0x0d, 0xe9, 0x2a, - 0x5c, 0x16, 0x98, 0xe9, 0x72, 0xb6, 0x74, 0xdd, 0x44, 0x56, 0x02, 0xe1, - 0xd0, 0x68, 0xff, 0x5d, 0x1e, 0x15, 0x90, 0x4a, 0x09, 0xbb, 0x2d, 0xf9, - 0x80, 0xf2, 0x56, 0xdf, 0xcc, 0xe4, 0x9b, 0xce, 0x2e, 0x64, 0xd1, 0x3e, - 0x4b, 0x2a, 0x5e, 0x7c, 0xe1, 0xca, 0x2a, 0xa1, 0x03, 0xd3, 0x1b, 0x5b, - 0x7a, 0x98, 0xce, 0xd3, 0x2c, 0xad, 0x52, 0x75, 0x43, 0x58, 0x59, 0x38, - 0x6a, 0x8e, 0x4a, 0x34, 0xe6, 0x64, 0x0f, 0x14, 0x29, 0xfb, 0x37, 0xc5, - 0x32, 0x5d, 0x41, 0x7d, 0x99, 0x15, 0xb7, 0xf4, 0xc0, 0xfd, 0x9a, 0x6c, - 0xb6, 0x19, 0xbd, 0xa4, 0x6f, 0x1c, 0x5d, 0xce, 0xd7, 0x8b, 0xb5, 0x4d, - 0x02, 0xcb, 0x89, 0x57, 0x6b, 0x07, 0xab, 0x33, 0xf4, 0xa7, 0x2a, 0xe5, - 0x13, 0xb3, 0xcb, 0xb0, 0x2b, 0x47, 0x0b, 0xf1, 0x3e, 0x35, 0xb9, 0x81, - 0x97, 0x54, 0xf5, 0x8f, 0xb4, 0x23, 0xa5, 0xa5, 0x72, 0x62, 0x0e, 0xdc, - 0x4a, 0xcb, 0x05, 0xe6, 0x2b, 0xcc, 0xc8, 0x42, 0x57, 0xfb, 0x62, 0x65, - 0xfc, 0xed, 0x9e, 0x3a, 0xd3, 0x27, 0x3b, 0x36, 0xb0, 0x5e, 0xa3, 0x6a, - 0x91, 0x7a, 0xd1, 0x53, 0x13, 0x69, 0x1e, 0xad, 0x33, 0x20, 0x95, 0x68, - 0xe8, 0xf0, 0x6b, 0x52, 0x09, 0x7a, 0x67, 0x13, 0x94, 0x81, 0x22, 0x0d, - 0x5c, 0x10, 0xaf, 0x2a, 0x0a, 0x43, 0xff, 0x95, 0x96, 0x26, 0x88, 0x06, - 0x36, 0xec, 0x8e, 0x69, 0x09, 0xe9, 0x3d, 0xc5, 0xb5, 0xea, 0x8d, 0x64, - 0x5a, 0xb9, 0xad, 0xff, 0xc5, 0x9e, 0x7f, 0xbc, 0xe0, 0x58, 0x25, 0xc1, - 0xb4, 0xcb, 0x75, 0x52, 0x4b, 0x73, 0xfe, 0xe9, 0x82, 0xf8, 0x47, 0x76, - 0xae, 0x6a, 0x12, 0x45, 0xab, 0xb7, 0x75, 0x4a, 0x4c, 0x05, 0x8f, 0x3c, - 0x3f, 0xcc, 0xdc, 0x0b, 0x99, 0x39, 0x47, 0x41, 0xcf, 0x31, 0x5b, 0xc3, - 0x60, 0x2f, 0x96, 0x30, 0xad, 0xf9, 0x81, 0xa3, 0x10, 0x8b, 0x31, 0xde, - 0x8f, 0xa9, 0x1e, 0x64, 0x9e, 0x38, 0x04, 0x59, 0xb8, 0x04, 0x12, 0x63, - 0xef, 0x49, 0xee, 0x56, 0x8f, 0x82, 0x55, 0x61, 0x2c, 0x74, 0x20, 0x51, - 0x78, 0xb6, 0xc6, 0xa0, 0xf0, 0xaa, 0x70, 0x86, 0x19, 0xee, 0x42, 0x64, - 0xae, 0xa1, 0xb8, 0xbe, 0xa2, 0xcf, 0x7c, 0x23, 0x0a, 0xf1, 0xa6, 0x79, - 0x41, 0xdf, 0x97, 0x08, 0x42, 0x3b, 0xde, 0x92, 0x4f, 0xd7, 0x89, 0x35, - 0x24, 0x88, 0xd1, 0xea, 0x20, 0xc4, 0x30, 0xf1, 0x29, 0xbb, 0x61, 0xfa, - 0x7d, 0xe3, 0xb0, 0x8b, 0xcb, 0xbc, 0xc4, 0x82, 0x6d, 0x42, 0xfe, 0x98, - 0x28, 0xcc, 0x41, 0x9f, 0x51, 0x6f, 0xe1, 0x63, 0x0d, 0x22, 0x72, 0x55, - 0x64, 0x44, 0xcc, 0x5b, 0x50, 0x0e, 0x56, 0xa0, 0x10, 0xe7, 0xb1, 0x63, - 0x41, 0x22, 0x49, 0xf3, 0x24, 0xeb, 0xd1, 0x1e, 0x72, 0x24, 0xc4, 0x18, - 0x62, 0x04, 0x45, 0xf6, 0x0d, 0x87, 0xd2, 0xb2, 0x58, 0xd6, 0x0b, 0x21, - 0x83, 0x63, 0x08, 0xa4, 0x4b, 0xda, 0x89, 0x05, 0xc8, 0x35, 0x67, 0x10, - 0x3d, 0xa4, 0x10, 0xad, 0x65, 0x34, 0x1c, 0xbd, 0xa3, 0x17, 0xb6, 0x75, - 0xc5, 0x01, 0x46, 0xd4, 0xe5, 0x16, 0x8f, 0xb3, 0x5d, 0x8f, 0x37, 0x89, - 0xdd, 0x13, 0x48, 0xaa, 0xd6, 0x84, 0x28, 0x28, 0x72, 0xd3, 0x5e, 0x14, - 0xed, 0xc1, 0xcb, 0x8a, 0x42, 0x08, 0x9f, 0x5e, 0x63, 0xe3, 0x16, 0x8f, - 0x2b, 0x84, 0x59, 0xd2, 0x3b, 0xf8, 0x56, 0xf6, 0x20, 0xaf, 0x45, 0xba, - 0xe4, 0xfd, 0x97, 0xf0, 0x8e, 0xa5, 0x9c, 0x98, 0xe2, 0x57, 0x50, 0x07, - 0x04, 0x46, 0x32, 0xce, 0x44, 0x98, 0xde, 0x04, 0x4e, 0x1c, 0x22, 0xcd, - 0x97, 0xe9, 0x6b, 0xba, 0xac, 0x41, 0x94, 0x2d, 0xe6, 0xec, 0x48, 0x64, - 0x93, 0x06, 0xce, 0x90, 0xc5, 0xe7, 0xd6, 0x91, 0x6e, 0x2e, 0xd8, 0xda, - 0x38, 0x0e, 0xad, 0xdb, 0x65, 0xe8, 0xdf, 0x14, 0x86, 0x5c, 0x95, 0x94, - 0xbb, 0xbe, 0x3a, 0x4d, 0xd2, 0x09, 0xa8, 0x0b, 0x89, 0x99, 0x95, 0x87, - 0x39, 0xbe, 0x49, 0x96, 0xc0, 0x32, 0x76, 0x91, 0xb9, 0x44, 0x29, 0x24, - 0x16, 0xe8, 0x81, 0xc4, 0xfc, 0xe6, 0x0d, 0x84, 0x5a, 0x8a, 0x6a, 0xaa, - 0x6a, 0xbd, 0x53, 0xb4, 0x01, 0x2f, 0x4f, 0x3f, 0x83, 0xef, 0xcd, 0x7b, - 0x09, 0x83, 0xb5, 0x7e, 0x80, 0x60, 0x5b, 0xc8, 0xbf, 0xb1, 0x5c, 0x8e, - 0x4f, 0x05, 0x9d, 0x50, 0xbc, 0x26, 0xd6, 0x84, 0xa1, 0xd0, 0x09, 0x7a, - 0xad, 0xfb, 0x52, 0x5d, 0x37, 0xa2, 0x6d, 0x0b, 0x01, 0x03, 0xab, 0x02, - 0x08, 0xf0, 0x04, 0xfe, 0xfb, 0x31, 0xba, 0x9e, 0x0d, 0x27, 0x5f, 0xa6, - 0x76, 0x30, 0xbe, 0xb1, 0xd7, 0x0f, 0xe3, 0x9b, 0xd1, 0x6c, 0xf4, 0x30, - 0x9e, 0xda, 0xdb, 0x87, 0x09, 0xfd, 0xf1, 0xf1, 0x79, 0x34, 0xfe, 0xdc, - 0xb3, 0x37, 0xa3, 0xe9, 0x6c, 0x32, 0xba, 0x7a, 0xc2, 0x23, 0x7e, 0xf1, - 0xcb, 0xc3, 0xcd, 0xe8, 0x76, 0x74, 0x3d, 0xc0, 0x0f, 0xd8, 0xf2, 0xa7, - 0x3e, 0xa3, 0xa8, 0x63, 0xb0, 0x49, 0x75, 0x93, 0x39, 0x4f, 0xc7, 0x11, - 0x4c, 0xf3, 0x56, 0x94, 0xdf, 0xd5, 0x4d, 0x00, 0x25, 0x92, 0x0c, 0xbd, - 0x49, 0xc0, 0x27, 0x04, 0xe2, 0x6d, 0x96, 0xa8, 0xf2, 0x42, 0x43, 0x5a, - 0x1f, 0xb4, 0x2e, 0x32, 0x44, 0x1a, 0x9f, 0xec, 0x14, 0xfb, 0x6e, 0x08, - 0x8d, 0x92, 0x08, 0x5a, 0x27, 0xb2, 0x34, 0x75, 0x13, 0x8c, 0x84, 0xa1, - 0x01, 0x48, 0x1f, 0xc7, 0x1a, 0x7d, 0x91, 0xc1, 0xd9, 0xa3, 0xd0, 0x77, - 0x46, 0xf0, 0xda, 0x11, 0x17, 0x7b, 0x86, 0x01, 0x4c, 0x43, 0x3e, 0xc7, - 0x88, 0xe8, 0x0c, 0xa0, 0x9e, 0x9d, 0x20, 0x29, 0xe8, 0x19, 0x1f, 0x65, - 0x9e, 0x88, 0x69, 0xf3, 0xce, 0x61, 0x35, 0xb3, 0x71, 0x14, 0xf4, 0xac, - 0x4b, 0xf9, 0xc8, 0xd1, 0x13, 0xac, 0x81, 0x75, 0x89, 0xd4, 0xf4, 0x95, - 0xc4, 0x47, 0xca, 0xc6, 0xab, 0x08, 0xf1, 0xed, 0x81, 0xb3, 0xe4, 0xed, - 0x17, 0x31, 0xf0, 0x94, 0x69, 0xa1, 0x93, 0xd3, 0xb6, 0xf2, 0xae, 0xb2, - 0x4d, 0x75, 0xbb, 0xb3, 0xb2, 0xdd, 0x16, 0x25, 0xeb, 0x04, 0x23, 0x8b, - 0x9e, 0x51, 0x02, 0x9a, 0x24, 0x03, 0x27, 0x80, 0xb3, 0x8f, 0xf5, 0xc7, - 0x07, 0xff, 0xdb, 0x04, 0xea, 0x25, 0x1c, 0x09, 0xce, 0xcf, 0x12, 0x33, - 0x19, 0x19, 0x6a, 0x9d, 0xbc, 0x80, 0x65, 0xe7, 0x77, 0xe4, 0x26, 0xc9, - 0x2b, 0xac, 0x88, 0xc5, 0xbd, 0xe6, 0x03, 0x6c, 0xc8, 0x40, 0x7e, 0x91, - 0xd5, 0x00, 0xf2, 0xd8, 0xa2, 0xa8, 0xa1, 0xf8, 0x04, 0x6f, 0xf5, 0x71, - 0x6e, 0x82, 0x64, 0xec, 0x59, 0xbc, 0xfb, 0x19, 0x60, 0xe8, 0x10, 0x7e, - 0x5d, 0xcd, 0x84, 0xfd, 0x5d, 0xb2, 0x5c, 0x96, 0x8e, 0x7d, 0x66, 0xe2, - 0xed, 0x19, 0x05, 0x92, 0x33, 0x52, 0xef, 0x01, 0xf9, 0xfa, 0x57, 0x41, - 0x0b, 0x85, 0xf2, 0x15, 0x28, 0xeb, 0x94, 0x91, 0x74, 0x0e, 0xc9, 0xc8, - 0x12, 0x28, 0xb4, 0x45, 0xcb, 0xa2, 0x1d, 0xaa, 0x0e, 0x97, 0xe2, 0x6f, - 0x19, 0xa2, 0xd5, 0x95, 0x4f, 0xd9, 0xfe, 0x29, 0x9c, 0xd2, 0xea, 0x41, - 0x55, 0x12, 0xb8, 0xce, 0x95, 0x29, 0xeb, 0xfc, 0x80, 0xf5, 0xea, 0xa1, - 0x03, 0xec, 0x71, 0xcb, 0x9e, 0xc2, 0x37, 0x5e, 0x8d, 0x9c, 0x2a, 0xf9, - 0x84, 0x62, 0x13, 0x7f, 0x62, 0x22, 0xe0, 0x5e, 0xe4, 0xc0, 0xde, 0x2b, - 0xde, 0x10, 0xb2, 0xe5, 0x80, 0xc0, 0x3e, 0x35, 0xad, 0x38, 0x3c, 0xda, - 0x03, 0x45, 0x33, 0x61, 0xe7, 0x73, 0xf2, 0x89, 0x6e, 0x0b, 0x1c, 0x96, - 0x73, 0x86, 0x42, 0xee, 0x0b, 0xc4, 0xcd, 0x1d, 0x81, 0x75, 0xf6, 0x62, - 0x74, 0xce, 0x23, 0x14, 0x5f, 0xf4, 0xcd, 0x37, 0x41, 0x3b, 0xb6, 0x51, - 0xb2, 0xb2, 0x06, 0xf6, 0xc6, 0x5a, 0x1e, 0xbb, 0x84, 0x20, 0xd4, 0x1c, - 0x72, 0x59, 0x38, 0x09, 0x0b, 0x1f, 0xfb, 0x82, 0x68, 0x92, 0xdd, 0xef, - 0xc9, 0x68, 0x03, 0x70, 0xd3, 0x65, 0xde, 0xf9, 0x18, 0xd4, 0x40, 0xbc, - 0x31, 0xd2, 0x06, 0x86, 0x4e, 0x73, 0xb6, 0x90, 0x0d, 0x85, 0x84, 0x9a, - 0x50, 0x19, 0x19, 0x1f, 0xf9, 0x7c, 0xd7, 0x82, 0x61, 0x03, 0xd6, 0x6c, - 0xd3, 0x45, 0x5d, 0xd4, 0x3e, 0x93, 0xdd, 0xc9, 0xe7, 0xb0, 0x63, 0x27, - 0xdd, 0xa5, 0x5f, 0xb6, 0x30, 0x74, 0x8a, 0x36, 0x74, 0x08, 0x06, 0x0c, - 0x4a, 0x64, 0xfc, 0x96, 0x69, 0x2d, 0x4d, 0x3d, 0x8f, 0x1e, 0x62, 0x91, - 0x25, 0xe9, 0x86, 0xb8, 0x42, 0x44, 0x07, 0x18, 0x70, 0x69, 0xbf, 0x3b, - 0xb7, 0x85, 0x49, 0x40, 0x03, 0x14, 0xea, 0x19, 0xf9, 0xcc, 0x87, 0xf0, - 0x05, 0x30, 0x84, 0x54, 0xb9, 0xe3, 0x09, 0x25, 0x0b, 0xc4, 0xe1, 0x93, - 0xb9, 0x77, 0x39, 0xed, 0x82, 0xc0, 0x46, 0x67, 0x6b, 0x96, 0x36, 0x78, - 0x87, 0x11, 0x65, 0x9b, 0x2b, 0x46, 0xa8, 0xa0, 0xcb, 0x3a, 0x52, 0x04, - 0x3e, 0x4a, 0x70, 0x6c, 0xba, 0x8f, 0x49, 0xb2, 0x82, 0xa4, 0x2b, 0x20, - 0xae, 0x7d, 0x9b, 0x44, 0xd5, 0x48, 0x49, 0xd2, 0x1e, 0x46, 0xb2, 0x0a, - 0x6a, 0xc8, 0xd5, 0xae, 0x77, 0x9e, 0x8c, 0x23, 0x53, 0xbd, 0x16, 0x63, - 0x0e, 0xb9, 0x9b, 0xec, 0x24, 0x68, 0x6f, 0xa7, 0xab, 0x24, 0x0a, 0x1a, - 0x8b, 0xad, 0x7a, 0x18, 0x9c, 0xb9, 0xc1, 0x4a, 0x11, 0x18, 0x43, 0x04, - 0xfe, 0x35, 0x64, 0xe9, 0x01, 0x41, 0xb3, 0xe6, 0x7c, 0x6a, 0x35, 0x47, - 0xc1, 0x1e, 0xaf, 0x28, 0xa7, 0x2a, 0x8f, 0x2b, 0x4c, 0xf0, 0x98, 0xea, - 0xd9, 0x8c, 0x78, 0x36, 0x7a, 0xa3, 0xe6, 0x20, 0xb9, 0x11, 0x72, 0x4f, - 0xba, 0xe2, 0x9e, 0x06, 0x56, 0xd1, 0xd3, 0x18, 0x75, 0xb2, 0x6b, 0xef, - 0x3a, 0x42, 0x75, 0xf0, 0xf6, 0x48, 0x28, 0x99, 0xea, 0xe1, 0x3e, 0x9a, - 0x64, 0x4e, 0x76, 0x7b, 0x44, 0x2f, 0x49, 0x35, 0x08, 0x7d, 0x6f, 0x9c, - 0x13, 0x25, 0x91, 0x53, 0x78, 0x17, 0x05, 0xf5, 0x5f, 0x24, 0x44, 0x27, - 0x17, 0x6d, 0x46, 0xb0, 0x48, 0x6a, 0x2f, 0xe9, 0x44, 0x03, 0x20, 0x57, - 0x69, 0x26, 0xe1, 0x73, 0x41, 0xbc, 0x65, 0xc6, 0xd2, 0x19, 0x61, 0xde, - 0xaa, 0x72, 0xbc, 0x86, 0x87, 0x5f, 0x65, 0x9b, 0x0e, 0x09, 0x27, 0xf3, - 0x5b, 0x7c, 0x8e, 0xac, 0x10, 0x3c, 0xd0, 0x12, 0xa9, 0x97, 0x2a, 0x9e, - 0xbc, 0xa5, 0x50, 0x61, 0x7e, 0x40, 0x07, 0xeb, 0x26, 0x18, 0xd0, 0x2c, - 0x1b, 0xf1, 0x8b, 0x98, 0xa3, 0x96, 0xa5, 0x79, 0x2e, 0xf9, 0x74, 0x2c, - 0xf3, 0x46, 0xc1, 0x99, 0x9f, 0x32, 0x1a, 0x2b, 0xab, 0x26, 0xac, 0xf3, - 0x6f, 0x5e, 0x42, 0x1d, 0xce, 0xb5, 0xe7, 0x02, 0x55, 0xb0, 0xbc, 0x06, - 0x7f, 0xc7, 0x18, 0xbc, 0x58, 0x21, 0x23, 0xea, 0xc0, 0x2b, 0xf2, 0x11, - 0x89, 0xee, 0x92, 0x80, 0x0b, 0x41, 0x9f, 0x11, 0xa2, 0xd8, 0x1a, 0xd3, - 0x72, 0xd9, 0xac, 0x02, 0x05, 0x3a, 0x85, 0x04, 0x42, 0xe8, 0x97, 0xe3, - 0x2f, 0x2e, 0x02, 0x8e, 0x6f, 0x58, 0x1f, 0x02, 0x7d, 0x4e, 0x7a, 0xc5, - 0x20, 0x93, 0x20, 0xee, 0x52, 0xea, 0x34, 0x9c, 0x2a, 0xa0, 0x54, 0x55, - 0x26, 0x08, 0x43, 0xe4, 0x67, 0xf4, 0xf0, 0xe4, 0x68, 0xc9, 0xc1, 0x46, - 0x09, 0xa2, 0xb0, 0x12, 0x3a, 0xca, 0x0f, 0x49, 0x52, 0x25, 0x42, 0x6a, - 0xf0, 0xc2, 0xb0, 0x08, 0xa8, 0x1e, 0x7f, 0x1e, 0x2d, 0xc8, 0x88, 0x31, - 0xcd, 0x95, 0x20, 0xd4, 0x9b, 0xca, 0x25, 0x45, 0xda, 0x12, 0xde, 0x82, - 0xb3, 0x44, 0xa2, 0x2e, 0x85, 0x93, 0x2f, 0x21, 0x14, 0x02, 0x4a, 0x50, - 0x68, 0xd1, 0xa7, 0x3c, 0x2f, 0x6a, 0xf2, 0x2e, 0xa8, 0x12, 0x6a, 0x10, - 0x66, 0xa3, 0xe8, 0x78, 0x3c, 0x7b, 0xd4, 0xe3, 0x25, 0xbc, 0x80, 0xfe, - 0x70, 0x3a, 0x11, 0x3a, 0x07, 0xc0, 0xa5, 0x64, 0xa6, 0x17, 0x10, 0x58, - 0xa3, 0x1f, 0x6a, 0x05, 0x42, 0x47, 0xf3, 0xc1, 0x45, 0x5b, 0xbd, 0xe0, - 0x4a, 0x1b, 0x5b, 0x7c, 0x84, 0xf1, 0x45, 0xe3, 0x03, 0xb7, 0x59, 0x5c, - 0xbc, 0xc2, 0xbe, 0xc1, 0x68, 0x18, 0x75, 0x59, 0x16, 0xe2, 0x17, 0x96, - 0xb3, 0x9c, 0xf9, 0x16, 0xf6, 0x35, 0x75, 0x6f, 0x7b, 0x3e, 0x91, 0x57, - 0x69, 0x11, 0xde, 0xf9, 0xf0, 0xd7, 0x85, 0x63, 0x77, 0xf5, 0x0b, 0x02, - 0x6c, 0x27, 0x64, 0x57, 0xde, 0x65, 0xab, 0x50, 0x7f, 0x0c, 0x32, 0x20, - 0xda, 0x78, 0x09, 0xc4, 0x3a, 0x0e, 0xe9, 0x8d, 0x26, 0x08, 0xf3, 0xa5, - 0x64, 0x90, 0x77, 0x58, 0xde, 0x13, 0x27, 0xd6, 0xf1, 0x40, 0xe1, 0x34, - 0x87, 0x08, 0xe1, 0x7f, 0xea, 0xb4, 0x94, 0x7a, 0x8c, 0xac, 0xb8, 0xb7, - 0x58, 0xff, 0xc2, 0x34, 0x35, 0x14, 0x7e, 0x75, 0x23, 0x05, 0x06, 0xae, - 0xcf, 0x69, 0x30, 0x69, 0xd4, 0x95, 0xb7, 0x6c, 0xad, 0x83, 0x13, 0x53, - 0x93, 0x02, 0x0a, 0xd0, 0xf3, 0x84, 0x52, 0x42, 0xeb, 0x9d, 0x16, 0x61, - 0x98, 0x3f, 0x48, 0x2d, 0xf9, 0x13, 0xc1, 0x42, 0x27, 0x2d, 0xb3, 0xc7, - 0x61, 0x09, 0x75, 0x88, 0x39, 0xe8, 0x48, 0x7c, 0x91, 0xd3, 0x6a, 0x5c, - 0xd5, 0x05, 0x32, 0x2a, 0x19, 0x20, 0xb6, 0xb0, 0x03, 0x2f, 0x7b, 0x47, - 0xc6, 0x07, 0x35, 0xc3, 0x06, 0x5e, 0xe1, 0xde, 0x86, 0x58, 0xfc, 0x8a, - 0x9c, 0xac, 0x82, 0x21, 0xc4, 0x26, 0x28, 0x82, 0x05, 0xe0, 0x61, 0x0b, - 0xed, 0xa1, 0xa6, 0xc5, 0xb5, 0xec, 0xf6, 0x9c, 0x05, 0x45, 0xb6, 0x86, - 0x7c, 0xb6, 0xa4, 0x3d, 0x7f, 0xc4, 0xb5, 0x8f, 0xc4, 0xef, 0x6d, 0x8d, - 0xfa, 0x73, 0x5d, 0x35, 0x1f, 0x98, 0x3d, 0x9d, 0xf3, 0xc9, 0x26, 0xe2, - 0x0a, 0x7d, 0xcd, 0x9e, 0x87, 0xf3, 0x4d, 0xf1, 0x30, 0x92, 0x99, 0xa4, - 0xbe, 0x13, 0x53, 0xcc, 0x7e, 0x4c, 0x61, 0xbf, 0x1a, 0xe3, 0x4d, 0x8d, - 0x59, 0xb2, 0x46, 0x48, 0x10, 0xf5, 0xab, 0xe0, 0x84, 0x4c, 0x97, 0x03, - 0x52, 0x0b, 0x6e, 0x4b, 0x23, 0x92, 0xf3, 0x09, 0x06, 0x08, 0x58, 0x98, - 0x52, 0x88, 0x5f, 0x51, 0x1d, 0x57, 0xd1, 0x1b, 0x88, 0xb6, 0xd4, 0x6d, - 0x02, 0xc6, 0xac, 0x39, 0x58, 0x48, 0x69, 0x84, 0x7e, 0xe0, 0x44, 0x54, - 0x8e, 0x55, 0xba, 0x97, 0xa4, 0x5c, 0x52, 0x2c, 0x60, 0xf9, 0xd3, 0x47, - 0xf6, 0x0d, 0x51, 0x5a, 0x0a, 0x65, 0x33, 0xfa, 0xb0, 0x17, 0xb5, 0x11, - 0x40, 0x29, 0x97, 0xe2, 0xab, 0xc6, 0x5f, 0x2a, 0x9f, 0x38, 0x16, 0x01, - 0x17, 0x45, 0xb5, 0x40, 0xc6, 0xa9, 0xbe, 0x32, 0x71, 0x19, 0x89, 0x5e, - 0x93, 0xe4, 0xae, 0x44, 0xc7, 0x83, 0x40, 0x00, 0x13, 0x2b, 0x45, 0x01, - 0x7a, 0xef, 0xd2, 0x92, 0x94, 0xd6, 0x9c, 0x37, 0xb4, 0x5b, 0x71, 0x76, - 0x63, 0xdc, 0xaf, 0xae, 0x94, 0x54, 0x38, 0x14, 0xd1, 0xa4, 0x4e, 0x84, - 0x72, 0x46, 0x76, 0x94, 0xd9, 0x51, 0xfe, 0x54, 0x94, 0x84, 0xe6, 0x32, - 0x54, 0x36, 0x42, 0x36, 0xe5, 0x8f, 0x22, 0x01, 0x3a, 0xf3, 0x28, 0x47, - 0x66, 0x91, 0x4a, 0xef, 0x67, 0x03, 0x47, 0x97, 0xbc, 0xbc, 0x80, 0x4b, - 0x61, 0x59, 0x4d, 0x79, 0xe4, 0x1c, 0xe0, 0xca, 0xb1, 0x85, 0xcc, 0x3e, - 0xd4, 0x62, 0xff, 0xc8, 0x3f, 0xfe, 0x00, 0x88, 0x5c, 0xe0, 0xcf, 0x89, - 0x7d, 0x2d, 0xb2, 0x1a, 0xf5, 0xfd, 0x15, 0x25, 0xbd, 0xbe, 0x2a, 0x4a, - 0xca, 0xab, 0xd4, 0xa5, 0xb7, 0xe7, 0x13, 0xe8, 0xdb, 0x3a, 0xa1, 0x79, - 0x19, 0xdc, 0x5f, 0x44, 0x9d, 0x78, 0x4d, 0xd6, 0x69, 0x24, 0x29, 0x47, - 0x83, 0xdc, 0x1f, 0x7e, 0x8c, 0xd4, 0xf7, 0x8f, 0xb0, 0x4f, 0x3d, 0x32, - 0x48, 0x89, 0xa5, 0x01, 0xfd, 0x7c, 0xba, 0x40, 0x88, 0x2a, 0xe6, 0xff, - 0x44, 0x7d, 0x25, 0xd4, 0xc3, 0x49, 0x7a, 0x8b, 0xba, 0x62, 0x7f, 0x03, - 0x40, 0x76, 0x24, 0xfc, 0x9a, 0x69, 0xb0, 0xb8, 0x8f, 0x4c, 0xc3, 0x27, - 0xcb, 0x20, 0xea, 0x14, 0x86, 0x22, 0x67, 0x80, 0xf2, 0x99, 0xda, 0x94, - 0x94, 0x37, 0x88, 0x03, 0x2d, 0x7c, 0x1a, 0x2c, 0x28, 0x24, 0x6f, 0x81, - 0x56, 0x48, 0x7f, 0x1b, 0x69, 0xe0, 0xb7, 0xcc, 0x71, 0xa8, 0x2b, 0xa5, - 0xbe, 0xcc, 0x71, 0x70, 0x43, 0x96, 0x41, 0x00, 0xea, 0x3d, 0x62, 0x39, - 0x88, 0x14, 0xfc, 0xd4, 0xe6, 0x20, 0x3d, 0xb5, 0xf9, 0x60, 0xb5, 0x51, - 0x4d, 0xe1, 0x07, 0x40, 0x50, 0x42, 0x4d, 0xf7, 0x38, 0x2c, 0x60, 0x15, - 0xde, 0x82, 0x56, 0x2b, 0x36, 0x49, 0x99, 0x92, 0xfe, 0xd7, 0xa1, 0x48, - 0xd4, 0x16, 0x0c, 0x11, 0x73, 0x04, 0x8c, 0x5d, 0x12, 0x0b, 0x7b, 0x0d, - 0x20, 0x3b, 0x3c, 0x59, 0xd2, 0xd8, 0x13, 0x23, 0xee, 0x9e, 0x7d, 0x4d, - 0xb2, 0x54, 0x96, 0x23, 0x9e, 0x65, 0xe4, 0x9d, 0x2b, 0xae, 0xc5, 0xc9, - 0xb9, 0x76, 0x2e, 0x29, 0xb9, 0x69, 0xd3, 0x66, 0x15, 0x8c, 0x8f, 0xd8, - 0x21, 0xec, 0x7a, 0x8a, 0xc7, 0x15, 0x40, 0xe5, 0xe8, 0x6c, 0x49, 0x31, - 0x3a, 0x97, 0xde, 0x1e, 0xe3, 0x22, 0x6d, 0x76, 0x85, 0x04, 0x01, 0xc1, - 0xcf, 0x95, 0x01, 0x6a, 0x2b, 0xe3, 0x62, 0x7d, 0xed, 0x71, 0x10, 0x16, - 0xde, 0xf3, 0x0a, 0xfb, 0x1c, 0x8f, 0x42, 0xf4, 0xbe, 0x70, 0x3a, 0x72, - 0x60, 0xdc, 0x27, 0xf1, 0xf7, 0xf7, 0xc9, 0xe0, 0x34, 0xff, 0xe5, 0x24, - 0xff, 0x81, 0x0c, 0x16, 0xa7, 0xb4, 0x2b, 0xcd, 0xc1, 0x02, 0xf1, 0x14, - 0x51, 0xca, 0xca, 0xf0, 0x54, 0x03, 0x33, 0x0b, 0x48, 0x42, 0xff, 0x5e, - 0x4f, 0xea, 0xc4, 0x91, 0x01, 0x51, 0xb8, 0x78, 0x96, 0x64, 0x44, 0x4b, - 0x2e, 0xfe, 0x4c, 0x51, 0x8c, 0xb6, 0x75, 0xa5, 0x3a, 0xb0, 0xe2, 0x52, - 0x62, 0x0e, 0x20, 0x0a, 0x4f, 0x49, 0x59, 0xdb, 0x41, 0xb5, 0x23, 0x54, - 0x11, 0x10, 0xf4, 0xf0, 0x7d, 0x43, 0x5f, 0x0c, 0xb5, 0x7e, 0xdb, 0x78, - 0xf9, 0xbc, 0x0d, 0x3e, 0x4d, 0x1a, 0xad, 0x43, 0x56, 0x4e, 0x7c, 0x29, - 0xa5, 0xba, 0x63, 0xa7, 0xf5, 0x3c, 0x44, 0x87, 0xb9, 0x70, 0x5f, 0x91, - 0x4b, 0xa7, 0x59, 0xb6, 0x6a, 0x9d, 0x8a, 0x14, 0xc4, 0x84, 0x16, 0x6e, - 0x11, 0x8a, 0x38, 0x36, 0x4d, 0xe4, 0xc4, 0x4b, 0x68, 0xcc, 0x69, 0xd5, - 0xb6, 0x9b, 0x98, 0x11, 0x3f, 0xb9, 0x39, 0x7a, 0xcb, 0x39, 0x43, 0x4c, - 0xb4, 0x14, 0xe4, 0x1a, 0xd3, 0x97, 0xdd, 0x0d, 0xef, 0x2e, 0x5b, 0x86, - 0xde, 0xcc, 0x01, 0x5d, 0xf4, 0x3b, 0x6d, 0x52, 0x23, 0x55, 0x4a, 0xdb, - 0xa4, 0x85, 0x12, 0xbb, 0xac, 0xf6, 0x9c, 0x98, 0x24, 0xde, 0x17, 0x8b, - 0x34, 0xd4, 0xc3, 0xc8, 0x04, 0x12, 0x28, 0xbe, 0x5b, 0xa5, 0x79, 0x2a, - 0x75, 0x57, 0xa4, 0x59, 0xfa, 0xbe, 0xf8, 0xe1, 0x32, 0xdd, 0x4a, 0x73, - 0x19, 0x01, 0xdb, 0x84, 0xf8, 0x05, 0xe2, 0x52, 0x2d, 0x93, 0x31, 0xec, - 0x41, 0xb5, 0x3c, 0xcb, 0x92, 0x18, 0x38, 0xb4, 0x27, 0xa2, 0x53, 0xde, - 0x91, 0xe0, 0x5f, 0xc1, 0x74, 0x60, 0x3b, 0xe3, 0xb7, 0x8e, 0x25, 0xee, - 0x02, 0x96, 0xed, 0x1d, 0x9c, 0x27, 0x36, 0x17, 0x6e, 0xf7, 0x21, 0x6a, - 0x68, 0x39, 0x0e, 0x9d, 0x3d, 0x6e, 0x14, 0x36, 0x95, 0x9e, 0x06, 0xd3, - 0xc6, 0x9f, 0x9d, 0x23, 0x6b, 0x97, 0x6a, 0xa1, 0xae, 0x4c, 0x3c, 0x9a, - 0x73, 0x02, 0x62, 0x20, 0xa7, 0x8b, 0xd6, 0x12, 0x36, 0xc9, 0x3f, 0x19, - 0x01, 0x6c, 0x48, 0xa3, 0x19, 0x9d, 0x9e, 0xcb, 0x09, 0x41, 0xf1, 0x77, - 0x52, 0x63, 0x97, 0x09, 0x34, 0xf1, 0x70, 0xe3, 0x17, 0x7a, 0x42, 0x43, - 0x31, 0xaa, 0x94, 0x9c, 0xd5, 0xef, 0x7c, 0x45, 0xd0, 0x8d, 0x6b, 0x4c, - 0x70, 0xbc, 0xdd, 0xf3, 0x23, 0x51, 0x22, 0xae, 0xd6, 0x39, 0xe3, 0x16, - 0xa6, 0xb9, 0xd9, 0xca, 0x28, 0x6a, 0x4f, 0xd4, 0x42, 0xb9, 0xce, 0xdc, - 0xe5, 0x1e, 0x05, 0xf9, 0xd5, 0x01, 0x5a, 0x88, 0x56, 0x07, 0xc4, 0x8a, - 0x2c, 0x00, 0x9d, 0x1b, 0x2d, 0x93, 0xb1, 0xa2, 0x13, 0x7d, 0x86, 0x56, - 0xe7, 0xad, 0x75, 0x60, 0x83, 0xd1, 0x71, 0xa2, 0x6d, 0x69, 0xd6, 0x06, - 0xae, 0x52, 0x2b, 0xaa, 0x0d, 0x5f, 0x59, 0xc0, 0x75, 0x72, 0xcd, 0xa0, - 0x72, 0x6f, 0x81, 0x03, 0xed, 0x0b, 0x70, 0x9b, 0xc1, 0x28, 0x2f, 0x46, - 0x0f, 0x6a, 0xc6, 0xf9, 0xde, 0x1c, 0x83, 0x95, 0x1d, 0x2f, 0x89, 0x86, - 0x05, 0xf0, 0x71, 0xfd, 0xb2, 0x8e, 0x7c, 0x7b, 0xaa, 0xdd, 0x73, 0xa9, - 0x71, 0x6e, 0xb6, 0x94, 0x33, 0x45, 0x43, 0x27, 0xd1, 0x22, 0x7b, 0xd5, - 0xa2, 0x88, 0x19, 0x0c, 0x19, 0xfe, 0x5f, 0x0b, 0x19, 0xa0, 0x44, 0x52, - 0x06, 0x92, 0x62, 0x0d, 0x65, 0x7f, 0x5c, 0x42, 0x17, 0xf8, 0x1a, 0x83, - 0x96, 0x0e, 0x94, 0x30, 0xa2, 0xa8, 0x50, 0x5e, 0xf7, 0xeb, 0x16, 0x65, - 0x5c, 0x4e, 0x9f, 0x34, 0xd2, 0x07, 0x6f, 0x1e, 0x21, 0x15, 0x34, 0x36, - 0x51, 0x5e, 0x22, 0xa5, 0xd8, 0x56, 0x86, 0x21, 0xce, 0x1b, 0x83, 0xc1, - 0xe2, 0xe4, 0xf6, 0xa7, 0x77, 0x87, 0xfb, 0x44, 0x8b, 0x49, 0x54, 0x90, - 0xdb, 0x46, 0x49, 0x8d, 0x28, 0x50, 0x69, 0x2c, 0x43, 0x10, 0x49, 0x21, - 0xc7, 0x4e, 0x0b, 0xf4, 0x08, 0x59, 0xa6, 0x31, 0xc3, 0xc0, 0x5f, 0x20, - 0x68, 0xee, 0x0f, 0x35, 0xbe, 0x55, 0x2a, 0x56, 0xcc, 0x8c, 0xd0, 0x71, - 0x67, 0xe9, 0x22, 0x40, 0x04, 0x80, 0x16, 0x55, 0x04, 0x9b, 0x56, 0x5c, - 0x18, 0x62, 0x48, 0xcb, 0x76, 0x10, 0xa7, 0x21, 0x8c, 0x2d, 0x87, 0xa5, - 0x84, 0xec, 0x06, 0xae, 0x38, 0x10, 0x40, 0xe9, 0x20, 0x7a, 0x5e, 0xf4, - 0x7f, 0xab, 0x3a, 0x13, 0xc7, 0x92, 0xa5, 0x09, 0xa5, 0x8e, 0x2c, 0xba, - 0x3f, 0x8a, 0xe8, 0x42, 0x76, 0x17, 0xe7, 0x9a, 0xd0, 0xc8, 0x6d, 0xb5, - 0x97, 0x82, 0xf9, 0x14, 0x25, 0xc9, 0xd0, 0xa7, 0x66, 0xcd, 0xd1, 0xc9, - 0x0b, 0xf6, 0xb5, 0xcd, 0xf1, 0x81, 0x89, 0x59, 0xc3, 0xd1, 0xce, 0x7c, - 0x41, 0x82, 0x2f, 0x45, 0xdb, 0x6e, 0x57, 0x57, 0x0b, 0x7a, 0xe4, 0xc1, - 0x4f, 0x08, 0x06, 0xd5, 0xa0, 0xca, 0xef, 0x77, 0x3e, 0x64, 0x0a, 0x07, - 0x09, 0x6f, 0x12, 0x92, 0xb2, 0x92, 0xfb, 0x75, 0xeb, 0x74, 0x9e, 0x56, - 0x52, 0xa8, 0xcf, 0x92, 0xb7, 0xa6, 0x91, 0xaf, 0x79, 0xe2, 0xe1, 0x79, - 0x64, 0x1d, 0x8a, 0x2d, 0x05, 0xda, 0xd4, 0xf3, 0x9d, 0xf4, 0xc8, 0xb8, - 0x5a, 0xd1, 0xc1, 0xd7, 0x7b, 0xa5, 0xfb, 0x73, 0x2d, 0x2f, 0x9e, 0x2c, - 0xb1, 0x5f, 0x48, 0x69, 0x07, 0xbd, 0xc7, 0x45, 0xa3, 0x35, 0xb2, 0x7f, - 0xa2, 0x25, 0xdd, 0x8e, 0x8c, 0x2b, 0xc6, 0xaf, 0xe8, 0x58, 0xa3, 0xde, - 0x18, 0x06, 0x8e, 0xfe, 0x2f, 0x3d, 0x3e, 0xa1, 0xb8, 0x21, 0xdf, 0xec, - 0x31, 0x71, 0x2f, 0xc3, 0xd1, 0xa9, 0x87, 0x3f, 0xf5, 0xa5, 0x8b, 0x52, - 0xa5, 0x1b, 0xa7, 0xf8, 0xe4, 0x47, 0x48, 0xff, 0x37, 0x4e, 0x5c, 0xc5, - 0xf3, 0x0d, 0x7b, 0x06, 0xa4, 0xca, 0x8f, 0x0c, 0x39, 0x58, 0x63, 0xf0, - 0x68, 0x26, 0xf4, 0x94, 0xf5, 0x89, 0x0c, 0x8d, 0x88, 0x11, 0x77, 0x2b, - 0x89, 0x51, 0xaf, 0x3f, 0xd0, 0x45, 0xd6, 0xcd, 0xae, 0xa8, 0x42, 0x67, - 0xdb, 0x9d, 0xe8, 0x8b, 0x86, 0x69, 0x0a, 0x75, 0x4f, 0x29, 0x05, 0x06, - 0xad, 0x5b, 0xae, 0xea, 0x92, 0xbb, 0x55, 0x9d, 0xd9, 0x13, 0x4d, 0xc1, - 0xda, 0x92, 0xfa, 0x3b, 0xdb, 0xe4, 0x9a, 0xea, 0x5b, 0xd5, 0x01, 0xb0, - 0x5e, 0x13, 0x2b, 0xd6, 0xdc, 0xe0, 0xea, 0x9b, 0xae, 0x25, 0xe9, 0xb0, - 0x8a, 0x80, 0x24, 0x4a, 0x6c, 0xe9, 0xff, 0x2f, 0x20, 0xa7, 0xd6, 0x02, - 0xb5, 0xa1, 0x14, 0x79, 0x63, 0x3e, 0xc7, 0x5e, 0x42, 0xf6, 0xff, 0xfb, - 0x76, 0xb4, 0x92, 0xb8, 0xce, 0xd5, 0x14, 0x32, 0xd1, 0xa6, 0x2f, 0x80, - 0x18, 0x40, 0x49, 0xfb, 0x3f, 0xeb, 0xe5, 0x0b, 0x57, 0xf2, 0x04, 0xa3, - 0x44, 0xc9, 0xa9, 0xb4, 0x9f, 0x0d, 0x01, 0x51, 0x04, 0x1c, 0x17, 0x5e, - 0x5a, 0xa9, 0x3c, 0x43, 0xf7, 0x00, 0xe5, 0x1a, 0x7b, 0x2e, 0x8d, 0xe7, - 0x4d, 0xaa, 0xa3, 0x87, 0xda, 0xba, 0x26, 0x73, 0xad, 0x9d, 0xbf, 0xe8, - 0x99, 0x48, 0x0b, 0x19, 0x0b, 0x33, 0x1f, 0x59, 0x11, 0xa0, 0x3b, 0xe7, - 0x3a, 0x0a, 0x83, 0x43, 0x09, 0x55, 0x04, 0xfc, 0x18, 0x90, 0x50, 0xb6, - 0x1c, 0x36, 0x6e, 0x3d, 0xf5, 0x45, 0x08, 0xd3, 0x18, 0xfa, 0x23, 0x33, - 0xa9, 0x14, 0xe8, 0x37, 0x5b, 0xec, 0xd9, 0x48, 0x4f, 0x9a, 0x6d, 0x62, - 0xcb, 0x08, 0x17, 0x28, 0x7d, 0x62, 0xdf, 0x26, 0x32, 0x9e, 0xfe, 0x56, - 0xa6, 0x2f, 0x74, 0x14, 0x0a, 0x9f, 0xc7, 0x15, 0xfd, 0x42, 0xc1, 0xb8, - 0xc7, 0x00, 0x0f, 0xa9, 0x97, 0x4f, 0x37, 0x75, 0x46, 0x66, 0xea, 0xa4, - 0x55, 0x24, 0xed, 0x0b, 0x8a, 0x21, 0x2f, 0x0a, 0x2b, 0x5b, 0xaf, 0x6f, - 0xe2, 0xa6, 0x4d, 0x34, 0xb7, 0xe7, 0x48, 0x96, 0x5c, 0x7c, 0x8f, 0x3e, - 0xd3, 0xc8, 0x7f, 0x20, 0x44, 0x20, 0xef, 0xa0, 0x98, 0x27, 0x6c, 0x4f, - 0x27, 0x00, 0x0e, 0x87, 0x94, 0x92, 0x20, 0xdd, 0x66, 0x90, 0xa6, 0xa8, - 0x33, 0xc1, 0x71, 0x32, 0x42, 0x6a, 0xcb, 0x62, 0x47, 0x59, 0xc2, 0xee, - 0x3d, 0x4f, 0x17, 0x44, 0xc6, 0x1d, 0xc1, 0x84, 0xb0, 0x0b, 0x39, 0x3f, - 0x41, 0xbd, 0x05, 0x4f, 0xe4, 0x14, 0x4d, 0x7b, 0x4d, 0x1b, 0x2c, 0x4b, - 0x0a, 0x0b, 0x0b, 0x4c, 0x6b, 0x70, 0xd1, 0xbe, 0xf9, 0x13, 0x65, 0x91, - 0x0c, 0x2a, 0xe8, 0x1c, 0x72, 0x44, 0xf6, 0x3c, 0x9c, 0x57, 0xe8, 0xf0, - 0x27, 0x94, 0x81, 0xa8, 0x0a, 0xec, 0x9d, 0x13, 0x93, 0x80, 0x9d, 0xa5, - 0x0e, 0x15, 0xc7, 0x39, 0x7e, 0x6d, 0x0e, 0x67, 0x88, 0x7e, 0x7a, 0x89, - 0xa0, 0xd5, 0x54, 0x83, 0x58, 0xc8, 0x3f, 0x20, 0x5f, 0x20, 0x5c, 0xd4, - 0xf2, 0x39, 0xa8, 0x47, 0xd1, 0x7f, 0xae, 0x5d, 0x06, 0x20, 0x2d, 0xb9, - 0x30, 0x86, 0xea, 0x72, 0x31, 0x4a, 0xc7, 0x20, 0x4f, 0x42, 0x2f, 0x2f, - 0x01, 0x63, 0x5c, 0xd4, 0x59, 0x42, 0x9e, 0x36, 0x2d, 0x17, 0xf5, 0xc6, - 0xb3, 0xd7, 0x16, 0x0f, 0x37, 0x4f, 0xb2, 0xd6, 0x85, 0xbb, 0x78, 0xf9, - 0x68, 0x26, 0xd5, 0x48, 0x4d, 0x32, 0x74, 0x53, 0xc2, 0x4b, 0x51, 0x53, - 0x62, 0x6f, 0x86, 0x55, 0x67, 0x29, 0x73, 0x51, 0x21, 0x13, 0x6f, 0x8b, - 0xfe, 0xe9, 0xa8, 0x53, 0x71, 0xdb, 0xd6, 0x25, 0x7b, 0xb0, 0x23, 0x25, - 0x37, 0x92, 0x4c, 0xad, 0xf1, 0x99, 0xff, 0x24, 0x56, 0x1f, 0x0d, 0xa2, - 0xf8, 0x76, 0xa8, 0x02, 0x65, 0x7e, 0x52, 0xd5, 0x9d, 0x16, 0xcf, 0xb8, - 0x5a, 0x17, 0x66, 0xf6, 0xb4, 0x54, 0x27, 0x75, 0x83, 0xb4, 0xda, 0x69, - 0x2f, 0xc8, 0x70, 0x2d, 0x5b, 0xde, 0xbc, 0xec, 0x6e, 0xbe, 0x4e, 0x34, - 0xa1, 0xc1, 0xe9, 0x22, 0x0a, 0x43, 0x8f, 0x4f, 0x87, 0x6a, 0x70, 0xe8, - 0x97, 0x52, 0x57, 0xac, 0x74, 0x22, 0xb3, 0xcd, 0xaf, 0x3b, 0x22, 0x16, - 0xcc, 0xdf, 0x6b, 0xca, 0xab, 0x26, 0x85, 0xea, 0xc3, 0x93, 0x48, 0x88, - 0xdf, 0xca, 0x70, 0x46, 0xd0, 0xfe, 0x2d, 0x17, 0xe4, 0xc1, 0x30, 0x6b, - 0xbf, 0xb0, 0x1c, 0x5d, 0x41, 0xef, 0xb7, 0xd3, 0x39, 0xe6, 0x05, 0x53, - 0x1d, 0x64, 0xd6, 0xe2, 0x75, 0x74, 0x9b, 0x26, 0x13, 0x7f, 0x43, 0x03, - 0xbf, 0xe4, 0x0e, 0x24, 0x06, 0xfd, 0x0e, 0x48, 0x72, 0x4b, 0x13, 0xb4, - 0x9d, 0x5d, 0x97, 0xa6, 0x24, 0x3c, 0x98, 0xa8, 0xfe, 0xbc, 0xc8, 0xa5, - 0xde, 0xed, 0xd9, 0x71, 0xf2, 0x54, 0xcb, 0x22, 0x4a, 0xd9, 0x12, 0x02, - 0x4b, 0xfc, 0xd1, 0xa5, 0xd6, 0x50, 0xeb, 0x6d, 0xd3, 0xec, 0xe5, 0x79, - 0xaa, 0x0f, 0xcb, 0x22, 0x17, 0x01, 0x2c, 0x29, 0xfa, 0x2c, 0x79, 0xc8, - 0x94, 0xa7, 0xae, 0xac, 0x5f, 0xb3, 0xce, 0x00, 0x0c, 0x72, 0x78, 0xef, - 0xd4, 0x0a, 0x1a, 0x5a, 0x03, 0x7d, 0xad, 0x33, 0x52, 0x22, 0x65, 0xf8, - 0xa4, 0x99, 0x96, 0x50, 0x37, 0xa8, 0x91, 0x50, 0x1c, 0xf1, 0xba, 0x48, - 0x19, 0x13, 0xce, 0xf6, 0xac, 0x26, 0x56, 0x53, 0x9e, 0x8e, 0x03, 0xa1, - 0xd8, 0x05, 0xc5, 0x7d, 0x9e, 0x75, 0x7a, 0xd3, 0x1c, 0x71, 0x4e, 0x6c, - 0x70, 0xaf, 0x62, 0x00, 0x73, 0x77, 0x18, 0xad, 0x24, 0xaa, 0xfa, 0xea, - 0x68, 0xd9, 0xf1, 0xcf, 0xfd, 0xd0, 0x59, 0xdb, 0xaf, 0x52, 0x7c, 0xd0, - 0xf9, 0xd7, 0x3d, 0x87, 0x95, 0xfa, 0x68, 0x76, 0x02, 0xcd, 0x83, 0x30, - 0x26, 0xca, 0x69, 0x51, 0x09, 0x9f, 0xa5, 0xb9, 0x29, 0x54, 0xa5, 0x55, - 0xfe, 0xf9, 0xae, 0x6d, 0x6b, 0xc5, 0x59, 0xba, 0xb8, 0xe8, 0x16, 0x8d, - 0x1c, 0x0c, 0x12, 0xc1, 0x29, 0x72, 0xe2, 0xe5, 0x3b, 0x74, 0x1c, 0x66, - 0x01, 0xec, 0xd0, 0x93, 0xe5, 0x52, 0xaa, 0x0e, 0xd0, 0x01, 0x92, 0xf6, - 0x8b, 0xc3, 0xeb, 0xdb, 0x35, 0xb7, 0xcf, 0x3b, 0x47, 0x8c, 0x26, 0x5e, - 0x28, 0xac, 0x49, 0x23, 0xce, 0x88, 0x1f, 0x6e, 0x8e, 0xd2, 0x93, 0x21, - 0xcd, 0xa4, 0xea, 0x7e, 0xda, 0xb9, 0x2c, 0x20, 0xc5, 0x9c, 0x9c, 0x31, - 0xc0, 0x86, 0x32, 0x01, 0xd3, 0x32, 0x42, 0x3c, 0x47, 0xed, 0x75, 0x03, - 0xb7, 0x44, 0x44, 0xcc, 0xa5, 0x33, 0xb5, 0x48, 0x24, 0xb8, 0x46, 0xae, - 0x98, 0x30, 0x7e, 0x41, 0x06, 0x8c, 0x06, 0x89, 0x67, 0x7f, 0x1e, 0x91, - 0x48, 0x66, 0x4e, 0x4a, 0x19, 0xca, 0x8b, 0xda, 0x7b, 0x9c, 0x17, 0xcb, - 0x83, 0x11, 0x03, 0x96, 0xea, 0xcf, 0x7d, 0x1e, 0x83, 0x39, 0x39, 0x93, - 0x0e, 0x4e, 0x85, 0xd1, 0x8b, 0xd2, 0xbd, 0xa6, 0xdc, 0xba, 0x15, 0x91, - 0x63, 0xbc, 0xf9, 0x55, 0x2e, 0x6d, 0x78, 0xa3, 0xb2, 0x3f, 0x31, 0x9c, - 0x2e, 0x10, 0x00, 0x20, 0x16, 0xd6, 0x44, 0xff, 0xa6, 0xe3, 0x4d, 0x71, - 0xb6, 0x78, 0x0d, 0xb6, 0x1d, 0xe8, 0x25, 0x05, 0xf8, 0x14, 0xbe, 0x9d, - 0x68, 0xf7, 0xdb, 0xb4, 0xe4, 0x01, 0xf6, 0x50, 0x64, 0xf2, 0xb0, 0x5b, - 0xfd, 0x42, 0x2e, 0x4f, 0x80, 0x42, 0x82, 0x9d, 0x98, 0x5b, 0xa0, 0x0f, - 0x96, 0x8e, 0x54, 0x2c, 0x63, 0x0f, 0x2f, 0xd3, 0x46, 0xbc, 0x45, 0x33, - 0x4b, 0x29, 0x4d, 0x0e, 0x52, 0x44, 0x1e, 0x86, 0x64, 0x6c, 0xad, 0x8b, - 0x41, 0x54, 0xa8, 0xae, 0xa2, 0xda, 0x08, 0x11, 0x92, 0x8c, 0x6b, 0x3a, - 0x34, 0xdc, 0x62, 0x78, 0x23, 0xaf, 0x37, 0x73, 0x57, 0xb6, 0x93, 0xa2, - 0x21, 0x35, 0xe6, 0x5a, 0xce, 0x8a, 0x73, 0xf5, 0xbd, 0x77, 0x0f, 0xf2, - 0x08, 0xf1, 0x94, 0xd1, 0x34, 0x9d, 0x06, 0xda, 0x33, 0xf8, 0x6e, 0x4c, - 0x69, 0x95, 0x61, 0x85, 0xb3, 0x5e, 0x9b, 0xc4, 0x71, 0xc4, 0x0e, 0x03, - 0x1a, 0x6d, 0xe9, 0x3c, 0x2a, 0x9f, 0x76, 0xf1, 0x74, 0x98, 0x10, 0x0b, - 0xfd, 0xc1, 0x40, 0x54, 0x51, 0x86, 0x91, 0x81, 0xce, 0x56, 0x41, 0xc0, - 0xed, 0x8c, 0x1e, 0xd4, 0xc1, 0x1c, 0x51, 0x87, 0x83, 0xb3, 0xb7, 0xed, - 0x0c, 0x61, 0xc2, 0xee, 0x18, 0x0b, 0xf6, 0x5a, 0x64, 0xbb, 0x66, 0x80, - 0xa5, 0x08, 0x30, 0x3f, 0x7c, 0x82, 0xd4, 0xf4, 0x38, 0x35, 0xc7, 0x2e, - 0x67, 0xc8, 0xdc, 0xd2, 0x4f, 0xfd, 0x80, 0x1d, 0xc3, 0x34, 0x6a, 0x64, - 0x1d, 0x0c, 0x15, 0x0e, 0x86, 0x4f, 0x78, 0x10, 0x4e, 0xdc, 0x6f, 0x3c, - 0x8f, 0xea, 0xb5, 0x7b, 0xd7, 0xb1, 0xe0, 0x3d, 0x4c, 0x2d, 0x9a, 0xc6, - 0x0d, 0x62, 0x98, 0x98, 0xeb, 0x86, 0x07, 0xa3, 0xd3, 0xf4, 0x40, 0xef, - 0x6d, 0x22, 0xad, 0xc8, 0xb0, 0x09, 0x02, 0x4d, 0x37, 0x32, 0x76, 0x73, - 0xbf, 0xc1, 0xf9, 0xbd, 0xed, 0x4e, 0xd9, 0xeb, 0x25, 0x5f, 0xe6, 0x28, - 0x36, 0x0e, 0x46, 0xe6, 0x0d, 0x87, 0x83, 0xa6, 0xc4, 0xe8, 0x9b, 0xd9, - 0x67, 0xbd, 0xb0, 0x81, 0x18, 0xc6, 0x7c, 0xe7, 0x12, 0x06, 0x59, 0x1e, - 0xa9, 0xfc, 0xb2, 0xa5, 0x05, 0xc3, 0xe3, 0x2f, 0x45, 0x92, 0xb1, 0x75, - 0xb3, 0xed, 0x95, 0xaf, 0x41, 0xed, 0x04, 0x15, 0x90, 0xcb, 0xa9, 0x65, - 0xb0, 0x97, 0xbe, 0x6f, 0x6b, 0x00, 0xfc, 0x53, 0xb8, 0xea, 0xd3, 0xb9, - 0x40, 0x23, 0x2b, 0x15, 0x9b, 0xa2, 0x49, 0xd9, 0x71, 0x05, 0x48, 0x06, - 0x1b, 0x96, 0xe4, 0x60, 0x34, 0x8c, 0x34, 0x9f, 0xbc, 0x88, 0x3f, 0xc9, - 0x76, 0xbf, 0x71, 0x11, 0x6a, 0xfc, 0x60, 0xbf, 0x0d, 0x26, 0x93, 0xc1, - 0x78, 0xf6, 0xcc, 0x4a, 0xf1, 0xb1, 0x6f, 0xaf, 0x86, 0xd7, 0x83, 0xa7, - 0xe9, 0xd0, 0xce, 0xee, 0x86, 0xf6, 0x71, 0xf2, 0xf0, 0x79, 0x32, 0xf8, - 0x62, 0x47, 0xd3, 0x30, 0x27, 0x7b, 0x63, 0x6f, 0x27, 0xc3, 0xa1, 0x7d, - 0xb8, 0xb5, 0xd7, 0x77, 0x83, 0xc9, 0xe7, 0x61, 0x0f, 0xef, 0x4d, 0x86, - 0x78, 0x23, 0x5e, 0x0b, 0x53, 0xb3, 0xd1, 0x02, 0xf4, 0xd6, 0x03, 0xff, - 0x79, 0xf8, 0xf7, 0xd9, 0x70, 0x3c, 0xb3, 0x8f, 0xc3, 0xc9, 0x97, 0xd1, - 0x6c, 0x46, 0xab, 0x5d, 0x3d, 0xdb, 0xc1, 0xe3, 0x23, 0x2d, 0x3e, 0xb8, - 0xba, 0x1f, 0xda, 0xfb, 0xc1, 0x37, 0x62, 0xf1, 0xf0, 0xef, 0xd7, 0xc3, - 0xc7, 0x99, 0xfd, 0x76, 0x37, 0x1c, 0x9b, 0x07, 0x2c, 0xff, 0x6d, 0x44, - 0xf4, 0x4c, 0x67, 0x03, 0x7c, 0x30, 0x1a, 0xdb, 0x6f, 0x93, 0xd1, 0x6c, - 0x34, 0xfe, 0xcc, 0x0b, 0x62, 0x34, 0x77, 0x32, 0xfa, 0x7c, 0x37, 0xb3, - 0x77, 0x0f, 0xf7, 0x37, 0xc3, 0x09, 0xcf, 0xef, 0x7e, 0xa0, 0xdd, 0xf9, - 0x43, 0xfb, 0x38, 0x98, 0xcc, 0x46, 0xc3, 0xa9, 0x21, 0x3a, 0xbe, 0x8e, - 0x6e, 0xba, 0x87, 0x3a, 0x1b, 0x4c, 0x89, 0xec, 0x33, 0xfb, 0x6d, 0x34, - 0xbb, 0x7b, 0x78, 0x9a, 0x35, 0xc4, 0xe3, 0x70, 0x83, 0xf1, 0xb3, 0xfd, - 0xeb, 0x68, 0x7c, 0xd3, 0xb3, 0xc3, 0x11, 0x2f, 0x34, 0xfc, 0xfb, 0xe3, - 0x64, 0x38, 0xa5, 0xf3, 0x1b, 0x5a, 0x7b, 0xf4, 0x85, 0x28, 0x1e, 0xd2, - 0xc3, 0xd1, 0xf8, 0xfa, 0xfe, 0xe9, 0x86, 0x47, 0x83, 0xaf, 0x68, 0x85, - 0xf1, 0xc3, 0x8c, 0xf8, 0x44, 0x27, 0x23, 0x3a, 0x67, 0x0f, 0xcc, 0x9a, - 0xf0, 0x6e, 0x58, 0x9d, 0x88, 0xa1, 0xf5, 0xcd, 0x97, 0xe1, 0x84, 0xf8, - 0x37, 0x9e, 0x0d, 0xae, 0x46, 0xf7, 0x23, 0xda, 0x12, 0xb3, 0xc4, 0xb7, - 0xa3, 0xd9, 0x98, 0xb6, 0xe0, 0x89, 0xe3, 0x81, 0x50, 0x7e, 0xfd, 0x74, - 0x3f, 0xa0, 0x43, 0x3c, 0x4d, 0x1e, 0x1f, 0xa6, 0x43, 0xd4, 0x74, 0xc0, - 0x42, 0x5a, 0x84, 0x18, 0x3e, 0x19, 0x4d, 0xff, 0x6a, 0x07, 0x53, 0xa3, - 0x8c, 0xfd, 0xdb, 0xd3, 0xa0, 0x59, 0x88, 0xb8, 0x4b, 0x6b, 0x7c, 0x19, - 0x8c, 0xaf, 0x59, 0x50, 0x7b, 0x82, 0xc4, 0x71, 0xed, 0xf3, 0xc3, 0x13, - 0x42, 0x09, 0x9d, 0xfb, 0xfe, 0x06, 0x2f, 0x98, 0xf0, 0x02, 0x18, 0x35, - 0xb4, 0x37, 0xc3, 0xdb, 0xe1, 0xf5, 0x6c, 0xf4, 0x95, 0xc4, 0x4b, 0x6f, - 0xd2, 0x36, 0xd3, 0xa7, 0x2f, 0x43, 0xe5, 0xf7, 0x74, 0xc6, 0x0c, 0xba, - 0xbf, 0xb7, 0xe3, 0xe1, 0x35, 0xd1, 0x3b, 0x98, 0x3c, 0xdb, 0xe9, 0x70, - 0xf2, 0x75, 0x74, 0x0d, 0x3e, 0x98, 0xc9, 0xf0, 0x71, 0x30, 0x22, 0xf6, - 0x63, 0x6a, 0x7a, 0x32, 0xc1, 0x2a, 0x0f, 0x63, 0x71, 0x38, 0x9f, 0xfa, - 0x10, 0x1e, 0x69, 0xc9, 0xf0, 0x2b, 0x74, 0xe0, 0x69, 0x7c, 0x8f, 0xd3, - 0x4e, 0x86, 0x7f, 0x7b, 0xa2, 0xf3, 0x1c, 0xd1, 0x04, 0xac, 0x31, 0xf8, - 0x4c, 0xda, 0x06, 0x66, 0x46, 0x72, 0x37, 0xdf, 0x46, 0xb4, 0x39, 0x24, - 0xb4, 0x2f, 0xfc, 0x1e, 0x7f, 0x42, 0x0f, 0x5a, 0xe1, 0x3f, 0x93, 0x1a, - 0x3d, 0xd8, 0x2f, 0x83, 0x67, 0x19, 0xd5, 0x7e, 0x56, 0xf5, 0x20, 0x32, - 0x9b, 0x59, 0xee, 0xae, 0x56, 0x90, 0x52, 0xb4, 0xda, 0x39, 0xb8, 0x7a, - 0x00, 0x0f, 0xae, 0x88, 0x9e, 0x11, 0x93, 0x45, 0x84, 0x80, 0x21, 0x10, - 0xd1, 0xcd, 0xe0, 0xcb, 0xe0, 0xf3, 0x70, 0xda, 0x33, 0x8d, 0x12, 0xf0, - 0xd6, 0x3a, 0x5e, 0xde, 0xb3, 0xd3, 0xc7, 0xe1, 0xf5, 0x08, 0xff, 0x41, - 0xcf, 0x49, 0xf5, 0x48, 0xd6, 0xf7, 0xc2, 0x15, 0xb2, 0xa2, 0xbf, 0x3d, - 0x41, 0x8a, 0xf4, 0x83, 0x2e, 0x62, 0x07, 0x24, 0x4e, 0x1c, 0x0d, 0x7a, - 0xa8, 0x22, 0x83, 0x0d, 0x42, 0xd7, 0xc6, 0x41, 0x47, 0x68, 0xef, 0x7d, - 0xbb, 0x3c, 0x6f, 0xf7, 0xde, 0xd3, 0x3f, 0xe8, 0xc5, 0xfd, 0xc3, 0x14, - 0xca, 0x46, 0x9b, 0xcc, 0x06, 0x96, 0x29, 0xa6, 0x7f, 0x5f, 0x0d, 0xf1, - 0xf6, 0x64, 0x38, 0x26, 0x7e, 0xb1, 0x39, 0x0d, 0xae, 0xaf, 0x9f, 0x26, - 0x64, 0x5a, 0x78, 0x03, 0x5f, 0x10, 0x35, 0xd3, 0x27, 0x32, 0xb6, 0xd1, - 0x98, 0x85, 0x62, 0x70, 0x5e, 0xb6, 0xe6, 0xd1, 0xe4, 0x26, 0xd8, 0x13, - 0xf3, 0xd9, 0xde, 0x0e, 0x46, 0xf7, 0x4f, 0x93, 0x03, 0x1d, 0xa3, 0x9d, - 0x1f, 0x88, 0x85, 0x58, 0x92, 0x75, 0xad, 0x11, 0x48, 0x50, 0xb2, 0xe9, - 0x45, 0x8f, 0x75, 0xc0, 0x8e, 0x6e, 0x69, 0xab, 0xeb, 0x3b, 0x95, 0x9e, - 0xed, 0x58, 0xed, 0xb3, 0xbd, 0x23, 0x51, 0x5c, 0x0d, 0xe9, 0xb5, 0xc1, - 0xcd, 0xd7, 0x11, 0x3c, 0x8f, 0xec, 0x63, 0xc8, 0x16, 0xa6, 0x23, 0xe5, - 0xc9, 0x83, 0xae, 0xa0, 0x7c, 0x3c, 0xe5, 0xed, 0xe8, 0xb4, 0xfc, 0xf5, - 0x91, 0x01, 0xff, 0xee, 0x17, 0x77, 0x32, 0x4c, 0x35, 0xe0, 0xac, 0x55, - 0x2a, 0xb1, 0x33, 0x06, 0x0a, 0xf4, 0xe3, 0x33, 0x3c, 0xf3, 0x98, 0x50, - 0x91, 0x86, 0x43, 0x8f, 0x4f, 0x35, 0x84, 0x2e, 0x29, 0x02, 0x67, 0xc5, - 0x96, 0xa2, 0xb8, 0xc2, 0xa6, 0x76, 0xda, 0x32, 0xba, 0x12, 0xa7, 0xb3, - 0x7c, 0x1a, 0x55, 0x5f, 0xf8, 0xca, 0x88, 0xaf, 0x0c, 0xe5, 0x2a, 0x52, - 0x4e, 0xab, 0x7d, 0x13, 0xa8, 0x24, 0x05, 0xd4, 0xcc, 0x1c, 0xa9, 0x05, - 0x8a, 0x0e, 0x5c, 0xbb, 0x5e, 0x23, 0x15, 0x11, 0x74, 0x24, 0xd3, 0xf0, - 0x1c, 0xac, 0xd2, 0xca, 0x74, 0x83, 0x86, 0x04, 0xcb, 0xe6, 0x8e, 0x0f, - 0xe6, 0x97, 0x3a, 0x45, 0xd0, 0xe8, 0xf2, 0x68, 0xd3, 0x53, 0x0e, 0x65, - 0xc6, 0x70, 0x89, 0x2e, 0x94, 0x6e, 0xab, 0x2a, 0xd1, 0xce, 0x54, 0x8b, - 0xa1, 0x9a, 0x91, 0xdf, 0x22, 0xee, 0xa9, 0x02, 0xe8, 0x70, 0xca, 0xe4, - 0x93, 0x15, 0x8e, 0x06, 0x8a, 0x9b, 0xaf, 0x37, 0xe1, 0x65, 0x9e, 0x02, - 0xe4, 0x56, 0x14, 0x9e, 0x68, 0x2b, 0x06, 0x0d, 0xc4, 0xe6, 0x7a, 0xa9, - 0x5c, 0x5a, 0x91, 0xc9, 0x42, 0x42, 0x12, 0xaf, 0x6e, 0xa7, 0xad, 0x2d, - 0x42, 0xf9, 0x5e, 0xf1, 0x5c, 0x3b, 0x92, 0xcc, 0x93, 0x3e, 0x58, 0x8a, - 0xd7, 0xf0, 0x6b, 0x2e, 0xb8, 0x30, 0x02, 0x0c, 0x43, 0x01, 0x0c, 0xf6, - 0xcf, 0x1a, 0xdc, 0x70, 0x46, 0xc0, 0x3f, 0xd7, 0xf2, 0x96, 0xdd, 0x16, - 0x9c, 0x2a, 0xf1, 0xc4, 0x0e, 0xcf, 0xfb, 0xf1, 0x41, 0x6b, 0x69, 0x4e, - 0xf0, 0x85, 0x48, 0x00, 0x00, 0x62, 0x92, 0x6a, 0xd7, 0xbf, 0x96, 0x4e, - 0x9a, 0x9b, 0x44, 0xc7, 0xbf, 0xf9, 0x97, 0xee, 0x5d, 0xeb, 0x7f, 0x61, - 0xec, 0xe0, 0xdf, 0xf4, 0x1e, 0xd6, 0xc8, 0x93, 0x8d, 0xfb, 0xb7, 0x7c, - 0xc7, 0xf9, 0x67, 0x74, 0x67, 0xa8, 0x23, 0xaf, 0xcb, 0xe6, 0x42, 0x63, - 0x47, 0x4a, 0x02, 0x73, 0xdb, 0xfb, 0x60, 0x32, 0x27, 0x59, 0x1d, 0x1f, - 0xea, 0x3c, 0x76, 0xb7, 0xb8, 0x9d, 0xbf, 0xf6, 0x1d, 0x80, 0xd8, 0xcc, - 0xe4, 0x9d, 0x46, 0x44, 0xed, 0x75, 0x09, 0xb9, 0x5f, 0x1e, 0x36, 0xb9, - 0x6f, 0x9b, 0x5e, 0xbc, 0xca, 0x79, 0x77, 0x16, 0xfa, 0xe2, 0x10, 0x28, - 0xf7, 0x8f, 0x33, 0x20, 0xee, 0xb8, 0x6a, 0xbe, 0xb5, 0xc6, 0xf0, 0x8e, - 0xb4, 0x66, 0xab, 0x06, 0x5d, 0x91, 0x59, 0x10, 0x2b, 0x7b, 0x32, 0x15, - 0x42, 0x99, 0x4b, 0x08, 0xd8, 0x70, 0x2c, 0x21, 0x68, 0x5f, 0x36, 0xf7, - 0x2c, 0xb4, 0x23, 0xc8, 0x65, 0xdc, 0x8c, 0x07, 0x03, 0xc3, 0xe0, 0x26, - 0x21, 0x6a, 0x2c, 0xb1, 0x1f, 0x7b, 0x89, 0xb9, 0xbf, 0x23, 0xf4, 0x4e, - 0x1d, 0x2b, 0x06, 0xaf, 0xf0, 0x03, 0x36, 0xcb, 0x05, 0x72, 0xbe, 0xb8, - 0x8b, 0x84, 0xca, 0xeb, 0xd1, 0x51, 0x40, 0x8f, 0xf5, 0xb2, 0x9d, 0x97, - 0xe8, 0x8c, 0x83, 0xfc, 0x48, 0x7e, 0xe8, 0x81, 0xc9, 0x94, 0xad, 0x74, - 0x2b, 0x5b, 0x5e, 0x5e, 0x22, 0x71, 0x25, 0x5d, 0xfd, 0x9d, 0x58, 0x57, - 0x2f, 0xfa, 0xf3, 0x5a, 0xff, 0xf9, 0xcd, 0x7e, 0x5c, 0x41, 0xc1, 0x78, - 0x12, 0xca, 0x01, 0xf1, 0x34, 0x08, 0x2a, 0x66, 0xe2, 0x44, 0x79, 0x88, - 0x40, 0x2e, 0x57, 0x02, 0x19, 0x3b, 0x0c, 0xa5, 0x95, 0x45, 0x4e, 0x67, - 0x92, 0x5b, 0x80, 0x04, 0xf4, 0xc9, 0x77, 0xa5, 0x99, 0x94, 0x38, 0x3b, - 0x83, 0x19, 0x9d, 0x39, 0xd4, 0x5e, 0xf0, 0x70, 0xe1, 0xfa, 0x48, 0x02, - 0x56, 0x96, 0xcd, 0xe8, 0x6e, 0x96, 0x7e, 0x17, 0x7f, 0x68, 0x78, 0xce, - 0x91, 0xde, 0x63, 0xff, 0xe2, 0xe5, 0xee, 0x44, 0x67, 0xa2, 0x95, 0x8c, - 0xc8, 0xe9, 0xe0, 0xd4, 0xe7, 0x9c, 0xd0, 0xf4, 0xab, 0xc0, 0xf8, 0xa0, - 0xe2, 0x7f, 0xfa, 0xb9, 0xb7, 0x67, 0xcb, 0x30, 0x65, 0x0b, 0x1b, 0x66, - 0xb0, 0x2e, 0xb9, 0xca, 0xfe, 0xd7, 0x0b, 0x4a, 0x1b, 0xf4, 0xda, 0xe8, - 0xe0, 0x6a, 0xfa, 0x70, 0x4f, 0x88, 0xe2, 0xfe, 0x39, 0x46, 0xc3, 0x97, - 0xac, 0x15, 0xaa, 0x10, 0xb6, 0xda, 0x91, 0x8a, 0xff, 0x83, 0x2f, 0xac, - 0xbe, 0xbd, 0xeb, 0xb7, 0x86, 0xb1, 0xef, 0x11, 0xda, 0xe8, 0xc1, 0xee, - 0xdc, 0x65, 0xd8, 0x07, 0x7c, 0xdd, 0x73, 0x10, 0xbc, 0x82, 0xde, 0x98, - 0x6a, 0x0a, 0x45, 0x21, 0xf7, 0xba, 0x8c, 0xb7, 0x5b, 0xbc, 0x8b, 0x09, - 0xe9, 0xcb, 0x84, 0xca, 0x7a, 0xb7, 0x45, 0x46, 0xc7, 0xfd, 0xac, 0x76, - 0xb6, 0x3b, 0xd0, 0xc7, 0x34, 0x34, 0x5f, 0xab, 0x06, 0x87, 0xcb, 0xb6, - 0x9d, 0x3b, 0x24, 0x9d, 0x84, 0xf1, 0xe4, 0x2d, 0xb3, 0x87, 0x15, 0xb7, - 0x50, 0xb4, 0xeb, 0xd1, 0xee, 0xc7, 0x2d, 0x62, 0x8f, 0x6a, 0xe6, 0x0e, - 0x95, 0x0c, 0xf4, 0xd6, 0xb8, 0xf3, 0x4b, 0x09, 0x19, 0x97, 0x12, 0xa2, - 0x2b, 0x4e, 0x47, 0x49, 0xd3, 0x1b, 0x4b, 0x52, 0x91, 0x67, 0x0f, 0x30, - 0x77, 0x66, 0x53, 0xd0, 0x92, 0xef, 0x17, 0x44, 0xc1, 0x77, 0xae, 0x60, - 0x6c, 0x5c, 0x5e, 0x13, 0xc3, 0xdc, 0xc6, 0xbf, 0x7f, 0x8f, 0xd2, 0x1e, - 0x67, 0xcd, 0xbe, 0x4e, 0xa5, 0x83, 0xdb, 0x5c, 0xf3, 0xd7, 0xbb, 0x22, - 0x7a, 0x58, 0x9e, 0xc1, 0xc3, 0x0d, 0x64, 0x7e, 0xc5, 0x91, 0x4f, 0x29, - 0x76, 0xf4, 0xd9, 0x79, 0xb8, 0xec, 0xde, 0x4c, 0x1d, 0xeb, 0xd7, 0x1b, - 0x57, 0x5e, 0x58, 0xb9, 0xbe, 0x5d, 0x1a, 0x8f, 0x5c, 0x3d, 0x93, 0x9e, - 0x46, 0x2e, 0x73, 0xeb, 0x68, 0x2a, 0xe3, 0xba, 0x5c, 0x5b, 0x85, 0x6b, - 0x2f, 0xda, 0x9c, 0xb5, 0xf7, 0x51, 0x02, 0x82, 0x48, 0x57, 0x26, 0xc7, - 0xed, 0x78, 0x2f, 0x97, 0x34, 0xef, 0x74, 0x1e, 0x3d, 0xc1, 0xb8, 0xc4, - 0x36, 0xa3, 0xb0, 0xc1, 0xc3, 0x52, 0xfc, 0x0d, 0xd4, 0x54, 0x6e, 0x55, - 0x3c, 0x17, 0xbb, 0x62, 0xb9, 0xcb, 0x5d, 0xf8, 0x2b, 0x3d, 0x10, 0xd5, - 0xe6, 0xbb, 0x66, 0x23, 0x19, 0x03, 0x6a, 0x09, 0x60, 0x0b, 0x01, 0xc6, - 0x50, 0x27, 0xac, 0x9b, 0xd3, 0x42, 0xff, 0x88, 0xf4, 0xfc, 0x1d, 0x1a, - 0x61, 0x3c, 0x1a, 0x48, 0xd6, 0xe8, 0xe5, 0x16, 0xaf, 0xb7, 0x3a, 0x90, - 0x82, 0x79, 0x17, 0x7f, 0xd1, 0x54, 0xcf, 0x68, 0xb3, 0xbf, 0x80, 0x1a, - 0x7b, 0x97, 0x2c, 0xbe, 0xbb, 0x92, 0x9d, 0xe0, 0xbf, 0x64, 0x62, 0x04, - 0xf7, 0xbd, 0x49, 0x4b, 0x66, 0x3b, 0xb2, 0x34, 0x8a, 0x9f, 0x3d, 0xfb, - 0x91, 0xd0, 0x56, 0x99, 0x66, 0xfc, 0x57, 0x94, 0x00, 0x76, 0xc8, 0x83, - 0x1e, 0xfe, 0x8e, 0x0e, 0x9f, 0x86, 0x9b, 0x5c, 0x5f, 0x49, 0x83, 0xb4, - 0x82, 0x7b, 0xc2, 0x3f, 0x36, 0x05, 0x15, 0xed, 0x10, 0xb5, 0xc5, 0x0c, - 0xe8, 0x4f, 0x2c, 0x5f, 0x2e, 0x63, 0x98, 0xe8, 0xf2, 0x6b, 0xf3, 0xf7, - 0x0c, 0x34, 0xed, 0xb4, 0x32, 0x76, 0x45, 0x09, 0x9a, 0xb1, 0x65, 0x81, - 0x5e, 0x34, 0x9c, 0xcd, 0xbc, 0xa4, 0x4f, 0x9a, 0x6a, 0x8c, 0x09, 0x63, - 0xe0, 0x7c, 0x0f, 0x13, 0x8e, 0x5f, 0xa2, 0x15, 0xb7, 0x19, 0x85, 0x12, - 0xf2, 0xad, 0x3c, 0xc4, 0x15, 0xef, 0x18, 0x55, 0xd0, 0x7d, 0x33, 0x7e, - 0x62, 0x74, 0xf1, 0x50, 0x2d, 0x12, 0xa7, 0xf0, 0x16, 0xa6, 0x41, 0xc3, - 0x4d, 0xee, 0x25, 0x41, 0xb2, 0x70, 0x4f, 0xe6, 0xf0, 0xef, 0xb7, 0x30, - 0xc7, 0xff, 0x7e, 0x8b, 0x83, 0x22, 0xe6, 0xff, 0x06, 0x00, 0x00, 0xff, - 0xff, 0x82, 0x4d, 0xf9, 0x2b, 0x69, 0x46, 0x00, 0x00, - }, - "conf/license/GPL v2", - ) -} - -func conf_license_mit_license() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x5c, 0x52, - 0xcf, 0x8e, 0xda, 0x3c, 0x10, 0xbf, 0xfb, 0x29, 0x46, 0x9c, 0x76, 0xa5, - 0x68, 0xbf, 0xaf, 0x55, 0x4f, 0xbd, 0x99, 0xc4, 0x2c, 0x56, 0x43, 0x1c, - 0x39, 0x66, 0x29, 0xc7, 0x90, 0x18, 0xe2, 0x2a, 0xc4, 0x28, 0x76, 0x8a, - 0xf6, 0xed, 0x3b, 0x13, 0xd8, 0xdd, 0x6e, 0x25, 0x24, 0x34, 0xe3, 0xf9, - 0xfd, 0x9b, 0x89, 0xe9, 0x2c, 0x6c, 0xa4, 0x81, 0xdc, 0x35, 0x76, 0x08, - 0x16, 0x1e, 0xb0, 0x78, 0x64, 0x2c, 0xf5, 0x97, 0xd7, 0xd1, 0x9d, 0xba, - 0x08, 0x0f, 0xcd, 0x23, 0x7c, 0xfd, 0xff, 0xcb, 0x37, 0xc6, 0x4a, 0x3b, - 0x9e, 0x5d, 0x08, 0xce, 0x0f, 0xe0, 0x02, 0x74, 0x76, 0xb4, 0x87, 0x57, - 0x38, 0x8d, 0xf5, 0x10, 0x6d, 0x9b, 0xc0, 0x71, 0xb4, 0x16, 0xfc, 0x11, - 0x9a, 0xae, 0x1e, 0x4f, 0x36, 0x81, 0xe8, 0xa1, 0x1e, 0x5e, 0xe1, 0x62, - 0xc7, 0x80, 0x00, 0x7f, 0x88, 0xb5, 0x1b, 0xdc, 0x70, 0x82, 0x1a, 0x1a, - 0xe4, 0x66, 0x38, 0x19, 0x3b, 0xa4, 0x09, 0xfe, 0x18, 0xaf, 0xf5, 0x68, - 0x71, 0xb8, 0x85, 0x3a, 0x04, 0xdf, 0xb8, 0x1a, 0xf9, 0xa0, 0xf5, 0xcd, - 0x74, 0xb6, 0x43, 0xac, 0x23, 0xe9, 0x1d, 0x5d, 0x6f, 0x03, 0x3c, 0x44, - 0x34, 0xbb, 0xa8, 0xee, 0x88, 0xc5, 0xe3, 0x2c, 0xd2, 0xda, 0xba, 0x67, - 0x6e, 0x00, 0x7a, 0x7b, 0x7b, 0x82, 0xab, 0x8b, 0x9d, 0x9f, 0x22, 0x8c, - 0x36, 0xc4, 0xd1, 0x35, 0xc4, 0x91, 0x80, 0x1b, 0x9a, 0x7e, 0x6a, 0xc9, - 0xc3, 0xdb, 0x73, 0xef, 0xce, 0xee, 0xae, 0x40, 0xf0, 0x39, 0x70, 0x60, - 0x48, 0x3a, 0x05, 0x4c, 0x40, 0x3e, 0x13, 0x38, 0xfb, 0xd6, 0x1d, 0xe9, - 0xdf, 0xce, 0xb1, 0x2e, 0xd3, 0xa1, 0x77, 0xa1, 0x4b, 0xa0, 0x75, 0x44, - 0x7d, 0x98, 0x22, 0x36, 0x03, 0x35, 0xe7, 0xfd, 0x25, 0x94, 0xe3, 0x3f, - 0x3f, 0x42, 0xb0, 0x7d, 0xcf, 0x90, 0xc1, 0xa1, 0xef, 0x39, 0xeb, 0x87, - 0xbb, 0x79, 0x86, 0xac, 0x5f, 0x68, 0xa1, 0xf1, 0xbe, 0xa2, 0x40, 0x9d, - 0x6b, 0xe7, 0xcf, 0x9f, 0x93, 0xb8, 0xc0, 0x8e, 0xd3, 0x38, 0xa0, 0xa4, - 0x9d, 0x31, 0xad, 0xc7, 0x95, 0xcd, 0x8a, 0xbf, 0x6c, 0x13, 0xa9, 0x43, - 0xe3, 0x47, 0xdf, 0xf7, 0xfe, 0x4a, 0xd1, 0x1a, 0x3f, 0xb4, 0x8e, 0x12, - 0x85, 0xef, 0x8c, 0xd1, 0x71, 0xeb, 0x83, 0xff, 0x6d, 0xe7, 0x2c, 0xb7, - 0x7b, 0x0e, 0x3e, 0xa2, 0xd5, 0x9b, 0x05, 0x3a, 0xc0, 0xe5, 0xe3, 0xaa, - 0xf7, 0xa7, 0xd0, 0xd5, 0x7d, 0x0f, 0x07, 0x7b, 0x5f, 0x18, 0xea, 0xe2, - 0x7a, 0xeb, 0xbf, 0xe2, 0x8c, 0x24, 0x1f, 0x22, 0x1e, 0xde, 0xd5, 0x3d, - 0x5c, 0xfc, 0x38, 0xeb, 0xfd, 0x1b, 0xf3, 0x09, 0xf5, 0xd7, 0x02, 0x2a, - 0xb5, 0x32, 0x3b, 0xae, 0x05, 0xc8, 0x0a, 0x4a, 0xad, 0x5e, 0x64, 0x26, - 0x32, 0x58, 0xf0, 0x0a, 0xeb, 0x45, 0x02, 0x3b, 0x69, 0xd6, 0x6a, 0x6b, - 0x00, 0x27, 0x34, 0x2f, 0xcc, 0x1e, 0xd4, 0x0a, 0x78, 0xb1, 0x87, 0x1f, - 0xb2, 0xc8, 0x12, 0x10, 0x3f, 0x4b, 0x2d, 0xaa, 0x0a, 0x94, 0x66, 0x72, - 0x53, 0xe6, 0x52, 0x60, 0x4f, 0x16, 0x69, 0xbe, 0xcd, 0x64, 0xf1, 0x0c, - 0x4b, 0xc4, 0x15, 0x0a, 0x3f, 0x5d, 0x89, 0xdf, 0x2c, 0x92, 0x1a, 0x05, - 0x24, 0x78, 0xa7, 0x92, 0xa2, 0x22, 0xb2, 0x8d, 0xd0, 0xe9, 0x1a, 0x4b, - 0xbe, 0x94, 0xb9, 0x34, 0xfb, 0x84, 0xad, 0xa4, 0x29, 0x88, 0x73, 0xa5, - 0x34, 0x70, 0x28, 0xb9, 0x36, 0x32, 0xdd, 0xe6, 0x5c, 0x43, 0xb9, 0xd5, - 0xa5, 0xaa, 0x04, 0xca, 0x67, 0x48, 0x5b, 0xc8, 0x62, 0xa5, 0x51, 0x45, - 0x6c, 0x44, 0x61, 0x9e, 0x50, 0x15, 0x7b, 0x20, 0x5e, 0xb0, 0x80, 0x6a, - 0xcd, 0xf3, 0x9c, 0xa4, 0x18, 0xdf, 0xa2, 0x7b, 0x4d, 0xfe, 0x20, 0x55, - 0xe5, 0x5e, 0xcb, 0xe7, 0xb5, 0x81, 0xb5, 0xca, 0x33, 0x81, 0xcd, 0xa5, - 0x40, 0x67, 0x7c, 0x99, 0x8b, 0x9b, 0x14, 0x86, 0x4a, 0x73, 0x2e, 0x37, - 0x09, 0x64, 0x7c, 0xc3, 0x9f, 0xc5, 0x8c, 0x52, 0xc8, 0xa2, 0x19, 0x8d, - 0xdd, 0xdc, 0xc1, 0x6e, 0x2d, 0xa8, 0x45, 0x7a, 0x1c, 0x7f, 0xa9, 0x91, - 0xaa, 0xa0, 0x18, 0xa9, 0x2a, 0x8c, 0xc6, 0x32, 0xc1, 0x94, 0xda, 0xbc, - 0x43, 0x77, 0xb2, 0x12, 0x09, 0x70, 0x2d, 0x2b, 0x5a, 0xc8, 0x4a, 0xab, - 0x4d, 0xc2, 0x68, 0x9d, 0x88, 0x50, 0x33, 0x09, 0xe2, 0x0a, 0x71, 0x63, - 0xa1, 0x55, 0xc3, 0xa7, 0x8b, 0xe0, 0x08, 0xd5, 0xdb, 0x4a, 0xbc, 0x13, - 0x42, 0x26, 0x78, 0x8e, 0x5c, 0x15, 0x81, 0x29, 0xe2, 0xdb, 0xf0, 0xd3, - 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x49, 0x86, 0xab, 0x31, 0x29, 0x04, - 0x00, 0x00, - }, - "conf/license/MIT License", - ) -} - -func conf_mysql_sql() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x72, 0x09, - 0xf2, 0x0f, 0x50, 0x70, 0x71, 0x0c, 0x71, 0x74, 0x72, 0x0c, 0x76, 0x55, - 0xf0, 0x74, 0x53, 0x70, 0x8d, 0xf0, 0x0c, 0x0e, 0x09, 0x56, 0x48, 0xcf, - 0x4f, 0x2f, 0xb6, 0xe6, 0x72, 0x0e, 0x72, 0x75, 0x0c, 0x71, 0x45, 0x91, - 0xf7, 0xf3, 0x0f, 0x41, 0x56, 0xa3, 0xe0, 0xec, 0xe1, 0x18, 0xe4, 0xe8, - 0x1c, 0xe2, 0x1a, 0xa4, 0x10, 0xec, 0x1a, 0xa2, 0x50, 0x5a, 0x92, 0x66, - 0xa1, 0xe0, 0xec, 0xef, 0xe3, 0x03, 0xd2, 0x06, 0xe2, 0xc4, 0xa7, 0xa7, - 0xe6, 0xa5, 0x16, 0x25, 0xe6, 0xc4, 0x27, 0x67, 0x5a, 0x73, 0x01, 0x02, - 0x00, 0x00, 0xff, 0xff, 0xcd, 0xf5, 0x53, 0x80, 0x6d, 0x00, 0x00, 0x00, - }, - "conf/mysql.sql", - ) -} - -func conf_supervisor_ini() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x6c, 0xcd, - 0xb1, 0x0a, 0xc2, 0x30, 0x10, 0xc6, 0xf1, 0xfd, 0x9e, 0x22, 0x74, 0xb7, - 0xd9, 0x85, 0x8c, 0x82, 0x8b, 0xf8, 0x00, 0x22, 0x12, 0xda, 0x33, 0x0d, - 0x34, 0x39, 0xf9, 0x72, 0x29, 0xf8, 0xf6, 0xa6, 0x19, 0x5c, 0x74, 0xfd, - 0xfe, 0xbf, 0xe3, 0x6e, 0x2f, 0x48, 0x80, 0x4f, 0xc7, 0x20, 0xa1, 0xdc, - 0xa9, 0x16, 0x86, 0x0b, 0x51, 0x69, 0x92, 0x94, 0x7c, 0x9e, 0x8d, 0x33, - 0x76, 0x91, 0xc4, 0xb6, 0x6d, 0x76, 0x27, 0xb6, 0xa8, 0x87, 0x8e, 0x65, - 0xa1, 0x39, 0x82, 0x27, 0x15, 0xbc, 0x7f, 0x0c, 0xf9, 0xaa, 0xd2, 0x5d, - 0x4b, 0x8a, 0xca, 0x54, 0x74, 0x96, 0xaa, 0x8f, 0x55, 0xc2, 0x33, 0xae, - 0xbc, 0x1f, 0x6c, 0x1e, 0xdd, 0x8e, 0x6d, 0xdb, 0x33, 0x03, 0xff, 0xf2, - 0xa1, 0xed, 0x82, 0x8e, 0x38, 0x6f, 0x11, 0x92, 0x13, 0x67, 0x75, 0xe7, - 0xeb, 0xe5, 0xe4, 0x86, 0xef, 0xd7, 0xc1, 0x18, 0xfa, 0x04, 0x00, 0x00, - 0xff, 0xff, 0x61, 0x60, 0x15, 0x6f, 0xc9, 0x00, 0x00, 0x00, - }, - "conf/supervisor.ini", - ) -} - -// Asset loads and returns the asset for the given name. -// It returns an error if the asset could not be found or -// could not be loaded. -func Asset(name string) ([]byte, error) { - cannonicalName := strings.Replace(name, "\\", "/", -1) - if f, ok := _bindata[cannonicalName]; ok { - return f() - } - return nil, fmt.Errorf("Asset %s not found", name) -} - -// AssetNames returns the names of the assets. -func AssetNames() []string { - names := make([]string, 0, len(_bindata)) - for name := range _bindata { - names = append(names, name) - } - return names -} - -// _bindata is a table, holding each asset generator, mapped to its name. -var _bindata = map[string]func() ([]byte, error){ - "conf/app.ini": conf_app_ini, - "conf/content/git-bare.zip": conf_content_git_bare_zip, - "conf/etc/supervisord.conf": conf_etc_supervisord_conf, - "conf/gitignore/Android": conf_gitignore_android, - "conf/gitignore/C": conf_gitignore_c, - "conf/gitignore/C Sharp": conf_gitignore_c_sharp, - "conf/gitignore/C++": conf_gitignore_c_, - "conf/gitignore/Google Go": conf_gitignore_google_go, - "conf/gitignore/Java": conf_gitignore_java, - "conf/gitignore/Objective-C": conf_gitignore_objective_c, - "conf/gitignore/Python": conf_gitignore_python, - "conf/gitignore/Ruby": conf_gitignore_ruby, - "conf/license/Affero GPL": conf_license_affero_gpl, - "conf/license/Apache v2 License": conf_license_apache_v2_license, - "conf/license/Artistic License 2.0": conf_license_artistic_license_2_0, - "conf/license/BSD (3-Clause) License": conf_license_bsd_3_clause_license, - "conf/license/GPL v2": conf_license_gpl_v2, - "conf/license/MIT License": conf_license_mit_license, - "conf/mysql.sql": conf_mysql_sql, - "conf/supervisor.ini": conf_supervisor_ini, -} diff --git a/modules/captcha/captcha.go b/modules/captcha/captcha.go new file mode 100644 index 0000000000..e43e09dc59 --- /dev/null +++ b/modules/captcha/captcha.go @@ -0,0 +1,201 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Package captcha a middleware that provides captcha service for Macaron. +package captcha + +import ( + "fmt" + "html/template" + "net/http" + "path" + "strings" + + "github.com/Unknwon/macaron" + + "github.com/gogits/cache" + + "github.com/gogits/gogs/modules/base" + "github.com/gogits/gogs/modules/log" +) + +var ( + defaultChars = []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} +) + +const ( + // default captcha attributes + challengeNums = 6 + expiration = 600 + fieldIdName = "captcha_id" + fieldCaptchaName = "captcha" + cachePrefix = "captcha_" + defaultURLPrefix = "/captcha/" +) + +// Captcha struct +type Captcha struct { + store cache.Cache + + // url prefix for captcha image + URLPrefix string + + // specify captcha id input field name + FieldIdName string + // specify captcha result input field name + FieldCaptchaName string + + // captcha image width and height + StdWidth int + StdHeight int + + // captcha chars nums + ChallengeNums int + + // captcha expiration seconds + Expiration int64 + + // cache key prefix + CachePrefix string +} + +// generate key string +func (c *Captcha) key(id string) string { + return c.CachePrefix + id +} + +// generate rand chars with default chars +func (c *Captcha) genRandChars() []byte { + return base.RandomCreateBytes(c.ChallengeNums, defaultChars...) +} + +// beego filter handler for serve captcha image +func (c *Captcha) Handler(ctx *macaron.Context) { + var chars []byte + + id := path.Base(ctx.Req.RequestURI) + if i := strings.Index(id, "."); i != -1 { + id = id[:i] + } + + key := c.key(id) + + if v, ok := c.store.Get(key).([]byte); ok { + chars = v + } else { + ctx.Status(404) + ctx.Write([]byte("captcha not found")) + return + } + + // reload captcha + if len(ctx.Query("reload")) > 0 { + chars = c.genRandChars() + if err := c.store.Put(key, chars, c.Expiration); err != nil { + ctx.Status(500) + ctx.Write([]byte("captcha reload error")) + log.Error(4, "Reload Create Captcha Error: %v", err) + return + } + } + + img := NewImage(chars, c.StdWidth, c.StdHeight) + if _, err := img.WriteTo(ctx.RW()); err != nil { + log.Error(4, "Write Captcha Image Error: %v", err) + } +} + +// tempalte func for output html +func (c *Captcha) CreateCaptchaHtml() template.HTML { + value, err := c.CreateCaptcha() + if err != nil { + log.Error(4, "Create Captcha Error: %v", err) + return "" + } + + // create html + return template.HTML(fmt.Sprintf(``+ + ``+ + ``+ + ``, c.FieldIdName, value, c.URLPrefix, value, c.URLPrefix, value)) +} + +// create a new captcha id +func (c *Captcha) CreateCaptcha() (string, error) { + // generate captcha id + id := string(base.RandomCreateBytes(15)) + + // get the captcha chars + chars := c.genRandChars() + + // save to store + if err := c.store.Put(c.key(id), chars, c.Expiration); err != nil { + return "", err + } + + return id, nil +} + +// verify from a request +func (c *Captcha) VerifyReq(req *http.Request) bool { + req.ParseForm() + return c.Verify(req.Form.Get(c.FieldIdName), req.Form.Get(c.FieldCaptchaName)) +} + +// direct verify id and challenge string +func (c *Captcha) Verify(id string, challenge string) (success bool) { + if len(challenge) == 0 || len(id) == 0 { + return + } + + var chars []byte + + key := c.key(id) + + if v, ok := c.store.Get(key).([]byte); ok && len(v) == len(challenge) { + chars = v + } else { + return + } + + defer func() { + // finally remove it + c.store.Delete(key) + }() + + // verify challenge + for i, c := range chars { + if c != challenge[i]-48 { + return + } + } + + return true +} + +// create a new captcha.Captcha +func NewCaptcha(urlPrefix string, store cache.Cache) *Captcha { + cpt := &Captcha{} + cpt.store = store + cpt.FieldIdName = fieldIdName + cpt.FieldCaptchaName = fieldCaptchaName + cpt.ChallengeNums = challengeNums + cpt.Expiration = expiration + cpt.CachePrefix = cachePrefix + cpt.StdWidth = stdWidth + cpt.StdHeight = stdHeight + + if len(urlPrefix) == 0 { + urlPrefix = defaultURLPrefix + } + + if urlPrefix[len(urlPrefix)-1] != '/' { + urlPrefix += "/" + } + + cpt.URLPrefix = urlPrefix + + base.TemplateFuncs["CreateCaptcha"] = cpt.CreateCaptchaHtml + return cpt +} diff --git a/modules/captcha/image.go b/modules/captcha/image.go new file mode 100644 index 0000000000..c9972ba2c3 --- /dev/null +++ b/modules/captcha/image.go @@ -0,0 +1,487 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package captcha + +import ( + "bytes" + "image" + "image/color" + "image/png" + "io" + "math" +) + +const ( + fontWidth = 11 + fontHeight = 18 + blackChar = 1 + + // Standard width and height of a captcha image. + stdWidth = 240 + stdHeight = 80 + // Maximum absolute skew factor of a single digit. + maxSkew = 0.7 + // Number of background circles. + circleCount = 20 +) + +var font = [][]byte{ + { // 0 + 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, + 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, + 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, + 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + }, + { // 1 + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + }, + { // 2 + 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + }, + { // 3 + 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, + 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + }, + { // 4 + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, + 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, + 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, + 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + }, + { // 5 + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + }, + { // 6 + 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, + 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, + 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, + 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + }, + { // 7 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, + }, + { // 8 + 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, + 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, + 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, + 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + }, + { // 9 + 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, + 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, + 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, + 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, + }, +} + +type Image struct { + *image.Paletted + numWidth int + numHeight int + dotSize int +} + +var prng = &siprng{} + +// randIntn returns a pseudorandom non-negative int in range [0, n). +func randIntn(n int) int { + return prng.Intn(n) +} + +// randInt returns a pseudorandom int in range [from, to]. +func randInt(from, to int) int { + return prng.Intn(to+1-from) + from +} + +// randFloat returns a pseudorandom float64 in range [from, to]. +func randFloat(from, to float64) float64 { + return (to-from)*prng.Float64() + from +} + +func randomPalette() color.Palette { + p := make([]color.Color, circleCount+1) + // Transparent color. + p[0] = color.RGBA{0xFF, 0xFF, 0xFF, 0x00} + // Primary color. + prim := color.RGBA{ + uint8(randIntn(129)), + uint8(randIntn(129)), + uint8(randIntn(129)), + 0xFF, + } + p[1] = prim + // Circle colors. + for i := 2; i <= circleCount; i++ { + p[i] = randomBrightness(prim, 255) + } + return p +} + +// NewImage returns a new captcha image of the given width and height with the +// given digits, where each digit must be in range 0-9. +func NewImage(digits []byte, width, height int) *Image { + m := new(Image) + m.Paletted = image.NewPaletted(image.Rect(0, 0, width, height), randomPalette()) + m.calculateSizes(width, height, len(digits)) + // Randomly position captcha inside the image. + maxx := width - (m.numWidth+m.dotSize)*len(digits) - m.dotSize + maxy := height - m.numHeight - m.dotSize*2 + var border int + if width > height { + border = height / 5 + } else { + border = width / 5 + } + x := randInt(border, maxx-border) + y := randInt(border, maxy-border) + // Draw digits. + for _, n := range digits { + m.drawDigit(font[n], x, y) + x += m.numWidth + m.dotSize + } + // Draw strike-through line. + m.strikeThrough() + // Apply wave distortion. + m.distort(randFloat(5, 10), randFloat(100, 200)) + // Fill image with random circles. + m.fillWithCircles(circleCount, m.dotSize) + return m +} + +// encodedPNG encodes an image to PNG and returns +// the result as a byte slice. +func (m *Image) encodedPNG() []byte { + var buf bytes.Buffer + if err := png.Encode(&buf, m.Paletted); err != nil { + panic(err.Error()) + } + return buf.Bytes() +} + +// WriteTo writes captcha image in PNG format into the given writer. +func (m *Image) WriteTo(w io.Writer) (int64, error) { + n, err := w.Write(m.encodedPNG()) + return int64(n), err +} + +func (m *Image) calculateSizes(width, height, ncount int) { + // Goal: fit all digits inside the image. + var border int + if width > height { + border = height / 4 + } else { + border = width / 4 + } + // Convert everything to floats for calculations. + w := float64(width - border*2) + h := float64(height - border*2) + // fw takes into account 1-dot spacing between digits. + fw := float64(fontWidth + 1) + fh := float64(fontHeight) + nc := float64(ncount) + // Calculate the width of a single digit taking into account only the + // width of the image. + nw := w / nc + // Calculate the height of a digit from this width. + nh := nw * fh / fw + // Digit too high? + if nh > h { + // Fit digits based on height. + nh = h + nw = fw / fh * nh + } + // Calculate dot size. + m.dotSize = int(nh / fh) + // Save everything, making the actual width smaller by 1 dot to account + // for spacing between digits. + m.numWidth = int(nw) - m.dotSize + m.numHeight = int(nh) +} + +func (m *Image) drawHorizLine(fromX, toX, y int, colorIdx uint8) { + for x := fromX; x <= toX; x++ { + m.SetColorIndex(x, y, colorIdx) + } +} + +func (m *Image) drawCircle(x, y, radius int, colorIdx uint8) { + f := 1 - radius + dfx := 1 + dfy := -2 * radius + xo := 0 + yo := radius + + m.SetColorIndex(x, y+radius, colorIdx) + m.SetColorIndex(x, y-radius, colorIdx) + m.drawHorizLine(x-radius, x+radius, y, colorIdx) + + for xo < yo { + if f >= 0 { + yo-- + dfy += 2 + f += dfy + } + xo++ + dfx += 2 + f += dfx + m.drawHorizLine(x-xo, x+xo, y+yo, colorIdx) + m.drawHorizLine(x-xo, x+xo, y-yo, colorIdx) + m.drawHorizLine(x-yo, x+yo, y+xo, colorIdx) + m.drawHorizLine(x-yo, x+yo, y-xo, colorIdx) + } +} + +func (m *Image) fillWithCircles(n, maxradius int) { + maxx := m.Bounds().Max.X + maxy := m.Bounds().Max.Y + for i := 0; i < n; i++ { + colorIdx := uint8(randInt(1, circleCount-1)) + r := randInt(1, maxradius) + m.drawCircle(randInt(r, maxx-r), randInt(r, maxy-r), r, colorIdx) + } +} + +func (m *Image) strikeThrough() { + maxx := m.Bounds().Max.X + maxy := m.Bounds().Max.Y + y := randInt(maxy/3, maxy-maxy/3) + amplitude := randFloat(5, 20) + period := randFloat(80, 180) + dx := 2.0 * math.Pi / period + for x := 0; x < maxx; x++ { + xo := amplitude * math.Cos(float64(y)*dx) + yo := amplitude * math.Sin(float64(x)*dx) + for yn := 0; yn < m.dotSize; yn++ { + r := randInt(0, m.dotSize) + m.drawCircle(x+int(xo), y+int(yo)+(yn*m.dotSize), r/2, 1) + } + } +} + +func (m *Image) drawDigit(digit []byte, x, y int) { + skf := randFloat(-maxSkew, maxSkew) + xs := float64(x) + r := m.dotSize / 2 + y += randInt(-r, r) + for yo := 0; yo < fontHeight; yo++ { + for xo := 0; xo < fontWidth; xo++ { + if digit[yo*fontWidth+xo] != blackChar { + continue + } + m.drawCircle(x+xo*m.dotSize, y+yo*m.dotSize, r, 1) + } + xs += skf + x = int(xs) + } +} + +func (m *Image) distort(amplude float64, period float64) { + w := m.Bounds().Max.X + h := m.Bounds().Max.Y + + oldm := m.Paletted + newm := image.NewPaletted(image.Rect(0, 0, w, h), oldm.Palette) + + dx := 2.0 * math.Pi / period + for x := 0; x < w; x++ { + for y := 0; y < h; y++ { + xo := amplude * math.Sin(float64(y)*dx) + yo := amplude * math.Cos(float64(x)*dx) + newm.SetColorIndex(x, y, oldm.ColorIndexAt(x+int(xo), y+int(yo))) + } + } + m.Paletted = newm +} + +func randomBrightness(c color.RGBA, max uint8) color.RGBA { + minc := min3(c.R, c.G, c.B) + maxc := max3(c.R, c.G, c.B) + if maxc > max { + return c + } + n := randIntn(int(max-maxc)) - int(minc) + return color.RGBA{ + uint8(int(c.R) + n), + uint8(int(c.G) + n), + uint8(int(c.B) + n), + uint8(c.A), + } +} + +func min3(x, y, z uint8) (m uint8) { + m = x + if y < m { + m = y + } + if z < m { + m = z + } + return +} + +func max3(x, y, z uint8) (m uint8) { + m = x + if y > m { + m = y + } + if z > m { + m = z + } + return +} diff --git a/modules/captcha/image_test.go b/modules/captcha/image_test.go new file mode 100644 index 0000000000..30b3ea4ae3 --- /dev/null +++ b/modules/captcha/image_test.go @@ -0,0 +1,42 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package captcha + +import ( + "testing" + + "github.com/astaxie/beego/utils" +) + +type byteCounter struct { + n int64 +} + +func (bc *byteCounter) Write(b []byte) (int, error) { + bc.n += int64(len(b)) + return len(b), nil +} + +func BenchmarkNewImage(b *testing.B) { + b.StopTimer() + d := utils.RandomCreateBytes(challengeNums, defaultChars...) + b.StartTimer() + for i := 0; i < b.N; i++ { + NewImage(d, stdWidth, stdHeight) + } +} + +func BenchmarkImageWriteTo(b *testing.B) { + b.StopTimer() + d := utils.RandomCreateBytes(challengeNums, defaultChars...) + b.StartTimer() + counter := &byteCounter{} + for i := 0; i < b.N; i++ { + img := NewImage(d, stdWidth, stdHeight) + img.WriteTo(counter) + b.SetBytes(counter.n) + counter.n = 0 + } +} diff --git a/modules/captcha/siprng.go b/modules/captcha/siprng.go new file mode 100644 index 0000000000..c059b9f7bf --- /dev/null +++ b/modules/captcha/siprng.go @@ -0,0 +1,267 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package captcha + +import ( + "crypto/rand" + "encoding/binary" + "io" + "sync" +) + +// siprng is PRNG based on SipHash-2-4. +type siprng struct { + mu sync.Mutex + k0, k1, ctr uint64 +} + +// siphash implements SipHash-2-4, accepting a uint64 as a message. +func siphash(k0, k1, m uint64) uint64 { + // Initialization. + v0 := k0 ^ 0x736f6d6570736575 + v1 := k1 ^ 0x646f72616e646f6d + v2 := k0 ^ 0x6c7967656e657261 + v3 := k1 ^ 0x7465646279746573 + t := uint64(8) << 56 + + // Compression. + v3 ^= m + + // Round 1. + v0 += v1 + v1 = v1<<13 | v1>>(64-13) + v1 ^= v0 + v0 = v0<<32 | v0>>(64-32) + + v2 += v3 + v3 = v3<<16 | v3>>(64-16) + v3 ^= v2 + + v0 += v3 + v3 = v3<<21 | v3>>(64-21) + v3 ^= v0 + + v2 += v1 + v1 = v1<<17 | v1>>(64-17) + v1 ^= v2 + v2 = v2<<32 | v2>>(64-32) + + // Round 2. + v0 += v1 + v1 = v1<<13 | v1>>(64-13) + v1 ^= v0 + v0 = v0<<32 | v0>>(64-32) + + v2 += v3 + v3 = v3<<16 | v3>>(64-16) + v3 ^= v2 + + v0 += v3 + v3 = v3<<21 | v3>>(64-21) + v3 ^= v0 + + v2 += v1 + v1 = v1<<17 | v1>>(64-17) + v1 ^= v2 + v2 = v2<<32 | v2>>(64-32) + + v0 ^= m + + // Compress last block. + v3 ^= t + + // Round 1. + v0 += v1 + v1 = v1<<13 | v1>>(64-13) + v1 ^= v0 + v0 = v0<<32 | v0>>(64-32) + + v2 += v3 + v3 = v3<<16 | v3>>(64-16) + v3 ^= v2 + + v0 += v3 + v3 = v3<<21 | v3>>(64-21) + v3 ^= v0 + + v2 += v1 + v1 = v1<<17 | v1>>(64-17) + v1 ^= v2 + v2 = v2<<32 | v2>>(64-32) + + // Round 2. + v0 += v1 + v1 = v1<<13 | v1>>(64-13) + v1 ^= v0 + v0 = v0<<32 | v0>>(64-32) + + v2 += v3 + v3 = v3<<16 | v3>>(64-16) + v3 ^= v2 + + v0 += v3 + v3 = v3<<21 | v3>>(64-21) + v3 ^= v0 + + v2 += v1 + v1 = v1<<17 | v1>>(64-17) + v1 ^= v2 + v2 = v2<<32 | v2>>(64-32) + + v0 ^= t + + // Finalization. + v2 ^= 0xff + + // Round 1. + v0 += v1 + v1 = v1<<13 | v1>>(64-13) + v1 ^= v0 + v0 = v0<<32 | v0>>(64-32) + + v2 += v3 + v3 = v3<<16 | v3>>(64-16) + v3 ^= v2 + + v0 += v3 + v3 = v3<<21 | v3>>(64-21) + v3 ^= v0 + + v2 += v1 + v1 = v1<<17 | v1>>(64-17) + v1 ^= v2 + v2 = v2<<32 | v2>>(64-32) + + // Round 2. + v0 += v1 + v1 = v1<<13 | v1>>(64-13) + v1 ^= v0 + v0 = v0<<32 | v0>>(64-32) + + v2 += v3 + v3 = v3<<16 | v3>>(64-16) + v3 ^= v2 + + v0 += v3 + v3 = v3<<21 | v3>>(64-21) + v3 ^= v0 + + v2 += v1 + v1 = v1<<17 | v1>>(64-17) + v1 ^= v2 + v2 = v2<<32 | v2>>(64-32) + + // Round 3. + v0 += v1 + v1 = v1<<13 | v1>>(64-13) + v1 ^= v0 + v0 = v0<<32 | v0>>(64-32) + + v2 += v3 + v3 = v3<<16 | v3>>(64-16) + v3 ^= v2 + + v0 += v3 + v3 = v3<<21 | v3>>(64-21) + v3 ^= v0 + + v2 += v1 + v1 = v1<<17 | v1>>(64-17) + v1 ^= v2 + v2 = v2<<32 | v2>>(64-32) + + // Round 4. + v0 += v1 + v1 = v1<<13 | v1>>(64-13) + v1 ^= v0 + v0 = v0<<32 | v0>>(64-32) + + v2 += v3 + v3 = v3<<16 | v3>>(64-16) + v3 ^= v2 + + v0 += v3 + v3 = v3<<21 | v3>>(64-21) + v3 ^= v0 + + v2 += v1 + v1 = v1<<17 | v1>>(64-17) + v1 ^= v2 + v2 = v2<<32 | v2>>(64-32) + + return v0 ^ v1 ^ v2 ^ v3 +} + +// rekey sets a new PRNG key, which is read from crypto/rand. +func (p *siprng) rekey() { + var k [16]byte + if _, err := io.ReadFull(rand.Reader, k[:]); err != nil { + panic(err.Error()) + } + p.k0 = binary.LittleEndian.Uint64(k[0:8]) + p.k1 = binary.LittleEndian.Uint64(k[8:16]) + p.ctr = 1 +} + +// Uint64 returns a new pseudorandom uint64. +// It rekeys PRNG on the first call and every 64 MB of generated data. +func (p *siprng) Uint64() uint64 { + p.mu.Lock() + if p.ctr == 0 || p.ctr > 8*1024*1024 { + p.rekey() + } + v := siphash(p.k0, p.k1, p.ctr) + p.ctr++ + p.mu.Unlock() + return v +} + +func (p *siprng) Int63() int64 { + return int64(p.Uint64() & 0x7fffffffffffffff) +} + +func (p *siprng) Uint32() uint32 { + return uint32(p.Uint64()) +} + +func (p *siprng) Int31() int32 { + return int32(p.Uint32() & 0x7fffffff) +} + +func (p *siprng) Intn(n int) int { + if n <= 0 { + panic("invalid argument to Intn") + } + if n <= 1<<31-1 { + return int(p.Int31n(int32(n))) + } + return int(p.Int63n(int64(n))) +} + +func (p *siprng) Int63n(n int64) int64 { + if n <= 0 { + panic("invalid argument to Int63n") + } + max := int64((1 << 63) - 1 - (1<<63)%uint64(n)) + v := p.Int63() + for v > max { + v = p.Int63() + } + return v % n +} + +func (p *siprng) Int31n(n int32) int32 { + if n <= 0 { + panic("invalid argument to Int31n") + } + max := int32((1 << 31) - 1 - (1<<31)%uint32(n)) + v := p.Int31() + for v > max { + v = p.Int31() + } + return v % n +} + +func (p *siprng) Float64() float64 { return float64(p.Int63()) / (1 << 63) } diff --git a/modules/captcha/siprng_test.go b/modules/captcha/siprng_test.go new file mode 100644 index 0000000000..3b10fe58bf --- /dev/null +++ b/modules/captcha/siprng_test.go @@ -0,0 +1,23 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package captcha + +import "testing" + +func TestSiphash(t *testing.T) { + good := uint64(0xe849e8bb6ffe2567) + cur := siphash(0, 0, 0) + if cur != good { + t.Fatalf("siphash: expected %x, got %x", good, cur) + } +} + +func BenchmarkSiprng(b *testing.B) { + b.SetBytes(8) + p := &siprng{} + for i := 0; i < b.N; i++ { + p.Uint64() + } +} diff --git a/modules/git/blob.go b/modules/git/blob.go new file mode 100644 index 0000000000..3ce462a3c2 --- /dev/null +++ b/modules/git/blob.go @@ -0,0 +1,26 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "bytes" + "errors" + "io" + + "github.com/Unknwon/com" +) + +type Blob struct { + repo *Repository + *TreeEntry +} + +func (b *Blob) Data() (io.Reader, error) { + stdout, stderr, err := com.ExecCmdDirBytes(b.repo.Path, "git", "show", b.Id.String()) + if err != nil { + return nil, errors.New(string(stderr)) + } + return bytes.NewBuffer(stdout), nil +} diff --git a/modules/git/commit.go b/modules/git/commit.go new file mode 100644 index 0000000000..f61f2927b9 --- /dev/null +++ b/modules/git/commit.go @@ -0,0 +1,78 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "container/list" + "strings" +) + +// Commit represents a git commit. +type Commit struct { + Tree + Id sha1 // The id of this commit object + Author *Signature + Committer *Signature + CommitMessage string + + parents []sha1 // sha1 strings +} + +// Return the commit message. Same as retrieving CommitMessage directly. +func (c *Commit) Message() string { + return c.CommitMessage +} + +func (c *Commit) Summary() string { + return strings.Split(c.CommitMessage, "\n")[0] +} + +// Return oid of the parent number n (0-based index). Return nil if no such parent exists. +func (c *Commit) ParentId(n int) (id sha1, err error) { + if n >= len(c.parents) { + err = IdNotExist + return + } + return c.parents[n], nil +} + +// Return parent number n (0-based index) +func (c *Commit) Parent(n int) (*Commit, error) { + id, err := c.ParentId(n) + if err != nil { + return nil, err + } + parent, err := c.repo.getCommit(id) + if err != nil { + return nil, err + } + return parent, nil +} + +// Return the number of parents of the commit. 0 if this is the +// root commit, otherwise 1,2,... +func (c *Commit) ParentCount() int { + return len(c.parents) +} + +func (c *Commit) CommitsBefore() (*list.List, error) { + return c.repo.getCommitsBefore(c.Id) +} + +func (c *Commit) CommitsBeforeUntil(commitId string) (*list.List, error) { + ec, err := c.repo.GetCommit(commitId) + if err != nil { + return nil, err + } + return c.repo.CommitsBetween(c, ec) +} + +func (c *Commit) CommitsCount() (int, error) { + return c.repo.commitsCount(c.Id) +} + +func (c *Commit) GetCommitOfRelPath(relPath string) (*Commit, error) { + return c.repo.getCommitOfRelPath(c.Id, relPath) +} diff --git a/modules/git/commit_archive.go b/modules/git/commit_archive.go new file mode 100644 index 0000000000..23b4b058dd --- /dev/null +++ b/modules/git/commit_archive.go @@ -0,0 +1,36 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "fmt" + + "github.com/Unknwon/com" +) + +type ArchiveType int + +const ( + ZIP ArchiveType = iota + 1 + TARGZ +) + +func (c *Commit) CreateArchive(path string, archiveType ArchiveType) error { + var format string + switch archiveType { + case ZIP: + format = "zip" + case TARGZ: + format = "tar.gz" + default: + return fmt.Errorf("unknown format: %v", archiveType) + } + + _, stderr, err := com.ExecCmdDir(c.repo.Path, "git", "archive", "--format="+format, "-o", path, c.Id.String()) + if err != nil { + return fmt.Errorf("%s", stderr) + } + return nil +} diff --git a/modules/git/repo.go b/modules/git/repo.go new file mode 100644 index 0000000000..14ac39a3ed --- /dev/null +++ b/modules/git/repo.go @@ -0,0 +1,27 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "path/filepath" +) + +// Repository represents a Git repository. +type Repository struct { + Path string + + commitCache map[sha1]*Commit + tagCache map[sha1]*Tag +} + +// OpenRepository opens the repository at the given path. +func OpenRepository(repoPath string) (*Repository, error) { + repoPath, err := filepath.Abs(repoPath) + if err != nil { + return nil, err + } + + return &Repository{Path: repoPath}, nil +} diff --git a/modules/git/repo_branch.go b/modules/git/repo_branch.go new file mode 100644 index 0000000000..726019c1b1 --- /dev/null +++ b/modules/git/repo_branch.go @@ -0,0 +1,38 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "errors" + "strings" + + "github.com/Unknwon/com" +) + +func IsBranchExist(repoPath, branchName string) bool { + _, _, err := com.ExecCmdDir(repoPath, "git", "show-ref", "--verify", "refs/heads/"+branchName) + return err == nil +} + +func (repo *Repository) IsBranchExist(branchName string) bool { + return IsBranchExist(repo.Path, branchName) +} + +func (repo *Repository) GetBranches() ([]string, error) { + stdout, stderr, err := com.ExecCmdDir(repo.Path, "git", "show-ref", "--heads") + if err != nil { + return nil, errors.New(stderr) + } + infos := strings.Split(stdout, "\n") + branches := make([]string, len(infos)-1) + for i, info := range infos[:len(infos)-1] { + parts := strings.Split(info, " ") + if len(parts) != 2 { + continue // NOTE: I should believe git will not give me wrong string. + } + branches[i] = strings.TrimPrefix(parts[1], "refs/heads/") + } + return branches, nil +} diff --git a/modules/git/repo_commit.go b/modules/git/repo_commit.go new file mode 100644 index 0000000000..b1ea5a29a5 --- /dev/null +++ b/modules/git/repo_commit.go @@ -0,0 +1,234 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "bytes" + "container/list" + "errors" + "strings" + "sync" + + "github.com/Unknwon/com" +) + +func (repo *Repository) getCommitIdOfRef(refpath string) (string, error) { + stdout, stderr, err := com.ExecCmdDir(repo.Path, "git", "show-ref", "--verify", refpath) + if err != nil { + return "", errors.New(stderr) + } + return strings.Split(stdout, " ")[0], nil +} + +func (repo *Repository) GetCommitIdOfBranch(branchName string) (string, error) { + return repo.getCommitIdOfRef("refs/heads/" + branchName) +} + +// get branch's last commit or a special commit by id string +func (repo *Repository) GetCommitOfBranch(branchName string) (*Commit, error) { + commitId, err := repo.GetCommitIdOfBranch(branchName) + if err != nil { + return nil, err + } + + return repo.GetCommit(commitId) +} + +// Parse commit information from the (uncompressed) raw +// data from the commit object. +// \n\n separate headers from message +func parseCommitData(data []byte) (*Commit, error) { + commit := new(Commit) + commit.parents = make([]sha1, 0, 1) + // we now have the contents of the commit object. Let's investigate... + nextline := 0 +l: + for { + eol := bytes.IndexByte(data[nextline:], '\n') + switch { + case eol > 0: + line := data[nextline : nextline+eol] + spacepos := bytes.IndexByte(line, ' ') + reftype := line[:spacepos] + switch string(reftype) { + case "tree": + id, err := NewIdFromString(string(line[spacepos+1:])) + if err != nil { + return nil, err + } + commit.Tree.Id = id + case "parent": + // A commit can have one or more parents + oid, err := NewIdFromString(string(line[spacepos+1:])) + if err != nil { + return nil, err + } + commit.parents = append(commit.parents, oid) + case "author": + sig, err := newSignatureFromCommitline(line[spacepos+1:]) + if err != nil { + return nil, err + } + commit.Author = sig + case "committer": + sig, err := newSignatureFromCommitline(line[spacepos+1:]) + if err != nil { + return nil, err + } + commit.Committer = sig + } + nextline += eol + 1 + case eol == 0: + commit.CommitMessage = string(data[nextline+1:]) + break l + default: + break l + } + } + return commit, nil +} + +func (repo *Repository) getCommit(id sha1) (*Commit, error) { + if repo.commitCache != nil { + if c, ok := repo.commitCache[id]; ok { + return c, nil + } + } else { + repo.commitCache = make(map[sha1]*Commit, 10) + } + + data, bytErr, err := com.ExecCmdDirBytes(repo.Path, "git", "cat-file", "-p", id.String()) + if err != nil { + return nil, errors.New(string(bytErr)) + } + + commit, err := parseCommitData(data) + if err != nil { + return nil, err + } + commit.repo = repo + commit.Id = id + + repo.commitCache[id] = commit + return commit, nil +} + +// Find the commit object in the repository. +func (repo *Repository) GetCommit(commitId string) (*Commit, error) { + id, err := NewIdFromString(commitId) + if err != nil { + return nil, err + } + + return repo.getCommit(id) +} + +func (repo *Repository) commitsCount(id sha1) (int, error) { + stdout, stderr, err := com.ExecCmdDir(repo.Path, "git", "rev-list", "--count", id.String()) + if err != nil { + return 0, errors.New(stderr) + } + return com.StrTo(strings.TrimSpace(stdout)).Int() +} + +// used only for single tree, (] +func (repo *Repository) CommitsBetween(last *Commit, before *Commit) (*list.List, error) { + l := list.New() + if last == nil || last.ParentCount() == 0 { + return l, nil + } + + var err error + cur := last + for { + if cur.Id.Equal(before.Id) { + break + } + l.PushBack(cur) + if cur.ParentCount() == 0 { + break + } + cur, err = cur.Parent(0) + if err != nil { + return nil, err + } + } + return l, nil +} + +func (repo *Repository) commitsBefore(lock *sync.Mutex, l *list.List, parent *list.Element, id sha1, limit int) error { + commit, err := repo.getCommit(id) + if err != nil { + return err + } + + var e *list.Element + if parent == nil { + e = l.PushBack(commit) + } else { + var in = parent + for { + if in == nil { + break + } else if in.Value.(*Commit).Id.Equal(commit.Id) { + return nil + } else { + if in.Next() == nil { + break + } + if in.Value.(*Commit).Committer.When.Equal(commit.Committer.When) { + break + } + + if in.Value.(*Commit).Committer.When.After(commit.Committer.When) && + in.Next().Value.(*Commit).Committer.When.Before(commit.Committer.When) { + break + } + } + in = in.Next() + } + + e = l.InsertAfter(commit, in) + } + + var pr = parent + if commit.ParentCount() > 1 { + pr = e + } + + for i := 0; i < commit.ParentCount(); i++ { + id, err := commit.ParentId(i) + if err != nil { + return err + } + err = repo.commitsBefore(lock, l, pr, id, 0) + if err != nil { + return err + } + } + + return nil +} + +func (repo *Repository) getCommitsBefore(id sha1) (*list.List, error) { + l := list.New() + lock := new(sync.Mutex) + err := repo.commitsBefore(lock, l, nil, id, 0) + return l, err +} + +func (repo *Repository) getCommitOfRelPath(id sha1, relPath string) (*Commit, error) { + stdout, _, err := com.ExecCmdDir(repo.Path, "git", "log", "-1", prettyLogFormat, id.String(), "--", relPath) + if err != nil { + return nil, err + } + + id, err = NewIdFromString(string(stdout)) + if err != nil { + return nil, err + } + + return repo.getCommit(id) +} diff --git a/modules/git/repo_object.go b/modules/git/repo_object.go new file mode 100644 index 0000000000..da79f2c731 --- /dev/null +++ b/modules/git/repo_object.go @@ -0,0 +1,14 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +type ObjectType string + +const ( + COMMIT ObjectType = "commit" + TREE ObjectType = "tree" + BLOB ObjectType = "blob" + TAG ObjectType = "tag" +) diff --git a/modules/git/repo_tag.go b/modules/git/repo_tag.go new file mode 100644 index 0000000000..cefbe783ab --- /dev/null +++ b/modules/git/repo_tag.go @@ -0,0 +1,96 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "errors" + "strings" + + "github.com/Unknwon/com" +) + +func IsTagExist(repoPath, tagName string) bool { + _, _, err := com.ExecCmdDir(repoPath, "git", "show-ref", "--verify", "refs/tags/"+tagName) + return err == nil +} + +func (repo *Repository) IsTagExist(tagName string) bool { + return IsTagExist(repo.Path, tagName) +} + +// GetTags returns all tags of given repository. +func (repo *Repository) GetTags() ([]string, error) { + stdout, stderr, err := com.ExecCmdDir(repo.Path, "git", "tag", "-l") + if err != nil { + return nil, errors.New(stderr) + } + tags := strings.Split(stdout, "\n") + return tags[:len(tags)-1], nil +} + +func (repo *Repository) getTag(id sha1) (*Tag, error) { + if repo.tagCache != nil { + if t, ok := repo.tagCache[id]; ok { + return t, nil + } + } else { + repo.tagCache = make(map[sha1]*Tag, 10) + } + + // Get tag type. + tp, stderr, err := com.ExecCmdDir(repo.Path, "git", "cat-file", "-t", id.String()) + if err != nil { + return nil, errors.New(stderr) + } + + // Tag is a commit. + if ObjectType(tp) == COMMIT { + tag := &Tag{ + Id: id, + Object: id, + Type: string(COMMIT), + repo: repo, + } + repo.tagCache[id] = tag + return tag, nil + } + + // Tag with message. + data, bytErr, err := com.ExecCmdDirBytes(repo.Path, "git", "cat-file", "-p", id.String()) + if err != nil { + return nil, errors.New(string(bytErr)) + } + + tag, err := parseTagData(data) + if err != nil { + return nil, err + } + + tag.Id = id + tag.repo = repo + + repo.tagCache[id] = tag + return tag, nil +} + +// GetTag returns a Git tag by given name. +func (repo *Repository) GetTag(tagName string) (*Tag, error) { + stdout, stderr, err := com.ExecCmdDir(repo.Path, "git", "show-ref", "--tags", tagName) + if err != nil { + return nil, errors.New(stderr) + } + + id, err := NewIdFromString(strings.Split(stdout, " ")[0]) + if err != nil { + return nil, err + } + + tag, err := repo.getTag(id) + if err != nil { + return nil, err + } + tag.Name = tagName + return tag, nil +} diff --git a/modules/git/repo_tree.go b/modules/git/repo_tree.go new file mode 100644 index 0000000000..da394c3605 --- /dev/null +++ b/modules/git/repo_tree.go @@ -0,0 +1,32 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "fmt" + + "github.com/Unknwon/com" +) + +// Find the tree object in the repository. +func (repo *Repository) GetTree(idStr string) (*Tree, error) { + id, err := NewIdFromString(idStr) + if err != nil { + return nil, err + } + return repo.getTree(id) +} + +func (repo *Repository) getTree(id sha1) (*Tree, error) { + treePath := filepathFromSHA1(repo.Path, id.String()) + if !com.IsFile(treePath) { + _, _, err := com.ExecCmdDir(repo.Path, "git", "ls-tree", id.String()) + if err != nil { + return nil, fmt.Errorf("repo.getTree: %v", ErrNotExist) + } + } + + return NewTree(repo, id), nil +} diff --git a/modules/git/sha1.go b/modules/git/sha1.go new file mode 100644 index 0000000000..5c57e89b6a --- /dev/null +++ b/modules/git/sha1.go @@ -0,0 +1,87 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "encoding/hex" + "errors" + "fmt" + "strings" +) + +var ( + IdNotExist = errors.New("sha1 id not exist") +) + +type sha1 [20]byte + +// Return true if s has the same sha1 as caller. +// Support 40-length-string, []byte, sha1 +func (id sha1) Equal(s2 interface{}) bool { + switch v := s2.(type) { + case string: + if len(v) != 40 { + return false + } + return v == id.String() + case []byte: + if len(v) != 20 { + return false + } + for i, v := range v { + if id[i] != v { + return false + } + } + case sha1: + for i, v := range v { + if id[i] != v { + return false + } + } + default: + return false + } + return true +} + +// Return string (hex) representation of the Oid +func (s sha1) String() string { + result := make([]byte, 0, 40) + hexvalues := []byte("0123456789abcdef") + for i := 0; i < 20; i++ { + result = append(result, hexvalues[s[i]>>4]) + result = append(result, hexvalues[s[i]&0xf]) + } + return string(result) +} + +// Create a new sha1 from a 20 byte slice. +func NewId(b []byte) (sha1, error) { + var id sha1 + if len(b) != 20 { + return id, errors.New("Length must be 20") + } + + for i := 0; i < 20; i++ { + id[i] = b[i] + } + return id, nil +} + +// Create a new sha1 from a Sha1 string of length 40. +func NewIdFromString(s string) (sha1, error) { + s = strings.TrimSpace(s) + var id sha1 + if len(s) != 40 { + return id, fmt.Errorf("Length must be 40") + } + b, err := hex.DecodeString(s) + if err != nil { + return id, err + } + + return NewId(b) +} diff --git a/modules/git/signature.go b/modules/git/signature.go new file mode 100644 index 0000000000..20f647d266 --- /dev/null +++ b/modules/git/signature.go @@ -0,0 +1,40 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "bytes" + "strconv" + "time" +) + +// Author and Committer information +type Signature struct { + Email string + Name string + When time.Time +} + +// Helper to get a signature from the commit line, which looks like this: +// author Patrick Gundlach 1378823654 +0200 +// but without the "author " at the beginning (this method should) +// be used for author and committer. +// +// FIXME: include timezone! +func newSignatureFromCommitline(line []byte) (*Signature, error) { + sig := new(Signature) + emailstart := bytes.IndexByte(line, '<') + sig.Name = string(line[:emailstart-1]) + emailstop := bytes.IndexByte(line, '>') + sig.Email = string(line[emailstart+1 : emailstop]) + timestop := bytes.IndexByte(line[emailstop+2:], ' ') + timestring := string(line[emailstop+2 : emailstop+2+timestop]) + seconds, err := strconv.ParseInt(timestring, 10, 64) + if err != nil { + return nil, err + } + sig.When = time.Unix(seconds, 0) + return sig, nil +} diff --git a/modules/git/tag.go b/modules/git/tag.go new file mode 100644 index 0000000000..7fbbcb1cbf --- /dev/null +++ b/modules/git/tag.go @@ -0,0 +1,67 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "bytes" +) + +// Tag represents a Git tag. +type Tag struct { + Name string + Id sha1 + repo *Repository + Object sha1 // The id of this commit object + Type string + Tagger *Signature + TagMessage string +} + +func (tag *Tag) Commit() (*Commit, error) { + return tag.repo.getCommit(tag.Object) +} + +// Parse commit information from the (uncompressed) raw +// data from the commit object. +// \n\n separate headers from message +func parseTagData(data []byte) (*Tag, error) { + tag := new(Tag) + // we now have the contents of the commit object. Let's investigate... + nextline := 0 +l: + for { + eol := bytes.IndexByte(data[nextline:], '\n') + switch { + case eol > 0: + line := data[nextline : nextline+eol] + spacepos := bytes.IndexByte(line, ' ') + reftype := line[:spacepos] + switch string(reftype) { + case "object": + id, err := NewIdFromString(string(line[spacepos+1:])) + if err != nil { + return nil, err + } + tag.Object = id + case "type": + // A commit can have one or more parents + tag.Type = string(line[spacepos+1:]) + case "tagger": + sig, err := newSignatureFromCommitline(line[spacepos+1:]) + if err != nil { + return nil, err + } + tag.Tagger = sig + } + nextline += eol + 1 + case eol == 0: + tag.TagMessage = string(data[nextline+1:]) + break l + default: + break l + } + } + return tag, nil +} diff --git a/modules/git/tree.go b/modules/git/tree.go new file mode 100644 index 0000000000..03152c34ac --- /dev/null +++ b/modules/git/tree.go @@ -0,0 +1,124 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "bytes" + "errors" + "strings" + + "github.com/Unknwon/com" +) + +var ( + ErrNotExist = errors.New("error not exist") +) + +// A tree is a flat directory listing. +type Tree struct { + Id sha1 + repo *Repository + + // parent tree + ptree *Tree + + entries Entries + entriesParsed bool +} + +// Parse tree information from the (uncompressed) raw +// data from the tree object. +func parseTreeData(tree *Tree, data []byte) ([]*TreeEntry, error) { + entries := make([]*TreeEntry, 0, 10) + l := len(data) + pos := 0 + for pos < l { + entry := new(TreeEntry) + entry.ptree = tree + step := 6 + switch string(data[pos : pos+step]) { + case "100644": + entry.mode = ModeBlob + entry.Type = BLOB + case "100755": + entry.mode = ModeExec + entry.Type = BLOB + case "120000": + entry.mode = ModeSymlink + entry.Type = BLOB + case "160000": + entry.mode = ModeCommit + entry.Type = COMMIT + case "040000": + entry.mode = ModeTree + entry.Type = TREE + default: + return nil, errors.New("unknown type: " + string(data[pos:pos+step])) + } + pos += step + 6 // Skip string type of entry type. + + step = 40 + id, err := NewIdFromString(string(data[pos : pos+step])) + if err != nil { + return nil, err + } + entry.Id = id + pos += step + 1 // Skip half of sha1. + + step = bytes.IndexByte(data[pos:], '\n') + entry.name = string(data[pos : pos+step]) + pos += step + 1 + entries = append(entries, entry) + } + return entries, nil +} + +func (t *Tree) SubTree(rpath string) (*Tree, error) { + if len(rpath) == 0 { + return t, nil + } + + paths := strings.Split(rpath, "/") + var err error + var g = t + var p = t + var te *TreeEntry + for _, name := range paths { + te, err = p.GetTreeEntryByPath(name) + if err != nil { + return nil, err + } + + g, err = t.repo.getTree(te.Id) + if err != nil { + return nil, err + } + g.ptree = p + p = g + } + return g, nil +} + +func (t *Tree) ListEntries(relpath string) (Entries, error) { + if t.entriesParsed { + return t.entries, nil + } + t.entriesParsed = true + + stdout, _, err := com.ExecCmdDirBytes(t.repo.Path, + "git", "ls-tree", t.Id.String()) + if err != nil { + return nil, err + } + t.entries, err = parseTreeData(t, stdout) + return t.entries, err +} + +func NewTree(repo *Repository, id sha1) *Tree { + tree := new(Tree) + tree.Id = id + tree.repo = repo + return tree +} diff --git a/modules/git/tree_blob.go b/modules/git/tree_blob.go new file mode 100644 index 0000000000..debc722bc9 --- /dev/null +++ b/modules/git/tree_blob.go @@ -0,0 +1,46 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "fmt" + "path" + "strings" +) + +func (t *Tree) GetTreeEntryByPath(relpath string) (*TreeEntry, error) { + if len(relpath) == 0 { + return &TreeEntry{ + Id: t.Id, + Type: TREE, + mode: ModeTree, + }, nil + // return nil, fmt.Errorf("GetTreeEntryByPath(empty relpath): %v", ErrNotExist) + } + + relpath = path.Clean(relpath) + parts := strings.Split(relpath, "/") + var err error + tree := t + for i, name := range parts { + if i == len(parts)-1 { + entries, err := tree.ListEntries(path.Dir(relpath)) + if err != nil { + return nil, err + } + for _, v := range entries { + if v.name == name { + return v, nil + } + } + } else { + tree, err = tree.SubTree(name) + if err != nil { + return nil, err + } + } + } + return nil, fmt.Errorf("GetTreeEntryByPath: %v", ErrNotExist) +} diff --git a/modules/git/tree_entry.go b/modules/git/tree_entry.go new file mode 100644 index 0000000000..e842f2332a --- /dev/null +++ b/modules/git/tree_entry.go @@ -0,0 +1,109 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "sort" + "strings" + + "github.com/Unknwon/com" +) + +type EntryMode int + +// There are only a few file modes in Git. They look like unix file modes, but they can only be +// one of these. +const ( + ModeBlob EntryMode = 0100644 + ModeExec EntryMode = 0100755 + ModeSymlink EntryMode = 0120000 + ModeCommit EntryMode = 0160000 + ModeTree EntryMode = 0040000 +) + +type TreeEntry struct { + Id sha1 + Type ObjectType + + mode EntryMode + name string + + ptree *Tree + + commited bool + + size int64 + sized bool +} + +func (te *TreeEntry) Name() string { + return te.name +} + +func (te *TreeEntry) Size() int64 { + if te.IsDir() { + return 0 + } + + if te.sized { + return te.size + } + + stdout, _, err := com.ExecCmdDir(te.ptree.repo.Path, "git", "cat-file", "-s", te.Id.String()) + if err != nil { + return 0 + } + + te.sized = true + te.size = com.StrTo(strings.TrimSpace(stdout)).MustInt64() + return te.size +} + +func (te *TreeEntry) IsDir() bool { + return te.mode == ModeTree +} + +func (te *TreeEntry) EntryMode() EntryMode { + return te.mode +} + +func (te *TreeEntry) Blob() *Blob { + return &Blob{ + repo: te.ptree.repo, + TreeEntry: te, + } +} + +type Entries []*TreeEntry + +var sorter = []func(t1, t2 *TreeEntry) bool{ + func(t1, t2 *TreeEntry) bool { + return t1.IsDir() && !t2.IsDir() + }, + func(t1, t2 *TreeEntry) bool { + return t1.name < t2.name + }, +} + +func (bs Entries) Len() int { return len(bs) } +func (bs Entries) Swap(i, j int) { bs[i], bs[j] = bs[j], bs[i] } +func (bs Entries) Less(i, j int) bool { + t1, t2 := bs[i], bs[j] + var k int + for k = 0; k < len(sorter)-1; k++ { + sort := sorter[k] + switch { + case sort(t1, t2): + return true + case sort(t2, t1): + return false + } + } + return sorter[k](t1, t2) +} + +func (bs Entries) Sort() { + sort.Sort(bs) +} diff --git a/modules/git/utils.go b/modules/git/utils.go new file mode 100644 index 0000000000..3c0c60f235 --- /dev/null +++ b/modules/git/utils.go @@ -0,0 +1,27 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "path/filepath" + "strings" +) + +const prettyLogFormat = `--pretty=format:%H` + +func RefEndName(refStr string) string { + index := strings.LastIndex(refStr, "/") + if index != -1 { + return refStr[index+1:] + } + return refStr +} + +// If the object is stored in its own file (i.e not in a pack file), +// this function returns the full path to the object file. +// It does not test if the file exists. +func filepathFromSHA1(rootdir, sha1 string) string { + return filepath.Join(rootdir, "objects", sha1[:2], sha1[2:]) +} diff --git a/modules/git/version.go b/modules/git/version.go new file mode 100644 index 0000000000..683e859b47 --- /dev/null +++ b/modules/git/version.go @@ -0,0 +1,43 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package git + +import ( + "errors" + "strings" + + "github.com/Unknwon/com" +) + +// Version represents version of Git. +type Version struct { + Major, Minor, Patch int +} + +// GetVersion returns current Git version installed. +func GetVersion() (Version, error) { + stdout, stderr, err := com.ExecCmd("git", "version") + if err != nil { + return Version{}, errors.New(stderr) + } + + infos := strings.Split(stdout, " ") + if len(infos) < 3 { + return Version{}, errors.New("not enough output") + } + + v := Version{} + for i, s := range strings.Split(strings.TrimSpace(infos[2]), ".") { + switch i { + case 0: + v.Major, _ = com.StrTo(s).Int() + case 1: + v.Minor, _ = com.StrTo(s).Int() + case 2: + v.Patch, _ = com.StrTo(s).Int() + } + } + return v, nil +} diff --git a/modules/log/console.go b/modules/log/console.go new file mode 100644 index 0000000000..92d6c2a406 --- /dev/null +++ b/modules/log/console.go @@ -0,0 +1,73 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package log + +import ( + "encoding/json" + "log" + "os" + "runtime" +) + +type Brush func(string) string + +func NewBrush(color string) Brush { + pre := "\033[" + reset := "\033[0m" + return func(text string) string { + return pre + color + "m" + text + reset + } +} + +var colors = []Brush{ + NewBrush("1;36"), // Trace cyan + NewBrush("1;34"), // Debug blue + NewBrush("1;32"), // Info green + NewBrush("1;33"), // Warn yellow + NewBrush("1;31"), // Error red + NewBrush("1;35"), // Critical purple + NewBrush("1;31"), // Fatal red +} + +// ConsoleWriter implements LoggerInterface and writes messages to terminal. +type ConsoleWriter struct { + lg *log.Logger + Level int `json:"level"` +} + +// create ConsoleWriter returning as LoggerInterface. +func NewConsole() LoggerInterface { + return &ConsoleWriter{ + lg: log.New(os.Stdout, "", log.Ldate|log.Ltime), + Level: TRACE, + } +} + +func (cw *ConsoleWriter) Init(config string) error { + return json.Unmarshal([]byte(config), cw) +} + +func (cw *ConsoleWriter) WriteMsg(msg string, skip, level int) error { + if cw.Level > level { + return nil + } + if runtime.GOOS == "windows" { + cw.lg.Println(msg) + } else { + cw.lg.Println(colors[level](msg)) + } + return nil +} + +func (_ *ConsoleWriter) Destroy() { +} + +func (_ *ConsoleWriter) Flush() { + +} + +func init() { + Register("console", NewConsole) +} diff --git a/modules/log/file.go b/modules/log/file.go new file mode 100644 index 0000000000..cce5352969 --- /dev/null +++ b/modules/log/file.go @@ -0,0 +1,237 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package log + +import ( + "encoding/json" + "errors" + "fmt" + "io/ioutil" + "log" + "os" + "path/filepath" + "strings" + "sync" + "time" +) + +// FileLogWriter implements LoggerInterface. +// It writes messages by lines limit, file size limit, or time frequency. +type FileLogWriter struct { + *log.Logger + mw *MuxWriter + // The opened file + Filename string `json:"filename"` + + Maxlines int `json:"maxlines"` + maxlines_curlines int + + // Rotate at size + Maxsize int `json:"maxsize"` + maxsize_cursize int + + // Rotate daily + Daily bool `json:"daily"` + Maxdays int64 `json:"maxdays` + daily_opendate int + + Rotate bool `json:"rotate"` + + startLock sync.Mutex // Only one log can write to the file + + Level int `json:"level"` +} + +// an *os.File writer with locker. +type MuxWriter struct { + sync.Mutex + fd *os.File +} + +// write to os.File. +func (l *MuxWriter) Write(b []byte) (int, error) { + l.Lock() + defer l.Unlock() + return l.fd.Write(b) +} + +// set os.File in writer. +func (l *MuxWriter) SetFd(fd *os.File) { + if l.fd != nil { + l.fd.Close() + } + l.fd = fd +} + +// create a FileLogWriter returning as LoggerInterface. +func NewFileWriter() LoggerInterface { + w := &FileLogWriter{ + Filename: "", + Maxlines: 1000000, + Maxsize: 1 << 28, //256 MB + Daily: true, + Maxdays: 7, + Rotate: true, + Level: TRACE, + } + // use MuxWriter instead direct use os.File for lock write when rotate + w.mw = new(MuxWriter) + // set MuxWriter as Logger's io.Writer + w.Logger = log.New(w.mw, "", log.Ldate|log.Ltime) + return w +} + +// Init file logger with json config. +// config like: +// { +// "filename":"log/gogs.log", +// "maxlines":10000, +// "maxsize":1<<30, +// "daily":true, +// "maxdays":15, +// "rotate":true +// } +func (w *FileLogWriter) Init(config string) error { + if err := json.Unmarshal([]byte(config), w); err != nil { + return err + } + if len(w.Filename) == 0 { + return errors.New("config must have filename") + } + return w.StartLogger() +} + +// start file logger. create log file and set to locker-inside file writer. +func (w *FileLogWriter) StartLogger() error { + fd, err := w.createLogFile() + if err != nil { + return err + } + w.mw.SetFd(fd) + if err = w.initFd(); err != nil { + return err + } + return nil +} + +func (w *FileLogWriter) docheck(size int) { + w.startLock.Lock() + defer w.startLock.Unlock() + if w.Rotate && ((w.Maxlines > 0 && w.maxlines_curlines >= w.Maxlines) || + (w.Maxsize > 0 && w.maxsize_cursize >= w.Maxsize) || + (w.Daily && time.Now().Day() != w.daily_opendate)) { + if err := w.DoRotate(); err != nil { + fmt.Fprintf(os.Stderr, "FileLogWriter(%q): %s\n", w.Filename, err) + return + } + } + w.maxlines_curlines++ + w.maxsize_cursize += size +} + +// write logger message into file. +func (w *FileLogWriter) WriteMsg(msg string, skip, level int) error { + if level < w.Level { + return nil + } + n := 24 + len(msg) // 24 stand for the length "2013/06/23 21:00:22 [T] " + w.docheck(n) + w.Logger.Println(msg) + return nil +} + +func (w *FileLogWriter) createLogFile() (*os.File, error) { + // Open the log file + return os.OpenFile(w.Filename, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0660) +} + +func (w *FileLogWriter) initFd() error { + fd := w.mw.fd + finfo, err := fd.Stat() + if err != nil { + return fmt.Errorf("get stat: %s\n", err) + } + w.maxsize_cursize = int(finfo.Size()) + w.daily_opendate = time.Now().Day() + if finfo.Size() > 0 { + content, err := ioutil.ReadFile(w.Filename) + if err != nil { + return err + } + w.maxlines_curlines = len(strings.Split(string(content), "\n")) + } else { + w.maxlines_curlines = 0 + } + return nil +} + +// DoRotate means it need to write file in new file. +// new file name like xx.log.2013-01-01.2 +func (w *FileLogWriter) DoRotate() error { + _, err := os.Lstat(w.Filename) + if err == nil { // file exists + // Find the next available number + num := 1 + fname := "" + for ; err == nil && num <= 999; num++ { + fname = w.Filename + fmt.Sprintf(".%s.%03d", time.Now().Format("2006-01-02"), num) + _, err = os.Lstat(fname) + } + // return error if the last file checked still existed + if err == nil { + return fmt.Errorf("rotate: cannot find free log number to rename %s\n", w.Filename) + } + + // block Logger's io.Writer + w.mw.Lock() + defer w.mw.Unlock() + + fd := w.mw.fd + fd.Close() + + // close fd before rename + // Rename the file to its newfound home + if err = os.Rename(w.Filename, fname); err != nil { + return fmt.Errorf("Rotate: %s\n", err) + } + + // re-start logger + if err = w.StartLogger(); err != nil { + return fmt.Errorf("Rotate StartLogger: %s\n", err) + } + + go w.deleteOldLog() + } + + return nil +} + +func (w *FileLogWriter) deleteOldLog() { + dir := filepath.Dir(w.Filename) + filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { + if !info.IsDir() && info.ModTime().Unix() < (time.Now().Unix()-60*60*24*w.Maxdays) { + if strings.HasPrefix(filepath.Base(path), filepath.Base(w.Filename)) { + os.Remove(path) + } + } + return nil + }) +} + +// destroy file logger, close file writer. +func (w *FileLogWriter) Destroy() { + w.mw.fd.Close() +} + +// flush file logger. +// there are no buffering messages in file logger in memory. +// flush file means sync file from disk. +func (w *FileLogWriter) Flush() { + w.mw.fd.Sync() +} + +func init() { + Register("file", NewFileWriter) +} diff --git a/modules/log/log.go b/modules/log/log.go index 24f0442d1e..6ca6b5b0b1 100644 --- a/modules/log/log.go +++ b/modules/log/log.go @@ -2,32 +2,29 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -// Package log is a wrapper of logs for short calling name. package log import ( "fmt" "os" "path" - - "github.com/gogits/logs" + "path/filepath" + "runtime" + "strings" + "sync" ) var ( - loggers []*logs.BeeLogger - GitLogger *logs.BeeLogger + loggers []*Logger + GitLogger *Logger ) -func init() { - NewLogger(0, "console", `{"level": 0}`) -} - func NewLogger(bufLen int64, mode, config string) { - logger := logs.NewLogger(bufLen) + logger := newLogger(bufLen) isExist := false for _, l := range loggers { - if l.Adapter == mode { + if l.adapter == mode { isExist = true l = logger } @@ -35,15 +32,14 @@ func NewLogger(bufLen int64, mode, config string) { if !isExist { loggers = append(loggers, logger) } - logger.SetLogFuncCallDepth(3) if err := logger.SetLogger(mode, config); err != nil { - Fatal("Fail to set logger(%s): %v", mode, err) + Fatal(1, "Fail to set logger(%s): %v", mode, err) } } func NewGitLogger(logPath string) { os.MkdirAll(path.Dir(logPath), os.ModePerm) - GitLogger = logs.NewLogger(0) + GitLogger = newLogger(0) GitLogger.SetLogger("file", fmt.Sprintf(`{"level":0,"filename":"%s","rotate":false}`, logPath)) } @@ -65,28 +61,237 @@ func Info(format string, v ...interface{}) { } } -func Error(format string, v ...interface{}) { - for _, logger := range loggers { - logger.Error(format, v...) - } -} - func Warn(format string, v ...interface{}) { for _, logger := range loggers { logger.Warn(format, v...) } } -func Critical(format string, v ...interface{}) { +func Error(skip int, format string, v ...interface{}) { for _, logger := range loggers { - logger.Critical(format, v...) + logger.Error(skip, format, v...) } } -func Fatal(format string, v ...interface{}) { - Error(format, v...) +func Critical(skip int, format string, v ...interface{}) { + for _, logger := range loggers { + logger.Critical(skip, format, v...) + } +} + +func Fatal(skip int, format string, v ...interface{}) { + Error(skip, format, v...) for _, l := range loggers { l.Close() } - os.Exit(2) + os.Exit(1) +} + +// .___ _______________________________________________________ _________ ___________ +// | |\ \__ ___/\_ _____/\______ \_ _____/ _ \ \_ ___ \\_ _____/ +// | |/ | \| | | __)_ | _/| __)/ /_\ \/ \ \/ | __)_ +// | / | \ | | \ | | \| \/ | \ \____| \ +// |___\____|__ /____| /_______ / |____|_ /\___ /\____|__ /\______ /_______ / +// \/ \/ \/ \/ \/ \/ \/ + +type LogLevel int + +const ( + TRACE = iota + DEBUG + INFO + WARN + ERROR + CRITICAL + FATAL +) + +// LoggerInterface represents behaviors of a logger provider. +type LoggerInterface interface { + Init(config string) error + WriteMsg(msg string, skip, level int) error + Destroy() + Flush() +} + +type loggerType func() LoggerInterface + +var adapters = make(map[string]loggerType) + +// Register registers given logger provider to adapters. +func Register(name string, log loggerType) { + if log == nil { + panic("log: register provider is nil") + } + if _, dup := adapters[name]; dup { + panic("log: register called twice for provider \"" + name + "\"") + } + adapters[name] = log +} + +type logMsg struct { + skip, level int + msg string +} + +// Logger is default logger in beego application. +// it can contain several providers and log message into all providers. +type Logger struct { + adapter string + lock sync.Mutex + level int + msg chan *logMsg + outputs map[string]LoggerInterface + quit chan bool +} + +// newLogger initializes and returns a new logger. +func newLogger(buffer int64) *Logger { + l := &Logger{ + msg: make(chan *logMsg, buffer), + outputs: make(map[string]LoggerInterface), + quit: make(chan bool), + } + go l.StartLogger() + return l +} + +// SetLogger sets new logger instanse with given logger adapter and config. +func (l *Logger) SetLogger(adapter string, config string) error { + l.lock.Lock() + defer l.lock.Unlock() + if log, ok := adapters[adapter]; ok { + lg := log() + if err := lg.Init(config); err != nil { + return err + } + l.outputs[adapter] = lg + l.adapter = adapter + } else { + panic("log: unknown adapter \"" + adapter + "\" (forgotten Register?)") + } + return nil +} + +// DelLogger removes a logger adapter instance. +func (l *Logger) DelLogger(adapter string) error { + l.lock.Lock() + defer l.lock.Unlock() + if lg, ok := l.outputs[adapter]; ok { + lg.Destroy() + delete(l.outputs, adapter) + } else { + panic("log: unknown adapter \"" + adapter + "\" (forgotten Register?)") + } + return nil +} + +func (l *Logger) writerMsg(skip, level int, msg string) error { + if l.level > level { + return nil + } + lm := &logMsg{ + skip: skip, + level: level, + } + + // Only error information needs locate position for debugging. + if lm.level >= ERROR { + pc, file, line, ok := runtime.Caller(skip) + if ok { + // Get caller function name. + fn := runtime.FuncForPC(pc) + var fnName string + if fn == nil { + fnName = "?()" + } else { + fnName = strings.TrimLeft(filepath.Ext(fn.Name()), ".") + "()" + } + + lm.msg = fmt.Sprintf("[%s:%d %s] %s", filepath.Base(file), line, fnName, msg) + } else { + lm.msg = msg + } + } else { + lm.msg = msg + } + l.msg <- lm + return nil +} + +// StartLogger starts logger chan reading. +func (l *Logger) StartLogger() { + for { + select { + case bm := <-l.msg: + for _, l := range l.outputs { + l.WriteMsg(bm.msg, bm.skip, bm.level) + } + case <-l.quit: + return + } + } +} + +// Flush flushs all chan data. +func (l *Logger) Flush() { + for _, l := range l.outputs { + l.Flush() + } +} + +// Close closes logger, flush all chan data and destroy all adapter instances. +func (l *Logger) Close() { + l.quit <- true + for { + if len(l.msg) > 0 { + bm := <-l.msg + for _, l := range l.outputs { + l.WriteMsg(bm.msg, bm.skip, bm.level) + } + } else { + break + } + } + for _, l := range l.outputs { + l.Flush() + l.Destroy() + } +} + +func (l *Logger) Trace(format string, v ...interface{}) { + msg := fmt.Sprintf("[T] "+format, v...) + l.writerMsg(0, TRACE, msg) +} + +func (l *Logger) Debug(format string, v ...interface{}) { + msg := fmt.Sprintf("[D] "+format, v...) + l.writerMsg(0, DEBUG, msg) +} + +func (l *Logger) Info(format string, v ...interface{}) { + msg := fmt.Sprintf("[I] "+format, v...) + l.writerMsg(0, INFO, msg) +} + +func (l *Logger) Warn(format string, v ...interface{}) { + msg := fmt.Sprintf("[W] "+format, v...) + l.writerMsg(0, WARN, msg) +} + +func (l *Logger) Error(skip int, format string, v ...interface{}) { + msg := fmt.Sprintf("[E] "+format, v...) + l.writerMsg(skip, ERROR, msg) +} + +func (l *Logger) Critical(skip int, format string, v ...interface{}) { + msg := fmt.Sprintf("[C] "+format, v...) + l.writerMsg(skip, CRITICAL, msg) +} + +func (l *Logger) Fatal(skip int, format string, v ...interface{}) { + msg := fmt.Sprintf("[F] "+format, v...) + l.writerMsg(skip, FATAL, msg) + l.Close() + os.Exit(1) } diff --git a/modules/mailer/mail.go b/modules/mailer/mail.go index 62e15cd7fe..5a662b9010 100644 --- a/modules/mailer/mail.go +++ b/modules/mailer/mail.go @@ -10,10 +10,12 @@ import ( "fmt" "path" + "github.com/Unknwon/com" + "github.com/Unknwon/macaron" + "github.com/gogits/gogs/models" "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/log" - "github.com/gogits/gogs/modules/middleware" "github.com/gogits/gogs/modules/setting" ) @@ -55,7 +57,7 @@ func GetMailTmplData(u *models.User) map[interface{}]interface{} { // create a time limit code for user active func CreateUserActiveCode(u *models.User, startInf interface{}) string { minutes := setting.Service.ActiveCodeLives - data := base.ToStr(u.Id) + u.Email + u.LowerName + u.Passwd + u.Rands + data := com.ToStr(u.Id) + u.Email + u.LowerName + u.Passwd + u.Rands code := base.CreateTimeLimitCode(data, minutes, startInf) // add tail hex username @@ -64,7 +66,7 @@ func CreateUserActiveCode(u *models.User, startInf interface{}) string { } // Send user register mail with active code -func SendRegisterMail(r *middleware.Render, u *models.User) { +func SendRegisterMail(r macaron.Render, u *models.User) { code := CreateUserActiveCode(u, nil) subject := "Register success, Welcome" @@ -72,7 +74,7 @@ func SendRegisterMail(r *middleware.Render, u *models.User) { data["Code"] = code body, err := r.HTMLString(string(AUTH_REGISTER_SUCCESS), data) if err != nil { - log.Error("mail.SendRegisterMail(fail to render): %v", err) + log.Error(4, "mail.SendRegisterMail(fail to render): %v", err) return } @@ -83,7 +85,7 @@ func SendRegisterMail(r *middleware.Render, u *models.User) { } // Send email verify active email. -func SendActiveMail(r *middleware.Render, u *models.User) { +func SendActiveMail(r macaron.Render, u *models.User) { code := CreateUserActiveCode(u, nil) subject := "Verify your e-mail address" @@ -92,7 +94,7 @@ func SendActiveMail(r *middleware.Render, u *models.User) { data["Code"] = code body, err := r.HTMLString(string(AUTH_ACTIVE), data) if err != nil { - log.Error("mail.SendActiveMail(fail to render): %v", err) + log.Error(4, "mail.SendActiveMail(fail to render): %v", err) return } @@ -103,7 +105,7 @@ func SendActiveMail(r *middleware.Render, u *models.User) { } // Send reset password email. -func SendResetPasswdMail(r *middleware.Render, u *models.User) { +func SendResetPasswdMail(r macaron.Render, u *models.User) { code := CreateUserActiveCode(u, nil) subject := "Reset your password" @@ -112,7 +114,7 @@ func SendResetPasswdMail(r *middleware.Render, u *models.User) { data["Code"] = code body, err := r.HTMLString(string(AUTH_RESET_PASSWORD), data) if err != nil { - log.Error("mail.SendResetPasswdMail(fail to render): %v", err) + log.Error(4, "mail.SendResetPasswdMail(fail to render): %v", err) return } @@ -157,7 +159,7 @@ func SendIssueNotifyMail(u, owner *models.User, repo *models.Repository, issue * } // SendIssueMentionMail sends mail notification for who are mentioned in issue. -func SendIssueMentionMail(r *middleware.Render, u, owner *models.User, +func SendIssueMentionMail(r macaron.Render, u, owner *models.User, repo *models.Repository, issue *models.Issue, tos []string) error { if len(tos) == 0 { @@ -182,7 +184,7 @@ func SendIssueMentionMail(r *middleware.Render, u, owner *models.User, } // SendCollaboratorMail sends mail notification to new collaborator. -func SendCollaboratorMail(r *middleware.Render, u, owner *models.User, +func SendCollaboratorMail(r macaron.Render, u, owner *models.User, repo *models.Repository) error { subject := fmt.Sprintf("%s added you to %s", owner.Name, repo.Name) diff --git a/modules/mailer/mailer.go b/modules/mailer/mailer.go index d398de60cf..92cdfc7d6a 100644 --- a/modules/mailer/mailer.go +++ b/modules/mailer/mailer.go @@ -56,7 +56,7 @@ func processMailQueue() { if len(msg.Info) > 0 { info = ", info: " + msg.Info } - log.Error(fmt.Sprintf("Async sent email %d succeed, not send emails: %s%s err: %s", num, tos, info, err)) + log.Error(4, fmt.Sprintf("Async sent email %d succeed, not send emails: %s%s err: %s", num, tos, info, err)) } else { log.Trace(fmt.Sprintf("Async sent email %d succeed, sent emails: %s%s", num, tos, info)) } diff --git a/modules/middleware/auth.go b/modules/middleware/auth.go index 214dda23b9..741337da0b 100644 --- a/modules/middleware/auth.go +++ b/modules/middleware/auth.go @@ -8,7 +8,7 @@ import ( "net/url" "strings" - "github.com/go-martini/martini" + "github.com/Unknwon/macaron" "github.com/gogits/gogs/modules/setting" ) @@ -20,7 +20,7 @@ type ToggleOptions struct { DisableCsrf bool } -func Toggle(options *ToggleOptions) martini.Handler { +func Toggle(options *ToggleOptions) macaron.Handler { return func(ctx *Context) { // Cannot view any page before installation. if !setting.InstallLock { @@ -49,7 +49,7 @@ func Toggle(options *ToggleOptions) martini.Handler { ctx.Redirect("/user/login") return } else if !ctx.User.IsActive && setting.Service.RegisterEmailConfirm { - ctx.Data["Title"] = "Activate Your Account" + // ctx.Data["Title"] = "Activate Your Account" ctx.HTML(200, "user/activate") return } diff --git a/modules/middleware/binding/binding.go b/modules/middleware/binding/binding.go index bf8ab52b2b..4103f5543f 100644 --- a/modules/middleware/binding/binding.go +++ b/modules/middleware/binding/binding.go @@ -16,7 +16,8 @@ import ( "strings" "unicode/utf8" - "github.com/go-martini/martini" + "github.com/Unknwon/macaron" + "github.com/macaron-contrib/i18n" ) /* @@ -37,44 +38,44 @@ import ( // your own error handling, use Form or Json middleware directly. // An interface pointer can be added as a second argument in order // to map the struct to a specific interface. -func Bind(obj interface{}, ifacePtr ...interface{}) martini.Handler { - return func(context martini.Context, req *http.Request) { - contentType := req.Header.Get("Content-Type") +func Bind(obj interface{}, ifacePtr ...interface{}) macaron.Handler { + return func(ctx *macaron.Context) { + contentType := ctx.Req.Header.Get("Content-Type") if strings.Contains(contentType, "form-urlencoded") { - context.Invoke(Form(obj, ifacePtr...)) + ctx.Invoke(Form(obj, ifacePtr...)) } else if strings.Contains(contentType, "multipart/form-data") { - context.Invoke(MultipartForm(obj, ifacePtr...)) + ctx.Invoke(MultipartForm(obj, ifacePtr...)) } else if strings.Contains(contentType, "json") { - context.Invoke(Json(obj, ifacePtr...)) + ctx.Invoke(Json(obj, ifacePtr...)) } else { - context.Invoke(Json(obj, ifacePtr...)) - if getErrors(context).Count() > 0 { - context.Invoke(Form(obj, ifacePtr...)) + ctx.Invoke(Json(obj, ifacePtr...)) + if getErrors(ctx).Count() > 0 { + ctx.Invoke(Form(obj, ifacePtr...)) } } - context.Invoke(ErrorHandler) + ctx.Invoke(ErrorHandler) } } // BindIgnErr will do the exactly same thing as Bind but without any // error handling, which user has freedom to deal with them. // This allows user take advantages of validation. -func BindIgnErr(obj interface{}, ifacePtr ...interface{}) martini.Handler { - return func(context martini.Context, req *http.Request) { +func BindIgnErr(obj interface{}, ifacePtr ...interface{}) macaron.Handler { + return func(ctx *macaron.Context, req *http.Request) { contentType := req.Header.Get("Content-Type") if strings.Contains(contentType, "form-urlencoded") { - context.Invoke(Form(obj, ifacePtr...)) + ctx.Invoke(Form(obj, ifacePtr...)) } else if strings.Contains(contentType, "multipart/form-data") { - context.Invoke(MultipartForm(obj, ifacePtr...)) + ctx.Invoke(MultipartForm(obj, ifacePtr...)) } else if strings.Contains(contentType, "json") { - context.Invoke(Json(obj, ifacePtr...)) + ctx.Invoke(Json(obj, ifacePtr...)) } else { - context.Invoke(Json(obj, ifacePtr...)) - if getErrors(context).Count() > 0 { - context.Invoke(Form(obj, ifacePtr...)) + ctx.Invoke(Json(obj, ifacePtr...)) + if getErrors(ctx).Count() > 0 { + ctx.Invoke(Form(obj, ifacePtr...)) } } } @@ -89,12 +90,12 @@ func BindIgnErr(obj interface{}, ifacePtr ...interface{}) martini.Handler { // keys, for example: key=val1&key=val2&key=val3 // An interface pointer can be added as a second argument in order // to map the struct to a specific interface. -func Form(formStruct interface{}, ifacePtr ...interface{}) martini.Handler { - return func(context martini.Context, req *http.Request) { +func Form(formStruct interface{}, ifacePtr ...interface{}) macaron.Handler { + return func(ctx *macaron.Context) { ensureNotPointer(formStruct) formStruct := reflect.New(reflect.TypeOf(formStruct)) errors := newErrors() - parseErr := req.ParseForm() + parseErr := ctx.Req.ParseForm() // Format validation of the request body or the URL would add considerable overhead, // and ParseForm does not complain when URL encoding is off. @@ -104,14 +105,14 @@ func Form(formStruct interface{}, ifacePtr ...interface{}) martini.Handler { errors.Overall[BindingDeserializationError] = parseErr.Error() } - mapForm(formStruct, req.Form, errors) + mapForm(formStruct, ctx.Req.Form, errors) - validateAndMap(formStruct, context, errors, ifacePtr...) + validateAndMap(formStruct, ctx, errors, ifacePtr...) } } -func MultipartForm(formStruct interface{}, ifacePtr ...interface{}) martini.Handler { - return func(context martini.Context, req *http.Request) { +func MultipartForm(formStruct interface{}, ifacePtr ...interface{}) macaron.Handler { + return func(ctx *macaron.Context) { ensureNotPointer(formStruct) formStruct := reflect.New(reflect.TypeOf(formStruct)) errors := newErrors() @@ -119,7 +120,7 @@ func MultipartForm(formStruct interface{}, ifacePtr ...interface{}) martini.Hand // Workaround for multipart forms returning nil instead of an error // when content is not multipart // https://code.google.com/p/go/issues/detail?id=6334 - multipartReader, err := req.MultipartReader() + multipartReader, err := ctx.Req.MultipartReader() if err != nil { errors.Overall[BindingDeserializationError] = err.Error() } else { @@ -129,12 +130,12 @@ func MultipartForm(formStruct interface{}, ifacePtr ...interface{}) martini.Hand errors.Overall[BindingDeserializationError] = parseErr.Error() } - req.MultipartForm = form + ctx.Req.MultipartForm = form } - mapForm(formStruct, req.MultipartForm.Value, errors) + mapForm(formStruct, ctx.Req.MultipartForm.Value, errors) - validateAndMap(formStruct, context, errors, ifacePtr...) + validateAndMap(formStruct, ctx, errors, ifacePtr...) } } @@ -143,21 +144,21 @@ func MultipartForm(formStruct interface{}, ifacePtr ...interface{}) martini.Hand // validated, but no error handling is actually performed here. // An interface pointer can be added as a second argument in order // to map the struct to a specific interface. -func Json(jsonStruct interface{}, ifacePtr ...interface{}) martini.Handler { - return func(context martini.Context, req *http.Request) { +func Json(jsonStruct interface{}, ifacePtr ...interface{}) macaron.Handler { + return func(ctx *macaron.Context) { ensureNotPointer(jsonStruct) jsonStruct := reflect.New(reflect.TypeOf(jsonStruct)) errors := newErrors() - if req.Body != nil { - defer req.Body.Close() + if ctx.Req.Body != nil { + defer ctx.Req.Body.Close() } - if err := json.NewDecoder(req.Body).Decode(jsonStruct.Interface()); err != nil && err != io.EOF { + if err := json.NewDecoder(ctx.Req.Body).Decode(jsonStruct.Interface()); err != nil && err != io.EOF { errors.Overall[BindingDeserializationError] = err.Error() } - validateAndMap(jsonStruct, context, errors, ifacePtr...) + validateAndMap(jsonStruct, ctx, errors, ifacePtr...) } } @@ -165,15 +166,15 @@ func Json(jsonStruct interface{}, ifacePtr ...interface{}) martini.Handler { // passed in is a Validator, then the user-defined Validate method // is executed, and its errors are mapped to the context. This middleware // performs no error handling: it merely detects them and maps them. -func Validate(obj interface{}) martini.Handler { - return func(context martini.Context, req *http.Request) { +func Validate(obj interface{}) macaron.Handler { + return func(ctx *macaron.Context, l i18n.Locale) { errors := newErrors() validateStruct(errors, obj) if validator, ok := obj.(Validator); ok { - validator.Validate(errors, req, context) + validator.Validate(ctx, errors, l) } - context.Map(*errors) + ctx.Map(*errors) } } @@ -387,9 +388,7 @@ func setWithProperType(valueKind reflect.Kind, val string, structField reflect.V } } -// Don't pass in pointers to bind to. Can lead to bugs. See: -// https://github.com/codegangsta/martini-contrib/issues/40 -// https://github.com/codegangsta/martini-contrib/pull/34#issuecomment-29683659 +// Don't pass in pointers to bind to. Can lead to bugs. func ensureNotPointer(obj interface{}) { if reflect.TypeOf(obj).Kind() == reflect.Ptr { panic("Pointers are not accepted as binding models") @@ -399,13 +398,13 @@ func ensureNotPointer(obj interface{}) { // Performs validation and combines errors from validation // with errors from deserialization, then maps both the // resulting struct and the errors to the context. -func validateAndMap(obj reflect.Value, context martini.Context, errors *Errors, ifacePtr ...interface{}) { - context.Invoke(Validate(obj.Interface())) - errors.Combine(getErrors(context)) - context.Map(*errors) - context.Map(obj.Elem().Interface()) +func validateAndMap(obj reflect.Value, ctx *macaron.Context, errors *Errors, ifacePtr ...interface{}) { + ctx.Invoke(Validate(obj.Interface())) + errors.Combine(getErrors(ctx)) + ctx.Map(*errors) + ctx.Map(obj.Elem().Interface()) if len(ifacePtr) > 0 { - context.MapTo(obj.Elem().Interface(), ifacePtr[0]) + ctx.MapTo(obj.Elem().Interface(), ifacePtr[0]) } } @@ -413,8 +412,8 @@ func newErrors() *Errors { return &Errors{make(map[string]string), make(map[string]string)} } -func getErrors(context martini.Context) Errors { - return context.Get(reflect.TypeOf(Errors{})).Interface().(Errors) +func getErrors(ctx *macaron.Context) Errors { + return ctx.GetVal(reflect.TypeOf(Errors{})).Interface().(Errors) } type ( @@ -422,7 +421,7 @@ type ( // validation before the request even gets to your application. // The Validate method will be executed during the validation phase. Validator interface { - Validate(*Errors, *http.Request, martini.Context) + Validate(*macaron.Context, *Errors, i18n.Locale) } ) diff --git a/modules/middleware/context.go b/modules/middleware/context.go index 90cfb1bb04..463d9ba980 100644 --- a/modules/middleware/context.go +++ b/modules/middleware/context.go @@ -5,42 +5,33 @@ package middleware import ( - "crypto/hmac" - "crypto/sha1" - "encoding/base64" "fmt" "html/template" "io" "net/http" - "net/url" - "path/filepath" - "strconv" + "path" "strings" "time" - "github.com/go-martini/martini" - - "github.com/gogits/cache" - "github.com/gogits/git" - "github.com/gogits/session" + "github.com/Unknwon/macaron" + "github.com/macaron-contrib/i18n" + "github.com/macaron-contrib/session" "github.com/gogits/gogs/models" "github.com/gogits/gogs/modules/auth" "github.com/gogits/gogs/modules/base" + "github.com/gogits/gogs/modules/git" "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/setting" ) // Context represents context of a request. type Context struct { - *Render - c martini.Context - p martini.Params - Req *http.Request - Res http.ResponseWriter - Flash *Flash - Session session.SessionStore - Cache cache.Cache + *macaron.Context + i18n.Locale + Flash *session.Flash + Session session.Store + User *models.User IsSigned bool @@ -68,7 +59,8 @@ type Context struct { HTTPS string Git string } - Mirror *models.Mirror + CommitsCount int + Mirror *models.Mirror } } @@ -107,12 +99,12 @@ func (ctx *Context) HasError() bool { } // HTML calls render.HTML underlying but reduce one argument. -func (ctx *Context) HTML(status int, name base.TplName, htmlOpt ...HTMLOptions) { - ctx.Render.HTML(status, string(name), ctx.Data, htmlOpt...) +func (ctx *Context) HTML(status int, name base.TplName) { + ctx.Render.HTML(status, string(name), ctx.Data) } // RenderWithErr used for page has form validation but need to prompt error to users. -func (ctx *Context) RenderWithErr(msg string, tpl base.TplName, form auth.Form) { +func (ctx *Context) RenderWithErr(msg string, tpl base.TplName, form interface{}) { if form != nil { auth.AssignForm(form, ctx.Data) } @@ -124,8 +116,8 @@ func (ctx *Context) RenderWithErr(msg string, tpl base.TplName, form auth.Form) // Handle handles and logs error by given status. func (ctx *Context) Handle(status int, title string, err error) { if err != nil { - log.Error("%s: %v", title, err) - if martini.Dev != martini.Prod { + log.Error(4, "%s: %v", title, err) + if macaron.Env != macaron.PROD { ctx.Data["ErrorMsg"] = err } } @@ -139,106 +131,6 @@ func (ctx *Context) Handle(status int, title string, err error) { ctx.HTML(status, base.TplName(fmt.Sprintf("status/%d", status))) } -func (ctx *Context) GetCookie(name string) string { - cookie, err := ctx.Req.Cookie(name) - if err != nil { - return "" - } - return cookie.Value -} - -func (ctx *Context) SetCookie(name string, value string, others ...interface{}) { - cookie := http.Cookie{} - cookie.Name = name - cookie.Value = value - - if len(others) > 0 { - switch v := others[0].(type) { - case int: - cookie.MaxAge = v - case int64: - cookie.MaxAge = int(v) - case int32: - cookie.MaxAge = int(v) - } - } - - // default "/" - if len(others) > 1 { - if v, ok := others[1].(string); ok && len(v) > 0 { - cookie.Path = v - } - } else { - cookie.Path = "/" - } - - // default empty - if len(others) > 2 { - if v, ok := others[2].(string); ok && len(v) > 0 { - cookie.Domain = v - } - } - - // default empty - if len(others) > 3 { - switch v := others[3].(type) { - case bool: - cookie.Secure = v - default: - if others[3] != nil { - cookie.Secure = true - } - } - } - - // default false. for session cookie default true - if len(others) > 4 { - if v, ok := others[4].(bool); ok && v { - cookie.HttpOnly = true - } - } - - ctx.Res.Header().Add("Set-Cookie", cookie.String()) -} - -// Get secure cookie from request by a given key. -func (ctx *Context) GetSecureCookie(Secret, key string) (string, bool) { - val := ctx.GetCookie(key) - if val == "" { - return "", false - } - - parts := strings.SplitN(val, "|", 3) - - if len(parts) != 3 { - return "", false - } - - vs := parts[0] - timestamp := parts[1] - sig := parts[2] - - h := hmac.New(sha1.New, []byte(Secret)) - fmt.Fprintf(h, "%s%s", vs, timestamp) - - if fmt.Sprintf("%02x", h.Sum(nil)) != sig { - return "", false - } - res, _ := base64.URLEncoding.DecodeString(vs) - return string(res), true -} - -// Set Secure cookie for response. -func (ctx *Context) SetSecureCookie(Secret, name, value string, others ...interface{}) { - vs := base64.URLEncoding.EncodeToString([]byte(value)) - timestamp := strconv.FormatInt(time.Now().UnixNano(), 10) - h := hmac.New(sha1.New, []byte(Secret)) - fmt.Fprintf(h, "%s%s", vs, timestamp) - sig := fmt.Sprintf("%02x", h.Sum(nil)) - cookie := strings.Join([]string{vs, timestamp, sig}, "|") - ctx.SetCookie(name, cookie, others...) -} - func (ctx *Context) CsrfToken() string { if len(ctx.csrfToken) > 0 { return ctx.csrfToken @@ -271,16 +163,16 @@ func (ctx *Context) ServeFile(file string, names ...string) { if len(names) > 0 { name = names[0] } else { - name = filepath.Base(file) + name = path.Base(file) } - ctx.Res.Header().Set("Content-Description", "File Transfer") - ctx.Res.Header().Set("Content-Type", "application/octet-stream") - ctx.Res.Header().Set("Content-Disposition", "attachment; filename="+name) - ctx.Res.Header().Set("Content-Transfer-Encoding", "binary") - ctx.Res.Header().Set("Expires", "0") - ctx.Res.Header().Set("Cache-Control", "must-revalidate") - ctx.Res.Header().Set("Pragma", "public") - http.ServeFile(ctx.Res, ctx.Req, file) + ctx.Resp.Header().Set("Content-Description", "File Transfer") + ctx.Resp.Header().Set("Content-Type", "application/octet-stream") + ctx.Resp.Header().Set("Content-Disposition", "attachment; filename="+name) + ctx.Resp.Header().Set("Content-Transfer-Encoding", "binary") + ctx.Resp.Header().Set("Expires", "0") + ctx.Resp.Header().Set("Cache-Control", "must-revalidate") + ctx.Resp.Header().Set("Pragma", "public") + http.ServeFile(ctx.Resp, ctx.Req, file) } func (ctx *Context) ServeContent(name string, r io.ReadSeeker, params ...interface{}) { @@ -291,87 +183,52 @@ func (ctx *Context) ServeContent(name string, r io.ReadSeeker, params ...interfa modtime = v } } - ctx.Res.Header().Set("Content-Description", "File Transfer") - ctx.Res.Header().Set("Content-Type", "application/octet-stream") - ctx.Res.Header().Set("Content-Disposition", "attachment; filename="+name) - ctx.Res.Header().Set("Content-Transfer-Encoding", "binary") - ctx.Res.Header().Set("Expires", "0") - ctx.Res.Header().Set("Cache-Control", "must-revalidate") - ctx.Res.Header().Set("Pragma", "public") - http.ServeContent(ctx.Res, ctx.Req, name, modtime, r) + ctx.Resp.Header().Set("Content-Description", "File Transfer") + ctx.Resp.Header().Set("Content-Type", "application/octet-stream") + ctx.Resp.Header().Set("Content-Disposition", "attachment; filename="+name) + ctx.Resp.Header().Set("Content-Transfer-Encoding", "binary") + ctx.Resp.Header().Set("Expires", "0") + ctx.Resp.Header().Set("Cache-Control", "must-revalidate") + ctx.Resp.Header().Set("Pragma", "public") + http.ServeContent(ctx.Resp, ctx.Req, name, modtime, r) } -type Flash struct { - url.Values - ErrorMsg, SuccessMsg string -} - -func (f *Flash) Error(msg string) { - f.Set("error", msg) - f.ErrorMsg = msg -} - -func (f *Flash) Success(msg string) { - f.Set("success", msg) - f.SuccessMsg = msg -} - -// InitContext initializes a classic context for a request. -func InitContext() martini.Handler { - return func(res http.ResponseWriter, r *http.Request, c martini.Context, rd *Render) { +// Contexter initializes a classic context for a request. +func Contexter() macaron.Handler { + return func(c *macaron.Context, l i18n.Locale, sess session.Store, f *session.Flash) { ctx := &Context{ - c: c, - // p: p, - Req: r, - Res: res, - Cache: setting.Cache, - Render: rd, + Context: c, + Locale: l, + Flash: f, + Session: sess, } + // Cache: setting.Cache, + + // Compute current URL for real-time change language. + link := ctx.Req.RequestURI + i := strings.Index(link, "?") + if i > -1 { + link = link[:i] + } + ctx.Data["Link"] = link + ctx.Data["PageStartTime"] = time.Now() - // start session - ctx.Session = setting.SessionManager.SessionStart(res, r) - - // Get flash. - values, err := url.ParseQuery(ctx.GetCookie("gogs_flash")) - if err != nil { - log.Error("InitContext.ParseQuery(flash): %v", err) - } else if len(values) > 0 { - ctx.Flash = &Flash{Values: values} - ctx.Flash.ErrorMsg = ctx.Flash.Get("error") - ctx.Flash.SuccessMsg = ctx.Flash.Get("success") - ctx.Data["Flash"] = ctx.Flash - ctx.SetCookie("gogs_flash", "", -1) - } - ctx.Flash = &Flash{Values: url.Values{}} - - rw := res.(martini.ResponseWriter) - rw.Before(func(martini.ResponseWriter) { - ctx.Session.SessionRelease(res) - - if flash := ctx.Flash.Encode(); len(flash) > 0 { - ctx.SetCookie("gogs_flash", flash, 0) - } - }) - // Get user from session if logined. - user := auth.SignedInUser(ctx.req.Header, ctx.Session) - ctx.User = user - ctx.IsSigned = user != nil - - ctx.Data["IsSigned"] = ctx.IsSigned - - if user != nil { - ctx.Data["SignedUser"] = user - ctx.Data["SignedUserId"] = user.Id - ctx.Data["SignedUserName"] = user.Name + ctx.User = auth.SignedInUser(ctx.Req.Header, ctx.Session) + if ctx.User != nil { + ctx.IsSigned = true + ctx.Data["IsSigned"] = ctx.IsSigned + ctx.Data["SignedUser"] = ctx.User + ctx.Data["SignedUserId"] = ctx.User.Id + ctx.Data["SignedUserName"] = ctx.User.Name ctx.Data["IsAdmin"] = ctx.User.IsAdmin } // If request sends files, parse them here otherwise the Query() can't be parsed and the CsrfToken will be invalid. - if r.Method == "POST" && strings.Contains(r.Header.Get("Content-Type"), "multipart/form-data") { - if err = ctx.Req.ParseMultipartForm(setting.AttachmentMaxSize << 20); err != nil && !strings.Contains(err.Error(), "EOF") { // 32MB max size - ctx.Handle(500, "issue.Comment(ctx.Req.ParseMultipartForm)", err) + if ctx.Req.Method == "POST" && strings.Contains(ctx.Req.Header.Get("Content-Type"), "multipart/form-data") { + if err := ctx.Req.ParseMultipartForm(setting.AttachmentMaxSize << 20); err != nil && !strings.Contains(err.Error(), "EOF") { // 32MB max size + ctx.Handle(500, "ParseMultipartForm", err) return } } @@ -381,7 +238,5 @@ func InitContext() martini.Handler { ctx.Data["CsrfTokenHtml"] = template.HTML(``) c.Map(ctx) - - c.Next() } } diff --git a/modules/middleware/logger.go b/modules/middleware/logger.go deleted file mode 100644 index f918281a04..0000000000 --- a/modules/middleware/logger.go +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package middleware - -import ( - "fmt" - "log" - "net/http" - "runtime" - "time" - - "github.com/go-martini/martini" - - "github.com/gogits/gogs/modules/setting" -) - -var isWindows bool - -func init() { - isWindows = runtime.GOOS == "windows" -} - -func Logger() martini.Handler { - return func(res http.ResponseWriter, req *http.Request, ctx martini.Context, log *log.Logger) { - if setting.DisableRouterLog { - return - } - - start := time.Now() - log.Printf("Started %s %s", req.Method, req.URL.Path) - - rw := res.(martini.ResponseWriter) - ctx.Next() - - content := fmt.Sprintf("Completed %v %s in %v", rw.Status(), http.StatusText(rw.Status()), time.Since(start)) - if !isWindows { - switch rw.Status() { - case 200: - content = fmt.Sprintf("\033[1;32m%s\033[0m", content) - case 304: - content = fmt.Sprintf("\033[1;33m%s\033[0m", content) - case 404: - content = fmt.Sprintf("\033[1;31m%s\033[0m", content) - case 500: - content = fmt.Sprintf("\033[1;36m%s\033[0m", content) - } - } - log.Println(content) - } -} diff --git a/modules/middleware/render.go b/modules/middleware/render.go deleted file mode 100644 index b5a0d697ae..0000000000 --- a/modules/middleware/render.go +++ /dev/null @@ -1,281 +0,0 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -// foked from https://github.com/martini-contrib/render/blob/master/render.go -package middleware - -import ( - "bytes" - "encoding/json" - "fmt" - "html/template" - "io" - "io/ioutil" - "net/http" - "os" - "path/filepath" - "time" - - "github.com/go-martini/martini" - - "github.com/gogits/gogs/modules/base" -) - -const ( - ContentType = "Content-Type" - ContentLength = "Content-Length" - ContentJSON = "application/json" - ContentHTML = "text/html" - ContentXHTML = "application/xhtml+xml" - defaultCharset = "UTF-8" -) - -var helperFuncs = template.FuncMap{ - "yield": func() (string, error) { - return "", fmt.Errorf("yield called with no layout defined") - }, -} - -type Delims struct { - Left string - Right string -} - -type RenderOptions struct { - Directory string - Layout string - Extensions []string - Funcs []template.FuncMap - Delims Delims - Charset string - IndentJSON bool - HTMLContentType string -} - -type HTMLOptions struct { - Layout string -} - -func Renderer(options ...RenderOptions) martini.Handler { - opt := prepareOptions(options) - cs := prepareCharset(opt.Charset) - t := compile(opt) - return func(res http.ResponseWriter, req *http.Request, c martini.Context) { - var tc *template.Template - if martini.Env == martini.Dev { - - tc = compile(opt) - } else { - - tc, _ = t.Clone() - } - - rd := &Render{res, req, tc, opt, cs, base.TmplData{}, time.Time{}} - - rd.Data["TmplLoadTimes"] = func() string { - if rd.startTime.IsZero() { - return "" - } - return fmt.Sprint(time.Since(rd.startTime).Nanoseconds()/1e6) + "ms" - } - - c.Map(rd.Data) - c.Map(rd) - } -} - -func prepareCharset(charset string) string { - if len(charset) != 0 { - return "; charset=" + charset - } - - return "; charset=" + defaultCharset -} - -func prepareOptions(options []RenderOptions) RenderOptions { - var opt RenderOptions - if len(options) > 0 { - opt = options[0] - } - - if len(opt.Directory) == 0 { - opt.Directory = "templates" - } - if len(opt.Extensions) == 0 { - opt.Extensions = []string{".tmpl"} - } - if len(opt.HTMLContentType) == 0 { - opt.HTMLContentType = ContentHTML - } - - return opt -} - -func compile(options RenderOptions) *template.Template { - dir := options.Directory - t := template.New(dir) - t.Delims(options.Delims.Left, options.Delims.Right) - - template.Must(t.Parse("Martini")) - - filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { - r, err := filepath.Rel(dir, path) - if err != nil { - return err - } - - ext := filepath.Ext(r) - for _, extension := range options.Extensions { - if ext == extension { - - buf, err := ioutil.ReadFile(path) - if err != nil { - panic(err) - } - - name := (r[0 : len(r)-len(ext)]) - tmpl := t.New(filepath.ToSlash(name)) - - for _, funcs := range options.Funcs { - tmpl = tmpl.Funcs(funcs) - } - - template.Must(tmpl.Funcs(helperFuncs).Parse(string(buf))) - break - } - } - - return nil - }) - - return t -} - -type Render struct { - http.ResponseWriter - req *http.Request - t *template.Template - opt RenderOptions - compiledCharset string - - Data base.TmplData - - startTime time.Time -} - -func (r *Render) JSON(status int, v interface{}) { - var result []byte - var err error - if r.opt.IndentJSON { - result, err = json.MarshalIndent(v, "", " ") - } else { - result, err = json.Marshal(v) - } - if err != nil { - http.Error(r, err.Error(), 500) - return - } - - r.Header().Set(ContentType, ContentJSON+r.compiledCharset) - r.WriteHeader(status) - r.Write(result) -} - -func (r *Render) JSONString(v interface{}) (string, error) { - var result []byte - var err error - if r.opt.IndentJSON { - result, err = json.MarshalIndent(v, "", " ") - } else { - result, err = json.Marshal(v) - } - if err != nil { - return "", err - } - return string(result), nil -} - -func (r *Render) renderBytes(name string, binding interface{}, htmlOpt ...HTMLOptions) (*bytes.Buffer, error) { - opt := r.prepareHTMLOptions(htmlOpt) - - if len(opt.Layout) > 0 { - r.addYield(name, binding) - name = opt.Layout - } - - out, err := r.execute(name, binding) - if err != nil { - return nil, err - } - - return out, nil -} - -func (r *Render) HTML(status int, name string, binding interface{}, htmlOpt ...HTMLOptions) { - r.startTime = time.Now() - - out, err := r.renderBytes(name, binding, htmlOpt...) - if err != nil { - http.Error(r, err.Error(), http.StatusInternalServerError) - return - } - - r.Header().Set(ContentType, r.opt.HTMLContentType+r.compiledCharset) - r.WriteHeader(status) - io.Copy(r, out) -} - -func (r *Render) HTMLString(name string, binding interface{}, htmlOpt ...HTMLOptions) (string, error) { - if out, err := r.renderBytes(name, binding, htmlOpt...); err != nil { - return "", err - } else { - return out.String(), nil - } -} - -func (r *Render) Error(status int, message ...string) { - r.WriteHeader(status) - if len(message) > 0 { - r.Write([]byte(message[0])) - } -} - -func (r *Render) Redirect(location string, status ...int) { - code := http.StatusFound - if len(status) == 1 { - code = status[0] - } - - http.Redirect(r, r.req, location, code) -} - -func (r *Render) Template() *template.Template { - return r.t -} - -func (r *Render) execute(name string, binding interface{}) (*bytes.Buffer, error) { - buf := new(bytes.Buffer) - return buf, r.t.ExecuteTemplate(buf, name, binding) -} - -func (r *Render) addYield(name string, binding interface{}) { - funcs := template.FuncMap{ - "yield": func() (template.HTML, error) { - buf, err := r.execute(name, binding) - - return template.HTML(buf.String()), err - }, - } - r.t.Funcs(funcs) -} - -func (r *Render) prepareHTMLOptions(htmlOpt []HTMLOptions) HTMLOptions { - if len(htmlOpt) > 0 { - return htmlOpt[0] - } - - return HTMLOptions{ - Layout: r.opt.Layout, - } -} diff --git a/modules/middleware/repo.go b/modules/middleware/repo.go index c6febffb2e..c3d26c2837 100644 --- a/modules/middleware/repo.go +++ b/modules/middleware/repo.go @@ -10,20 +10,19 @@ import ( "net/url" "strings" - "github.com/go-martini/martini" - - "github.com/gogits/git" + "github.com/Unknwon/macaron" "github.com/gogits/gogs/models" + "github.com/gogits/gogs/modules/git" "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/setting" ) -func RepoAssignment(redirect bool, args ...bool) martini.Handler { - return func(ctx *Context, params martini.Params) { - // valid brachname +func RepoAssignment(redirect bool, args ...bool) macaron.Handler { + return func(ctx *Context) { + // To valid brach name. var validBranch bool - // display bare quick start if it is a bare repo + // To display bare quick start if it is a bare repo. var displayBare bool if len(args) >= 1 { @@ -35,51 +34,53 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { } var ( - user *models.User - err error + u *models.User + err error ) - userName := params["username"] - repoName := params["reponame"] - refName := params["branchname"] + userName := ctx.Params(":username") + repoName := ctx.Params(":reponame") + refName := ctx.Params(":branchname") + if len(refName) == 0 { + refName = ctx.Params(":path") + } - // TODO: need more advanced onwership and access level check. // Collaborators who have write access can be seen as owners. if ctx.IsSigned { ctx.Repo.IsOwner, err = models.HasAccess(ctx.User.Name, userName+"/"+repoName, models.WRITABLE) if err != nil { - ctx.Handle(500, "RepoAssignment(HasAccess)", err) + ctx.Handle(500, "HasAccess", err) return } ctx.Repo.IsTrueOwner = ctx.User.LowerName == strings.ToLower(userName) } if !ctx.Repo.IsTrueOwner { - user, err = models.GetUserByName(userName) + u, err = models.GetUserByName(userName) if err != nil { if err == models.ErrUserNotExist { - ctx.Handle(404, "RepoAssignment(GetUserByName)", err) + ctx.Handle(404, "GetUserByName", err) return } else if redirect { ctx.Redirect("/") return } - ctx.Handle(500, "RepoAssignment(GetUserByName)", err) + ctx.Handle(500, "GetUserByName", err) return } } else { - user = ctx.User + u = ctx.User } - if user == nil { + if u == nil { if redirect { ctx.Redirect("/") return } - ctx.Handle(403, "RepoAssignment", errors.New("invliad user account for single repository")) + ctx.Handle(404, "RepoAssignment", errors.New("invliad user account for single repository")) return } - ctx.Repo.Owner = user + ctx.Repo.Owner = u // Organization owner team members are true owners as well. if ctx.IsSigned && ctx.Repo.Owner.IsOrganization() && ctx.Repo.Owner.IsOrgOwner(ctx.User.Id) { @@ -87,16 +88,19 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { } // get repository - repo, err := models.GetRepositoryByName(user.Id, repoName) + repo, err := models.GetRepositoryByName(u.Id, repoName) if err != nil { if err == models.ErrRepoNotExist { - ctx.Handle(404, "RepoAssignment", err) + ctx.Handle(404, "GetRepositoryByName", err) return } else if redirect { ctx.Redirect("/") return } - ctx.Handle(500, "RepoAssignment", err) + ctx.Handle(500, "GetRepositoryByName", err) + return + } else if err = repo.GetOwner(); err != nil { + ctx.Handle(500, "GetOwner", err) return } @@ -108,16 +112,16 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { // Check access. if repo.IsPrivate && !ctx.Repo.IsOwner { if ctx.User == nil { - ctx.Handle(404, "RepoAssignment(HasAccess)", nil) + ctx.Handle(404, "HasAccess", nil) return } hasAccess, err := models.HasAccess(ctx.User.Name, ctx.Repo.Owner.Name+"/"+repo.Name, models.READABLE) if err != nil { - ctx.Handle(500, "RepoAssignment(HasAccess)", err) + ctx.Handle(500, "HasAccess", err) return } else if !hasAccess { - ctx.Handle(404, "RepoAssignment(HasAccess)", nil) + ctx.Handle(404, "HasAccess", nil) return } } @@ -127,7 +131,7 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { if repo.IsMirror { ctx.Repo.Mirror, err = models.GetMirror(repo.Id) if err != nil { - ctx.Handle(500, "RepoAssignment(GetMirror)", err) + ctx.Handle(500, "GetMirror", err) return } ctx.Data["MirrorInterval"] = ctx.Repo.Mirror.Interval @@ -144,34 +148,33 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { return } ctx.Repo.GitRepo = gitRepo - ctx.Repo.RepoLink = "/" + user.Name + "/" + repo.Name + ctx.Repo.RepoLink = "/" + u.Name + "/" + repo.Name tags, err := ctx.Repo.GitRepo.GetTags() if err != nil { - ctx.Handle(500, "RepoAssignment(GetTags))", err) + ctx.Handle(500, "GetTags", err) return } ctx.Repo.Repository.NumTags = len(tags) - ctx.Data["Title"] = user.Name + "/" + repo.Name + ctx.Data["Title"] = u.Name + "/" + repo.Name ctx.Data["Repository"] = repo - ctx.Data["Owner"] = user + ctx.Data["Owner"] = ctx.Repo.Repository.Owner ctx.Data["RepoLink"] = ctx.Repo.RepoLink ctx.Data["IsRepositoryOwner"] = ctx.Repo.IsOwner ctx.Data["IsRepositoryTrueOwner"] = ctx.Repo.IsTrueOwner - ctx.Data["BranchName"] = "" if setting.SshPort != 22 { - ctx.Repo.CloneLink.SSH = fmt.Sprintf("ssh://%s@%s/%s/%s.git", setting.RunUser, setting.Domain, user.LowerName, repo.LowerName) + ctx.Repo.CloneLink.SSH = fmt.Sprintf("ssh://%s@%s/%s/%s.git", setting.RunUser, setting.Domain, u.LowerName, repo.LowerName) } else { - ctx.Repo.CloneLink.SSH = fmt.Sprintf("%s@%s:%s/%s.git", setting.RunUser, setting.Domain, user.LowerName, repo.LowerName) + ctx.Repo.CloneLink.SSH = fmt.Sprintf("%s@%s:%s/%s.git", setting.RunUser, setting.Domain, u.LowerName, repo.LowerName) } - ctx.Repo.CloneLink.HTTPS = fmt.Sprintf("%s%s/%s.git", setting.AppUrl, user.LowerName, repo.LowerName) + ctx.Repo.CloneLink.HTTPS = fmt.Sprintf("%s%s/%s.git", setting.AppUrl, u.LowerName, repo.LowerName) ctx.Data["CloneLink"] = ctx.Repo.CloneLink if ctx.Repo.Repository.IsGoget { - ctx.Data["GoGetLink"] = fmt.Sprintf("%s%s/%s", setting.AppUrl, user.LowerName, repo.LowerName) - ctx.Data["GoGetImport"] = fmt.Sprintf("%s/%s/%s", setting.Domain, user.LowerName, repo.LowerName) + ctx.Data["GoGetLink"] = fmt.Sprintf("%s%s/%s", setting.AppUrl, u.LowerName, repo.LowerName) + ctx.Data["GoGetImport"] = fmt.Sprintf("%s/%s/%s", setting.Domain, u.LowerName, repo.LowerName) } // when repo is bare, not valid branch @@ -211,7 +214,7 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { return } } else { - ctx.Handle(404, "RepoAssignment invalid repo", nil) + ctx.Handle(404, "RepoAssignment invalid repo", errors.New("branch or tag not exist")) return } @@ -222,7 +225,7 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { } else { brs, err := gitRepo.GetBranches() if err != nil { - ctx.Handle(500, "RepoAssignment(GetBranches))", err) + ctx.Handle(500, "GetBranches", err) return } refName = brs[0] @@ -233,6 +236,13 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { ctx.Data["IsBranch"] = ctx.Repo.IsBranch ctx.Data["IsCommit"] = ctx.Repo.IsCommit + + ctx.Repo.CommitsCount, err = ctx.Repo.Commit.CommitsCount() + if err != nil { + ctx.Handle(500, "CommitsCount", err) + return + } + ctx.Data["CommitsCount"] = ctx.Repo.CommitsCount } log.Debug("displayBare: %v; IsBare: %v", displayBare, ctx.Repo.Repository.IsBare) @@ -240,7 +250,7 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { // repo is bare and display enable if displayBare && ctx.Repo.Repository.IsBare { log.Debug("Bare repository: %s", ctx.Repo.RepoLink) - ctx.HTML(200, "repo/single_bare") + ctx.HTML(200, "repo/bare") return } @@ -251,9 +261,10 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { ctx.Data["TagName"] = ctx.Repo.TagName brs, err := ctx.Repo.GitRepo.GetBranches() if err != nil { - log.Error("RepoAssignment(GetBranches): %v", err) + log.Error(4, "GetBranches: %v", err) } ctx.Data["Branches"] = brs + ctx.Data["BrancheCount"] = len(brs) // If not branch selected, try default one. // If default branch doesn't exists, fall back to some other branch. @@ -267,11 +278,11 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { ctx.Data["BranchName"] = ctx.Repo.BranchName ctx.Data["CommitId"] = ctx.Repo.CommitId - ctx.Data["IsRepositoryWatching"] = ctx.Repo.IsWatching + ctx.Data["IsWatchingRepo"] = ctx.Repo.IsWatching } } -func RequireTrueOwner() martini.Handler { +func RequireTrueOwner() macaron.Handler { return func(ctx *Context) { if !ctx.Repo.IsTrueOwner { if !ctx.IsSigned { diff --git a/modules/middleware/static.go b/modules/middleware/static.go deleted file mode 100644 index 35f03f721a..0000000000 --- a/modules/middleware/static.go +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2013 The Martini Authors. All rights reserved. -// Copyright 2014 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package middleware - -import ( - "log" - "net/http" - "path" - "runtime" - "strings" - - "github.com/go-martini/martini" - - "github.com/gogits/gogs/modules/setting" -) - -// StaticOptions is a struct for specifying configuration options for the martini.Static middleware. -type StaticOptions struct { - // Prefix is the optional prefix used to serve the static directory content - Prefix string - // SkipLogging will disable [Static] log messages when a static file is served. - SkipLogging bool - // IndexFile defines which file to serve as index if it exists. - IndexFile string - // Expires defines which user-defined function to use for producing a HTTP Expires Header - // https://developers.google.com/speed/docs/insights/LeverageBrowserCaching - Expires func() string -} - -func prepareStaticOptions(options []StaticOptions) StaticOptions { - var opt StaticOptions - if len(options) > 0 { - opt = options[0] - } - - // Defaults - if len(opt.IndexFile) == 0 { - opt.IndexFile = "index.html" - } - // Normalize the prefix if provided - if opt.Prefix != "" { - // Ensure we have a leading '/' - if opt.Prefix[0] != '/' { - opt.Prefix = "/" + opt.Prefix - } - // Remove any trailing '/' - opt.Prefix = strings.TrimRight(opt.Prefix, "/") - } - return opt -} - -// Static returns a middleware handler that serves static files in the given directory. -func Static(directory string, staticOpt ...StaticOptions) martini.Handler { - if runtime.GOOS == "windows" { - if len(directory) < 2 || directory[1] != ':' { - directory = path.Join(setting.StaticRootPath, directory) - } - } else if !path.IsAbs(directory) { - directory = path.Join(setting.StaticRootPath, directory) - } - - dir := http.Dir(directory) - opt := prepareStaticOptions(staticOpt) - - return func(res http.ResponseWriter, req *http.Request, log *log.Logger) { - if req.Method != "GET" && req.Method != "HEAD" { - return - } - file := req.URL.Path - // if we have a prefix, filter requests by stripping the prefix - if opt.Prefix != "" { - if !strings.HasPrefix(file, opt.Prefix) { - return - } - file = file[len(opt.Prefix):] - if file != "" && file[0] != '/' { - return - } - } - f, err := dir.Open(file) - if err != nil { - // discard the error? - return - } - defer f.Close() - - fi, err := f.Stat() - if err != nil { - return - } - - // try to serve index file - if fi.IsDir() { - // redirect if missing trailing slash - if !strings.HasSuffix(req.URL.Path, "/") { - http.Redirect(res, req, req.URL.Path+"/", http.StatusFound) - return - } - - file = path.Join(file, opt.IndexFile) - f, err = dir.Open(file) - if err != nil { - return - } - defer f.Close() - - fi, err = f.Stat() - if err != nil || fi.IsDir() { - return - } - } - - if !opt.SkipLogging { - log.Println("[Static] Serving " + file) - } - - // Add an Expires header to the static content - if opt.Expires != nil { - res.Header().Set("Expires", opt.Expires()) - } - - http.ServeContent(res, req, file, fi.ModTime(), f) - } -} diff --git a/modules/process/manager.go b/modules/process/manager.go index ce8ab7b4b2..68c33315d0 100644 --- a/modules/process/manager.go +++ b/modules/process/manager.go @@ -78,7 +78,7 @@ func ExecDir(timeout time.Duration, dir, desc, cmdName string, args ...string) ( select { case <-time.After(timeout): if errKill := Kill(pid); errKill != nil { - log.Error("Exec(%d:%s): %v", pid, desc, errKill) + log.Error(4, "Exec(%d:%s): %v", pid, desc, errKill) } <-done return "", ErrExecTimeout.Error(), ErrExecTimeout diff --git a/modules/setting/setting.go b/modules/setting/setting.go index 48b17f95cf..dbd01051bf 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -14,12 +14,12 @@ import ( "github.com/Unknwon/com" "github.com/Unknwon/goconfig" + "github.com/macaron-contrib/session" "github.com/gogits/cache" - "github.com/gogits/session" - "github.com/gogits/gogs/modules/bin" "github.com/gogits/gogs/modules/log" + // "github.com/gogits/gogs-ng/modules/ssh" ) type Scheme string @@ -45,6 +45,7 @@ var ( DisableRouterLog bool CertFile, KeyFile string StaticRootPath string + EnableGzip bool // Security settings. InstallLock bool @@ -89,15 +90,22 @@ var ( // Session settings. SessionProvider string SessionConfig *session.Config - SessionManager *session.Manager // Global setting objects. - Cfg *goconfig.ConfigFile - CustomPath string // Custom directory path. - ProdMode bool - RunUser string + Cfg *goconfig.ConfigFile + ConfRootPath string + CustomPath string // Custom directory path. + ProdMode bool + RunUser string + + // I18n settings. + Langs, Names []string ) +func init() { + log.NewLogger(0, "console", `{"level": 0}`) +} + func ExecPath() (string, error) { file, err := exec.LookPath(os.Args[0]) if err != nil { @@ -121,16 +129,13 @@ func WorkDir() (string, error) { func NewConfigContext() { workDir, err := WorkDir() if err != nil { - log.Fatal("Fail to get work directory: %v", err) + log.Fatal(4, "Fail to get work directory: %v", err) } + ConfRootPath = path.Join(workDir, "conf") - data, err := bin.Asset("conf/app.ini") + Cfg, err = goconfig.LoadConfigFile(path.Join(workDir, "conf/app.ini")) if err != nil { - log.Fatal("Fail to read 'conf/app.ini': %v", err) - } - Cfg, err = goconfig.LoadFromData(data) - if err != nil { - log.Fatal("Fail to parse 'conf/app.ini': %v", err) + log.Fatal(4, "Fail to parse 'conf/app.ini': %v", err) } CustomPath = os.Getenv("GOGS_CUSTOM") @@ -141,10 +146,10 @@ func NewConfigContext() { cfgPath := path.Join(CustomPath, "conf/app.ini") if com.IsFile(cfgPath) { if err = Cfg.AppendFiles(cfgPath); err != nil { - log.Fatal("Fail to load custom 'conf/app.ini': %v", err) + log.Fatal(4, "Fail to load custom 'conf/app.ini': %v", err) } } else { - log.Warn("No custom 'conf/app.ini' found") + log.Warn("No custom 'conf/app.ini' found, please go to '/install'") } AppName = Cfg.MustValue("", "APP_NAME", "Gogs: Go Git Service") @@ -165,6 +170,7 @@ func NewConfigContext() { DisableRouterLog = Cfg.MustBool("server", "DISABLE_ROUTER_LOG") StaticRootPath = Cfg.MustValue("server", "STATIC_ROOT_PATH", workDir) LogRootPath = Cfg.MustValue("log", "ROOT_PATH", path.Join(workDir, "log")) + EnableGzip = Cfg.MustBool("server", "ENABLE_GZIP") InstallLock = Cfg.MustBool("security", "INSTALL_LOCK") SecretKey = Cfg.MustValue("security", "SECRET_KEY") @@ -173,14 +179,14 @@ func NewConfigContext() { CookieRememberName = Cfg.MustValue("security", "COOKIE_REMEMBER_NAME") ReverseProxyAuthUser = Cfg.MustValue("security", "REVERSE_PROXY_AUTHENTICATION_USER", "X-WEBAUTH-USER") - AttachmentPath = Cfg.MustValue("attachment", "PATH", "files/attachments") - AttachmentAllowedTypes = Cfg.MustValue("attachment", "ALLOWED_TYPES", "*/*") + AttachmentPath = Cfg.MustValue("attachment", "PATH", "data/attachments") + AttachmentAllowedTypes = Cfg.MustValue("attachment", "ALLOWED_TYPES", "image/jpeg|image/png") AttachmentMaxSize = Cfg.MustInt64("attachment", "MAX_SIZE", 32) AttachmentMaxFiles = Cfg.MustInt("attachment", "MAX_FILES", 10) AttachmentEnabled = Cfg.MustBool("attachment", "ENABLE", true) if err = os.MkdirAll(AttachmentPath, os.ModePerm); err != nil { - log.Fatal("Could not create directory %s: %s", AttachmentPath, err) + log.Fatal(4, "Could not create directory %s: %s", AttachmentPath, err) } RunUser = Cfg.MustValue("", "RUN_USER") @@ -190,13 +196,13 @@ func NewConfigContext() { } // Does not check run user when the install lock is off. if InstallLock && RunUser != curUser { - log.Fatal("Expect user(%s) but current user is: %s", RunUser, curUser) + log.Fatal(4, "Expect user(%s) but current user is: %s", RunUser, curUser) } // Determine and create root git reposiroty path. homeDir, err := com.HomeDir() if err != nil { - log.Fatal("Fail to get home directory: %v", err) + log.Fatal(4, "Fail to get home directory: %v", err) } RepoRootPath = Cfg.MustValue("repository", "ROOT", filepath.Join(homeDir, "gogs-repositories")) if !filepath.IsAbs(RepoRootPath) { @@ -206,13 +212,16 @@ func NewConfigContext() { } if err = os.MkdirAll(RepoRootPath, os.ModePerm); err != nil { - log.Fatal("Fail to create repository root path(%s): %v", RepoRootPath, err) + log.Fatal(4, "Fail to create repository root path(%s): %v", RepoRootPath, err) } ScriptType = Cfg.MustValue("repository", "SCRIPT_TYPE", "bash") PictureService = Cfg.MustValueRange("picture", "SERVICE", "server", []string{"server"}) DisableGravatar = Cfg.MustBool("picture", "DISABLE_GRAVATAR") + + Langs = Cfg.MustValueArray("i18n", "LANGS", ",") + Names = Cfg.MustValueArray("i18n", "NAMES", ",") } var Service struct { @@ -255,7 +264,7 @@ func newLogService() { mode = strings.TrimSpace(mode) modeSec := "log." + mode if _, err := Cfg.GetSection(modeSec); err != nil { - log.Fatal("Unknown log mode: %s", mode) + log.Fatal(4, "Unknown log mode: %s", mode) } // Log level. @@ -263,7 +272,7 @@ func newLogService() { []string{"Trace", "Debug", "Info", "Warn", "Error", "Critical"}) level, ok := logLevels[levelName] if !ok { - log.Fatal("Unknown log level: %s", levelName) + log.Fatal(4, "Unknown log level: %s", levelName) } // Generate log configuration. @@ -318,15 +327,15 @@ func newCacheService() { case "memory": CacheConfig = fmt.Sprintf(`{"interval":%d}`, Cfg.MustInt("cache", "INTERVAL", 60)) case "redis", "memcache": - CacheConfig = fmt.Sprintf(`{"conn":"%s"}`, Cfg.MustValue("cache", "HOST")) + CacheConfig = fmt.Sprintf(`{"conn":"%s"}`, strings.Trim(Cfg.MustValue("cache", "HOST"), "\" ")) default: - log.Fatal("Unknown cache adapter: %s", CacheAdapter) + log.Fatal(4, "Unknown cache adapter: %s", CacheAdapter) } var err error Cache, err = cache.NewCache(CacheAdapter, CacheConfig) if err != nil { - log.Fatal("Init cache system failed, adapter: %s, config: %s, %v\n", + log.Fatal(4, "Init cache system failed, adapter: %s, config: %s, %v\n", CacheAdapter, CacheConfig, err) } @@ -338,12 +347,12 @@ func newSessionService() { []string{"memory", "file", "redis", "mysql"}) SessionConfig = new(session.Config) - SessionConfig.ProviderConfig = Cfg.MustValue("session", "PROVIDER_CONFIG") + SessionConfig.ProviderConfig = strings.Trim(Cfg.MustValue("session", "PROVIDER_CONFIG"), "\" ") SessionConfig.CookieName = Cfg.MustValue("session", "COOKIE_NAME", "i_like_gogits") - SessionConfig.CookieSecure = Cfg.MustBool("session", "COOKIE_SECURE") + SessionConfig.Secure = Cfg.MustBool("session", "COOKIE_SECURE") SessionConfig.EnableSetCookie = Cfg.MustBool("session", "ENABLE_SET_COOKIE", true) - SessionConfig.GcIntervalTime = Cfg.MustInt64("session", "GC_INTERVAL_TIME", 86400) - SessionConfig.SessionLifeTime = Cfg.MustInt64("session", "SESSION_LIFE_TIME", 86400) + SessionConfig.Gclifetime = Cfg.MustInt64("session", "GC_INTERVAL_TIME", 86400) + SessionConfig.Maxlifetime = Cfg.MustInt64("session", "SESSION_LIFE_TIME", 86400) SessionConfig.SessionIDHashFunc = Cfg.MustValueRange("session", "SESSION_ID_HASHFUNC", "sha1", []string{"sha1", "sha256", "md5"}) SessionConfig.SessionIDHashKey = Cfg.MustValue("session", "SESSION_ID_HASHKEY") @@ -352,14 +361,6 @@ func newSessionService() { os.MkdirAll(path.Dir(SessionConfig.ProviderConfig), os.ModePerm) } - var err error - SessionManager, err = session.NewManager(SessionProvider, *SessionConfig) - if err != nil { - log.Fatal("Init session system failed, provider: %s, %v", - SessionProvider, err) - } - go SessionManager.GC() - log.Info("Session Service Enabled") } @@ -441,4 +442,5 @@ func NewServices() { newRegisterMailService() newNotifyMailService() newWebhookService() + // ssh.Listen("2022") } diff --git a/modules/ssh/ssh.go b/modules/ssh/ssh.go new file mode 100644 index 0000000000..78ad678dc5 --- /dev/null +++ b/modules/ssh/ssh.go @@ -0,0 +1,119 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// Prototype, git client looks like do not recognize req.Reply. +package ssh + +import ( + "fmt" + "io/ioutil" + "net" + "os" + "os/exec" + "strings" + + "code.google.com/p/go.crypto/ssh" + + "github.com/Unknwon/com" + + "github.com/gogits/gogs-ng/modules/log" +) + +func handleServerConn(keyId string, chans <-chan ssh.NewChannel) { + for newChan := range chans { + if newChan.ChannelType() != "session" { + newChan.Reject(ssh.UnknownChannelType, "unknown channel type") + continue + } + channel, requests, err := newChan.Accept() + if err != nil { + log.Error(3, "Could not accept channel: %v", err) + continue + } + + go func(in <-chan *ssh.Request) { + defer channel.Close() + for req := range in { + ok, payload := false, strings.TrimLeft(string(req.Payload), "\x00") + fmt.Println("Request:", req.Type, req.WantReply, payload) + switch req.Type { + case "env": + args := strings.Split(strings.Replace(payload, "\x00", "", -1), "\v") + if len(args) != 2 { + break + } + args[0] = strings.TrimLeft(args[0], "\x04") + _, _, err := com.ExecCmdBytes("env", args[0]+"="+args[1]) + if err != nil { + log.Error(3, "env: %v", err) + channel.Stderr().Write([]byte(err.Error())) + break + } + ok = true + case "exec": + os.Setenv("SSH_ORIGINAL_COMMAND", strings.TrimLeft(payload, "'(")) + log.Info("Payload: %v", strings.TrimLeft(payload, "'(")) + cmd := exec.Command("/Users/jiahuachen/Applications/Go/src/github.com/gogits/gogs-ng/gogs-ng", "serv", "key-"+keyId) + cmd.Stdout = channel + cmd.Stdin = channel + cmd.Stderr = channel.Stderr() + if err := cmd.Run(); err != nil { + log.Error(3, "exec: %v", err) + } else { + ok = true + } + } + fmt.Println("Done:", ok) + req.Reply(ok, nil) // BUG: Git on Mac seems not know this reply and hang? + } + fmt.Println("Done!!!") + }(requests) + } +} + +func listen(config *ssh.ServerConfig, port string) { + listener, err := net.Listen("tcp", "0.0.0.0:"+port) + if err != nil { + panic(err) + } + for { + // Once a ServerConfig has been configured, connections can be accepted. + conn, err := listener.Accept() + if err != nil { + log.Error(3, "Fail to accept incoming connection: %v", err) + continue + } + // Before use, a handshake must be performed on the incoming net.Conn. + sConn, chans, reqs, err := ssh.NewServerConn(conn, config) + if err != nil { + log.Error(3, "Fail to handshake: %v", err) + continue + } + // The incoming Request channel must be serviced. + go ssh.DiscardRequests(reqs) + go handleServerConn(sConn.Permissions.Extensions["key-id"], chans) + } +} + +// Listen starts a SSH server listens on given port. +func Listen(port string) { + config := &ssh.ServerConfig{ + PublicKeyCallback: func(conn ssh.ConnMetadata, key ssh.PublicKey) (*ssh.Permissions, error) { + // keyCache[string(ssh.MarshalAuthorizedKey(key))] = 2 + return &ssh.Permissions{Extensions: map[string]string{"key-id": "2"}}, nil + }, + } + + privateBytes, err := ioutil.ReadFile("/Users/jiahuachen/.ssh/id_rsa") + if err != nil { + panic("failed to load private key") + } + private, err := ssh.ParsePrivateKey(privateBytes) + if err != nil { + panic("failed to parse private key") + } + config.AddHostKey(private) + + go listen(config, port) +} diff --git a/public/img/404.png b/public/img/404.png index 1f0ee0ef4953defd225425d52531cd8b27be9ebb..80c081d3020ad7d544ac7d4f8cc3ea668ebbee12 100644 GIT binary patch delta 2671 zcmdnsGs|a!G832OL@T-aY2_gy*Tve;?=7!dc-G*OWYuIngN8493bHJL5@~D_rx*_N z_~vx1aBvY6WOSXdpn-AmLXR~aNs1aP68Jp?0+I~6R;);IyXI9>S^56y)9=Uk-oKUp zzWDpi>iJvs7*zb__4HY%F)7Scf52X4aXGxz{ldn-3~Ut*jLR4dB44iDSMT`lpo5CO zxp>vC6P$m#@9{8t{MncK;-&xc=Kube)`aY1U^o$f%V)zUU`Q=huqe3_SBDMK1ctqdCDhPv#hY@2IG5o1mO@#Qg}XWQ^ak zj{NQjW6v39L_bCs<`}ilLR1b7EFx`?I%w?@nrK$JNz~_E?|1{+^%7f0HaW4z@4x6 ze?M#HXMHqVe3{ioi|_MU|NdTA(D`HHx!&J0&xIs>(m8)hc4t4z=Dg6rpu#A6f?0F{ zV@ac;0dv>^F$*U14NN~869o9KF^P4spKRbaa@4!Q!{s1&gY{dJR{--XN97Dgbq96} zUcH9X53F`@zN>FwPhjb3exAU#hw-xjOQNEYOXCy8P!DdShBFFmDf~Mf?E(};_*|U} z1^9)Wc3u!$!J*ZvwJ>Uh;4d*N*4T!1PRtia?w`ur?aCEhLIp;cvF4hWk4}7~q?uzae zjV!jWoW5?_3wbY?W$1s=Dv_}gj&0C$H(zl3!t@K}7aqSbm*8n@yLd1n(Z=xM43;xi zK8DX2mWdY288=8CK9f|xF`{w}<2An5?WswuH<;eky)k@a`9`5k=C_#pk(H0m6ujHP zA;UktUHiD{!*h?=3Wax6?h%RO&TsyHc=N}bKZI&*_i@)V+xN{^_Yf}OC~HY@VoEe# z*mS{Zhf9S=g{z9t)y`{27?h^(=!|f*@!R7hqq5rM(&$p zJ}r5|doojV&y;ObxKCv~FBh z*zz&&aol5nH8C|$wXbUYKB+$8GoH;XoB1zmS^hDj)keE>{mjbE?`Pc0{8u#dpwYQa z&8Oc*1?bf1Zi}ohiLTkQWz&=BZ4rKvnNhCMq0zj?D|qVN3?Fxy-nwyhUo>acUOkL@aqGR>W3l>2VK2Ykh`noj zZtu<7V}}nV&plr0zh(LM=XvK7^;7kyg)hE-hHJIx>+mlXllL_5(cU}%$BW+|YIoHn z-WT0hT_eBlO4P~dn-AIl?D_NUhwZ29AN@c7w_^}~ARi$5!Q_I8f%yjW4j~cIDgAtXp3Qq-kEySH6}SJQ$Mcyx_Vu^c1!VLYvm1s3k7)vH?O`M z_CD5DE>kd4z;cUQy6?4FtFuL~sjamYR+T*3VodEWc`iTjfO_xZQJIh5_H=K9oCzAN(R^?gQvS3O$YI(MV>Z*LuM zzITV-JbEj2>+Oc$87oUN{a)UXyKnn8^~|g9}`;cSd_f{6wugh8+w(4G>ZFxg&!iNQq4^ESMI&0Ca@9jI<-(9P^vh8~2^{Mj5 zWX@Uq*t-Ti0&6w&?ML9Up#d&R@J=*6LyHqTecyQ%;vh-4ER!c#G@y!f$WB)z9qv(Kqqj zhjWd=+J2?wH_Nux=70G+@p9Jk)#pyk)3o%qm|b7?Fy`FOo1a%cU#@>7R^oNvtGa^1 zt4D9!GTQ!~zDGZH=bO5pN$Z2(@6;{}_lw`Uv+9-9)Z zb%$TMJ@5e)nYWl4||; z>38PWZ+NNrEAgT7O82MzQ{}GzUGY8nb;r{aGXt+*+^6p7FW0m2*u4K!{#|bW_-FZ( z7d^cG zDE!m{i(_QTzV6gMLDITJzX3_DsH{qe2gnZTBOucHHH0il|KUm1B0il KpUXO@geCw3Z!F0G delta 2738 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 diff --git a/public/img/500.png b/public/img/500.png index 2c122fde93fcba1d61c8412867a68b2a5ebcc44c..6237f9a94387e8f316a68ca794da18b51283b98b 100644 GIT binary patch delta 2672 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 diff --git a/public/img/gogs-lg.png b/public/img/gogs-lg.png new file mode 100644 index 0000000000000000000000000000000000000000..384a58d20f381e06132089a10c9d5b46e204acf9 GIT binary patch literal 97926 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 ZLrRIMli{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);-o-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);-ms-transform:scale(1, -1);-o-transform:scale(1, -1);transform:scale(1, -1)}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-square:before,.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"} \ No newline at end of file diff --git a/public/ng/css/github.min.css b/public/ng/css/github.min.css new file mode 100644 index 0000000000..7b3600c93b --- /dev/null +++ b/public/ng/css/github.min.css @@ -0,0 +1 @@ +.hljs{display:block;overflow-x:auto;padding:.5em;color:#333;background:#f8f8f8}.hljs-comment,.hljs-template_comment,.diff .hljs-header,.hljs-javadoc{color:#998;font-style:italic}.hljs-keyword,.css .rule .hljs-keyword,.hljs-winutils,.javascript .hljs-title,.nginx .hljs-title,.hljs-subst,.hljs-request,.hljs-status{color:#333;font-weight:bold}.hljs-number,.hljs-hexcolor,.ruby .hljs-constant{color:#099}.hljs-string,.hljs-tag .hljs-value,.hljs-phpdoc,.tex .hljs-formula{color:#d14}.hljs-title,.hljs-id,.coffeescript .hljs-params,.scss .hljs-preprocessor{color:#900;font-weight:bold}.javascript .hljs-title,.lisp .hljs-title,.clojure .hljs-title,.hljs-subst{font-weight:normal}.hljs-class .hljs-title,.haskell .hljs-type,.vhdl .hljs-literal,.tex .hljs-command{color:#458;font-weight:bold}.hljs-tag,.hljs-tag .hljs-title,.hljs-rules .hljs-property,.django .hljs-tag .hljs-keyword{color:#000080;font-weight:normal}.hljs-attribute,.hljs-variable,.lisp .hljs-body{color:#008080}.hljs-regexp{color:#009926}.hljs-symbol,.ruby .hljs-symbol .hljs-string,.lisp .hljs-keyword,.tex .hljs-special,.hljs-prompt{color:#990073}.hljs-built_in,.lisp .hljs-title,.clojure .hljs-built_in{color:#0086b3}.hljs-preprocessor,.hljs-pragma,.hljs-pi,.hljs-doctype,.hljs-shebang,.hljs-cdata{color:#999;font-weight:bold}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.diff .hljs-change{background:#0086b3}.hljs-chunk{color:#aaa} \ No newline at end of file diff --git a/public/ng/css/gogs.css b/public/ng/css/gogs.css new file mode 100644 index 0000000000..7afba6b628 --- /dev/null +++ b/public/ng/css/gogs.css @@ -0,0 +1,1257 @@ +html, +body { + height: 100%; +} +.octicon, +.fa { + width: 16px; + text-align: center; +} +.fa { + font-size: 14px; +} +.container { + max-width: 1170px; + padding: 0 1.5em; + margin: auto; +} +img.avatar-16 { + width: 16px; + height: 16px; + vertical-align: middle; +} +img.avatar-24 { + width: 24px; + height: 24px; + vertical-align: middle; +} +img.avatar-30 { + width: 30px; + height: 30px; + vertical-align: middle; +} +#wrapper { + padding: 0; + margin: 0 0 -55px 0; + min-height: 100%; +} +#footer { + background-color: white; + border-top: 1px solid #d6d6d6; + clear: both; + width: 100%; + color: #888888; +} +#footer .container { + padding: 15px; +} +#footer .official, +#footer .version { + color: #888888; +} +#footer-links > * { + border-left: 1px solid #d6d6d6; + padding-left: 8px; + margin-left: 5px; +} +#footer-links > *:first-child { + border-left: none; +} +#footer-lang { + position: relative; +} +#footer-lang .drop-down { + top: -64px; + left: -2px; + position: absolute; + height: 59px; + z-index: 100; + font-size: 12px; + width: 120%; +} +#footer-lang .drop-down li > a { + padding: 3px 9px; +} +#header { + background-color: #428bca; + height: 44px; +} +#header > .menu-line > li > a { + display: inline-block; + color: #ffffff; +} +#header > .menu-line > li > a:hover { + background-color: transparent; + color: #fff65f; +} +#header > .menu-line > li.head { + color: #ffffff; +} +#header > .menu-line > li.hover a:after { + bottom: -9px; + color: #ffffff; +} +#header > .menu-line > li.current > a { + color: #fff65f; + font-weight: bold; +} +#header-nav-user { + height: 44px; +} +#header-nav-user img { + margin: -4px 10px 0 0; + border-radius: 3px; +} +#header-nav-sign-out > a:hover { + color: #ff908b !important; +} +#header-nav-logo { + padding: 6px 1.2em; +} +#header-nav-explore, +#header-nav-help { + font-size: 14px; +} +#header-new-repo-menu { + width: 180px; + background-color: #FFF; + top: 44px; + border-top: none; + left: -66px; +} +#header-new-repo-menu .octicon { + margin-right: 6px; + font-size: 1.1em; +} +.switching-list { + width: 100%; + list-style: none; +} +.switching-list > li { + border-bottom: 1px solid #eaeaea; +} +.switching-list > li:last-child { + border-bottom: none; +} +.switching-list > li > a { + padding: .4em 1.2em; + display: block; + color: #444; +} +.switching-list > li > a:hover { + background-color: #428bca !important; + color: #fff !important; +} +.social-buttons .btn { + border: none; + font-size: 16px; + border-radius: 4px; + margin-right: 12px; + font-family: 'PT Sans Narrow', sans-serif; + padding: 5px 12px; + color: #FFF; +} +.social-buttons .btn .fa { + margin-right: 6px; + font-size: 16px; +} +.social-buttons .twitter { + background-color: #1c6399; +} +.social-buttons .twitter:hover { + background-color: #1c5487; +} +.social-buttons .github { + background-color: #444; +} +.social-buttons .github:hover { + background-color: #333; +} +.social-buttons .google { + background-color: #C03D20; +} +.social-buttons .google:hover { + background-color: #D56060; +} +.social-buttons .weibo { + background-color: #bf1324; +} +.social-buttons .weibo:hover { + background-color: #b94c4a; +} +.social-buttons .qq { + background-color: #03a2ef; +} +.social-buttons .qq:hover { + background-color: #3cb3ff; +} +.main-wrapper { + padding: 20px 0 40px; +} +.markdown { + background-color: white; + font-size: 14px; + line-height: 24px; +} +.markdown .markdown-body { + padding-left: 24px; + padding-right: 16px; +} +.markdown a { + color: #428BCA; +} +.markdown h1, +.markdown h2, +.markdown h3, +.markdown h4, +.markdown h5, +.markdown h6 { + line-height: 1.7; + padding: 15px 0 0; + margin: 0 0 15px; + color: #444; + font-weight: bold; +} +.markdown h1, +.markdown h2 { + border-bottom: 1px solid #E0E0E0; +} +.markdown h2 { + border-bottom: 1px solid #E0E0E0; +} +.markdown h1 { + color: #000; + font-size: 33px; +} +.markdown h2 { + color: #333; + font-size: 28px; +} +.markdown h3 { + font-size: 22px; +} +.markdown h4 { + font-size: 18px; +} +.markdown h5 { + font-size: 14px; +} +.markdown h6 { + font-size: 14px; +} +.markdown table { + border-collapse: collapse; + border-spacing: 0; + display: block; + overflow: auto; + width: 100%; + margin: 0 0 9px; +} +.markdown table th { + font-weight: 700; +} +.markdown table th, +.markdown table td { + border: 1px solid #DDD; + padding: 6px 13px; +} +.markdown table tr { + background-color: #FFF; + border-top: 1px solid #CCC; +} +.markdown table tr:nth-child(2n) { + background-color: #f8f8f8; +} +.markdown ul li { + list-style: inside; +} +.markdown li { + line-height: 1.6; + margin-top: 6px; +} +.markdown li:first-child { + margin-top: 0; +} +.markdown dl dt { + font-style: italic; + margin-top: 9px; +} +.markdown dl dd { + margin: 0 0 9px; + padding: 0 9px; +} +.markdown blockquote, +.markdown blockquote p { + font-size: 14px; + background-color: #f5f5f5; +} +.markdown > pre { + line-height: 1.6; + overflow: auto; + border: 1px solid #ddd; + border-radius: .25em; + margin: 5px 0; +} +.markdown > pre.linenums { + padding: 0; +} +.markdown > pre > ol.linenums { + list-style: none; + padding: 0; +} +.markdown > pre > ol.linenums > li { + margin-top: 2px; +} +.markdown > pre.nums-style > ol.linenums { + list-style-type: decimal; + padding: 0 0 0 40px; + -webkit-box-shadow: inset 40px 0 0 #f5f5f5, inset 41px 0 0 #ccc; + box-shadow: inset 40px 0 0 #f5f5f5, inset 41px 0 0 #ccc; +} +.markdown > pre > code { + white-space: pre; + word-wrap: normal; +} +.markdown > pre > ol.linenums > li { + padding: 0 10px; +} +.markdown > pre > ol.linenums > li:first-child { + padding-top: 12px; +} +.markdown > pre > ol.linenums > li:last-child { + padding-bottom: 12px; +} +.markdown > pre.nums-style > ol.linenums > li { + border-left: 1px solid #ddd; +} +.markdown hr { + border: none; + color: #ccc; + height: 4px; + padding: 0; + margin: 15px 0; + border-bottom: 2px solid #EEE; +} +.markdown blockquote:last-child, +.markdown ul:last-child, +.markdown ol:last-child, +.markdown > pre:last-child, +.markdown > pre:last-child, +.markdown p:last-child { + margin-bottom: 0; +} +.markdown img { + max-width: 100%; +} +.markdown .btn { + color: #fff; +} +.markdown .anchor-wrap { + /*margin-top: -50px;*/ + /*padding-top: 50px;*/ +} +.markdown h1 a, +.markdown h2 a, +.markdown h3 a { + text-decoration: none; +} +.markdown h1 a.anchor, +.markdown h2 a.anchor, +.markdown h3 a.anchor, +.markdown h4 a.anchor, +.markdown h5 a.anchor, +.markdown h6 a.anchor { + text-decoration: none; + line-height: 1; + padding-left: 0; + margin-left: -24px; + top: 15%; +} +.markdown a span.octicon { + font-size: 16px; + line-height: 1; + display: inline-block; + text-decoration: none; + -webkit-font-smoothing: antialiased; + margin-right: 8px; +} +.markdown a span.octicon-link { + opacity: 0; + color: #444; +} +.markdown h1:hover .octicon-link, +.markdown h2:hover .octicon-link, +.markdown h3:hover .octicon-link, +.markdown h4:hover .octicon-link, +.markdown h5:hover .octicon-link, +.markdown h6:hover .octicon-link { + display: inline-block; + opacity: 1; +} +/* Author: jmblog */ +/* Project: https://github.com/jmblog/color-themes-for-google-code-prettify */ +/* GitHub Theme */ +/* Pretty printing styles. Used with prettify.js. */ +/* SPAN elements with the classes below are added by prettyprint. */ +/* plain text */ +.pln { + color: #333333; +} +@media screen { + /* string content */ + .str { + color: #dd1144; + } + /* a keyword */ + .kwd { + color: #333333; + } + /* a comment */ + .com { + color: #999988; + font-style: italic; + } + /* a type name */ + .typ { + color: #445588; + } + /* a literal value */ + .lit { + color: #445588; + } + /* punctuation */ + .pun { + color: #333333; + } + /* lisp open bracket */ + .opn { + color: #333333; + } + /* lisp close bracket */ + .clo { + color: #333333; + } + /* a markup tag name */ + .tag { + color: navy; + } + /* a markup attribute name */ + .atn { + color: teal; + } + /* a markup attribute value */ + .atv { + color: #dd1144; + } + /* a declaration */ + .dec { + color: #333333; + } + /* a variable name */ + .var { + color: teal; + } + /* a function name */ + .fun { + color: #990000; + } +} +/* Use higher contrast and text-weight for printable form. */ +@media print, projection { + .str { + color: #006600; + } + .kwd { + color: #006; + font-weight: bold; + } + .com { + color: #600; + font-style: italic; + } + .typ { + color: #404; + font-weight: bold; + } + .lit { + color: #004444; + } + .pun, + .opn, + .clo { + color: #444400; + } + .tag { + color: #006; + font-weight: bold; + } + .atn { + color: #440044; + } + .atv { + color: #006600; + } +} +/* Specify class=linenums on a pre to get line numbering */ +ol.linenums { + margin-top: 0; + margin-bottom: 0; +} +#promo-wrapper { + padding-top: 50px; + background-color: #428bca; +} +#promo-logo { + margin-right: 50px; + padding-bottom: 50px; +} +#promo-logo img { + max-width: 250px; +} +#promo-content { + color: #FFF; + margin-left: 300px; +} +#promo-content h1, +#promo-content h2 { + font-family: 'PT Sans Narrow', sans-serif; + line-height: 60px; + margin-bottom: 0; + text-shadow: 0 2px 1px rgba(0, 0, 0, 0.5); +} +#promo-content h1 { + font-size: 96px; + line-height: 96px; + margin-bottom: 30px; +} +#promo-content h2 { + font-size: 52px; + line-height: 70px; + font-weight: normal; +} +#promo-form { + padding: 40px 0; +} +#promo-form .ipt-large { + border: none; + border-radius: 4px; + font-size: 18px; + margin-right: 12px; +} +#promo-form .ipt-large:focus { + box-shadow: 0 0 3px #FFF; +} +#promo-form .btn-large { + border-radius: 4px; + font-size: 18px; + margin-right: 12px; +} +#promo-social { + padding-bottom: 60px; +} +#promo-social .qq { + box-shadow: 0 0 1px #1c6399; +} +#feature-wrapper { + font-family: Lato, sans-serif; + font-size: 18px; + padding: 50px 0 100px 0; +} +#feature-wrapper .octicon { + color: #d9453d; + font-size: 60px; + height: 60px; + width: 60px; + line-height: 60px; + margin-right: 12px; + vertical-align: middle; + display: inline-block; +} +#feature-wrapper b { + color: #000; + font-size: 24px; + display: inline-block; + line-height: 60px; +} +#feature-wrapper p { + margin: 1em 0; + line-height: 40px; + padding-right: 30px; +} +#feature-wrapper a { + color: #d9453d; +} +#feature-wrapper a:hover { + color: #ff635a; +} +#feature-wrapper .grid-1-2 { + margin-bottom: 30px; +} +/* +The dashboard page style +*/ +#dashboard-header { + border-bottom: 1px solid #d6d6d6; + height: 69px; +} +#dashboard-header > .menu-line > li { + padding: 12px 0; +} +#dashboard-header > .menu-line > li.right > a { + font-size: 1.2em; + color: #444444; +} +#dashboard-header > .menu-line > li.right > a:hover { + background-color: transparent; + color: #d9453d; +} +#dashboard-header > .menu-line > li.right > a .octicon { + margin-right: 6px; +} +#dashboard-header > .menu-line > li.right .current { + border-bottom: 2px solid #D26911; +} +#dashboard-selection-menu a img { + margin: -4px 10px 0 0; +} +#dashboard { + padding: 24px 0; +} +#dashboard-sidebar .panel-header h4 { + margin: 0; +} +#dashboard-sidebar > .panel { + margin-bottom: 24px; + border-bottom-left-radius: .3em; + border-bottom-right-radius: .3em; +} +#dashboard-sidebar-menu { + border-top-left-radius: .3em; + border-top-right-radius: .3em; + width: 100%; + height: 35px; +} +#dashboard-sidebar-menu > li { + border: 1px solid #d6d6d6; + float: left; + margin-right: -1px; + border-bottom: none; +} +#dashboard-sidebar-menu > li > a { + padding-top: .4em; + padding-bottom: .4em; +} +#dashboard-sidebar-menu > li.first { + border-top-left-radius: .3em; +} +#dashboard-sidebar-menu > li.first > a { + border-top-left-radius: .3em; +} +#dashboard-sidebar-menu > li.drop { + border: none; + float: right; +} +#dashboard-sidebar-menu > li.js-tab-nav-show { + background-color: #EEEEEE; +} +#dashboard-sidebar-menu > li.last { + border-top-right-radius: .3em; +} +#dashboard-sidebar-menu > li.last > a { + border-top-right-radius: .3em; +} +#dashboard-my-repo li { + border-bottom: 1px solid #EAEAEA; +} +#dashboard-my-repo li.private { + background-color: #fcf8e9; +} +#dashboard-my-repo li:last-child { + border-bottom: none; +} +#dashboard-my-repo li a { + padding: 6px 1.2em; + display: block; +} +#dashboard-my-repo li a .octicon { + margin-right: 6px; + color: #888; +} +#dashboard-my-repo li a:hover .repo-name { + text-decoration: underline; +} +#dashboard-my-repo .repo-name { + font-size: 1.1em; +} +#dashboard-my-repo .repo-star { + color: #888; +} +#dashboard-my-repo .repo-contrib-header { + border-top: 1px solid #d6d6d6; +} +#dashboard-my-repo .panel-header .octicon { + margin-right: 6px; + font-size: 12px; +} +#dashboard-my-repo .repo-count { + margin-left: 4px; +} +#dashboard-my-org, +#dashboard-my-mirror { + display: none; +} +#dashboard-new-repo { + width: 50px; + height: 35px; + padding-top: 6px; + margin-right: 1px; + border-top-left-radius: .3em; + border-top-right-radius: .3em; +} +#dashboard-new-repo .octicon { + font-size: 2em; +} +#dashboard-new-repo-menu { + top: 35px; + width: 180px; + background-color: #FFF; + left: -132px; +} +#dashboard-new-repo-menu .octicon { + margin-right: 6px; + font-size: 1.1em; +} +#dashboard-selection-menu > .drop-down { + top: 56px; +} +#dashboard-switch-menu { + border-bottom-left-radius: .3em; + border-bottom-right-radius: .3em; +} +#dashboard-switch-menu > li > a img { + margin-top: 0; +} +#dashboard-switch-menu > li > a .octicon { + margin-right: 12px; +} +#dashboard-switch-menu > li:last-child > a { + border-bottom-left-radius: .3em; + border-bottom-right-radius: .3em; +} +#dashboard-switch-menu > li.org > a .octicon { + opacity: 0; +} +#dashboard-switch-menu > li.checked > a { + font-weight: bold; +} +#dashboard-switch-menu > li.checked > a .octicon { + opacity: 1; +} +#dashboard-news .news { + margin-right: 2.4em; + padding-bottom: 1em; + margin-bottom: 1em; + border-bottom: 1px solid #E6E6E6; + min-height: 30px; +} +#dashboard-news .news .mega-octicon { + color: #CCC; +} +#dashboard-news .news .avatar { + margin: 0 1.2em; +} +#dashboard-news .news .news-content, +#dashboard-news .news .news-time { + color: #888; +} +#dashboard-news .push-news .news-content li { + margin-left: 1em; +} +#dashboard-news .push-news .news-content li img { + margin-bottom: -2px; +} +/* +The register and sign-in page style +*/ +#sign-wrapper { + padding: 60px 0; +} +.sign-panel { + background-color: #ffffff; +} +.sign-form.form-align .field { + margin: 1.2em 0 2em 0; +} +.sign-form.form-align .ipt-large { + width: 300px; +} +.sign-form.form-align label, +.sign-form.form-align .form-label { + width: 160px; +} +.sign-form.form-align .alert { + margin: 0 30px 24px 30px; +} +.sign-form.form-align:hover { + box-shadow: 0 0 6px #CCC; +} +.sign-form.container { + padding: 0; + width: 600px; + margin-bottom: 80px; +} +#sign-up-form .panel-content { + margin-top: 1.2em; +} +#sign-up-form h2 { + margin: .5em 1em; +} +#sign-social { + position: relative; + margin: 40px 0; +} +#sign-social .or { + position: absolute; + width: 30px; + top: -52px; + left: 50%; + background-color: #FFF; + margin-left: -15px; +} +/* repository main */ +#repo-header { + height: 69px; + border-bottom: 1px solid #d6d6d6; + background-color: #ffffff; +} +#repo-header-name { + line-height: 66px; + color: #888888; + font-size: 1.6em; + font-weight: normal; +} +#repo-header-name i { + margin-right: 12px; + vertical-align: middle; +} +#repo-header-name .divider { + margin: 0 4px; +} +#repo-header-meta { + line-height: 66px; +} +#repo-header-meta li > a { + padding: 0; +} +#repo-header-meta li > a:hover { + background-color: transparent; +} +#repo-header-meta a > .btn { + font-size: 1.05em; + margin-left: 16px; + line-height: 16px; +} +#repo-header-meta a > .btn i { + margin-right: 6px; +} +#repo-header-meta a > .btn .num { + margin-left: 6px; +} +#repo-header-download-btn > .btn > i { + margin-right: 0 !important; +} +#repo-header-download-btn:hover:after, +#repo-header-download-btn:hover .btn { + background-color: #383838; + color: #FFF; +} +#repo-header-download-btn:after { + background-color: #444444; + padding: 9px 16px 8px 0; + margin-left: -8px !important; + color: #FFF; + border-top: 1px solid #444444; + border-bottom: 1px solid #444444; + border-top-right-radius: .25em; + border-bottom-right-radius: .25em; +} +#repo-header-download-drop { + line-height: 24px; + width: 440px; + top: 50px; + left: -354px; + padding: 20px; + box-sizing: border-box; +} +#repo-header-download-drop .btn > i { + margin-right: 6px; +} +#repo-content { + padding: 18px 0; +} +#repo-clone-url { + border-right: none; + width: 196px; + border-left: none; +} +#repo-clone-help { + line-height: 48px; +} +#repo-clone-zip { + line-height: 48px; +} +#repo-clone-zip a { + cursor: pointer; + color: white; + overflow: visible; + padding: .6em 1.2em; +} +#repo-clone-zip .btn { + margin: 0 6px; +} +#repo-desc { + font-size: 1.2em; +} +#repo-sidebar-nav .label { + font-size: 12px; + line-height: 1.4em; + margin-top: 2px; +} +#repo-sidebar-nav i { + margin-right: 6px; +} +#repo-file-nav { + padding: .6em 0 1em 0; +} +#repo-file-nav > li > a { + padding-left: 0; +} +#repo-file-nav > li > a:hover { + background-color: transparent; +} +#repo-file-nav li.repo-jump > a { + padding-right: 0; +} +#repo-file-nav li.repo-jump > a .btn { + margin-left: -1px; +} +#repo-branch-switch > a .btn { + padding-right: 30px; +} +#repo-branch-switch > a:after { + position: absolute; + top: 12px; + right: 30px; + margin-left: 0; + color: #444444; +} +#repo-branch-switch > .drop-down { + top: 40px; + left: 0; +} +#repo-branch-filter-ipt { + width: 100%; + border-left: none; + border-right: none; + box-sizing: border-box; +} +#repo-branch-tag .tab-nav { + border-bottom: 1px solid #EAEAEA; +} +#repo-branch-tag .tab-nav a { + padding: .3em .8em; +} +#repo-branch-tag .tab-nav .js-tab-nav-show { + background-color: #EEE; + font-weight: bold; +} +#repo-branch-list li i, +#repo-tag-list li i { + margin-right: 12px; + opacity: 0; +} +#repo-branch-list li.checked i, +#repo-tag-list li.checked i { + opacity: 1; +} +#repo-tag-list { + display: none; +} +#repo-bread .bread { + padding-right: 0; + font-size: 16px; + font-weight: bold; +} +#repo-main { + padding-right: 40px; + box-sizing: border-box; +} +#repo-files-table { + margin-bottom: 20px; +} +#repo-files-table th, +#repo-files-table td { + text-align: left; + line-height: 32px; +} +#repo-files-table td.icon { + width: 16px; + padding-right: .1em; + padding-left: 1em; +} +#repo-files-table td.name { + max-width: 120px; +} +#repo-files-table td.name .text-truncate { + max-width: 100%; +} +#repo-files-table td.age { + max-width: 120px; + text-align: right; +} +#repo-files-table td.msg { + max-width: 440px; +} +#repo-files-table td.msg .text-truncate { + max-width: 100%; +} +#repo-files-table td.age, +#repo-files-table td.size, +#repo-files-table td.msg a { + color: #888; +} +#repo-files-table td.msg a:hover { + color: #428BCA; + text-decoration: underline; +} +#repo-files-table tbody { + background-color: #FFF; +} +#repo-files-table tbody tr:hover { + background-color: #ffffEE; +} +#repo-files-table thead { + background-color: #F0F0F0; +} +#repo-files-table thead .author a { + margin: 0 .4em; +} +#repo-files-table thead .last-commit strong { + color: #444; +} +#repo-files-table thead .last-commit .text-truncate { + margin-left: .4em; +} +#repo-files-table thead .last-commit .text-truncate, +#repo-files-table thead .age { + font-weight: normal; + color: #888; +} +#repo-readme { + margin-bottom: 80px; +} +#repo-bare-start { + margin-bottom: 100px; +} +#repo-bare-start .panel-content { + background-color: #FFF; +} +#repo-bare-start pre { + margin: 0 40px; +} +.repo-bare #repo-bare-start h2 { + margin-top: 30px; + margin-bottom: 24px; +} +.repo-bare #repo-header-meta { + display: none; +} +.repo-bare #repo-clone-ssh { + margin-left: 200px; +} +.repo-bare #repo-clone-copy { + margin-right: 200px; +} +.repo-bare #repo-clone-help { + width: 100%; +} +.repo-bare #repo-clone-url { + width: 520px; +} +/* repository create */ +#repo-create-form { + width: 800px; + margin: 60px auto 150px auto; + background: white; +} +#repo-create-form h2 { + margin: .5em 1em; +} +#repo-create-form .field { + margin: 1.2em 0 2em 0; +} +#repo-create-form .ipt { + width: 540px; +} +#repo-create-form textarea { + height: 120px; +} +#repo-create-form .avatar { + vertical-align: middle; + margin-right: .6em; + width: 28px; + height: 28px; +} +#repo-create-form:hover { + box-shadow: 0px 0px 6px #CCC; +} +#repo-create-cancel { + margin-left: 4em; +} +#repo-create-owner-list { + top: 30px; + left: 0; +} +#repo-create-owner-list .octicon { + margin-right: 12px; + opacity: 0; +} +#repo-create-owner-list .avatar { + width: 20px; + height: 20px; +} +#repo-create-owner-list li.checked .octicon { + opacity: 1; +} +.file-name { + margin-left: 1em; +} +.file-size { + font-size: 13px; + color: #888; + margin-left: 1em; +} +.code-view { + overflow: auto; + overflow-x: auto; + overflow-y: hidden; +} +.code-view table { + width: 100%; +} +.code-view table td { + padding: 0; +} +.code-view .lines-num { + text-align: right; + color: #999; + background: #f5f5f5; + width: 1%; +} +.code-view .lines-num span { + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; + line-height: 18px; + padding: 0 8px 0 10px; + cursor: pointer; + display: block; + margin-top: 2px; + font-size: 12px; +} +.code-view .lines-code > pre { + border: none; + background: none; + border-left: 1px solid #ddd; +} +.code-view .lines-code > pre > ol.linenums > li { + padding: 0 10px; +} +.code-view .lines-code > pre > ol.linenums > li.active { + background: #ffffdd; +} +#setting-wrapper { + padding-bottom: 100px; +} +#setting-menu { + box-sizing: border-box; +} +#setting-menu li > a { + border-left: 2px solid #FFF; + background-color: #FFF; +} +#setting-menu li:hover { + border-color: #EAEAEA; +} +#setting-menu li:hover a { + border-left: 2px solid #EFEFEF; + background-color: #EFEFEF !important; + color: #000 !important; +} +#setting-menu li.current a { + color: #000 !important; + font-weight: bold; + border-left: 2px solid #d26911; +} +.setting-content { + margin-left: 32px; +} +#user-profile-form { + background-color: #FFF; + padding: 30px 0; +} +#user-profile-form label, +#user-profile-form .form-label { + width: 240px; +} +#user-profile-form .ipt { + width: 360px; +} +#user-profile-form .field { + margin-bottom: 24px; +} +#user-ssh-panel { + margin-bottom: 20px; +} +#user-ssh-panel .switching-list { + background-color: #FFF; +} +#user-ssh-panel .switching-list li { + padding: 8px 20px; +} +#user-ssh-panel .switching-list li.ssh:hover { + background-color: #ffffEE; +} +#user-ssh-panel .active-icon { + width: 10px; + height: 10px; + border-radius: 6px; + padding: 0; + margin-right: 20px; + margin-top: 10px; +} +#user-ssh-panel .ssh-content { + margin-left: 24px; +} +#user-ssh-panel .ssh-content .octicon { + margin-right: 4px; +} +#user-ssh-panel .ssh-content .print, +#user-ssh-panel .ssh-content .activity { + color: #888; +} +#user-ssh-panel .ssh-delete-btn { + margin-top: 6px; +} +#user-ssh-add-form .panel-body { + background-color: #FFF; + padding: 30px 0; +} +#user-ssh-add-form .ipt { + width: 500px; +} +#user-ssh-add-form textarea { + height: 120px; + margin-left: 3px; +} +#user-ssh-add-form .field { + margin-bottom: 24px; +} diff --git a/public/ng/css/ui.css b/public/ng/css/ui.css new file mode 100644 index 0000000000..f32261234f --- /dev/null +++ b/public/ng/css/ui.css @@ -0,0 +1,814 @@ +* { + padding: 0; + margin: 0; +} +html { + font-size: 13px; + font-family: Helvetica, "Microsoft Yahei", Menlo, Monaco, Consolas, "Courier New", monospace; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + line-height: 24px; + color: #444444; + background-color: #fafafa; +} +input, +textarea, +select, +option, +button { + font-family: Helvetica, "Microsoft Yahei", Menlo, Monaco, Consolas, "Courier New", monospace; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +main, +nav, +section, +summary, +.block { + display: block; +} +.inline { + display: inline; +} +.inline-block { + display: inline-block; +} +.dis-table { + display: table; +} +.dis-table-cell { + display: table-cell; +} +.dis-flex { + display: flex; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template .hidden { + display: none; +} +.opacity { + opacity: 0; +} +.opacity-half { + opacity: .5; +} +a, +.text-link { + color: #428bca; + text-decoration: none; +} +a:hover, +.text-link:hover { + color: #399ade; + text-decoration: none; +} +a:focus, +.text-link:focus { + outline: none; +} +b, +strong, +.text-bold { + font-weight: bold; +} +dfn, +.text-italic { + font-style: italic; +} +h1, +.text-h1 { + font-size: 2em; + margin-bottom: 0.67em; +} +h2, +.text-h2 { + font-size: 1.6em; + margin-bottom: 0.625em; +} +h3, +.text-h3 { + font: 1.2em; + margin-bottom: 0.5em; +} +h4, +h5, +h6, +.text-h4, +.text-h5, +.text-h6 { + font-size: 1em; + margin-bottom: .3em; +} +small, +.text-small { + font-size: .8em; +} +sub, +sup, +.text-sup, +.text-sub { + font-size: .7em; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup, +.text-sup { + top: -0.5em; +} +sub, +.text-sub { + bottom: -0.25em; +} +.figure, +.blockquote { + margin: 1em 1.5em; +} +pre { + overflow: auto; + margin: 0; + padding: .4em 1em; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.list-no-style { + list-style: none; +} +img { + border: none; +} +svg:not(:root) { + overflow: hidden; +} +label { + font-weight: bold; +} +input, +.ipt { + padding: .6em; + line-height: normal; + border: 1px solid #bbbbbb; +} +input:focus, +.ipt:focus { + background-color: #f2fffc; + outline: none; +} +button { + overflow: visible; + padding: .6em 1.2em; +} +button, +select { + text-transform: none; +} +button:focus, +select:focus { + outline: none; +} +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + -moz-appearance: button; + cursor: pointer; + background-color: #888888; + color: #fafafa; + border: none; +} +button:hover, +input[type="button"]:hover, +input[type="reset"]:hover, +input[type="submit"]:hover { + background-color: #444444; + color: #ffffff; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} +input[type="search"] { + -webkit-appearance: textfield; + -moz-appearance: textfield; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} +fieldset { + border: 1px solid #bbbbbb; + margin: 0 2px; + padding: 0.4em 0.8em 0.8em; +} +legend { + border: 0; + padding: 0; +} +textarea { + overflow: auto; + border: 1px solid #bbbbbb; + padding: .6em; +} +textarea:focus { + background-color: #f2fffc; + outline: none; +} +optgroup { + font-weight: bold; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +td, +th { + padding: 0; +} +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; + border: none; + border-bottom: 1px solid #dddddd; + margin-bottom: .75em; +} +p code { + color: #b63b2c; +} +.radius { + border-radius: .25em; +} +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: inline-block; + vertical-align: top; +} +pre { + line-height: 1.6; + overflow: auto; + padding: 0; +} +.left { + float: left; +} +.right { + float: right; +} +.clear::after { + clear: both; + content: " "; + width: 0; + height: 0; + display: block; +} +.hide { + display: none; +} +.grid-1-12 { + width: 8.33%; +} +.grid-2-12, +.grid-1-6 { + width: 16.67%; +} +.grid-3-12, +.grid-1-4 { + width: 25%; +} +.grid-4-12, +.grid-1-3 { + width: 33%; +} +.grid-5-12 { + width: 41.67%; +} +.grid-6-12, +.grid-1-2 { + width: 50%; +} +.grid-7-12 { + width: 58.33%; +} +.grid-8-12, +.grid-2-3 { + width: 66.67%; +} +.grid-9-12, +.grid-3-4 { + width: 75%; +} +.grid-10-12, +.grid-5-6 { + width: 83.33%; +} +.grid-11-12 { + width: 91.67%; +} +*[class*="grid-"] { + box-sizing: content-box; +} +.grid-1-5 { + width: 20%; +} +.grid-2-5 { + width: 40%; +} +.grid-3-5 { + width: 60%; +} +.grid-4-5 { + width: 80%; +} +.btn-small { + font-size: 10.8px; + padding: .4em .9em; +} +.btn-large { + font-size: 14.4px; +} +.btn-green { + background-color: #65ad4e; + border: 1px solid #65ad4e; +} +.btn-green:hover { + background-color: #71bf57; + color: #FFF; +} +.btn-blue { + background-color: #428bca; + border: 1px solid #428bca; +} +.btn-blue:hover { + background-color: #539cdb; + color: #FFF; +} +.btn-red { + background-color: #d9453d; + border: 1px solid #d9453d; +} +.btn-red:hover { + background-color: #ff635a; + color: #FFF; +} +.btn-orange { + background-color: #df7514; + border: 1px solid #df7514; +} +.btn-orange:hover { + background-color: #df8229; + color: #FFF; +} +.btn-black { + background-color: #444444; + border: 1px solid #444444; +} +.btn-black:hover { + background-color: #383838; + color: #FFF; +} +.btn-gray { + background-color: #f0f0f0; + color: #444444; + border: 1px solid #d0d0d0; +} +.btn-gray:hover { + background-color: #fafafa; + color: #444444; +} +.btn-active { + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1) inset, 0 0 4px rgba(0, 0, 0, 0.15) inset; +} +.btn-radius { + border-radius: .25em; +} +.btn-left-radius { + border-top-left-radius: .25em; + border-bottom-left-radius: .25em; +} +.btn-right-radius { + border-top-right-radius: .25em; + border-bottom-right-radius: .25em; +} +.btn-block { + display: block; + width: 100%; + box-sizing: content-box; + text-align: center; +} +.btn-disabled { + opacity: .6; + cursor: not-allowed; + box-shadow: none; + background-image: none !important; + border: none; +} +.btn-disabled:hover { + background-image: none !important; + color: #ffffff; +} +.ipt:focus { + border-color: #428bca; +} +.ipt-radius { + border-radius: .25em; +} +.ipt-small { + font-size: 9.6px; +} +.ipt-large { + font-size: 14.4px; +} +.ipt-disabled, +input[disabled] { + background-color: #f2f2f2 !important; + color: #888; + cursor: not-allowed; +} +.ipt-disabled:focus, +input[disabled]:focus { + background-color: #f2f2f2 !important; +} +.ipt-readonly:focus, +input[readonly]:focus { + background-color: #f2f2f2 !important; +} +.ipt-error { + border-color: #b63b2c !important; + background-color: #fff0f0 !important; +} +.form label { + margin-right: 1em; +} +.form .help { + color: #999999; + padding-top: .6em; + display: inline-block; +} +.form-stack label { + display: block; +} +.form-stack .field { + margin-bottom: 1em; +} +.form-align label, +.form-align .form-label { + display: inline-block; + width: 120px; + text-align: right; + margin-right: 1em; +} +.form-align .field { + margin-bottom: 1em; +} +label.req:after { + content: "*"; + color: #d9453d; +} +ul.menu > li { + list-style: none; +} +ul.menu > li > a { + padding: .8em 1.2em; +} +ul.menu > li > a:hover { + background-color: #eaeaea; + color: #444444; +} +ul.menu > li.current > a, +ul.menu > li.hover > a { + color: #444444; +} +ul.menu > li.head { + font-weight: bold; + padding: .8em 1.2em; +} +ul.menu > li.down:hover > ul.menu-down { + display: block; +} +ul.menu > li.border-bottom { + border-bottom: 1px solid #bbbbbb; + height: 0; + margin: .5em 0; +} +ul.menu-line > li, +ul.menu-line > li > a { + display: inline-block; +} +ul.menu-line > li.down { + position: relative; +} +ul.menu-line > li.down > a:after { + content: "\25BE"; + margin-left: .4em; +} +ul.menu-line > li.down > ul.menu-down { + top: 2.1em; + width: 150%; +} +ul.menu-line > li.hover { + position: relative; +} +ul.menu-line > li.hover > a:after { + position: absolute; + content: "\25B4"; + left: 50%; + bottom: -1.1em; + margin-left: -4px; +} +ul.menu-vertical > li > a, +ul.menu-down > li > a, +ul.menu-vertical > li.head, +ul.menu-down > li.head { + display: block; + padding: .4em 1.2em; +} +ul.menu-vertical > li.down, +ul.menu-down > li.down { + position: relative; +} +ul.menu-vertical > li.down > a:after, +ul.menu-down > li.down > a:after { + content: "\25B8"; + position: absolute; + right: .6em; +} +ul.menu-vertical > li.hover, +ul.menu-down > li.hover { + position: relative; +} +ul.menu-vertical > li.hover > a:after, +ul.menu-down > li.hover > a:after { + content: "\25B8"; + position: absolute; + left: .5em; +} +ul.menu-border, +ul.menu-down { + border: 1px solid #bbbbbb; +} +ul.menu-border > li.head, +ul.menu-down > li.head { + border-bottom: 1px solid #bbbbbb; +} +ul.menu-down { + position: absolute; + display: none; + z-index: 99; + box-shadow: 0 0 2px #666666; + background-color: #ffffff; +} +ul.menu-radius { + border-radius: .3em; +} +ul.menu-radius > li:first-child { + border-top-left-radius: .3em; + border-top-right-radius: .3em; +} +ul.menu-radius > li:first-child > a { + border-top-left-radius: .2em; + border-top-right-radius: .2em; +} +ul.menu-radius > li:last-child { + border-bottom-left-radius: .3em; + border-bottom-right-radius: .3em; +} +ul.menu-radius > li:last-child > a { + border-bottom-left-radius: .2em; + border-bottom-right-radius: .2em; +} +.drop { + position: relative; +} +.drop:hover > .drop-down { + position: absolute; + top: 0; + left: 0; + width: 200%; + display: block; +} +.drop > .drop-down { + display: none; + border: 1px solid #bbbbbb; + box-shadow: 0 0 3px #666666; + background-color: #ffffff; +} +.drop-bottom:after { + content: "\25BE"; + margin-left: .4em; +} +.drop-top:after { + content: "\25B4"; + margin-left: .4em; +} +.panel { + border: 1px solid #cccccc; +} +.panel .panel-header { + font-size: 16px; + padding: .6em 1.2em; + background-color: #eeeeee; + border-bottom: 1px solid #cccccc; +} +.panel .panel-body .panel-desc { + margin-bottom: 20px; +} +.panel .panel-content { + padding: 1em 1.2em; +} +.panel .panel-footer { + padding: .6em 1.2em; + background-color: #eeeeee; + border-top: 1px solid #cccccc; +} +.panel.panel-radius { + border-radius: .3em; +} +.panel.panel-radius .panel-header { + border-top-left-radius: .3em; + border-top-right-radius: .3em; +} +.panel.panel-radius .panel-footer { + border-bottom-left-radius: .3em; + border-bottom-right-radius: .3em; +} +.panel.panel-warning { + border-color: #F0C36D; +} +.panel.panel-warning > .panel-header { + background-color: #F9EDBE; + border-color: #F0C36D; +} +.label { + padding: 2px 6px; + color: #ffffff; +} +.label-red { + background-color: #d9453d; +} +.label-blue { + background-color: #428bca; +} +.label-gray { + background-color: #999999; +} +.label-green { + background-color: #65ad4e; +} +.label-orange { + background-color: #df7514; +} +.label-black { + background-color: #444444; +} +.label-radius { + border-radius: .2em; +} +.label-link { + color: #ffffff; +} +.label-link:hover { + color: #ffffff; +} +.breads .bread:after { + content: "/"; + font-weight: bold; + margin: 0 4px 0 7px; + color: #444444; +} +.breads .bread:last-child:after { + content: ""; + margin: 0; +} +.alert { + padding: .6em 1.5em; + margin-bottom: 10px; +} +.alert i { + margin-right: 8px; +} +.alert-radius { + border-radius: .25em; +} +.alert-red { + color: #d9453d; + border: 1px solid #be2d25; + background-color: #fae9e8; +} +.alert-blue { + color: #428bca; + border: 1px solid #3071a9; + background-color: #f5f9fc; +} +.alert-green { + color: #65ad4e; + border: 1px solid #508a3e; + background-color: #edf6eb; +} +.alert-gray { + color: #999999; + border: 1px solid #808080; + background-color: #f2f2f2; +} +.alert-orange { + color: #df7514; + border: 1px solid #b05c10; + background-color: #fcecdd; +} +table th, +table td { + padding: .3em .6em; + line-height: 30px; +} +.table-border { + border: 1px solid #d6d6d6; +} +.table-border tr { + border-top: 1px solid #eaeaea; +} +.table-border tr th, +.table-border tr td { + border-top: 1px solid #eaeaea; +} +.table-border tr:first-child { + border-top: none; +} +.table-border thead { + border-bottom: 1px solid #d6d6d6; +} +.table-block { + width: 100%; + box-sizing: border-box; +} +.table-radius { + border-collapse: separate !important; + border-radius: .3em; +} +.table-radius thead:first-child { + border-top-left-radius: .3em; + border-top-right-radius: .3em; +} +.table-radius thead:first-child tr:first-child { + border-top-left-radius: .3em; +} +.table-radius thead:first-child tr:first-child > th:first-child { + border-top-left-radius: .3em; +} +.table-radius thead:first-child tr:first-child > th:last-child { + border-top-right-radius: .3em; +} +.table-radius tbody { + border-bottom-left-radius: .3em; + border-bottom-right-radius: .3em; +} +.table-radius tbody tr:last-child { + border-bottom-left-radius: .3em; + border-bottom-right-radius: .3em; +} +.table-radius tbody tr:last-child > td:first-child { + border-bottom-left-radius: .3em; +} +.table-radius tbody tr:last-child > td:last-child { + border-bottom-right-radius: .3em; +} diff --git a/public/ng/fonts/FontAwesome.otf b/public/ng/fonts/FontAwesome.otf new file mode 100644 index 0000000000000000000000000000000000000000..3461e3fce6a37f2321ecbe64707f04c0a4f05424 GIT binary patch literal 75188 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 c{3sRuE&p3DO;17I+&SVsS6zNH=rG!4 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/ng/fonts/fontawesome-webfont.ttf b/public/ng/fonts/fontawesome-webfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..5cd6cff6d6f6cf438a882e366420dbcc5dddd3f1 GIT binary patch literal 141564 zcmZQzWME(rWMp7qVGwY03-L|Y?u%q#V3c8CV32Wladl&oWnf`oV6A zsxoI_V2og3U`R;LO)PlOu)~XifpG@|1Jk19vJwT>W{wpM3@kAW3=A4+1?joLTlAMR zFtD^RFfgU2Cl(hlFfa%(FtEL0U|`@#qCwA$$y0|VO^2F8DLGEx&$*fT5y8JJin zFfcHfWn`o#@-uO6VqjuD!N9$S^1{EMQp4u#RC1!!d>%3S0{M3h|0cN^(jGs((K4eUSTL_rdQ&+=sjmbszdZ z%=@tJ!=?}CKHU58?!&*2d>`dL>V35P==U-1W8TNQk9{BKeO&i(-^X(w?|pptmEk|g zc_7nQz)fdBF`eOqzz4+-4j%$OBz!3N(C}fxhXo%td^qso!iNVRK73^ODDY9?qrpdq zj{zSOJ{Ejz_&DL?f{zzVAbJ`iPGJ`rn6Cru_GX2gF;74jPwSENZk$WIvZ8MLJn{t4jmyu1xtP1 z4V*d(wIEB5NS}>V*ubpnsjRSpMa^piLqJ4VYFDBHh+!eEs2C~T1?B}sfO#Mbxgf3+ zkQPvk)ZM_Xqi_lA9UdJ8{SEBeF%b$1?#gb7Sqc#fDM?^W(jaxbAe$8|^%c4l+`HTo zmAe$Wl)=_1Z(sY?JLZ2}MO|g=<~jK@kdF%AN`v z7(yYg0l6>=Tezgmo0U6uR0$!RD2s+{L~@At1s=`aq=a z1`(aj3=WJAPEL&8I|LY#8Neh+acBgH42n=rQrN(t>?EC}uz^w8DNWGm<>UmBf}Gl$qwKpgkZ4f%UK}cYO^w|y4`Wtl_wKtea?Gn0l=qiJ#HW$kVWj($PJOUe( z1vYXs{$$y}Bd}44@h8(}ZXP9NJv}`=#*N%OdU_iiq!>4{GYSfA(6HR7C@mv%o)v$jl@I+MfjMM^q8Q+tPn1vOGdhG zX1JOhvjdNShJ{N;dQ^Ib3q0MpGLmJ!WM^CAK&x)&ov)aZbM+oZ=dUd07we z3M;7o`!dhiA=iMB(ID5sc;3G+stS`2USP9QGS?GfWE9aeSF&QeaL_E4k(G^yPVT__8!lM7||JjQPiHb6X{hK1mT&c?G$#`5-^Pi
dCLzj^<7*m*@| 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 i9b$7!i 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 uY|m&W&t!DqfQyF=Gq;BaH?xcf7hi-lE30$_ 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 literal 0 HcmV?d00001 diff --git a/public/ng/fonts/octicons.svg b/public/ng/fonts/octicons.svg new file mode 100755 index 0000000000..ea3e0f1615 --- /dev/null +++ b/public/ng/fonts/octicons.svg @@ -0,0 +1,198 @@ + + + + +(c) 2012-2014 GitHub + +When using the GitHub logos, be sure to follow the GitHub logo guidelines (https://github.com/logos) + +Font License: SIL OFL 1.1 (http://scripts.sil.org/OFL) +Applies to all font files + +Code License: MIT (http://choosealicense.com/licenses/mit/) +Applies to all other files + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/ng/fonts/octicons.ttf b/public/ng/fonts/octicons.ttf new file mode 100755 index 0000000000000000000000000000000000000000..b850701aea89d12f1684a50036194747ff1e7de2 GIT binary patch literal 31272 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 S=Yy6NDXGQTCHVym3=9B#?@6ct literal 0 HcmV?d00001 diff --git a/public/ng/fonts/octicons.woff b/public/ng/fonts/octicons.woff new file mode 100755 index 0000000000000000000000000000000000000000..c1e76ab4a31ce674350afc9cd971adb03b9dffc8 GIT binary patch literal 17492 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 literal 0 HcmV?d00001 diff --git a/public/ng/js/gogs.js b/public/ng/js/gogs.js new file mode 100644 index 0000000000..e5f109af01 --- /dev/null +++ b/public/ng/js/gogs.js @@ -0,0 +1,205 @@ +// @codekit-prepend "lib/jquery-1.11.1.min.js" +// @codekit-prepend "lib/tabs.js" + +(function ($) { + // extend jQuery ajax, set csrf token value + var ajax = $.ajax; + $.extend({ + ajax: function (url, options) { + if (typeof url === 'object') { + options = url; + url = undefined; + } + options = options || {}; + url = options.url; + var csrftoken = $('meta[name=_csrf]').attr('content'); + var headers = options.headers || {}; + var domain = document.domain.replace(/\./ig, '\\.'); + if (!/^(http:|https:).*/.test(url) || eval('/^(http:|https:)\\/\\/(.+\\.)*' + domain + '.*/').test(url)) { + headers = $.extend(headers, {'X-Csrf-Token': csrftoken}); + } + options.headers = headers; + var callback = options.success; + options.success = function (data) { + if (data.once) { + // change all _once value if ajax data.once exist + $('[name=_once]').val(data.once); + } + if (callback) { + callback.apply(this, arguments); + } + }; + return ajax(url, options); + }, + + changeHash: function (hash) { + if (history.pushState) { + history.pushState(null, null, hash); + } + else { + location.hash = hash; + } + }, + + deSelect: function () { + if (window.getSelection) { + window.getSelection().removeAllRanges(); + } else { + document.selection.empty(); + } + } + }); +}(jQuery)); + +$(document).ready(function () { + Tabs('#dashboard-sidebar-menu'); + + homepage(); + settingsProfile(); + settingsSSHKeys(); + settingsDelete(); + renderMarkdown(); + renderCodeView(); + + // Fix language drop-down menu height. + var l = $('#footer-lang li').length; + $('#footer-lang .drop-down').css({ + "top": (-31 * l) + "px", + "height": (31 * l - 3) + "px" + }); +}); + +function homepage() { + // Change method to GET if no username input. + $('#promo-form').submit(function (e) { + if ($('#username').val() === "") { + e.preventDefault(); + window.location.href = '/user/login'; + return true + } + }); + // Redirect to register page. + $('#register-button').click(function (e) { + if ($('#username').val() === "") { + e.preventDefault(); + window.location.href = '/user/sign_up'; + return true + } + $('#promo-form').attr('action', '/user/sign_up'); + }); +} + +function settingsProfile() { + // Confirmation of change username in user profile page. + $('#user-profile-form').submit(function (e) { + if (($('#username').data('uname') != $('#username').val()) && !confirm('Username has been changed, do you want to continue?')) { + e.preventDefault(); + return true; + } + }); +} + +function settingsSSHKeys() { + // Show add SSH key panel. + $('#ssh-add').click(function () { + $('#user-ssh-add-form').removeClass("hide"); + }); +} + +function settingsDelete() { + // Confirmation of delete account. + $('#delete-account-button').click(function (e) { + if (!confirm('This account is going to deleted, do you want to continue?')) { + e.preventDefault(); + return true; + } + }); +} + +function renderMarkdown() { + var $md = $('.markdown'); + var $pre = $md.find('pre > code').parent(); + $pre.addClass('prettyprint linenums'); + prettyPrint(); + + // Set anchor. + var headers = {}; + $md.find('h1, h2, h3, h4, h5, h6').each(function () { + var node = $(this); + var val = encodeURIComponent(node.text().toLowerCase().replace(/[^\w\- ]/g, '').replace(/[ ]/g, '-')); + var name = val; + if (headers[val] > 0) { + name = val + '-' + headers[val]; + } + if (headers[val] == undefined) { + headers[val] = 1; + } else { + headers[val] += 1; + } + node = node.wrap('

'); + node.append(''); + }); +} + +function renderCodeView() { + function selectRange($list, $select, $from) { + $list.removeClass('active'); + if ($from) { + var a = parseInt($select.attr('rel').substr(1)); + var b = parseInt($from.attr('rel').substr(1)); + var c; + if (a != b) { + if (a > b) { + c = a; + a = b; + b = c; + } + var classes = []; + for (i = a; i <= b; i++) { + classes.push('.L' + i); + } + $list.filter(classes.join(',')).addClass('active'); + $.changeHash('#L' + a + '-' + 'L' + b); + return + } + } + $select.addClass('active'); + $.changeHash('#' + $select.attr('rel')); + } + + $(document).on('click', '.lines-num span', function (e) { + var $select = $(this); + var $list = $select.parent().siblings('.lines-code').find('ol.linenums > li'); + selectRange($list, $list.filter('[rel=' + $select.attr('rel') + ']'), (e.shiftKey ? $list.filter('.active').eq(0) : null)); + $.deSelect(); + }); + + $('.code-view .lines-code > pre').each(function () { + var $pre = $(this); + var $lineCode = $pre.parent(); + var $lineNums = $lineCode.siblings('.lines-num'); + if ($lineNums.length > 0) { + var nums = $pre.find('ol.linenums > li').length; + for (var i = 1; i <= nums; i++) { + $lineNums.append('' + i + ''); + } + } + }); + + $(window).on('hashchange', function (e) { + var m = window.location.hash.match(/^#(L\d+)\-(L\d+)$/); + var $list = $('.code-view ol.linenums > li'); + if (m) { + var $first = $list.filter('.' + m[1]); + selectRange($list, $first, $list.filter('.' + m[2])); + $("html, body").scrollTop($first.offset().top - 200); + return; + } + m = window.location.hash.match(/^#(L\d+)$/); + if (m) { + var $first = $list.filter('.' + m[1]); + selectRange($list, $first); + $("html, body").scrollTop($first.offset().top - 200); + } + }).trigger('hashchange'); +} \ No newline at end of file diff --git a/public/ng/js/lib/jquery-1.11.1.min.js b/public/ng/js/lib/jquery-1.11.1.min.js new file mode 100644 index 0000000000..ab28a24729 --- /dev/null +++ b/public/ng/js/lib/jquery-1.11.1.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h; +if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("