From cbcd08aa17e95a72dcb294da836aa7f2b966d5c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Justin=20Nu=C3=9F?= Date: Thu, 24 Jul 2014 19:15:31 +0200 Subject: [PATCH 01/20] Mention organisation users when organisation gets mentioned --- models/user.go | 42 ++++++++++++++++++++++++++++++++++++++++++ routers/repo/issue.go | 10 ++++------ 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/models/user.go b/models/user.go index a46232427e..581fce23a4 100644 --- a/models/user.go +++ b/models/user.go @@ -562,3 +562,45 @@ func UnFollowUser(userId int64, unFollowId int64) (err error) { } return session.Commit() } + +func UpdateMentions(userNames []string, issueId int64) error { + users := make([]*User, 0, len(userNames)) + + if err := x.Where("name IN (?)", strings.Join(userNames, "\",\"")).OrderBy("name ASC").Find(&users); err != nil { + return err + } + + ids := make([]int64, 0, len(userNames)) + + for _, user := range users { + ids = append(ids, user.Id) + + if user.Type == INDIVIDUAL { + continue + } + + if user.NumMembers == 0 { + continue + } + + tempIds := make([]int64, 0, user.NumMembers) + + orgUsers, err := GetOrgUsersByOrgId(user.Id) + + if err != nil { + return err + } + + for _, orgUser := range orgUsers { + tempIds = append(tempIds, orgUser.Id) + } + + ids = append(ids, tempIds...) + } + + if err := UpdateIssueUserPairsByMentions(ids, issueId); err != nil { + return err + } + + return nil +} diff --git a/routers/repo/issue.go b/routers/repo/issue.go index 2d1c23d4b9..402660ecd2 100644 --- a/routers/repo/issue.go +++ b/routers/repo/issue.go @@ -234,9 +234,8 @@ func CreateIssuePost(ctx *middleware.Context, params martini.Params, form auth.C ms[i] = ms[i][1:] } - ids := models.GetUserIdsByNames(ms) - if err := models.UpdateIssueUserPairsByMentions(ids, issue.Id); err != nil { - ctx.Handle(500, "issue.CreateIssue(UpdateIssueUserPairsByMentions)", err) + if err := models.UpdateMentions(ms, issue.Id); err != nil { + ctx.Handle(500, "issue.CreateIssue(UpdateMentions)", err) return } } @@ -682,9 +681,8 @@ func Comment(ctx *middleware.Context, params martini.Params) { ms[i] = ms[i][1:] } - ids := models.GetUserIdsByNames(ms) - if err := models.UpdateIssueUserPairsByMentions(ids, issue.Id); err != nil { - ctx.Handle(500, "issue.CreateIssue(UpdateIssueUserPairsByMentions)", err) + if err := models.UpdateMentions(ms, issue.Id); err != nil { + ctx.Handle(500, "issue.CreateIssue(UpdateMentions)", err) return } } From 3e7e9ee2892ba136d527c1fa3538554f415fbfe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Justin=20Nu=C3=9F?= Date: Thu, 24 Jul 2014 20:07:07 +0200 Subject: [PATCH 02/20] Fix #303. Specify updated columns explicitly. --- models/issue.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/models/issue.go b/models/issue.go index 05c9525341..a2a7ff6457 100644 --- a/models/issue.go +++ b/models/issue.go @@ -768,7 +768,7 @@ func ChangeMilestoneAssign(oldMid, mid int64, issue *Issue) (err error) { m.Completeness = 0 } - if _, err = sess.Id(m.Id).Update(m); err != nil { + if _, err = sess.Id(m.Id).Cols("num_issues,num_completeness,num_closed_issues").Update(m); err != nil { sess.Rollback() return err } @@ -796,7 +796,7 @@ func ChangeMilestoneAssign(oldMid, mid int64, issue *Issue) (err error) { } m.Completeness = m.NumClosedIssues * 100 / m.NumIssues - if _, err = sess.Id(m.Id).Update(m); err != nil { + if _, err = sess.Id(m.Id).Cols("num_issues,num_completeness,num_closed_issues").Update(m); err != nil { sess.Rollback() return err } From ad7beb78d0933e59103bf2862148431902ae2d91 Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 24 Jul 2014 23:13:35 +0200 Subject: [PATCH 03/20] Fix #312. Quote file names of attachments. --- routers/repo/issue.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/routers/repo/issue.go b/routers/repo/issue.go index f3d9280644..a5a2a28eca 100644 --- a/routers/repo/issue.go +++ b/routers/repo/issue.go @@ -1079,5 +1079,7 @@ func IssueGetAttachment(ctx *middleware.Context, params martini.Params) { return } - ctx.ServeFile(attachment.Path, attachment.Name) + // Fix #312. Attachments with , in their name are not handled correctly by Google Chrome. + // We must put the name in " manually. + ctx.ServeFile(attachment.Path, "\"" + attachment.Name + "\"") } From eafa365453b6756272ced185f5d8060fb6bc5f07 Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 24 Jul 2014 23:19:21 +0200 Subject: [PATCH 04/20] Fix #313. Repair broken image extension detection regex. --- public/js/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/js/app.js b/public/js/app.js index 7ffcbd4a3e..01341d7567 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -536,7 +536,7 @@ function initIssue() { var over = function() { var $this = $(this); - if ($this.text().match(/\.(png|jpg|jpeg|gif)$/i) == false) { + if ((/\.(png|jpg|jpeg|gif)$/i).test($this.text()) == false) { return; } From 8ccde45c5fdfe2993b59d13c38c79f661dee189e Mon Sep 17 00:00:00 2001 From: Andrew Patton Date: Thu, 24 Jul 2014 18:23:46 -0400 Subject: [PATCH 05/20] Fix #319 (user not-logged in error) --- public/js/app.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/public/js/app.js b/public/js/app.js index 7ffcbd4a3e..1b4fed7def 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -579,8 +579,11 @@ function initIssue() { var $attachedList = $("#attached-list"); var $addButton = $("#attachments-button"); - var fileInput = $("#attachments-input")[0]; - + var fileInput = document.getElementById("attachments-input"); + + if (fileInput === null) { + return; + } fileInput.addEventListener("change", function(event) { $attachedList.empty(); $attachedList.append("Attachments: "); From dedb156d4a484d5104113959bb95bc214be40b2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Justin=20Nu=C3=9F?= Date: Fri, 25 Jul 2014 08:01:34 +0200 Subject: [PATCH 06/20] Fix #321. Allow empty comments as long as there are attachments. --- routers/repo/issue.go | 5 +++-- templates/repo/issue/view.tmpl | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/routers/repo/issue.go b/routers/repo/issue.go index a5a2a28eca..0f03cea576 100644 --- a/routers/repo/issue.go +++ b/routers/repo/issue.go @@ -755,7 +755,8 @@ func Comment(ctx *middleware.Context, params martini.Params) { var ms []string content := ctx.Query("content") - if len(content) > 0 { + // Fix #321. Allow empty comments, as long as we have attachments. + if len(content) > 0 || len(ctx.Req.MultipartForm.File["attachments"]) > 0 { switch params["action"] { case "new": if comment, err = models.CreateComment(ctx.User.Id, ctx.Repo.Repository.Id, issue.Id, 0, 0, models.COMMENT, content, nil); err != nil { @@ -1081,5 +1082,5 @@ func IssueGetAttachment(ctx *middleware.Context, params martini.Params) { // Fix #312. Attachments with , in their name are not handled correctly by Google Chrome. // We must put the name in " manually. - ctx.ServeFile(attachment.Path, "\"" + attachment.Name + "\"") + ctx.ServeFile(attachment.Path, "\""+attachment.Name+"\"") } diff --git a/templates/repo/issue/view.tmpl b/templates/repo/issue/view.tmpl index 570698975b..247931c4aa 100644 --- a/templates/repo/issue/view.tmpl +++ b/templates/repo/issue/view.tmpl @@ -72,7 +72,11 @@ Owner
+ {{if len .Content}} {{str2html .Content}} + {{else}} + No comment entered + {{end}}
{{with $attachments := .Attachments}} {{if $attachments}} From f7617997cebd0f347415da47545fbf16e5d0653e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Justin=20Nu=C3=9F?= Date: Fri, 25 Jul 2014 10:18:42 +0200 Subject: [PATCH 07/20] Ignore EOF error when parsing form. --- modules/middleware/context.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/middleware/context.go b/modules/middleware/context.go index cf849802d9..90cfb1bb04 100644 --- a/modules/middleware/context.go +++ b/modules/middleware/context.go @@ -369,8 +369,8 @@ func InitContext() martini.Handler { } // If request sends files, parse them here otherwise the Query() can't be parsed and the CsrfToken will be invalid. - if strings.Contains(r.Header.Get("Content-Type"), "multipart/form-data") { - if err = ctx.Req.ParseMultipartForm(setting.AttachmentMaxSize << 20); err != nil { // 32MB max size + 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) return } From 4e2477a1a5ae59ff4cb34d58eab74297b4ea2d24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Justin=20Nu=C3=9F?= Date: Fri, 25 Jul 2014 10:47:37 +0200 Subject: [PATCH 08/20] Fix #318. Switch to JS(ON) implementation for issue/comment creation. --- public/js/app.js | 79 ++++++++++++++++++++++++-- routers/repo/issue.go | 96 +++++++++++++++++++++----------- templates/repo/issue/create.tmpl | 5 +- templates/repo/issue/view.tmpl | 5 +- 4 files changed, 147 insertions(+), 38 deletions(-) diff --git a/public/js/app.js b/public/js/app.js index 62482965e0..a88c8f6bc7 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -579,26 +579,97 @@ function initIssue() { var $attachedList = $("#attached-list"); var $addButton = $("#attachments-button"); + var files = []; + var fileInput = document.getElementById("attachments-input"); if (fileInput === null) { return; } - fileInput.addEventListener("change", function(event) { - $attachedList.empty(); - $attachedList.append("Attachments: "); + $attachedList.on("click", "span.attachment-remove", function(event) { + var $parent = $(this).parent(); + + files.splice($parent.data("index"), 1); + $parent.remove(); + }); + + var clickedButton = undefined; + + $("button,input[type=\"submit\"]", fileInput.form).on("click", function() { + clickedButton = this; + }); + + fileInput.form.addEventListener("submit", function(event) { + event.stopImmediatePropagation(); + event.preventDefault(); + + //var data = new FormData(this); + + // Internet Explorer ... -_- + var data = new FormData(); + + $.each($("[name]", this), function(i, e) { + if (e.name == "attachments" || e.type == "submit") { + return; + } + + data.append(e.name, $(e).val()); + }); + + data.append(clickedButton.name, $(clickedButton).val()); + + files.forEach(function(file) { + data.append("attachments", file); + }); + + var xhr = new XMLHttpRequest(); + + xhr.addEventListener("error", function() { + debugger; + }); + + xhr.addEventListener("load", function() { + if (xhr.response.ok === false) { + $("#submit-error").text(xhr.response.error); + return; + } + + window.location.href = xhr.response.data; + }); + + xhr.responseType = "json"; + + xhr.open("POST", this.action, true); + xhr.send(data); + + return false; + }); + + fileInput.addEventListener("change", function(event) { for (var index = 0; index < fileInput.files.length; index++) { var file = fileInput.files[index]; + if (files.indexOf(file) > -1) { + continue; + } + var $span = $(""); $span.addClass("label"); $span.addClass("label-default"); - $span.append(file.name.toLowerCase()); + $span.data("index", files.length); + + $span.append(file.name); + $span.append(" "); + $attachedList.append($span); + + files.push(file); } + + this.value = ""; }); $addButton.on("click", function() { diff --git a/routers/repo/issue.go b/routers/repo/issue.go index 0f03cea576..edfa39b026 100644 --- a/routers/repo/issue.go +++ b/routers/repo/issue.go @@ -188,33 +188,45 @@ func CreateIssue(ctx *middleware.Context, params martini.Params) { } func CreateIssuePost(ctx *middleware.Context, params martini.Params, form auth.CreateIssueForm) { - ctx.Data["Title"] = "Create issue" - ctx.Data["IsRepoToolbarIssues"] = true - ctx.Data["IsRepoToolbarIssuesList"] = false - ctx.Data["AttachmentsEnabled"] = setting.AttachmentEnabled + send := func(status int, data interface{}, err error) { + log.Error("issue.Comment(?): %s", err) + + if err != nil { + ctx.JSON(status, map[string]interface{}{ + "ok": false, + "status": status, + "error": err.Error(), + }) + } else { + ctx.JSON(status, map[string]interface{}{ + "ok": true, + "status": status, + "data": data, + }) + } + } var err error // Get all milestones. - ctx.Data["OpenMilestones"], err = models.GetMilestones(ctx.Repo.Repository.Id, false) + _, err = models.GetMilestones(ctx.Repo.Repository.Id, false) if err != nil { - ctx.Handle(500, "issue.ViewIssue(GetMilestones.1): %v", err) + send(500, nil, err) return } - ctx.Data["ClosedMilestones"], err = models.GetMilestones(ctx.Repo.Repository.Id, true) + _, err = models.GetMilestones(ctx.Repo.Repository.Id, true) if err != nil { - ctx.Handle(500, "issue.ViewIssue(GetMilestones.2): %v", err) + send(500, nil, err) return } - us, err := models.GetCollaborators(strings.TrimPrefix(ctx.Repo.RepoLink, "/")) + _, err = models.GetCollaborators(strings.TrimPrefix(ctx.Repo.RepoLink, "/")) if err != nil { - ctx.Handle(500, "issue.CreateIssue(GetCollaborators)", err) + send(500, nil, err) return } - ctx.Data["Collaborators"] = us if ctx.HasError() { - ctx.HTML(200, ISSUE_CREATE) + send(400, nil, errors.New(ctx.Flash.ErrorMsg)) return } @@ -233,11 +245,11 @@ func CreateIssuePost(ctx *middleware.Context, params martini.Params, form auth.C Content: form.Content, } if err := models.NewIssue(issue); err != nil { - ctx.Handle(500, "issue.CreateIssue(NewIssue)", err) + send(500, nil, err) return } else if err := models.NewIssueUserPairs(issue.RepoId, issue.Id, ctx.Repo.Owner.Id, ctx.User.Id, form.AssigneeId, ctx.Repo.Repository.Name); err != nil { - ctx.Handle(500, "issue.CreateIssue(NewIssueUserPairs)", err) + send(500, nil, err) return } @@ -253,7 +265,7 @@ func CreateIssuePost(ctx *middleware.Context, params martini.Params, form auth.C } if err := models.UpdateMentions(ms, issue.Id); err != nil { - ctx.Handle(500, "issue.CreateIssue(UpdateMentions)", err) + send(500, nil, err) return } } @@ -272,7 +284,7 @@ func CreateIssuePost(ctx *middleware.Context, params martini.Params, form auth.C } // Notify watchers. if err := models.NotifyWatchers(act); err != nil { - ctx.Handle(500, "issue.CreateIssue(NotifyWatchers)", err) + send(500, nil, err) return } @@ -280,7 +292,7 @@ func CreateIssuePost(ctx *middleware.Context, params martini.Params, form auth.C if setting.Service.EnableNotifyMail { tos, err := mailer.SendIssueNotifyMail(ctx.User, ctx.Repo.Owner, ctx.Repo.Repository, issue) if err != nil { - ctx.Handle(500, "issue.CreateIssue(SendIssueNotifyMail)", err) + send(500, nil, err) return } @@ -295,13 +307,13 @@ func CreateIssuePost(ctx *middleware.Context, params martini.Params, form auth.C } if err = mailer.SendIssueMentionMail(ctx.Render, ctx.User, ctx.Repo.Owner, ctx.Repo.Repository, issue, models.GetUserEmailsByNames(newTos)); err != nil { - ctx.Handle(500, "issue.CreateIssue(SendIssueMentionMail)", err) + send(500, nil, err) return } } log.Trace("%d Issue created: %d", ctx.Repo.Repository.Id, issue.Id) - ctx.Redirect(fmt.Sprintf("/%s/%s/issues/%d", params["username"], params["reponame"], issue.Index)) + send(200, fmt.Sprintf("/%s/%s/issues/%d", params["username"], params["reponame"], issue.Index), nil) } func checkLabels(labels, allLabels []*models.Label) { @@ -698,19 +710,38 @@ func uploadFiles(ctx *middleware.Context, issueId, commentId int64) { } func Comment(ctx *middleware.Context, params martini.Params) { + send := func(status int, data interface{}, err error) { + log.Error("issue.Comment(?): %s", err) + + if err != nil { + ctx.JSON(status, map[string]interface{}{ + "ok": false, + "status": status, + "error": err.Error(), + }) + } else { + ctx.JSON(status, map[string]interface{}{ + "ok": true, + "status": status, + "data": data, + }) + } + } + index, err := base.StrTo(ctx.Query("issueIndex")).Int64() if err != nil { - ctx.Handle(404, "issue.Comment(get index)", err) + send(404, nil, err) return } issue, err := models.GetIssueByIndex(ctx.Repo.Repository.Id, index) if err != nil { if err == models.ErrIssueNotExist { - ctx.Handle(404, "issue.Comment", err) + send(404, nil, err) } else { - ctx.Handle(200, "issue.Comment(get issue)", err) + send(200, nil, err) } + return } @@ -724,17 +755,17 @@ func Comment(ctx *middleware.Context, params martini.Params) { (strings.Contains(newStatus, "Close") && !issue.IsClosed) { issue.IsClosed = !issue.IsClosed if err = models.UpdateIssue(issue); err != nil { - ctx.Handle(500, "issue.Comment(UpdateIssue)", err) + send(500, nil, err) return } else if err = models.UpdateIssueUserPairsByStatus(issue.Id, issue.IsClosed); err != nil { - ctx.Handle(500, "issue.Comment(UpdateIssueUserPairsByStatus)", err) + send(500, nil, err) return } // Change open/closed issue counter for the associated milestone if issue.MilestoneId > 0 { if err = models.ChangeMilestoneIssueStats(issue); err != nil { - ctx.Handle(500, "issue.Comment(ChangeMilestoneIssueStats)", err) + send(500, nil, err) } } @@ -744,7 +775,7 @@ func Comment(ctx *middleware.Context, params martini.Params) { } if _, err = models.CreateComment(ctx.User.Id, ctx.Repo.Repository.Id, issue.Id, 0, 0, cmtType, "", nil); err != nil { - ctx.Handle(200, "issue.Comment(create status change comment)", err) + send(200, nil, err) return } log.Trace("%s Issue(%d) status changed: %v", ctx.Req.RequestURI, issue.Id, !issue.IsClosed) @@ -760,7 +791,7 @@ func Comment(ctx *middleware.Context, params martini.Params) { switch params["action"] { case "new": if comment, err = models.CreateComment(ctx.User.Id, ctx.Repo.Repository.Id, issue.Id, 0, 0, models.COMMENT, content, nil); err != nil { - ctx.Handle(500, "issue.Comment(create comment)", err) + send(500, nil, err) return } @@ -772,7 +803,7 @@ func Comment(ctx *middleware.Context, params martini.Params) { } if err := models.UpdateMentions(ms, issue.Id); err != nil { - ctx.Handle(500, "issue.CreateIssue(UpdateMentions)", err) + send(500, nil, err) return } } @@ -800,7 +831,7 @@ func Comment(ctx *middleware.Context, params martini.Params) { RepoName: ctx.Repo.Repository.LowerName, } if err = models.NotifyWatchers(act); err != nil { - ctx.Handle(500, "issue.CreateIssue(NotifyWatchers)", err) + send(500, nil, err) return } @@ -809,7 +840,7 @@ func Comment(ctx *middleware.Context, params martini.Params) { issue.Content = content tos, err := mailer.SendIssueNotifyMail(ctx.User, ctx.Repo.Owner, ctx.Repo.Repository, issue) if err != nil { - ctx.Handle(500, "issue.Comment(SendIssueNotifyMail)", err) + send(500, nil, err) return } @@ -824,12 +855,13 @@ func Comment(ctx *middleware.Context, params martini.Params) { } if err = mailer.SendIssueMentionMail(ctx.Render, ctx.User, ctx.Repo.Owner, ctx.Repo.Repository, issue, models.GetUserEmailsByNames(newTos)); err != nil { - ctx.Handle(500, "issue.Comment(SendIssueMentionMail)", err) + send(500, nil, err) return } } - ctx.Redirect(fmt.Sprintf("%s/issues/%d", ctx.Repo.RepoLink, index)) + log.Error("url: %#v", fmt.Sprintf("%s/issues/%d", ctx.Repo.RepoLink, index)) + send(200, fmt.Sprintf("%s/issues/%d", ctx.Repo.RepoLink, index), nil) } func NewLabel(ctx *middleware.Context, form auth.CreateLabelForm) { diff --git a/templates/repo/issue/create.tmpl b/templates/repo/issue/create.tmpl index 7705841708..ad86d4eafd 100644 --- a/templates/repo/issue/create.tmpl +++ b/templates/repo/issue/create.tmpl @@ -95,6 +95,7 @@
+
@@ -103,7 +104,9 @@
{{if .AttachmentsEnabled}}
-
+
+ Attachments: +
{{end}}
diff --git a/templates/repo/issue/view.tmpl b/templates/repo/issue/view.tmpl index 247931c4aa..b5d7228198 100644 --- a/templates/repo/issue/view.tmpl +++ b/templates/repo/issue/view.tmpl @@ -134,6 +134,7 @@
+
@@ -143,7 +144,9 @@
{{if .AttachmentsEnabled}}
-
+
+ Attachments: +
{{end}}
From 12fb42de5a5b07ed8dffe91d9536615bbadeedea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Justin=20Nu=C3=9F?= Date: Fri, 25 Jul 2014 11:13:42 +0200 Subject: [PATCH 09/20] Fix IE bug and show errors. --- public/css/gogs.css | 7 +++++++ public/js/app.js | 36 ++++++++++++++++++++++++++------ routers/repo/issue.go | 9 ++++---- templates/repo/issue/create.tmpl | 2 +- templates/repo/issue/view.tmpl | 2 +- 5 files changed, 43 insertions(+), 13 deletions(-) diff --git a/public/css/gogs.css b/public/css/gogs.css index cc48f211f4..361475bd40 100755 --- a/public/css/gogs.css +++ b/public/css/gogs.css @@ -1836,4 +1836,11 @@ body { #issue-create-form #attached { margin-bottom: 0; +} + +#submit-error { + display: none; + padding: 10px 15px 15px 15px; + font-weight: bold; + text-align: center; } \ No newline at end of file diff --git a/public/js/app.js b/public/js/app.js index a88c8f6bc7..b0dff0efc8 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -568,7 +568,7 @@ function initIssue() { }; var out = function() { - $hoverElement.hide(); + //$hoverElement.hide(); }; $(".issue-main .attachments .attachment").hover(over, out); @@ -598,6 +598,13 @@ function initIssue() { $("button,input[type=\"submit\"]", fileInput.form).on("click", function() { clickedButton = this; + + var $button = $(this); + + $button.removeClass("btn-success"); + $button.addClass("btn-warning"); + + $button.text("Submiting..."); }); fileInput.form.addEventListener("submit", function(event) { @@ -630,16 +637,33 @@ function initIssue() { }); xhr.addEventListener("load", function() { - if (xhr.response.ok === false) { - $("#submit-error").text(xhr.response.error); + var response = xhr.response; + + if (typeof response == "string") { + try { + response = JSON.parse(response); + } catch (err) { + response = { ok: false, error: "Could not parse JSON" }; + } + } + + if (response.ok === false) { + $("#submit-error").text(response.error); + $("#submit-error").show(); + + var $button = $(clickedButton); + + $button.removeClass("btn-warning"); + $button.addClass("btn-danger"); + + $button.text("An error encoured!") + return; } - window.location.href = xhr.response.data; + window.location.href = response.data; }); - xhr.responseType = "json"; - xhr.open("POST", this.action, true); xhr.send(data); diff --git a/routers/repo/issue.go b/routers/repo/issue.go index edfa39b026..4465a39957 100644 --- a/routers/repo/issue.go +++ b/routers/repo/issue.go @@ -189,9 +189,9 @@ func CreateIssue(ctx *middleware.Context, params martini.Params) { func CreateIssuePost(ctx *middleware.Context, params martini.Params, form auth.CreateIssueForm) { send := func(status int, data interface{}, err error) { - log.Error("issue.Comment(?): %s", err) - if err != nil { + log.Error("issue.CreateIssuePost(?): %s", err.Error()) + ctx.JSON(status, map[string]interface{}{ "ok": false, "status": status, @@ -711,9 +711,9 @@ func uploadFiles(ctx *middleware.Context, issueId, commentId int64) { func Comment(ctx *middleware.Context, params martini.Params) { send := func(status int, data interface{}, err error) { - log.Error("issue.Comment(?): %s", err) - if err != nil { + log.Error("issue.Comment(?): %s", err.Error()) + ctx.JSON(status, map[string]interface{}{ "ok": false, "status": status, @@ -860,7 +860,6 @@ func Comment(ctx *middleware.Context, params martini.Params) { } } - log.Error("url: %#v", fmt.Sprintf("%s/issues/%d", ctx.Repo.RepoLink, index)) send(200, fmt.Sprintf("%s/issues/%d", ctx.Repo.RepoLink, index), nil) } diff --git a/templates/repo/issue/create.tmpl b/templates/repo/issue/create.tmpl index ad86d4eafd..c018884272 100644 --- a/templates/repo/issue/create.tmpl +++ b/templates/repo/issue/create.tmpl @@ -95,7 +95,7 @@
-
+
diff --git a/templates/repo/issue/view.tmpl b/templates/repo/issue/view.tmpl index b5d7228198..aec50ca62e 100644 --- a/templates/repo/issue/view.tmpl +++ b/templates/repo/issue/view.tmpl @@ -134,7 +134,7 @@
-
+
From f0da8a68c2c409572902275888fec26689c2b0dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Justin=20Nu=C3=9F?= Date: Fri, 25 Jul 2014 15:47:42 +0200 Subject: [PATCH 10/20] Remove debug comment. --- public/js/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/js/app.js b/public/js/app.js index b0dff0efc8..d7208119b3 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -568,7 +568,7 @@ function initIssue() { }; var out = function() { - //$hoverElement.hide(); + $hoverElement.hide(); }; $(".issue-main .attachments .attachment").hover(over, out); From a03a1e87e9f8e8cf98670aa1a64dd91da8e04bd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Justin=20Nu=C3=9F?= Date: Fri, 25 Jul 2014 20:15:58 +0200 Subject: [PATCH 11/20] Remove 'None yet' message when adding first label to issue. --- public/js/app.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/public/js/app.js b/public/js/app.js index d7208119b3..6f4676f624 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -926,11 +926,17 @@ function initIssue() { $(item).addClass("no-checked"); $("#label-" + id, $labels).remove(); + + if ($labels.children(".label-item").length == 0) { + $labels.append("

None yet

"); + } } else { $(item).prepend(''); $(item).removeClass("no-checked"); $(item).addClass("checked"); + + $("p:not([class])", $labels).remove(); var $l = $("

"); var c = $("span.color", item).css("background-color"); From 09cb8c67cb59a331490fa28cc3b608bfd99c3aad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Justin=20Nu=C3=9F?= Date: Fri, 25 Jul 2014 20:56:17 +0200 Subject: [PATCH 12/20] Save comment/issue drafts in sessionStorage. --- public/js/app.js | 60 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/public/js/app.js b/public/js/app.js index d7208119b3..ef54aaf811 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -520,6 +520,50 @@ function initIssue() { }); }()); + // store unsend text in session storage. + (function() { + var $textArea = $("#issue-content,#issue-reply-content"); + var current = ""; + + if ($textArea == null || !('sessionStorage' in window)) { + return; + } + + var path = location.pathname.split("/"); + var key = "issue-" + path[1] + "-" + path[2] + "-"; + + if (/\/issues\/\d+$/.test(location.pathname)) { + key = key + path[4]; + } else { + key = key + "new"; + } + + if ($textArea.val() !== undefined && $textArea.val() !== "") { + sessionStorage.setItem(key, $textArea.val()); + } else { + $textArea.val(sessionStorage.getItem(key) || ""); + + if ($textArea.attr("id") == "issue-reply-content") { + var $closeBtn = $('#issue-close-btn'); + var $openBtn = $('#issue-open-btn'); + + if ($textArea.val().length) { + $closeBtn.val($closeBtn.data("text")); + $openBtn.val($openBtn.data("text")); + } else { + $closeBtn.val($closeBtn.data("origin")); + $openBtn.val($openBtn.data("origin")); + } + } + } + + $textArea.on("keyup", function() { + if ($textArea.val() !== current) { + sessionStorage.setItem(key, current = $textArea.val()); + } + }); + }()); + // Preview for images. (function() { var $hoverElement = $("
"); @@ -659,8 +703,22 @@ function initIssue() { $button.text("An error encoured!") return; - } + } + if (!('sessionStorage' in window)) { + return; + } + + var path = location.pathname.split("/"); + var key = "issue-" + path[1] + "-" + path[2] + "-"; + + if (/\/issues\/\d+$/.test(location.pathname)) { + key = key + path[4]; + } else { + key = key + "new"; + } + + sessionStorage.removeItem(key); window.location.href = response.data; }); From cf3021eccac305b9291f27668d997a1ecb40b025 Mon Sep 17 00:00:00 2001 From: Ciaran Downey Date: Fri, 25 Jul 2014 12:43:44 -0700 Subject: [PATCH 13/20] Add the set -e option to dockerfiles/build.sh --- dockerfiles/build.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dockerfiles/build.sh b/dockerfiles/build.sh index b658db4ecd..4617da1421 100755 --- a/dockerfiles/build.sh +++ b/dockerfiles/build.sh @@ -10,6 +10,9 @@ HOST_PORT="YOUR_HOST_PORT" # The port on host, which will be redirected t # apt source, you can select 'nchc'(mirror in Taiwan) or 'aliyun'(best for mainlance China users) according to your network, if you could connect to the official unbunt mirror in a fast speed, just leave it to "". APT_SOURCE="" +# fail immediately if anything goes wrong +set -e + DOCKER_BIN=$(which docker.io || which docker) if [ -z "$DOCKER_BIN" ] ; then echo "Please install docker. You can install docker by running \"wget -qO- https://get.docker.io/ | sh\"." From aea2b54c99f8456c9a5b2aa4585693ec44f0c4f7 Mon Sep 17 00:00:00 2001 From: Ciaran Downey Date: Fri, 25 Jul 2014 12:47:41 -0700 Subject: [PATCH 14/20] Use the official Go source, follow redirects --- dockerfiles/images/gogits/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dockerfiles/images/gogits/Dockerfile b/dockerfiles/images/gogits/Dockerfile index 1f67d41ed9..a171e15e3b 100644 --- a/dockerfiles/images/gogits/Dockerfile +++ b/dockerfiles/images/gogits/Dockerfile @@ -13,7 +13,7 @@ ENV GOPATH /go RUN apt-get update && apt-get install --yes --force-yes curl git mercurial zip wget ca-certificates build-essential RUN apt-get install -yq vim sudo -RUN curl -s http://docker.u.qiniudn.com/go1.2.1.src.tar.gz | tar -v -C /usr/local -xz +RUN curl -sL https://golang.org/dl/go1.3.linux-amd64.tar.gz | tar -v -C /usr/local -xz RUN cd /usr/local/go/src && ./make.bash --no-clean 2>&1 RUN go get -u -d github.com/gogits/gogs From 0db84e4f6367ac9065c3a30e9b9a768636ad9df6 Mon Sep 17 00:00:00 2001 From: Ciaran Downey Date: Fri, 25 Jul 2014 20:13:17 -0700 Subject: [PATCH 15/20] Update the Docker instructions in the README --- dockerfiles/README.md | 42 +++++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/dockerfiles/README.md b/dockerfiles/README.md index fc27bdf4f8..a3e18c8b50 100644 --- a/dockerfiles/README.md +++ b/dockerfiles/README.md @@ -1,14 +1,16 @@ ### Install Gogs With Docker -Deploying gogs in [Docker](http://www.docker.io/) is just as easy as eating a pie, what you do is just open the `dockerfiles/build.sh` file, replace the configs: +Deploying gogs using [Docker](http://www.docker.io/) is as easy as pie. Simple +open the `/dockerfiles/build.sh` file and replace the initial configuration +settings: ``` -DB_TYPE="YOUR_DB_TYPE" # type of database, support 'mysql' and 'postgres' -MEM_TYPE="YOUR_MEM_TYPE" # type of memory database, support 'redis' and 'memcache' -DB_PASSWORD="YOUR_DB_PASSWORD" # The database password. -DB_RUN_NAME="YOUR_DB_RUN_NAME" # The --name option value when run the database image. -MEM_RUN_NAME="YOUR_MEM_RUN_NAME" # The --name option value when run the mem database image. -HOST_PORT="YOUR_HOST_PORT" # The port on host, which will be redirected to the port 3000 inside gogs container. +DB_TYPE="YOUR_DB_TYPE" # type of database, supports either 'mysql' or 'postgres' +MEM_TYPE="YOUR_MEM_TYPE" # type of memory database, supports either 'redis' or 'memcache' +DB_PASSWORD="YOUR_DB_PASSWORD" # The database password +DB_RUN_NAME="YOUR_DB_RUN_NAME" # The --name option value to use when running the database image +MEM_RUN_NAME="YOUR_MEM_RUN_NAME" # The --name option value to use when running the memory database image +HOST_PORT="YOUR_HOST_PORT" # The port to expose the app on (redirected to 3000 inside the gogs container) ``` And run: @@ -17,24 +19,38 @@ cd dockerfiles ./build.sh ``` -The build might take some time, just be paient. After it finishes, you will receive the message: +The build will take some time, just be patient. After it finishes, it will +display a message that looks like this (the content may be different, depending +on your configuration options): ``` -Now we have the MySQL image(running) and gogs image, use the follow command to start gogs service( the content might be different, according to your own configs): - docker run -i -t --link YOUR_DB_RUN_NAME:db --link YOUR_MEM_RUN_NAME:mem -p YOUR_HOST_PORT:3000 gogits/gogs +Now we have the MySQL image(running) and gogs image, use the follow command to start gogs service: +docker run -i -t --link YOUR_DB_RUN_NAME:db --link YOUR_MEM_RUN_NAME:mem -p YOUR_HOST_PORT:3000 gogits/gogs ``` -Just follow the message, run: +To run the container, just copy the above command: ``` - docker run -i -t --link YOUR_DB_RUN_NAME:db --link YOUR_MEM_RUN_NAME:mem -p YOUR_HOST_PORT:3000 gogits/gogs +docker run -i -t --link YOUR_DB_RUN_NAME:db --link YOUR_MEM_RUN_NAME:mem -p YOUR_HOST_PORT:3000 gogits/gogs ``` -Now we have gogs running! Open the browser and navigate to: +Now gogs should be running! Open your browser and navigate to: ``` http://YOUR_HOST_IP:YOUR_HOST_PORT ``` +During the installation procedure, use the following information: + +- The database type should be whichever `DB_TYPE` you selected above + +- The database host should be either `db:5432` or `db:3306` for PostgreSQL and + MySQL respectively + +- The `RUN_USER` should be whichever user you're running the container with. + Ideally that's `git`, but your individual configuration may vary + +- Everything else is configured like a normal gogs installation + Let's 'gogs'! Ouya~ From 7921e60f304f876dd595707b077ad1d4756497a1 Mon Sep 17 00:00:00 2001 From: Ciaran Downey Date: Fri, 25 Jul 2014 20:51:05 -0700 Subject: [PATCH 16/20] Change "an error is occurred" to "has occurred" --- templates/status/200.tmpl | 4 ++-- templates/status/500.tmpl | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/templates/status/200.tmpl b/templates/status/200.tmpl index 0846ad7951..16d653034c 100644 --- a/templates/status/200.tmpl +++ b/templates/status/200.tmpl @@ -1,7 +1,7 @@ {{template "base/head" .}} {{template "base/navbar" .}}
-

An error is occurred : {{.ErrorMsg}}

+

An error has occurred: {{.ErrorMsg}}

Application Version: {{AppVer}}

-{{template "base/footer" .}} \ No newline at end of file +{{template "base/footer" .}} diff --git a/templates/status/500.tmpl b/templates/status/500.tmpl index 07edd3620a..a9eff9e5c3 100644 --- a/templates/status/500.tmpl +++ b/templates/status/500.tmpl @@ -3,8 +3,8 @@

404

{{if .ErrorMsg}}
-

An error is occurred : {{.ErrorMsg}}

{{end}} +

An error has occurred: {{.ErrorMsg}}

{{end}}

Application Version: {{AppVer}}

-{{template "base/footer" .}} \ No newline at end of file +{{template "base/footer" .}} From 8dd07c0ddd99ae626a1ec8c06f75f27fed51269f Mon Sep 17 00:00:00 2001 From: Unknwon Date: Sat, 26 Jul 2014 00:24:27 -0400 Subject: [PATCH 17/20] 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 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 delta 2738 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 ev&ITrBoz<8^KLZ*U+< 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 diff --git a/public/img/favicon.png b/public/img/favicon.png index 87282f9a781647294f5376619eecb0bfd2b22ce2..edcf5746e7a04ee9b4f7c5ad2eed8d0eb6049f39 100644 GIT binary patch delta 10270 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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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 U%*WP;hf!jYbUU--;l5wKn0~ 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 Q0{{SkplgCF!#IZj9|Om`00000 literal 0 HcmV?d00001 diff --git a/public/ng/css/font-awesome.min.css b/public/ng/css/font-awesome.min.css new file mode 100644 index 0000000000..3d920fc87c --- /dev/null +++ b/public/ng/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.1.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.1.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.1.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.1.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{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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 BrQQGl literal 0 HcmV?d00001 diff --git a/public/ng/fonts/fontawesome-webfont.eot b/public/ng/fonts/fontawesome-webfont.eot new file mode 100755 index 0000000000000000000000000000000000000000..6cfd56609567bc9db55186415c694d1d32808fc2 GIT binary patch literal 72449 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 mN8ytQ_G}Zg + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 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 literal 0 HcmV?d00001 diff --git a/public/ng/fonts/fontawesome-webfont.woff b/public/ng/fonts/fontawesome-webfont.woff new file mode 100755 index 0000000000000000000000000000000000000000..9eaecb37996e205f1027fce2df59fbaa500657a8 GIT binary patch literal 83760 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%0AxIOs>pgIKgztFeRDw*+;mE-uEm#;87!~v8QO3u9 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

&#ZAHD50A1X+b?X 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

'); + 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("

sk0-#TdT(rN6Y5V0Tz*RrE3?2BHMtSju- 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 literal 0 HcmV?d00001 diff --git a/public/ng/fonts/octicons.css b/public/ng/fonts/octicons.css new file mode 100755 index 0000000000..2d66bd6cf3 --- /dev/null +++ b/public/ng/fonts/octicons.css @@ -0,0 +1,237 @@ +@font-face { + font-family: 'octicons'; + src: url('octicons.eot?#iefix') format('embedded-opentype'), + url('octicons.woff') format('woff'), + url('octicons.ttf') format('truetype'), + url('octicons.svg#octicons') format('svg'); + font-weight: normal; + font-style: normal; +} + +/* + +.octicon is optimized for 16px. +.mega-octicon is optimized for 32px but can be used larger. + +*/ +.octicon { + font: normal normal 16px octicons; + line-height: 1; + display: inline-block; + text-decoration: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.mega-octicon { + font: normal normal 32px octicons; + line-height: 1; + display: inline-block; + text-decoration: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.octicon-alert:before { content: '\f02d'} /*  */ +.octicon-alignment-align:before { content: '\f08a'} /*  */ +.octicon-alignment-aligned-to:before { content: '\f08e'} /*  */ +.octicon-alignment-unalign:before { content: '\f08b'} /*  */ +.octicon-arrow-down:before { content: '\f03f'} /*  */ +.octicon-arrow-left:before { content: '\f040'} /*  */ +.octicon-arrow-right:before { content: '\f03e'} /*  */ +.octicon-arrow-small-down:before { content: '\f0a0'} /*  */ +.octicon-arrow-small-left:before { content: '\f0a1'} /*  */ +.octicon-arrow-small-right:before { content: '\f071'} /*  */ +.octicon-arrow-small-up:before { content: '\f09f'} /*  */ +.octicon-arrow-up:before { content: '\f03d'} /*  */ +.octicon-beer:before { content: '\f069'} /*  */ +.octicon-book:before { content: '\f007'} /*  */ +.octicon-bookmark:before { content: '\f07b'} /*  */ +.octicon-briefcase:before { content: '\f0d3'} /*  */ +.octicon-broadcast:before { content: '\f048'} /*  */ +.octicon-browser:before { content: '\f0c5'} /*  */ +.octicon-bug:before { content: '\f091'} /*  */ +.octicon-calendar:before { content: '\f068'} /*  */ +.octicon-check:before { content: '\f03a'} /*  */ +.octicon-checklist:before { content: '\f076'} /*  */ +.octicon-chevron-down:before { content: '\f0a3'} /*  */ +.octicon-chevron-left:before { content: '\f0a4'} /*  */ +.octicon-chevron-right:before { content: '\f078'} /*  */ +.octicon-chevron-up:before { content: '\f0a2'} /*  */ +.octicon-circle-slash:before { content: '\f084'} /*  */ +.octicon-circuit-board:before { content: '\f0d6'} /*  */ +.octicon-clippy:before { content: '\f035'} /*  */ +.octicon-clock:before { content: '\f046'} /*  */ +.octicon-cloud-download:before { content: '\f00b'} /*  */ +.octicon-cloud-upload:before { content: '\f00c'} /*  */ +.octicon-code:before { content: '\f05f'} /*  */ +.octicon-color-mode:before { content: '\f065'} /*  */ +.octicon-comment-add:before, +.octicon-comment:before { content: '\f02b'} /*  */ +.octicon-comment-discussion:before { content: '\f04f'} /*  */ +.octicon-credit-card:before { content: '\f045'} /*  */ +.octicon-dash:before { content: '\f0ca'} /*  */ +.octicon-dashboard:before { content: '\f07d'} /*  */ +.octicon-database:before { content: '\f096'} /*  */ +.octicon-device-camera:before { content: '\f056'} /*  */ +.octicon-device-camera-video:before { content: '\f057'} /*  */ +.octicon-device-desktop:before { content: '\f27c'} /*  */ +.octicon-device-mobile:before { content: '\f038'} /*  */ +.octicon-diff:before { content: '\f04d'} /*  */ +.octicon-diff-added:before { content: '\f06b'} /*  */ +.octicon-diff-ignored:before { content: '\f099'} /*  */ +.octicon-diff-modified:before { content: '\f06d'} /*  */ +.octicon-diff-removed:before { content: '\f06c'} /*  */ +.octicon-diff-renamed:before { content: '\f06e'} /*  */ +.octicon-ellipsis:before { content: '\f09a'} /*  */ +.octicon-eye-unwatch:before, +.octicon-eye-watch:before, +.octicon-eye:before { content: '\f04e'} /*  */ +.octicon-file-binary:before { content: '\f094'} /*  */ +.octicon-file-code:before { content: '\f010'} /*  */ +.octicon-file-directory:before { content: '\f016'} /*  */ +.octicon-file-media:before { content: '\f012'} /*  */ +.octicon-file-pdf:before { content: '\f014'} /*  */ +.octicon-file-submodule:before { content: '\f017'} /*  */ +.octicon-file-symlink-directory:before { content: '\f0b1'} /*  */ +.octicon-file-symlink-file:before { content: '\f0b0'} /*  */ +.octicon-file-text:before { content: '\f011'} /*  */ +.octicon-file-zip:before { content: '\f013'} /*  */ +.octicon-flame:before { content: '\f0d2'} /*  */ +.octicon-fold:before { content: '\f0cc'} /*  */ +.octicon-gear:before { content: '\f02f'} /*  */ +.octicon-gift:before { content: '\f042'} /*  */ +.octicon-gist:before { content: '\f00e'} /*  */ +.octicon-gist-secret:before { content: '\f08c'} /*  */ +.octicon-git-branch-create:before, +.octicon-git-branch-delete:before, +.octicon-git-branch:before { content: '\f020'} /*  */ +.octicon-git-commit:before { content: '\f01f'} /*  */ +.octicon-git-compare:before { content: '\f0ac'} /*  */ +.octicon-git-merge:before { content: '\f023'} /*  */ +.octicon-git-pull-request-abandoned:before, +.octicon-git-pull-request:before { content: '\f009'} /*  */ +.octicon-globe:before { content: '\f0b6'} /*  */ +.octicon-graph:before { content: '\f043'} /*  */ +.octicon-heart:before { content: '\2665'} /* ♥ */ +.octicon-history:before { content: '\f07e'} /*  */ +.octicon-home:before { content: '\f08d'} /*  */ +.octicon-horizontal-rule:before { content: '\f070'} /*  */ +.octicon-hourglass:before { content: '\f09e'} /*  */ +.octicon-hubot:before { content: '\f09d'} /*  */ +.octicon-inbox:before { content: '\f0cf'} /*  */ +.octicon-info:before { content: '\f059'} /*  */ +.octicon-issue-closed:before { content: '\f028'} /*  */ +.octicon-issue-opened:before { content: '\f026'} /*  */ +.octicon-issue-reopened:before { content: '\f027'} /*  */ +.octicon-jersey:before { content: '\f019'} /*  */ +.octicon-jump-down:before { content: '\f072'} /*  */ +.octicon-jump-left:before { content: '\f0a5'} /*  */ +.octicon-jump-right:before { content: '\f0a6'} /*  */ +.octicon-jump-up:before { content: '\f073'} /*  */ +.octicon-key:before { content: '\f049'} /*  */ +.octicon-keyboard:before { content: '\f00d'} /*  */ +.octicon-law:before { content: '\f0d8'} /* */ +.octicon-light-bulb:before { content: '\f000'} /*  */ +.octicon-link:before { content: '\f05c'} /*  */ +.octicon-link-external:before { content: '\f07f'} /*  */ +.octicon-list-ordered:before { content: '\f062'} /*  */ +.octicon-list-unordered:before { content: '\f061'} /*  */ +.octicon-location:before { content: '\f060'} /*  */ +.octicon-gist-private:before, +.octicon-mirror-private:before, +.octicon-git-fork-private:before, +.octicon-lock:before { content: '\f06a'} /*  */ +.octicon-logo-github:before { content: '\f092'} /*  */ +.octicon-mail:before { content: '\f03b'} /*  */ +.octicon-mail-read:before { content: '\f03c'} /*  */ +.octicon-mail-reply:before { content: '\f051'} /*  */ +.octicon-mark-github:before { content: '\f00a'} /*  */ +.octicon-markdown:before { content: '\f0c9'} /*  */ +.octicon-megaphone:before { content: '\f077'} /*  */ +.octicon-mention:before { content: '\f0be'} /*  */ +.octicon-microscope:before { content: '\f089'} /*  */ +.octicon-milestone:before { content: '\f075'} /*  */ +.octicon-mirror-public:before, +.octicon-mirror:before { content: '\f024'} /*  */ +.octicon-mortar-board:before { content: '\f0d7'} /* */ +.octicon-move-down:before { content: '\f0a8'} /*  */ +.octicon-move-left:before { content: '\f074'} /*  */ +.octicon-move-right:before { content: '\f0a9'} /*  */ +.octicon-move-up:before { content: '\f0a7'} /*  */ +.octicon-mute:before { content: '\f080'} /*  */ +.octicon-no-newline:before { content: '\f09c'} /*  */ +.octicon-octoface:before { content: '\f008'} /*  */ +.octicon-organization:before { content: '\f037'} /*  */ +.octicon-package:before { content: '\f0c4'} /*  */ +.octicon-paintcan:before { content: '\f0d1'} /*  */ +.octicon-pencil:before { content: '\f058'} /*  */ +.octicon-person-add:before, +.octicon-person-follow:before, +.octicon-person:before { content: '\f018'} /*  */ +.octicon-pin:before { content: '\f041'} /*  */ +.octicon-playback-fast-forward:before { content: '\f0bd'} /*  */ +.octicon-playback-pause:before { content: '\f0bb'} /*  */ +.octicon-playback-play:before { content: '\f0bf'} /*  */ +.octicon-playback-rewind:before { content: '\f0bc'} /*  */ +.octicon-plug:before { content: '\f0d4'} /*  */ +.octicon-repo-create:before, +.octicon-gist-new:before, +.octicon-file-directory-create:before, +.octicon-file-add:before, +.octicon-plus:before { content: '\f05d'} /*  */ +.octicon-podium:before { content: '\f0af'} /*  */ +.octicon-primitive-dot:before { content: '\f052'} /*  */ +.octicon-primitive-square:before { content: '\f053'} /*  */ +.octicon-pulse:before { content: '\f085'} /*  */ +.octicon-puzzle:before { content: '\f0c0'} /*  */ +.octicon-question:before { content: '\f02c'} /*  */ +.octicon-quote:before { content: '\f063'} /*  */ +.octicon-radio-tower:before { content: '\f030'} /*  */ +.octicon-repo-delete:before, +.octicon-repo:before { content: '\f001'} /*  */ +.octicon-repo-clone:before { content: '\f04c'} /*  */ +.octicon-repo-force-push:before { content: '\f04a'} /*  */ +.octicon-gist-fork:before, +.octicon-repo-forked:before { content: '\f002'} /*  */ +.octicon-repo-pull:before { content: '\f006'} /*  */ +.octicon-repo-push:before { content: '\f005'} /*  */ +.octicon-rocket:before { content: '\f033'} /*  */ +.octicon-rss:before { content: '\f034'} /*  */ +.octicon-ruby:before { content: '\f047'} /*  */ +.octicon-screen-full:before { content: '\f066'} /*  */ +.octicon-screen-normal:before { content: '\f067'} /*  */ +.octicon-search-save:before, +.octicon-search:before { content: '\f02e'} /*  */ +.octicon-server:before { content: '\f097'} /*  */ +.octicon-settings:before { content: '\f07c'} /*  */ +.octicon-log-in:before, +.octicon-sign-in:before { content: '\f036'} /*  */ +.octicon-log-out:before, +.octicon-sign-out:before { content: '\f032'} /*  */ +.octicon-split:before { content: '\f0c6'} /*  */ +.octicon-squirrel:before { content: '\f0b2'} /*  */ +.octicon-star-add:before, +.octicon-star-delete:before, +.octicon-star:before { content: '\f02a'} /*  */ +.octicon-steps:before { content: '\f0c7'} /*  */ +.octicon-stop:before { content: '\f08f'} /*  */ +.octicon-repo-sync:before, +.octicon-sync:before { content: '\f087'} /*  */ +.octicon-tag-remove:before, +.octicon-tag-add:before, +.octicon-tag:before { content: '\f015'} /*  */ +.octicon-telescope:before { content: '\f088'} /*  */ +.octicon-terminal:before { content: '\f0c8'} /*  */ +.octicon-three-bars:before { content: '\f05e'} /*  */ +.octicon-tools:before { content: '\f031'} /*  */ +.octicon-trashcan:before { content: '\f0d0'} /*  */ +.octicon-triangle-down:before { content: '\f05b'} /*  */ +.octicon-triangle-left:before { content: '\f044'} /*  */ +.octicon-triangle-right:before { content: '\f05a'} /*  */ +.octicon-triangle-up:before { content: '\f0aa'} /*  */ +.octicon-unfold:before { content: '\f039'} /*  */ +.octicon-unmute:before { content: '\f0ba'} /*  */ +.octicon-versions:before { content: '\f064'} /*  */ +.octicon-remove-close:before, +.octicon-x:before { content: '\f081'} /*  */ +.octicon-zap:before { content: '\26A1'} /* ⚡ */ diff --git a/public/ng/fonts/octicons.eot b/public/ng/fonts/octicons.eot new file mode 100755 index 0000000000000000000000000000000000000000..e4edc6e56d0a836940eeb5701f264a1f4692edc4 GIT binary patch literal 31440 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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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 Zm#6F2g;1S-z;DkLvz5lV<=PSe{7-!ENvHq- 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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 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('