From 15845cb28763c1542556ad61d2aa9735541dbf45 Mon Sep 17 00:00:00 2001 From: Unknwon Date: Fri, 12 Aug 2016 02:29:29 -0700 Subject: [PATCH] Code clean up for new config options --- cmd/web.go | 2 +- conf/app.ini | 10 +++---- models/error.go | 4 +-- models/issue.go | 4 +-- models/repo.go | 2 +- models/ssh_key_test.go | 2 +- models/update.go | 24 ++++++++++------- modules/bindata/bindata.go | 4 +-- modules/markdown/markdown.go | 2 +- modules/setting/setting.go | 52 ++++++++++++++++-------------------- public/js/gogs.js | 12 ++++----- routers/repo/branch.go | 9 ++----- routers/repo/delete.go | 9 ++----- routers/repo/edit.go | 27 ++++++++----------- routers/repo/upload.go | 26 +++++++----------- routers/repo/view.go | 2 +- templates/repo/edit.tmpl | 6 ++--- 17 files changed, 87 insertions(+), 110 deletions(-) diff --git a/cmd/web.go b/cmd/web.go index a39da572e..db18890f1 100644 --- a/cmd/web.go +++ b/cmd/web.go @@ -510,7 +510,7 @@ func runWeb(ctx *cli.Context) error { m.Post("/branches", bindIgnErr(auth.NewBranchForm{}), repo.NewBranchPost) m.Post("/upload-file", repo.UploadFileToServer) m.Post("/upload-remove", bindIgnErr(auth.RemoveUploadFileForm{}), repo.RemoveUploadFileFromServer) - }, context.RepoRef(), context.RepoAssignment(), reqRepoWriter) + }, reqRepoWriter, context.RepoRef()) }, reqSignIn, context.RepoAssignment(), repo.MustBeNotBare) m.Group("/:username/:reponame", func() { diff --git a/conf/app.ini b/conf/app.ini index 515269a76..b6163b115 100644 --- a/conf/app.ini +++ b/conf/app.ini @@ -20,17 +20,17 @@ MAX_CREATION_LIMIT = -1 ; Patch test queue length, make it as large as possible PULL_REQUEST_QUEUE_LENGTH = 10000 -[editor] +[repository.editor] ; List of file extensions that should have line wraps in the CodeMirror editor ; Separate extensions with a comma. To line wrap files w/o extension, just put a comma LINE_WRAP_EXTENSIONS = .txt,.md,.markdown,.mdown,.mkd, ; Valid file modes that have a preview API associated with them, such as api/v1/markdown ; Separate values by commas. Preview tab in edit mode won't show if the file extension doesn't match -PREVIEW_TAB_APIS = markdown +PREVIEWABLE_FILE_MODES = markdown -[upload] +[repository.upload] ; Whether repository file uploads are enabled. Defaults to `true` -ENABLE_UPLOADS = true +ENABLED = true ; Path for uploads. Defaults to `data/tmp/uploads` (tmp gets deleted on gogs restart) TEMP_PATH = data/tmp/uploads ; One or more allowed types, e.g. image/jpeg|image/png. Nothing means any file type @@ -76,7 +76,7 @@ ENABLE_HARD_LINE_BREAK = false CUSTOM_URL_SCHEMES = ; List of file extensions that should be rendered/edited as Markdown ; Separate extensions with a comma. To render files w/o extension as markdown, just put a comma -MD_FILE_EXTENSIONS = .md,.markdown,.mdown,.mkd +FILE_EXTENSIONS = .md,.markdown,.mdown,.mkd [server] PROTOCOL = http diff --git a/models/error.go b/models/error.go index e60867702..89c6389b0 100644 --- a/models/error.go +++ b/models/error.go @@ -427,7 +427,7 @@ func IsErrRepoFileAlreadyExist(err error) bool { } func (err ErrRepoFileAlreadyExist) Error() string { - return fmt.Sprintf("repository file already exists [file name: %s]", err.FileName) + return fmt.Sprintf("repository file already exists [file_name: %s]", err.FileName) } // __________ .__ @@ -663,5 +663,5 @@ func IsErrUploadNotExist(err error) bool { } func (err ErrUploadNotExist) Error() string { - return fmt.Sprintf("attachment does not exist [id: %d, uuid: %s]", err.ID, err.UUID) + return fmt.Sprintf("attachment does not exist [id: %d, uuid: %s, user_id: %d, repo_id: %d]", err.ID, err.UUID, err.UserID, err.RepoID) } diff --git a/models/issue.go b/models/issue.go index e0b72952e..eb126325f 100644 --- a/models/issue.go +++ b/models/issue.go @@ -645,12 +645,12 @@ func newIssue(e *xorm.Session, repo *Repository, issue *Issue, labelIDs []int64, if IsErrAttachmentNotExist(err) { continue } - return fmt.Errorf("getAttachmentByUUID[%s]: %v", uuid, err) + return fmt.Errorf("getAttachmentByUUID [%s]: %v", uuid, err) } attachment.IssueID = issue.ID // No assign value could be 0, so ignore AllCols(). if _, err = e.Id(attachment.ID).Update(attachment); err != nil { - return fmt.Errorf("update attachment[%d]: %v", attachment.ID, err) + return fmt.Errorf("update attachment [%d]: %v", attachment.ID, err) } } diff --git a/models/repo.go b/models/repo.go index c2ed6e012..9e20b9fb2 100644 --- a/models/repo.go +++ b/models/repo.go @@ -2557,7 +2557,7 @@ func (u *Upload) AfterSet(colName string, _ xorm.Cell) { // UploadLocalPath returns where uploads is stored in local file system based on given UUID. func UploadLocalPath(uuid string) string { - return path.Join(setting.UploadTempPath, uuid[0:1], uuid[1:2], uuid) + return path.Join(setting.Repository.Upload.TempPath, uuid[0:1], uuid[1:2], uuid) } // LocalPath returns where uploads are temporarily stored in local file system. diff --git a/models/ssh_key_test.go b/models/ssh_key_test.go index 2f7a572c4..1cda60c50 100644 --- a/models/ssh_key_test.go +++ b/models/ssh_key_test.go @@ -29,7 +29,7 @@ func Test_SSHParsePublicKey(t *testing.T) { "rsa-2048": {"rsa", 2048, "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMZXh+1OBUwSH9D45wTaxErQIN9IoC9xl7MKJkqvTvv6O5RR9YW/IK9FbfjXgXsppYGhsCZo1hFOOsXHMnfOORqu/xMDx4yPuyvKpw4LePEcg4TDipaDFuxbWOqc/BUZRZcXu41QAWfDLrInwsltWZHSeG7hjhpacl4FrVv9V1pS6Oc5Q1NxxEzTzuNLS/8diZrTm/YAQQ/+B+mzWI3zEtF4miZjjAljWd1LTBPvU23d29DcBmmFahcZ441XZsTeAwGxG/Q6j8NgNXj9WxMeWwxXV2jeAX/EBSpZrCVlCQ1yJswT6xCp8TuBnTiGWYMBNTbOZvPC4e0WI2/yZW/s5F nocomment"}, "ecdsa-256": {"ecdsa", 256, "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFQacN3PrOll7PXmN5B/ZNVahiUIqI05nbBlZk1KXsO3d06ktAWqbNflv2vEmA38bTFTfJ2sbn2B5ksT52cDDbA= nocomment"}, "ecdsa-384": {"ecdsa", 384, "ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBINmioV+XRX1Fm9Qk2ehHXJ2tfVxW30ypUWZw670Zyq5GQfBAH6xjygRsJ5wWsHXBsGYgFUXIHvMKVAG1tpw7s6ax9oA+dJOJ7tj+vhn8joFqT+sg3LYHgZkHrfqryRasQ== nocomment"}, - "ecdsa-521": {"ecdsa", 521, "ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBACGt3UG3EzRwNOI17QR84l6PgiAcvCE7v6aXPj/SC6UWKg4EL8vW9ZBcdYL9wzs4FZXh4MOV8jAzu3KRWNTwb4k2wFNUpGOt7l28MztFFEtH5BDDrtAJSPENPy8pvPLMfnPg5NhvWycqIBzNcHipem5wSJFN5PdpNOC2xMrPWKNqj+ZjQ== nocomment"}, + // "ecdsa-521": {"ecdsa", 521, "ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBACGt3UG3EzRwNOI17QR84l6PgiAcvCE7v6aXPj/SC6UWKg4EL8vW9ZBcdYL9wzs4FZXh4MOV8jAzu3KRWNTwb4k2wFNUpGOt7l28MztFFEtH5BDDrtAJSPENPy8pvPLMfnPg5NhvWycqIBzNcHipem5wSJFN5PdpNOC2xMrPWKNqj+ZjQ== nocomment"}, } Convey("Parse public keys in both native and ssh-keygen", t, func() { diff --git a/models/update.go b/models/update.go index be50a15e5..952794538 100644 --- a/models/update.go +++ b/models/update.go @@ -47,6 +47,19 @@ func DeleteUpdateTaskByUUID(uuid string) error { return err } +// CommitToPushCommit transforms a git.Commit to PushCommit type. +func CommitToPushCommit(commit *git.Commit) *PushCommit { + return &PushCommit{ + Sha1: commit.ID.String(), + Message: commit.Message(), + AuthorEmail: commit.Author.Email, + AuthorName: commit.Author.Name, + CommitterEmail: commit.Committer.Email, + CommitterName: commit.Committer.Name, + Timestamp: commit.Author.When, + } +} + func ListToPushCommits(l *list.List) *PushCommits { commits := make([]*PushCommit, 0) var actEmail string @@ -55,16 +68,7 @@ func ListToPushCommits(l *list.List) *PushCommits { if actEmail == "" { actEmail = commit.Committer.Email } - commits = append(commits, - &PushCommit{ - Sha1: commit.ID.String(), - Message: commit.Message(), - AuthorEmail: commit.Author.Email, - AuthorName: commit.Author.Name, - CommitterEmail: commit.Committer.Email, - CommitterName: commit.Committer.Name, - Timestamp: commit.Author.When, - }) + commits = append(commits, CommitToPushCommit(commit)) } return &PushCommits{l.Len(), commits, "", nil} } diff --git a/modules/bindata/bindata.go b/modules/bindata/bindata.go index d72efd102..ddf22962f 100644 --- a/modules/bindata/bindata.go +++ b/modules/bindata/bindata.go @@ -286,7 +286,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _confAppIni = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xb4\x5b\x5b\x6f\x23\xc9\x75\x7e\xef\x5f\x51\xab\xcd\x66\x34\x41\x93\xd4\x65\xa4\xd1\xca\x96\xb3\x14\xd9\x94\xe8\xe1\xcd\xdd\xd4\xcc\xce\x0e\x84\x56\x8b\x5d\x24\x7b\xd5\xec\xe6\x76\x35\xa5\xd1\x22\x08\x6c\xe4\x21\x17\x20\xc8\x43\x82\x04\x01\x82\x20\x79\x48\x0c\x38\x37\x1b\x79\xb1\x13\x27\x2f\x9b\xbc\xcf\xfe\x07\x67\x1d\x3f\xf9\x2f\xe4\x3b\xa7\xaa\xc9\xa6\x46\xab\xec\xe6\xea\x15\xfb\x52\x75\xaa\xce\xfd\x3b\xa7\x7a\xde\x15\x3d\xe7\xb9\xe3\x0a\xfe\xd3\xed\x37\xdb\xad\x97\x62\x78\xda\xf6\x44\xab\xdd\x71\xac\x77\xc5\xa0\xe3\xd4\x3d\x47\x74\xeb\xcf\x1c\xd1\x38\xad\xf7\x4e\x1c\x4f\xf4\x7b\xa2\xd1\x77\x5d\xc7\x1b\xf4\x7b\xcd\x76\xef\x44\x34\xce\xbc\x61\xbf\x8b\x87\xbd\x56\xfb\x44\xcf\xb4\xbe\x21\xea\xf3\xb9\x48\x82\x99\x14\xf9\x34\xc8\x85\x9a\xa6\x37\x4a\xa4\x89\x90\xd7\x32\xbb\x15\xf3\x60\x82\x17\x51\x1e\x4b\xab\x3e\x18\xf8\xbd\x7a\xd7\x11\x47\xe2\x24\x9d\xa8\x43\xfc\x15\x27\x51\x2e\x3c\x99\x5d\x47\x23\x09\x4a\x8d\x69\x90\x60\x38\x9e\x45\x63\x71\x9b\x2e\x44\xb6\x48\x44\x9c\x8e\x82\x38\xbe\xb5\xdc\xb3\x9e\x7f\xe6\x61\xf7\x47\x62\x12\xe5\x18\xed\x44\xf9\x54\x66\x62\x23\x94\xd7\x1b\xb6\xd8\x98\x67\x69\xb8\x21\x52\x3c\xc8\xa5\xca\xf1\x24\x94\xe3\x60\x11\x83\x96\xd2\x63\x98\x02\x58\xa7\x0d\xe0\xde\xb2\x5e\x65\x72\x9e\xaa\x28\x4f\xb3\xdb\x73\xcb\xed\xf7\x87\xe2\xc8\xf2\x1a\x6e\x7b\x30\xf4\x87\x2f\x07\x34\xec\x32\x50\x53\xac\xd4\x34\x94\xea\x3d\xaf\x2d\x46\xd3\x20\x53\x32\xb7\xe8\xc6\x87\xa8\x5c\xcf\xa1\x89\xdf\x10\xad\x34\x1b\x49\xc3\x76\x22\x6f\xc4\x8a\xba\xc8\x53\x71\x29\xc5\x3c\x8b\xae\x83\x5c\x5a\xad\xbe\xdb\x70\xfc\x81\xdb\x7e\x5e\x1f\xd2\x2a\xe3\x20\x56\xc4\xfe\x49\x9c\x5e\x06\xb1\x98\x05\xaf\xa3\xd9\x62\x26\x46\x99\x0c\xf2\x08\x92\x8c\xa3\x19\x44\x92\x8e\xcb\x14\xe7\xe0\x7c\xa1\x64\x66\x8b\xca\xb6\x98\xc9\x20\x51\x22\x49\xf5\x48\xab\x5b\xff\xd0\x6f\xb8\x4e\x7d\xd8\xee\xf7\xfc\x4e\xbb\xdb\xc6\xfe\x30\x0c\x2b\x0c\x82\x7c\x34\x15\x24\x1f\xf1\xc9\x42\x2e\xa4\x88\x65\x32\xc9\xa7\x36\xd6\xbc\x62\xb9\x07\x4a\xc4\x41\x06\x1d\xe0\x02\x6b\xa9\xe8\x12\x8a\x1b\x9c\x75\x3a\xbe\xeb\x7c\xe7\xcc\xf1\x86\x3e\xfe\x9e\x39\x7e\xc7\xe9\x9d\x0c\x4f\x41\x76\x7b\x0b\xff\x07\x51\xca\x90\xf6\x75\x8e\x35\x3a\x91\xe2\xcd\x8e\xa3\x18\xd2\x78\x9d\xcb\x44\x81\x09\xb5\xb4\x8e\x45\x1c\x8a\x69\x70\x8d\xb5\xa3\x44\x8a\x9b\x2c\x98\x2b\x11\x25\x78\x2d\x45\x23\x0d\x65\x37\xca\x32\x28\x51\xd3\x03\x39\x4f\xce\x83\x0c\x52\x2b\x93\xba\x81\xe6\x45\x20\x46\xe9\x6c\x16\x54\xc5\x30\x5d\x91\xe2\x55\x31\xa0\x96\xae\xc6\xdb\xe2\xe3\x05\xb6\x34\x5f\xe4\xc5\x1c\xab\xd3\xee\x39\xfe\x0b\xb7\x3e\xf0\x9d\x0f\x87\x0e\x14\xd9\xef\x79\x60\xa6\x9a\xbf\xce\xed\xea\x2c\xc4\x7f\x41\x76\x15\xa6\x37\x09\xdd\xe9\x9f\xab\xd0\xc6\x6e\x9e\x07\x71\x14\x6a\xd6\x66\xd8\xac\xe1\x8a\xd9\x09\xa0\x5f\x79\x1d\x41\xf1\xf5\x41\x1b\xf2\x53\xe9\x28\xc2\xbe\x43\xbd\x5b\xb0\x37\xb3\x85\x5a\x40\xfc\x10\x6d\x30\x8f\x6a\xd7\xdb\xb5\x62\x95\x32\x9b\xd7\x41\xbc\x00\xdd\xcb\x5b\xbd\x55\x55\x15\x03\x43\x36\x0f\x2e\x49\x50\x24\x19\x5e\x5c\xdc\xa4\xc9\x23\xed\x70\xe4\x2f\x24\xc0\x75\x99\x8b\x30\x95\x8a\x86\xcc\x48\xed\xd6\xc0\x75\x9e\xb7\x9d\x17\xfe\xb0\x7e\xec\x63\x8b\xc4\xf0\x72\x03\xd6\xab\xc5\x3c\x4e\x83\x90\x14\xf8\x62\x2a\xd9\xb1\x4a\xd6\xc6\x74\xf5\x08\x6c\x3e\xc3\x1a\x49\x00\xcb\x08\xab\x85\x6b\x28\x32\xf1\x8b\x3c\x5b\xc8\x0b\xcb\xe9\xd5\x8f\x3b\x8e\x7f\x36\xe8\xf4\xeb\x4d\x5a\x85\x1e\x6b\xe3\x9b\x8a\x31\x74\x6b\x08\xdd\x99\x1c\x06\x79\x50\xcb\x67\xf3\x9a\x79\x7d\x21\x36\x71\x27\x26\x12\xef\x43\x19\x4b\x12\x25\x78\x9a\x20\x74\x60\x6b\x2a\x0f\xb2\xfc\xb1\x35\x74\xba\x03\x7f\x50\x67\x53\xbc\x4b\x00\x4b\xf6\x61\x16\x58\x70\x96\x62\xcb\x08\x22\xe9\x0d\x68\xe4\xb7\x73\xa9\x6c\x21\xab\x93\xaa\x88\x66\x08\x4f\xb5\x8f\xe7\x72\xf2\x1b\xfa\x72\x9e\xe0\x69\x2f\xcd\xa7\x51\x32\x31\x6e\x15\x24\x86\x7f\x9a\x68\xd5\x3b\x9d\xfe\x0b\xa7\xc9\x01\xc2\x63\xb7\xef\x06\xaf\x85\x8a\x3e\x95\x64\xf3\x32\x80\x7e\x79\x30\x14\xd5\x3d\x5e\xe7\x70\x77\xa7\x7b\x6c\x51\xd0\xf4\xc9\x41\xbd\xf6\x47\xe4\xfb\xbb\x3b\x86\x44\xb2\x98\x5d\x42\xe8\xc6\x71\x94\x76\x70\x66\x64\x9d\xca\xf6\x16\xfb\x37\xd1\xf1\xd8\xff\x48\x77\x11\xe9\xad\xb7\xa4\xb0\xd4\x5c\x54\x58\x28\xe9\x8c\x0c\x05\xfc\x63\x67\x69\x42\x56\x02\xe2\x78\x4a\x01\xda\x72\x3e\x84\xb2\x5c\xc4\xa4\xfa\x09\xe2\xbc\xdf\x3b\xeb\x82\xf4\xce\xd6\x1a\xd1\x48\xa9\xc5\x97\x93\x63\x32\x6d\xcf\x3b\xbb\x43\x64\x7b\x9d\xc8\x32\xb6\xc1\xb6\x23\x30\xb4\x4e\x24\x18\xe5\xd1\x75\x94\x43\xde\x52\x86\x56\xcb\x81\x9c\x39\x96\xf5\xbb\x88\x61\x86\xe0\x9e\xf6\xc2\x05\xcb\xfb\x82\xdc\x4a\x56\x46\x29\x58\xb9\x80\xbe\xf2\x00\x5e\x32\xb1\x29\x32\x86\xe4\x42\xf5\x24\xcc\x52\x38\xec\xb7\x30\xaf\x4a\x3b\xa9\x27\x58\xeb\x9a\x9d\x98\x27\x21\x72\x20\xf0\x6d\x24\x58\x5d\xe7\x8e\x30\x52\x64\xd9\x1b\xf0\xda\x38\xd6\x8e\x4d\x8e\x55\xe4\x12\x95\xdf\xc6\x64\xcb\x5d\x12\x5d\x94\x8c\xd3\x43\x31\xcd\xf3\xb9\x3a\xac\xd5\x90\x52\x64\x9c\x42\x6d\xaa\x3a\x49\xd3\x49\x2c\xab\x60\xb2\x76\x23\x2f\x61\x8f\x30\x4d\xa9\x6a\x3b\x5b\xdb\x4f\x6a\xdb\xdb\x35\x6f\x31\x9f\xa7\x59\x5e\x81\x2f\x54\x4a\x0c\x54\xa2\xa4\xd2\x98\x66\x29\xee\x77\xdf\xe7\x97\x66\xfb\xd6\xf0\xd4\xe9\x3a\x10\x03\x74\xe4\x77\x9d\x61\x1d\x2e\x7c\x02\x51\x5c\xbc\x3b\x1e\xef\xed\x3e\xd9\xbd\xb8\x63\x85\xda\x80\x74\xce\x01\x3f\xf3\x38\xb8\x85\x38\x36\xc3\xc2\x8a\x90\x10\x0f\xba\xd1\xf1\x63\x36\xa4\x66\xdb\x1b\x74\xea\x2f\xd9\xa0\x0a\xa3\x3c\xd8\x3d\x38\xd8\xdf\x3a\x60\xcb\xaa\x06\xe1\x2c\x4a\xd6\xed\x8b\x12\xcf\xc3\x96\x40\x89\x7a\xdd\x10\xf6\xb6\xde\x36\xd1\x07\x49\xb8\xce\xa0\xff\x20\x89\x24\xcd\x01\x1b\x1e\x26\xd2\xeb\x0f\xdb\x8d\xbb\x76\xbd\xb7\x46\x26\xcd\x26\x41\x12\x7d\xaa\x53\xed\x43\xb4\xfa\xee\xc9\x5b\xfb\x61\x09\x91\x38\xee\x71\xc0\xaf\xc9\xdd\xf6\x1e\xa8\x15\x01\x99\xc8\x39\x1c\x63\x61\x83\x59\xa8\x13\xdc\x25\x00\xc1\xd5\x2a\xbc\x17\x81\x16\x10\xa4\xe9\x73\x46\x3b\x46\xd2\x7f\x56\x02\x14\x45\x2a\x1e\x21\xff\xa5\x33\x71\xe6\x76\x2a\xde\x88\x0c\xae\xb4\xb7\x22\x2c\x52\xe6\x8f\x92\x2b\xe4\xce\xa9\x4c\xc0\x40\x12\xca\x8c\x82\x60\x77\x95\xa3\x28\x76\xcb\xd7\xc1\x6c\x8e\x5d\x01\x82\xd9\x88\x98\x09\x80\x90\x46\x85\x3e\xa8\xfb\x5e\x83\x2c\x55\xc7\xc5\xaf\x82\x03\x60\xa0\x7a\x25\x19\xd6\x28\xaf\xe9\x7d\x74\xef\x49\x8b\x0f\x65\x7f\x4d\xe2\xbe\xd4\x4f\xd4\x96\xa9\xfc\x6d\x18\xd0\x6d\x6a\xb3\x5f\x07\x01\x5f\x96\xff\xa1\x1e\x28\xfa\x9a\x74\x3d\x70\xfb\xc3\x3e\xfc\x11\xc3\xc9\xfd\xad\x66\xbf\x5b\x6f\xf7\x70\xc7\x60\x75\x9a\xaa\x9c\xf1\x24\xc9\x04\x0f\xdf\xdb\x2c\xc6\x3f\xa6\x40\xf1\xde\xa6\x1e\x8e\x9b\xf7\x36\x4f\x87\x43\x24\xb0\xbe\x3b\x7c\xac\x6a\x16\xdf\xd4\x9b\x4d\xc2\xb8\x5b\x55\xfe\x7f\x6b\x39\x80\x92\x05\x61\x2d\x24\x52\x99\xcd\x10\x8d\x89\x3f\x4e\xa7\x49\x04\xdf\x4f\x47\x57\xd0\xc5\x59\xaf\x8d\xd4\xd2\x6f\x3c\x73\x86\xfe\xc0\x71\xbb\x88\xc8\x60\x0b\x53\xf7\xf7\xf7\x49\x27\xb4\x3d\xb1\xd9\xec\x7e\xf4\x98\xac\x81\xa7\x13\x16\x07\x94\xc8\xae\xc8\xa7\x37\x0b\x84\xe2\x79\xa7\x42\xc7\xad\xc7\x08\xcb\x70\x33\x45\xc6\x80\x68\x26\x94\x86\xeb\x55\x90\x6b\x27\x48\xad\x90\xe9\x28\x50\x90\x3c\x01\xf6\x30\x25\xb7\x04\xfc\xa5\x44\x9b\x12\x56\x26\x40\x5f\x8e\xa0\x8c\x6f\x68\x72\x3d\xce\xa1\x34\x02\xb6\x49\x7c\x6b\x00\x7f\xc6\xeb\x6a\x29\x83\x10\x30\x4e\xa4\x98\x20\x51\x50\x54\x63\x60\x6b\x24\x11\x7e\x59\xb5\x3a\xfd\x46\x1d\xd0\xf4\x01\x51\x2f\x45\xfa\xb6\xb4\x81\xeb\x75\xb0\xe7\x45\xc7\x00\xdb\x0b\xf8\x03\x9b\x3f\x2d\x19\x5c\x07\x51\x4c\xaf\x2d\x84\x48\x76\x34\x1a\xb6\x72\xae\x02\x26\xc1\xfb\xc5\xe5\x22\x8a\x73\xb8\x77\x69\xf7\x29\x31\x90\x57\x2d\x6f\x58\x77\x87\x34\xd5\x47\x48\x7c\xce\xe5\x4b\x41\xa1\x99\xce\x02\x4c\xd2\xb5\x13\x47\x6b\x24\xe5\x54\xe9\x48\x31\x8a\x29\x56\x80\x2b\x8b\xe6\x2e\x0d\x6c\x65\x3c\x64\x08\xc8\x22\x05\x70\xf8\x6f\x08\x18\x0b\xda\xd9\xb9\x33\xed\x9e\x9d\xc7\x70\x5c\xb8\x0f\xf4\xc2\x33\x3b\x6d\x0f\xde\x51\x10\x78\x6f\xb3\xa0\xc6\x3b\x70\x53\x48\x6a\x4e\xc0\x0e\x9e\x4e\x34\xc2\x28\x93\x23\xc2\x8c\x6b\xf5\xd7\xa3\xdf\xac\x55\x95\x9a\x3e\xb2\xb1\x5e\xce\x86\xa2\x33\x6b\xca\xd2\x7b\x54\x9b\x22\xe9\xd5\x10\x52\xf4\xa8\x2a\xaf\xcb\x5a\xd5\xd0\x8e\x55\x65\xe8\xb2\x59\x51\x65\x84\xe9\x72\x86\x3c\x1a\x18\x7c\x6a\x22\x17\x17\x37\xf3\xc5\x65\x1c\x8d\xae\xc4\x95\xbc\xc5\x0a\x64\xb9\xa0\x5b\xc1\xdd\x44\x26\x04\xe3\x4b\x5b\x53\xb7\xe0\x76\x56\xa2\xb5\xe4\x40\x6f\xe3\x99\xf3\xd2\x1f\x52\xe1\xb3\xdc\x0a\xe3\x58\xec\xa2\x44\x72\x8d\xd7\xd5\xf3\x47\x00\x8f\x88\xdd\x92\xe2\x9d\x04\x9c\x18\x47\xb8\x4d\x21\x81\x9b\x69\x04\x37\x23\xfd\x10\x37\x08\xc1\xcb\xb5\x4e\x48\xd4\x1a\xcf\xae\xe8\xb0\xab\x85\xd1\x88\x98\xbe\x31\x66\xc7\xde\x25\xc1\x23\xb2\x33\x43\x2a\xe2\x95\x11\x00\xc7\xc7\x51\x9a\x01\x24\xcf\x53\x4c\x03\xf7\x0c\x5d\xbb\xed\x5e\xbb\x7b\xd6\x65\x8e\x28\xd1\xa3\x78\x75\x1a\xe5\x74\x51\xb8\x43\xa3\xd9\xa3\x32\x96\xa0\x52\x51\x56\x53\xbd\x61\xf5\x5b\x2d\x4e\x33\xa6\x86\xd6\xd3\x0a\xe7\x70\xfb\x67\x43\xe4\xfc\x4e\xff\xa4\x5c\xd1\xca\x44\x72\xf8\x86\x8c\x01\x92\xf0\xe4\x57\x44\xb5\xc6\x10\x7e\x24\x61\x84\x95\x51\x70\x44\xd5\x81\xa8\x84\x8b\x8c\x33\xf0\xd1\xc1\xd3\xfd\xad\xe9\xd6\x6c\x4b\x89\x0a\xc5\xd1\xa3\xd9\x2d\xfd\x54\x4d\xde\x21\x4c\x65\x7d\x83\x90\x3d\xe2\x3d\xa0\x12\x42\x79\x75\x3e\x7e\x5d\x24\x19\x82\x55\xb0\x7e\x7e\x43\x21\xe3\x05\x04\x4e\xed\x08\x5a\x2c\x1a\x6b\x01\x22\x15\xc2\xcd\x37\xc3\x14\x54\xc8\xcf\x11\x03\x51\x63\x90\x3c\xf5\x7c\x9e\x68\x4a\x75\x12\xea\x63\xbd\x6d\x20\xbb\x44\xa9\x58\xcc\xaf\x46\x6a\x7b\x47\x54\xc8\xc3\x40\x95\x57\xaf\x90\x4e\xf5\x1d\x4c\xa9\x92\xa4\x98\xa6\xbe\xda\x2c\x8c\x2c\x26\xd1\x0b\x45\x17\xa8\x2b\xad\x86\x83\xa8\x41\xc9\x09\xd2\xd4\xe9\xbb\xc6\x40\xb3\x56\x2c\x63\x91\x1a\xef\x1b\x60\x28\x62\xf9\xb3\x39\x15\x11\x31\xe1\x52\x72\x4f\x32\xf1\x98\x98\x22\xa3\x44\xfd\x04\xf4\xa4\xe5\x46\xfe\xbb\xee\x14\x2c\x02\x32\x73\x58\x1b\x84\xc5\x29\x02\x8f\xe5\x6b\x39\x5a\x40\xc0\x14\xd4\x80\xab\xee\xba\xa8\x99\x3f\x2f\xea\x3c\x6a\x0c\x51\x51\xc6\x9d\x9f\x66\x1d\xb8\xb5\x54\xa9\xe9\xc6\x51\x4c\x3a\xe1\x1e\x07\xef\xf2\xe4\xa3\xf6\x00\x45\x32\xc3\xe3\x02\xde\xf0\xb3\x12\xa6\x09\xb4\x49\x73\x63\x69\xcc\x51\x36\xa9\xc4\xe9\x64\x02\xbd\x33\x2e\xb5\xe1\x50\x09\xc5\xc2\x0d\x8a\x2a\x1a\xd5\x9b\x62\x67\xc3\xea\xd4\xb9\x93\x45\xc8\x8b\x04\x47\x23\x2c\xbd\x75\x02\x58\x4b\x2c\x14\x4f\x50\x3b\xe5\xd3\x99\x62\x59\x41\x1a\x51\xb6\xe6\x67\xba\x6d\x22\x36\x29\x7a\x55\xb6\xc9\x76\x4c\xdd\x00\x7b\x24\x5f\x7b\x0c\xa8\xa0\xa6\x55\x33\xc5\xc7\x14\x9f\x5c\x53\x9d\x5b\x4e\x73\x67\x6f\x6f\xfb\x7d\x86\xa1\xfb\x96\xd3\x68\x7a\x75\x21\xcc\x9d\xcb\xd7\x7c\xb7\xf5\xe4\xc0\x6a\x2e\x6f\xb7\xb7\x76\x9e\x00\x7d\x90\xd8\x2e\x91\x6a\xcf\x4b\xcd\xaf\xd9\xad\xfa\x24\xe6\xf6\x17\xbc\x64\x02\x97\xd7\x0c\xe3\x21\xd0\xd4\x2e\x5e\x44\xf9\x23\xa5\x53\xeb\x68\x9a\x52\x9b\xad\x79\x5c\x74\xb7\x78\xae\x75\xda\xf7\x28\xb0\x6f\xef\x3c\x65\xc4\xb1\x7d\xb8\xbb\xbb\xb5\x6f\x99\x46\x1d\xb9\xaa\x65\xba\x6e\x19\x62\xbd\x35\xa8\x7b\xde\x8b\x66\xd1\xef\x5a\x5b\x16\x69\x1c\x65\x75\xd1\x94\x33\x75\x14\x76\x96\xc9\x4f\x16\x88\xa9\x7a\x63\x48\x30\xd1\xf8\xb6\x32\x5e\xc4\xf1\x06\x62\x5e\x67\xd9\x90\xd3\xe3\x0b\xb2\xc5\xfe\x59\xfe\x1b\x79\x14\x5e\x6e\x70\x55\x27\x82\x4b\x95\xc6\xb0\xc1\xa5\x79\x26\x9c\x4e\xb8\x1d\x40\xe0\xc0\xa0\x13\xab\xdc\x13\x20\x26\xaa\xe1\x25\x24\x68\x6a\x19\x02\x72\xa3\x05\x34\x7c\x7b\x6e\xb5\x7b\x30\xe6\x4e\x07\x81\x6b\x2d\x16\xbe\xf3\x8e\xee\x82\xea\x26\xe9\xb0\x2f\x9e\x39\xce\x40\xbc\xec\x9f\xb9\x82\xc5\x41\xe6\x2c\xbc\x7a\xcb\x79\xe7\x1d\xcb\x73\x1a\x2e\xf0\x16\x1c\x12\x04\xde\x79\xf7\x83\x56\xd3\x79\xe1\xe2\x7f\xbf\xfa\x6b\x9b\x64\xe5\x8b\x3c\x25\x03\x8d\x08\x55\xcf\x24\x67\xdd\x30\x40\x7c\x40\xa8\x6c\xf7\x7c\x17\x80\xb9\x7b\x8c\xc8\xd9\xac\xbf\x24\xf8\xf9\xd4\x6a\xf4\xfb\xcf\xda\x0e\xf7\x3a\x4b\x5a\xf0\x83\x1b\xa9\xc8\x5c\xcd\xeb\xe5\xbc\xf2\x98\x28\x41\x6a\x0c\x23\x2d\x48\x97\x5a\x91\x8a\x62\x59\xfa\xfa\x56\x04\x0b\x28\x26\xc9\x0b\x7f\x9b\xca\x80\x30\x33\x63\x0f\x53\xd1\xf1\x0d\x0a\x13\x80\x14\x8f\xda\x93\xfd\x0f\x5f\xfa\xf5\x33\xd4\x9e\x3d\xf8\xba\x6e\x26\x1a\x4b\xf8\xb0\xf2\xc2\x39\xa6\x57\x15\x7a\x60\x70\x31\xa4\x7e\x6e\xd5\x1b\xc3\xf6\x73\x2a\x55\x9b\x0e\x80\x03\xae\x90\x74\x90\x17\xb8\x53\x71\xb0\x05\xe2\x1e\x01\x53\xb6\xa1\x2f\x1d\x84\xc0\xc5\xbb\x29\x30\x64\x9a\x8c\xa3\x6c\x26\x64\x05\x68\x29\x66\x97\xcf\xe4\x04\x18\x45\x27\x0c\xd0\x3c\x21\x84\xe2\xfa\x0e\x70\x51\xc7\xe7\xe6\xb4\xdb\x5d\x83\x59\x52\x83\x48\x76\x6f\x33\x19\x0b\x90\x69\xb1\x41\x14\x78\x02\x38\x37\x5d\x24\x1a\x90\xae\xf2\x1a\x93\x77\x99\xff\x12\x51\xde\xe2\x8c\x0a\x0a\x15\x4d\x38\x53\x62\xab\xdc\xa6\x0b\x92\x5b\x6e\x1f\x55\x2d\x6a\x99\xb6\x5d\xaa\xaa\x4f\x7a\xd0\x34\x35\xdf\x4a\x14\xba\xc4\x0d\xd5\xb0\x63\xa3\x93\x22\xe0\x51\xcd\xda\x7a\xe9\x13\x37\xe5\xe1\x94\xb5\x42\x99\x63\xd6\xaa\xe7\x00\xc8\x34\x5d\x5c\x72\xa3\x01\xfa\x8f\x72\xc5\xb6\x5e\xd3\xad\x9a\xda\xf6\xfe\x5e\x41\xf3\x21\xad\x2e\x17\xf9\xb2\xb1\xfd\x2f\x13\x82\xa9\x50\x47\xc1\x3c\x07\xd2\x17\xdc\x57\xd1\xe6\xf5\x96\x96\x0c\xed\x46\x7d\x30\x84\x63\x15\x4d\x41\xeb\x15\x2a\x8a\x69\x9a\x5e\x51\x48\x3b\xc5\xaf\xc8\x03\x75\xb5\xd6\x9b\xb6\xee\x69\x38\x73\xc4\x8e\x23\x02\xab\x79\x34\x93\x94\x47\xa1\x00\xf8\x34\xe0\x8e\xb2\x9a\x0e\x19\x95\xeb\x0f\xdb\x5d\x07\xa0\xc4\xf4\x8c\xea\xac\xfc\x28\x61\xcf\x97\x25\x44\x40\xbb\xf3\x9e\xb5\x07\xfe\xb0\xe3\xf9\x98\x47\x27\x23\x2b\x16\x57\x35\xfd\x34\x52\x8c\x3f\xa9\xeb\x93\xcd\x34\x9b\xd4\x8e\xa5\x96\x1f\x97\xf4\x77\xfb\x5e\x54\xcd\x23\xbd\xa2\x5c\xd4\xcc\x37\x4b\x64\x8f\x17\xe3\x31\xe7\x66\xce\x23\x54\xa2\xa3\x52\x4a\x64\x6c\x23\xbd\xc8\xb9\xe9\xc4\x47\x9c\x8b\xcd\x51\x48\xc8\xcd\xde\xab\x04\x4c\xdc\x50\x05\xcd\x2f\x01\x1b\x9d\x5e\xd3\x3f\x3e\x6b\xb5\x08\x7b\x39\x3d\x2d\x20\xda\x37\x39\xf6\xaa\xf9\x83\x8d\xb2\xf7\xe8\x93\x18\xef\xec\xf8\xdb\x4e\x43\xc3\xf9\xe2\x54\x86\xe1\x3c\xdb\xa4\x2e\x03\x08\xbd\xcd\xd8\xd8\xd4\x2c\x9f\x57\x27\x74\x4d\x86\x76\xb8\x77\xf0\x14\xef\xbe\xf3\x1d\xf3\xe2\x93\x4f\xf8\xe9\x93\x7d\xee\xaa\xa4\xb9\xb4\x8b\x66\x34\x83\x29\x94\xe6\xa6\x62\xdf\xc0\x10\x04\x71\xaf\x3b\x1c\x78\xba\xbb\x86\x1c\x4d\x8d\xba\x2a\x9c\x89\x32\x3a\x57\x4a\x50\x02\x75\x79\x79\x2e\x56\x22\x01\x00\x8e\xa3\x5a\xa7\x1a\x3f\xe4\xae\xa8\xdb\x6a\x88\xfd\x27\x5b\xef\x57\x45\x5b\x2f\x64\xea\x16\x83\x1b\xd4\x8a\x10\x64\xc4\x0b\x05\xf1\x0d\x02\xee\x72\x3d\x93\xf2\x4a\x88\xf7\xd4\xe9\xf4\x09\xab\x69\x63\xd5\x69\x85\x60\x27\x87\x47\xea\x92\x84\x11\xe9\x0b\xf1\xb3\xba\x0c\x0c\x3c\x87\x88\x34\x74\x77\x65\x39\x9e\x6c\x7f\x9d\xe0\x5a\x7d\xc0\xe0\x54\x57\x1d\xd8\x09\xc6\xf9\xb4\x1d\x1d\xc5\x39\x5a\x71\xac\xd2\x79\x92\xd9\x2b\x83\xd7\xb4\xcc\x71\x55\xf4\xa9\x74\xa6\xb4\x88\x88\xa3\x78\x61\x25\xe3\x71\x85\x42\x12\x84\x55\x9a\xa8\xb4\x89\x17\xe6\xad\x03\x18\x4a\xc4\x08\x2c\x95\xc7\x51\xae\xf7\x09\x7b\xb6\x5b\x14\x1d\x56\x30\xff\x1e\x3c\xaa\xad\xfb\x21\x40\x6a\x46\xac\x10\x29\xdb\x97\xc6\xed\x61\x08\xd4\x00\xb0\x46\xda\xdc\xdb\xdd\xd9\xa9\x8a\x21\xf1\x60\xb0\x1b\xb7\x6a\x70\x29\xd9\x6a\x97\x83\xc1\x20\xb1\x7f\xb1\x41\xe6\xbd\x21\xbe\xc9\xaf\x3f\x28\xd5\x06\xdf\xba\x10\xda\x3b\xad\x96\xdb\xef\x9a\xfe\x3c\x6d\x62\x95\xe1\x38\xee\xcf\x03\xa5\x6e\xd2\x2c\x34\xd8\xa6\x0c\x6b\x48\x30\xb9\x7c\x9d\x03\x4e\xcf\x62\x3e\xac\xa1\x46\x45\x02\x45\x5e\x4b\x43\x9c\x1d\x36\x4d\x50\x25\x2f\x51\xea\xe9\xb0\xdb\xf1\xeb\x9d\x21\xe5\x6c\x4a\x81\x4b\xc1\x59\xaf\x46\x88\x10\xeb\x98\x4d\xce\x10\x48\x34\x34\x82\x8b\x6e\x30\x5f\xf4\x94\x47\xde\x39\xb9\x34\x83\xad\x7a\x13\xa1\x93\xb3\xaf\x7e\x52\x20\x25\xf3\xde\xc0\xaf\x93\x06\x5c\x1d\xdb\x45\x28\x2e\x85\xc4\x35\x8a\xfb\x5b\xc0\x3c\xa0\xf4\xbc\x4e\xe9\x65\x7f\xab\x20\xa4\xf7\xa2\x01\x57\x69\x2f\x20\x90\xa0\x1e\x66\xcc\x40\xbd\x1e\xa3\x0b\xcc\xe2\x09\x87\xc8\xd3\x39\x75\x8f\x8e\xf2\xd1\xdc\xa6\x97\x47\x87\xfb\xbb\x4f\xdf\xb7\x0b\x09\x1f\xcd\x82\x51\x90\xc1\x07\xc2\xcb\xa3\x2d\x7b\x9e\xa6\x31\x43\xe1\x23\x84\x29\x3b\x0a\x63\xe9\x9b\x08\x7e\xa4\x53\x7f\xb1\xf2\xa1\xb8\x58\x21\xd2\xed\xed\x9d\xed\xed\x8b\xc2\x6d\x09\x6e\x70\xf7\xeb\x7e\x99\x52\x49\x63\x44\x5a\x88\xf7\x3e\x79\x22\xbb\x3d\x6f\x37\xd7\x05\x3a\xc8\xd2\xeb\x88\x60\x11\x63\x8e\x09\x1c\x98\xf8\x56\x7a\x5b\x18\x72\xc8\xae\xa9\x4f\xfb\x92\xdb\x62\xd4\xad\xa4\xd3\x68\x5a\x16\x21\x51\x9a\xbe\x5c\x51\x57\x99\x83\x26\x7d\xba\x65\xde\xaa\x8b\xff\x37\xe9\x11\xa2\x3f\x04\x16\xac\xe0\xb7\x12\x66\x94\x22\x6b\xfc\x50\x84\x2a\x29\x36\x8c\xa4\x8c\x78\x5b\xec\x8c\x60\xfd\x61\xb1\xde\x07\xc5\x1e\xfd\x9c\x02\xe3\xc5\x52\x4c\xbe\x39\xf4\x37\x90\xba\xe0\x84\x5b\xb4\x9a\xe5\x11\xd2\x77\x24\x35\x88\x34\x18\xd5\x40\xd3\xc8\xa7\x53\x16\x5f\x23\x14\xea\x65\xe8\x8c\x46\x71\xab\x90\x17\x6c\x95\x31\x8d\x31\xe3\x72\xb8\xd4\xe1\x47\x13\x04\xd2\x3e\x73\x9d\xb7\x11\x88\x42\x01\xaf\xd7\x5f\x9b\xcb\x18\xc3\x38\x28\x01\x4f\x4d\x65\x75\x22\x59\x6c\x1d\x5e\x43\x72\x5c\xba\xce\x1a\x91\x03\xe4\x9a\x2d\xeb\xa4\xe1\x17\x5e\xc3\xc0\x82\x4e\x49\xf8\xc5\x8a\x4a\x1c\x8d\x25\xd3\xb9\x67\xba\xe7\x70\x23\x16\x70\xb7\xe5\xac\xcf\xb7\x5e\xcd\xa3\x11\x75\x1e\x01\x9e\x9f\xa3\xa8\x70\xcd\xc1\xe9\xda\xa9\x66\x70\x8d\xbf\x99\xe2\x4f\x24\x50\xa8\x2a\x69\x8e\x60\x28\x5a\xa2\xac\x4b\xf1\x60\x23\x5c\xa4\x6a\xba\x48\x37\x30\x08\xb6\x1f\x14\x4d\x7f\x3d\x55\x28\x54\x80\x23\xec\x8c\x34\xa1\xf1\x23\xe0\xe3\x28\xa9\x4e\x32\x3d\x80\x31\xa4\xbe\xac\x59\x27\xae\xd9\x8a\x87\x7a\xa7\xc1\xd5\x85\x19\x06\xe2\x1c\xa6\xb9\x8b\xbb\xcc\xe2\x63\xfa\xf2\x21\x34\x2d\x48\xee\xe7\xd0\x51\xc7\x78\xcc\xa7\x16\x33\xee\xd4\x16\x59\xb3\x20\x5d\xd2\x61\x4b\x86\xdc\x24\x0a\x8b\xbd\xc6\xd0\xe4\x62\x4e\x2c\x2a\xd1\xec\x79\xa6\xbc\x1e\xa5\x94\xe4\xcd\x90\xd5\xf1\x3a\x08\x30\xbc\xe0\x54\x80\x48\xa7\xa4\x2c\xd8\xbb\xb9\xb9\xa9\xc6\xd1\x65\xc1\x61\x9a\x4d\xbe\xc2\xf6\x79\x57\x77\xf7\x4f\x12\x3d\x31\x74\x48\xa9\xd8\xce\x65\x40\xe7\xdf\x85\x75\xb5\x1c\xf8\x08\xf2\x65\xd3\xbf\xc3\x1e\x6a\xce\x3c\x47\x40\x03\x7e\xc9\xcb\x87\xeb\xab\xa7\x5f\xf5\x40\xfd\x9e\x83\xf4\x12\x91\xfb\x0e\xd3\x4b\xaf\x2f\xd6\x0a\xe2\xd2\x8b\xff\xe1\x21\xf9\xdd\x73\xf0\xfb\x07\x7d\xc9\xe1\xf8\x3d\xc7\xe2\xa5\x13\xf1\x27\xff\xbb\x03\x71\x3a\x45\x23\x27\x24\x61\x7b\x73\x39\x02\xb0\x91\xba\xa1\x65\x72\x37\x09\x8e\xda\x0f\xb7\xd4\x89\x9d\x53\x3b\x4b\xf0\xf1\xec\x3a\x55\xc0\x12\x64\x9d\xdd\x82\x08\xd2\xa9\x81\x97\x18\x6e\x3e\xd1\x20\xb5\xd1\x47\x40\x0d\x5b\x9c\x25\xd1\xeb\x66\x40\xd8\xd7\x5d\x5c\xde\x9a\xab\x56\xe3\x60\x67\xa7\xf8\xfd\x48\x5f\xec\x6d\xd9\x05\xe9\xe5\x85\x7e\xb5\xbb\xbb\xfb\xfe\xf2\xa2\x17\x24\xa9\x2d\x9e\x45\x28\xab\xa8\xbb\xec\xe5\x00\x38\xe6\xa7\x0b\xa3\x8d\x96\xd7\xa3\x2c\xe5\x8c\xcd\xb7\x34\xcb\x64\xf3\x59\x71\x3e\x5d\x54\x2a\xc1\x25\x55\x49\x25\x31\x94\xfc\x64\x92\xc6\x01\xea\x55\xf8\x47\x6d\x7e\x35\xa9\x91\xf4\x6a\xef\xe2\xaa\x82\x7c\xa1\xf2\x80\xac\xa4\xd5\x77\xbb\x75\x9d\x7c\xe3\x74\xa2\xbf\x96\x5a\x75\xfe\x8a\x24\x4c\xe3\x53\xdd\xf4\x31\x59\x98\x1e\x25\xf4\x4b\xb5\x82\x39\x61\x37\x5d\xac\x3b\x79\xb9\x98\x5b\x40\x53\x3a\xa0\xe3\x2e\x7b\x71\x02\x38\xc3\xc8\x68\x5e\x7c\x78\x63\x6c\xb3\x98\x66\xb3\x91\x6c\x58\xa6\x9b\x64\x9e\xfe\x5f\x16\x5a\x77\x6b\x2c\x0e\xfd\x05\xe3\xc3\x2c\x18\x31\xbb\x4d\x79\xb9\x98\xd0\x45\x1b\xb2\xa7\xdf\x17\x41\xc6\xfc\x3b\xf4\x55\x13\x5d\x34\xb2\x88\x9a\x30\xf1\x1d\xf6\x35\x05\xab\x83\xda\x9b\x60\x19\xdf\x5a\x05\x34\x2b\x64\x63\x62\x11\xb5\x27\x48\x0d\x55\xf3\xfc\xbc\x98\xb6\x9c\xc0\xc2\xb8\x3b\x9a\x1e\xae\x86\x9a\x48\xa8\xe3\x8e\xa2\xf6\x50\x3a\xe3\x20\x8c\xa1\x22\x4b\x73\x5c\x6f\xaa\x1b\xb2\x40\x76\xc1\x94\x02\x03\x55\x69\x06\x13\x3d\x7e\x3b\xd1\x76\xfa\x27\xbe\xdb\x1f\xea\xaa\xc1\x84\x2a\x72\x64\x8e\xa2\x2b\x6f\xa6\x5a\x2f\xd6\x9f\x2a\xad\xd1\x60\x99\x6e\x69\x67\xa6\x63\x06\xaf\x90\x33\x4b\x7a\x19\x48\xd4\x34\x1a\xe7\x0f\xd1\xd9\x39\x30\x1f\xee\x6c\x8b\x6f\x7e\x13\x77\x36\xf5\x56\x4b\x21\xc6\xf7\x4e\xdb\x2d\x3e\x0b\x3b\xe0\xe4\x3d\xa1\x38\xc8\x5c\x87\xc8\x20\xb7\x6f\xf3\xd5\xac\xb7\x3b\x2f\xdf\xe2\xcc\x79\x3d\x8f\x32\x8e\x1d\xa8\x2c\xb1\x1d\x22\x40\x7b\xd9\xd4\xdf\x2a\x89\x60\x4c\x3d\xa6\x19\xb6\x4d\x23\xd6\xc5\xf5\x54\x7f\x79\x51\x34\xfc\x4a\x6a\x4e\xee\xd3\x71\x52\xd6\x9a\x2b\x0d\x22\xd7\x70\x9c\xcf\xe4\xf9\x93\x43\x23\x8f\x19\xd0\x08\xe2\xef\x3d\x18\xca\x75\x80\xe1\x7a\xa8\xfb\x7d\x00\x91\xae\x57\x3e\xa7\x19\xea\x73\xb5\x6c\x49\x9b\x2b\xe0\x12\xf4\x07\x91\x18\xcb\x3d\x44\xb5\x8c\xca\x8c\x5b\x00\xd4\x92\xc9\xd3\x01\xb5\xf6\xfd\x45\x38\xbf\x63\xf7\x34\xa4\x7c\x9c\x8e\x7b\x6e\x05\x95\x2a\x0d\x7d\x20\xbe\x94\x92\x8e\x24\x77\xa4\x44\x0f\xcb\x52\x7a\xa8\xfd\xb1\xbe\x81\x66\x14\x4c\x12\x2c\x17\x8d\x0a\xd1\x99\x0a\x9d\x4b\xec\x8d\x52\xaf\xe4\xe1\x91\x77\xba\x27\xcb\x16\xc3\xd7\x2d\x3f\xa1\x5f\x49\xb0\x7d\x75\x8e\x91\xae\xf2\xb3\x89\x7a\xaf\x36\xb6\xcb\x45\xef\x86\xbd\xb1\xb3\x76\x7f\x4e\x5a\x71\xa8\x09\xe6\x95\x04\xb7\x0c\xbc\x77\x85\xb7\x3a\x57\x58\x09\x70\xfd\x7c\x41\xac\xb5\xfa\xad\xa6\xdb\xe6\x93\x6c\x8a\xaf\x81\xd2\xdf\xe5\xbd\x46\x5a\xd1\xdb\x3b\xe4\x93\x82\x43\xfa\xf3\xc1\xf2\x7b\x08\x6e\x4c\xfe\xba\xf9\x76\xf6\x68\x91\x8f\x0f\x2c\xb2\x1b\xce\x28\x48\x62\xe5\x0f\x5e\xb2\x45\x92\x50\xa4\xa1\xc7\xdc\x0f\xe4\xdc\x1f\xa5\x74\x00\x8a\xb4\x5d\x2d\xb5\xd3\x8c\x2f\xba\x8b\xa4\x3c\x9a\x8d\x97\xcf\xac\xf8\x58\x00\xc1\x9b\xbe\xfc\xad\x0f\x7d\x6e\x0c\xad\xa0\x19\x9d\x90\x85\x9c\x5a\xf8\x9b\x53\xa5\x77\x52\xd5\x9f\x3d\xf8\xe6\xe1\xb9\x45\x1f\xb5\x34\xcf\x18\x80\x7d\xa0\x5d\x6d\x7b\x6b\x66\xb1\xaa\x96\x1f\x48\x4e\x65\x10\xd3\xa9\x2b\x9d\xc8\x1a\x32\xf4\x0d\x90\xaf\x9f\xfb\xfc\xfc\x3e\x4a\x3b\x4f\xa6\xd6\xaa\x4f\xb9\xbf\x45\x78\xac\x9e\x4d\x16\x1a\x18\x92\x73\x73\x22\x84\xc9\x3c\x42\xf1\x24\xc6\x6a\x74\xf5\xa8\x48\x7d\x95\xca\x22\xc9\x08\x54\xb1\xd4\x2a\x95\x3c\x98\x28\x4a\x9f\x94\xd9\x39\xff\xa7\xc9\x32\xc3\x47\x79\x45\x8d\x66\x0c\xf2\xc3\x74\xa4\xf8\x01\x11\xab\x6d\x57\x9f\x56\xf7\xac\xba\x7b\x62\x2c\xa5\xc1\x67\xca\xa5\x4f\x3f\xf9\xa0\x90\x8c\xbe\x10\x0f\xf3\xe2\x33\x77\xf4\x0e\x02\xba\x23\x5d\x56\xca\xfd\xac\x5a\xaf\xb0\xf0\xf9\xaa\xf1\xa6\xc4\x34\x9a\x4c\x63\xfc\xc7\x21\x1d\x1e\x4f\x55\x00\xb8\xcd\x50\x6f\x5f\x53\x0b\x8b\x3f\x20\x51\xcb\xf2\xa1\xd9\x6e\xb5\xfc\xd3\xf6\xc9\x69\x07\xff\x0d\xd7\xba\xe9\x65\xc4\x48\x29\x47\x2d\xc1\x2c\x51\x2e\xa7\x0b\x0a\x07\xd4\xd0\xe3\x7e\x3d\x87\xe2\x93\xf6\x50\x93\x2e\x27\x9e\xb7\xa8\x92\xf5\x06\xa3\x9c\x0a\x2f\x26\x19\x97\xcf\x0c\x1f\xa6\xc9\x1f\x8a\xd7\x1b\x43\xf6\x48\xb1\x77\x0f\x71\x0d\x72\xe9\x4b\xb1\xe4\x01\x5a\xab\xcf\x3e\xb7\x1e\xb6\x94\xc9\xa8\x64\x27\xc1\x84\xfc\x56\x51\x03\x0b\x37\xc8\xf4\x5f\xc7\x4c\x26\x23\x63\x24\x28\x81\x57\x76\xd2\x5f\x36\x4b\xef\xe9\xc0\x93\x96\xab\xe6\xf9\xb9\xd5\x6d\x9f\xb8\x3a\x75\xee\x53\x7a\x6f\xbb\x6e\xdf\xd5\x1f\x33\x59\x8d\x4e\xbf\xe7\x98\x6b\xfa\xca\xdc\x5c\xa2\x1e\xe7\xce\x94\xf5\x4a\x3b\xe1\x79\xe9\x74\xb9\xdc\xde\x9a\xa2\xa8\xa5\xb6\x6e\x7e\x23\xa5\xe9\xc4\x6b\x0f\x6c\x3a\xad\xfa\x59\x67\xe8\x97\x1a\x5d\x7c\x82\x1a\xcc\xf9\x4b\xd9\x75\xc9\x47\xb9\x9c\x29\x5d\x0c\xea\x4f\x26\x74\xfd\x17\xe8\xae\x3e\x89\x5f\xff\x13\x08\xcf\xf1\xdb\x43\xa7\xeb\x15\x5f\xfe\x45\xdb\x07\x94\x99\xeb\x3d\x92\x09\x80\x54\xe5\xcc\xb3\x3f\x9d\x56\x1a\x3d\xfa\x7b\xfa\x8c\xfe\x0e\x5f\xd8\xa1\xac\x34\x1d\x7b\x9c\x55\x5a\xae\x9d\xc4\x95\x5e\xc7\x8e\xaf\x2b\x9d\xe7\x76\xb6\xa8\xb8\x67\xf6\xc7\x41\xe5\xdb\x03\x5b\xaa\x8a\xe3\xd9\xf3\xbc\x72\xec\xda\xf3\xb8\x32\xe8\xd8\x97\x93\xca\xf1\x89\x0d\xe9\xb7\x87\xf6\x38\xaa\xb4\xda\x76\x9e\x55\x86\xae\x3d\x52\x95\xc6\x47\x7c\x38\x4b\x6b\x3a\x30\xe9\x48\x4d\xed\x9f\xff\xfd\x77\x7f\xf6\x2f\x7f\xf8\xb3\x1f\xff\xdd\x17\x7f\xfc\xdb\xf6\xcf\x7f\xf2\xbd\x5f\xfc\xcd\x1f\xe9\x9b\x5f\xfe\xf4\x77\x7e\xf1\xd7\x7f\xfa\xc5\x8f\xff\xe1\x97\x3f\xfd\xdd\xbb\x2f\xfe\xe3\x0f\x7e\xf8\xc5\x4f\xfe\x95\x5e\x34\xe5\x22\x57\xa3\xa9\xdd\xca\x82\xe4\xb3\xef\x07\x91\xb2\x7b\x54\x92\xa3\x28\x08\x95\xdd\x09\x72\x98\xe1\xbf\xff\xe5\xc2\x7e\xf3\x17\x9f\xff\xd6\xe7\xdf\xfb\xfc\x7b\x6f\xfe\xe9\xcd\x8f\xdf\xfc\xc4\xfe\xe2\x4f\xfe\xea\x8b\x3f\xfb\xdb\xff\xfc\xc1\x9f\xdb\x8e\x9a\x07\x9f\xfd\x28\x8d\x6d\xfa\xb0\x68\x31\x59\x7c\xf6\x03\x45\x1f\x82\x1d\x67\x81\x8a\xe8\x61\xac\xae\x22\xfb\xcd\x8f\x3e\xff\xbd\x37\xff\xfc\xe6\x1f\xdf\xfc\xf0\xf3\xef\x6a\x1a\x76\x3b\x0f\xe2\x88\x2a\x1d\x6f\x01\xec\x19\x07\x70\xa7\xc4\x1e\x7e\xf6\xd3\xec\xea\xb3\xef\x4b\xfb\xdf\x7e\x1f\xab\xe6\x51\x12\x58\xba\x24\x08\xd9\xc8\x29\x34\x93\x65\xcd\xa3\xd1\x15\xd2\x2c\x2b\x81\x12\x98\xa4\x12\xe6\xdc\x62\x2d\xb0\x36\x2c\x56\x05\x2e\x3f\x9d\x5a\xac\x0f\xbe\x84\x46\x2c\xfe\xbb\xbc\x63\xfd\x50\x61\x2c\x2d\x56\x12\xc5\x94\xcc\x62\x4d\xe1\x32\x89\x2d\x56\x17\x7d\xda\x77\x6d\xb1\xce\xe8\x24\x7c\x61\xb1\xe2\x70\xf9\x71\x60\xb1\xf6\x68\x4d\x65\xb1\x0a\x71\xc9\xbf\x16\xab\x92\xee\x62\x8b\xf5\x89\xcb\xcb\x89\xc5\x4a\xa5\x8a\x39\xb7\x58\xb3\xb4\x60\x64\xb1\x7a\x39\x78\x5a\xac\x63\x2a\x62\x58\xd7\x0c\x35\x8b\xcf\x19\x67\xc1\x7c\xce\xdf\xf3\xa4\xa5\xc0\x39\x8a\x03\xee\xc7\xb2\xb7\x57\x01\xe3\xe3\xa3\x28\x89\xac\x57\xcb\x11\x55\x33\x8d\x0e\xbe\x53\x4a\xeb\xc8\x44\xa7\xfd\x17\x7e\x0b\x45\x1c\x4a\x9a\x63\x57\x7f\x14\x51\x8a\xa6\x1e\xfd\x9b\x02\x02\x21\xba\x37\x77\xb7\x8c\xe4\x0f\x78\x28\xd4\x4c\xd2\xe2\x9f\x6e\x8c\x91\xed\xa1\x8f\x32\x5d\x82\x1f\xfa\xbc\x90\x33\xc2\x7f\x05\x00\x00\xff\xff\xec\xff\x04\xc5\x82\x34\x00\x00") +var _confAppIni = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xb4\x5b\x5b\x6f\x23\xc9\x75\x7e\xef\x5f\x51\xab\xcd\x66\x34\x41\x93\xd4\x65\xa4\xd1\xca\x96\xb3\x14\xd9\x94\xe8\xe1\xcd\xdd\xd4\xcc\xce\x0e\x84\x56\x8b\x5d\x24\x7b\xd5\xec\xe6\x76\x35\xa5\xd1\x22\x08\x6c\xe4\x21\x17\x20\xc8\x43\x82\x04\x01\x82\x20\x79\x48\x0c\x38\x37\x1b\x79\xb1\x13\x27\x2f\x9b\xbc\xcf\xfe\x07\x67\x1d\x3f\xf9\x2f\xe4\x3b\xa7\xaa\xc9\xa6\x46\xab\xec\xe6\xea\x15\xfb\x52\x75\xaa\xce\xfd\x3b\xa7\x7a\xde\x15\x3d\xe7\xb9\xe3\x0a\xfe\xd3\xed\x37\xdb\xad\x97\x62\x78\xda\xf6\x44\xab\xdd\x71\xac\x77\xc5\xa0\xe3\xd4\x3d\x47\x74\xeb\xcf\x1c\xd1\x38\xad\xf7\x4e\x1c\x4f\xf4\x7b\xa2\xd1\x77\x5d\xc7\x1b\xf4\x7b\xcd\x76\xef\x44\x34\xce\xbc\x61\xbf\x8b\x87\xbd\x56\xfb\x44\xcf\xb4\xbe\x21\xea\xf3\xb9\x48\x82\x99\x14\xf9\x34\xc8\x85\x9a\xa6\x37\x4a\xa4\x89\x90\xd7\x32\xbb\x15\xf3\x60\x82\x17\x51\x1e\x4b\xab\x3e\x18\xf8\xbd\x7a\xd7\x11\x47\xe2\x24\x9d\xa8\x43\xfc\x15\x27\x51\x2e\x3c\x99\x5d\x47\x23\x09\x4a\x8d\x69\x90\x60\x38\x9e\x45\x63\x71\x9b\x2e\x44\xb6\x48\x44\x9c\x8e\x82\x38\xbe\xb5\xdc\xb3\x9e\x7f\xe6\x61\xf7\x47\x62\x12\xe5\x18\xed\x44\xf9\x54\x66\x62\x23\x94\xd7\x1b\xb6\xd8\x98\x67\x69\xb8\x21\x52\x3c\xc8\xa5\xca\xf1\x24\x94\xe3\x60\x11\x83\x96\xd2\x63\x98\x02\x58\xa7\x0d\xe0\xde\xb2\x5e\x65\x72\x9e\xaa\x28\x4f\xb3\xdb\x73\xcb\xed\xf7\x87\xe2\xc8\xf2\x1a\x6e\x7b\x30\xf4\x87\x2f\x07\x34\xec\x32\x50\x53\xac\xd4\x34\x94\xea\x3d\xaf\x2d\x46\xd3\x20\x53\x32\xb7\xe8\xc6\x87\xa8\x5c\xcf\xa1\x89\xdf\x10\xad\x34\x1b\x49\xc3\x76\x22\x6f\xc4\x8a\xba\xc8\x53\x71\x29\xc5\x3c\x8b\xae\x83\x5c\x5a\xad\xbe\xdb\x70\xfc\x81\xdb\x7e\x5e\x1f\xd2\x2a\xe3\x20\x56\xc4\xfe\x49\x9c\x5e\x06\xb1\x98\x05\xaf\xa3\xd9\x62\x26\x46\x99\x0c\xf2\x08\x92\x8c\xa3\x19\x44\x92\x8e\xcb\x14\xe7\xe0\x7c\xa1\x64\x66\x8b\xca\xb6\x98\xc9\x20\x51\x22\x49\xf5\x48\xab\x5b\xff\xd0\x6f\xb8\x4e\x7d\xd8\xee\xf7\xfc\x4e\xbb\xdb\xc6\xfe\x30\x0c\x2b\x0c\x82\x7c\x34\x15\x24\x1f\xf1\xc9\x42\x2e\xa4\x88\x65\x32\xc9\xa7\x36\xd6\xbc\x62\xb9\x07\x4a\xc4\x41\x06\x1d\xe0\x02\x6b\xa9\xe8\x12\x8a\x1b\x9c\x75\x3a\xbe\xeb\x7c\xe7\xcc\xf1\x86\x3e\xfe\x9e\x39\x7e\xc7\xe9\x9d\x0c\x4f\x41\x76\x7b\x0b\xff\xb7\x26\xca\xaa\x0c\xe9\xf7\x1c\xcb\x75\x22\xc5\xfb\x1e\x47\x31\x04\xf3\x3a\x97\x89\x02\x3f\x6a\x69\x28\x8b\x38\x14\xd3\xe0\x1a\xdb\x88\x12\x29\x6e\xb2\x60\xae\x44\x94\xe0\xb5\x14\x8d\x34\x94\xdd\x28\xcb\xa0\x4f\x4d\x0f\xe4\x3c\x39\x0f\x32\x08\xb0\x4c\xea\x06\x46\x20\x02\x31\x4a\x67\xb3\xa0\x2a\x86\xe9\x8a\x14\xaf\x8a\x01\xb5\x74\x35\xde\x16\x1f\x2f\xb0\xa5\xf9\x22\x2f\xe6\x58\x9d\x76\xcf\xf1\x5f\xb8\xf5\x81\xef\x7c\x38\x74\xa0\xd3\x7e\xcf\x03\x5f\xd5\xfc\x75\x6e\x57\x67\x21\xfe\x0b\xb2\xab\x30\xbd\x49\xe8\x4e\xff\x5c\x85\x36\x76\xf3\x3c\x88\xa3\x50\xb3\x36\xc3\x66\x0d\x57\xcc\x4e\x00\x55\xcb\xeb\x08\x36\x50\x1f\xb4\x21\x4a\x95\x8e\x22\xec\x3b\xd4\xbb\x05\x7b\x33\x5b\xa8\x05\x34\x01\x29\x07\xf3\xa8\x76\xbd\x5d\x2b\x56\x29\xb3\x79\x1d\xc4\x0b\xd0\xbd\xbc\xd5\x5b\x55\x55\x31\x30\x64\xf3\xe0\x92\x04\x45\x92\xe1\xc5\xc5\x4d\x9a\x3c\xd2\xbe\x47\xae\x43\x02\x5c\x97\xb9\x08\x53\xa9\x68\xc8\x8c\x2c\xc0\x1a\xb8\xce\xf3\xb6\xf3\xa2\x7e\xdc\x71\x7c\x72\x63\x76\x0b\x62\x7b\xb9\x8d\x35\x8d\x2e\xe6\x71\x1a\x84\xa4\xd1\x17\x53\xc9\x4e\x57\xb2\x44\x5e\x48\x8f\x00\x37\x19\x16\x4d\x02\x58\x4d\x58\x2d\xdc\x46\x91\xf9\x5f\xe4\xd9\x42\x5e\x58\x4e\x8f\xd6\x6c\x62\x25\xba\xd7\x16\x39\x15\x63\x68\xd9\x50\xb8\x33\x2b\x0c\xf2\xa0\x96\xcf\xe6\x35\xf3\xfa\x42\x6c\xe2\x4e\x4c\x24\xde\x87\x32\x96\x24\x54\x70\x37\x41\x3c\xc1\x9e\x54\x1e\x64\xf9\x63\x6b\xe8\x74\x07\xfe\xa0\xce\xf6\x79\x97\x00\x96\xec\xc3\x40\xb0\xe0\x2c\xc5\x5e\x11\x59\xd2\x1b\xd0\xc8\x6f\xe7\x52\xd9\x42\x56\x27\x55\x11\xcd\x10\xb3\x6a\x1f\xcf\xe5\xe4\x37\xf4\xe5\x3c\xc1\xd3\x5e\x9a\x4f\xa3\x64\x62\x7c\x2d\x48\x0c\xe3\x34\xd1\xaa\x77\x3a\xfd\x17\x4e\x93\xa3\x86\xc7\xb1\xa0\x1b\xbc\x16\x2a\xfa\x54\x92\xf5\xcb\x00\x9a\xe6\xc1\x50\x59\xf7\x78\x9d\xc3\xdd\x9d\xee\xb1\xa5\x55\x00\xaf\xf5\xda\x1f\x51\x40\xd8\xdd\x31\x24\x92\xc5\xec\x12\xd2\x36\x2e\xa4\xb4\xd7\x33\x23\xeb\x54\xb6\xb7\xd8\xe9\x89\x8e\xc7\x4e\x09\xfd\x2d\x22\x52\x58\x6f\x49\x61\xa9\xb2\xa8\xb0\x55\x52\x16\x99\x0c\xf8\xc7\xce\xd2\x84\xec\x05\xc4\xf1\x94\xa2\xb6\xe5\x7c\x38\xe8\xf4\x5d\x04\xaa\xfa\x09\x82\xbf\xdf\x3b\xeb\x82\xf4\xce\xd6\x1a\xd1\x48\xa9\xc5\x97\x93\x63\x32\x6d\xcf\x3b\xbb\x43\x64\x7b\x9d\xc8\x32\xe0\xc1\xca\x23\x30\xb4\x4e\x24\x18\xe5\xd1\x75\x94\x43\xde\x52\x86\x56\xcb\x81\x9c\x39\xc0\xf5\xbb\x08\x6c\x86\xe0\x9e\xf6\xc7\x05\xcb\xfb\x82\x1c\x4c\x56\x46\x29\x58\xb9\x80\xbe\xf2\x00\xfe\x32\xb1\x29\x5c\x86\xe4\x4c\xf5\x24\xcc\x52\xb8\xee\xb7\x30\xaf\x4a\x3b\xa9\x27\x58\xeb\x9a\xdd\x99\x27\x21\x86\x20\x1a\x6e\x24\x58\x5d\x27\x94\x30\x52\x64\xd2\x1b\xf0\xdf\x38\xd6\x2e\x4e\x2e\x56\x24\x18\x95\xdf\xc6\x64\xcb\x5d\x12\x5d\x94\x8c\xd3\x43\x31\xcd\xf3\xb9\x3a\xac\xd5\x90\x67\x64\x9c\x42\x6d\xaa\x3a\x49\xd3\x49\x2c\xab\x60\xb2\x76\x23\x2f\x61\x8f\x30\x4d\xa9\x6a\x3b\x5b\xdb\x4f\x6a\xdb\xdb\x35\x6f\x31\x9f\xa7\x59\x5e\x81\x2f\x54\x4a\x0c\x54\xa2\xa4\xd2\x98\x66\x29\xee\x77\xdf\xe7\x97\x66\xfb\xd6\xf0\xd4\xe9\x3a\x10\x03\x74\xe4\x77\x9d\x61\xdd\x1f\xd6\x4f\x20\x8a\x8b\x77\xc7\xe3\xbd\xdd\x27\xbb\x17\x77\xac\x50\x1b\x90\x4e\x44\xe0\x67\x1e\x07\xb7\x10\xc7\x66\x58\x58\x11\xb2\xe4\x41\x37\x3a\x7e\xcc\x86\xd4\x6c\x7b\x83\x4e\xfd\xa5\x8e\x0d\xc6\x28\x0f\x76\x0f\x0e\xf6\xb7\x0e\xd8\xb2\xaa\x41\x38\x8b\x92\x75\xfb\xa2\x6c\xf4\xb0\x25\x50\xf6\x5e\x37\x84\xbd\xad\xb7\x4d\xf4\x41\x12\xae\x33\xe8\x3f\x48\x22\x49\x73\x60\x89\x87\x89\xf4\xfa\xc3\x76\xe3\xae\x5d\xef\xad\x91\x49\xb3\x49\x90\x44\x9f\xea\xfc\xfb\x10\xad\xbe\x7b\xf2\xd6\x7e\x58\x42\x24\x8e\x7b\x1c\xf0\x6b\x72\xb7\xbd\x07\x6a\x45\x50\x26\x72\x0e\x07\x57\xd8\x60\x16\xea\x54\x77\x09\x94\x70\xb5\x0a\xf4\x26\xc2\xfa\xc0\x25\x4d\x9f\x73\xdb\x31\x90\xc0\xb3\x12\xca\x28\x92\xf2\x08\x99\x30\x9d\x89\x33\xb7\x53\xf1\x46\x64\x70\xa5\xbd\x15\x61\x91\xe0\x40\x94\x5c\x21\x8b\x4e\x65\x02\x06\x92\x50\x66\x14\x04\xbb\xab\x6c\x45\xb1\x5b\xbe\x0e\x66\x73\xec\x0a\xb8\xcc\x46\xc4\x4c\x80\x8e\x34\x54\xf4\x41\xdd\xf7\x1a\x64\xa9\x3a\x2e\x7e\x15\x44\x00\x03\xd5\x2b\xc9\xb0\x46\x19\x4e\xef\xa3\x7b\x4f\x82\x7c\x08\x07\x68\x12\xf7\x81\x00\xa2\xb6\x4c\xea\x6f\x03\x02\xb6\xf9\x75\x2c\xf0\x65\x30\x00\xba\x81\x96\xaf\x49\xd1\x03\xb7\x3f\xec\xc3\x19\x31\x9c\x7c\xdf\x6a\xf6\xbb\xf5\x76\x0f\x77\x0c\x5f\xa7\xa9\xca\x19\x61\x92\x40\xf0\xf0\xbd\xcd\x62\xfc\x63\x8a\x12\xef\x6d\xea\xe1\xb8\x79\x6f\xf3\x74\x38\x44\xf6\xea\xbb\xc3\xc7\xaa\x66\xf1\x4d\xbd\xd9\x24\xd4\xbb\x55\xe5\xff\xb7\x96\x03\x28\x53\x10\xfa\x42\x16\x95\xd9\x0c\xa1\x98\x98\xe3\x5c\x9a\x44\x70\xfc\x74\x74\x05\x45\x9c\xf5\xda\xc8\x2b\xfd\xc6\x33\x67\xe8\x0f\x1c\xb7\x8b\x70\x0c\xb6\x30\x75\x7f\x7f\x9f\x14\x42\xdb\x13\x9b\xcd\xee\x47\x8f\xc9\x14\x78\x3a\xa1\x73\x20\x8a\xec\x8a\x1c\x7a\xb3\x00\x2a\x9e\x77\x2a\x74\xd0\x7a\x8c\x98\x0c\x1f\x53\x64\x09\x08\x65\x42\x69\x00\x5f\x05\xb9\x76\x82\xbc\x0a\x81\x8e\x02\x05\xb1\x13\x84\x0f\x53\xf2\x49\x00\x62\xca\xb2\x29\xa1\x67\x82\xf8\xe5\xf0\xc9\x30\x87\x26\xd7\xe3\x1c\x1a\x23\xa8\x9b\xc4\xb7\xa6\x04\xc8\x78\x5d\x2d\x65\x10\x02\xd4\x89\x14\x13\x24\x0a\x8a\xaa\x0e\x6c\x8d\x24\xc2\x2f\xab\x56\xa7\xdf\xa8\x03\xac\x3e\x20\xea\xa5\x48\xdf\x96\x36\x90\xbe\x8e\xf4\xbc\xe8\x18\xf0\x7b\x01\x67\x60\xdb\xa7\x25\x83\xeb\x20\x8a\xe9\xb5\x85\xf8\xc8\x5e\x46\xc3\x56\x9e\x55\x80\x23\xb8\xbe\xb8\x5c\x44\x71\x0e\xdf\x2e\xed\x3e\x25\x06\xf2\xaa\xe5\x0d\xeb\xee\x90\xa6\xfa\x88\x87\xcf\xb9\xa0\x29\x28\x34\xd3\x59\x80\x49\xba\x9a\xe2\x50\x8d\x8c\x9c\x2a\x1d\x26\x46\x31\x05\x0a\x70\x65\xd1\xdc\xa5\x81\xad\x8c\x87\x0c\x01\x29\xa4\x40\x0d\xff\x0d\x01\x63\x41\x3b\x3b\x77\xa6\xdd\xb3\xf3\x18\x5e\x0b\xdf\x81\x5e\x78\x66\xa7\xed\xc1\x3b\x0a\x02\xef\x6d\x16\xd4\x78\x07\x6e\x0a\x49\xcd\x09\xd5\xc1\xcd\x89\x46\x18\x65\x72\x44\x48\x71\xad\x22\x7b\xf4\x9b\xb5\xaa\x52\xd3\x47\x36\xd6\xcb\xd9\x50\x74\x5a\x4d\x59\x7a\x8f\x6a\x53\x64\xbc\x1a\xe2\x89\x1e\x55\xe5\x75\x59\xab\x1a\xd7\xb1\xaa\x0c\x5d\x36\x2b\xaa\x95\x30\x5d\xce\x90\x44\x03\x83\x4a\x4d\xd8\xe2\x72\x67\xbe\xb8\x8c\xa3\xd1\x95\xb8\x92\xb7\x58\x81\x2c\x17\x74\x2b\xb8\x9b\xc8\x84\xd0\x7c\x69\x6b\xea\x16\xdc\xce\x4a\xb4\x96\x1c\xe8\x6d\x3c\x73\x5e\xfa\x43\x2a\x85\x96\x5b\x61\x10\x8b\x5d\x94\x48\xae\xf1\xba\x7a\xfe\x08\xc8\x11\x81\x5b\x52\xb0\x93\xc0\x12\xe3\x08\xb7\x29\x24\x70\x33\x8d\xe0\x66\xa4\x1f\xe2\x06\xf1\x77\xb9\xd6\x09\x89\x5a\x83\xd9\x15\x1d\x76\xb5\x30\x1a\x11\xd3\x37\xc6\xec\xd8\xbb\x24\x78\x44\x6a\x66\x3c\x45\xbc\x72\xfa\xe7\xe0\x38\x4a\x33\x20\xe4\x79\x8a\x69\xe0\x9e\x71\x6b\xb7\xdd\x6b\x77\xcf\xba\xcc\x11\x65\x79\x94\xb3\x4e\xa3\x9c\x2b\x0a\x77\x68\x34\x7b\x54\xd8\x12\x4e\x2a\x0a\x6d\x2a\x3b\xac\x7e\xab\xc5\x39\xc6\x54\xd5\x7a\x5a\xe1\x1c\x6e\xff\x6c\x88\x84\xdf\xe9\x9f\x94\x6b\x5c\x99\x48\x8e\xdd\x90\x31\x10\x12\x9e\xfc\x8a\xa8\xd6\x18\xbf\x8f\x24\x8c\xb0\x32\x0a\x8e\xa8\x34\x10\x95\x70\x91\x71\xfa\x3d\x3a\x78\xba\xbf\x35\xdd\x9a\x6d\x29\x51\xa1\x38\x7a\x34\xbb\xa5\x9f\xaa\x49\x3a\x04\xa8\xac\x6f\x10\xac\x47\xb0\x07\x4e\x42\x1c\xaf\xce\xc7\xaf\x8b\x0c\x43\x98\x0a\xd6\xcf\x6f\x28\x64\xbc\x80\xc0\xa9\x41\x41\x8b\x45\x63\x2d\x40\xe4\x41\xb8\xf9\x66\x98\x82\x0a\xf9\x39\x62\x20\x0a\x0c\x92\xa7\x9e\xcf\x13\x4d\xf1\x4e\x42\x7d\xac\xb7\x0d\x58\x97\x28\x15\x8b\xf9\xd5\x48\x6d\xef\x88\x0a\x79\x18\xa8\xf2\xea\x15\xd2\xa9\xbe\x83\x29\x55\x92\x14\xd3\xd4\x57\x9b\x85\x91\xc5\x24\x7a\xa1\xe8\x02\xe5\xa5\xd5\x70\x10\x35\x28\x39\x41\x9a\x3a\x77\xd7\x18\x65\xd6\x8a\x65\x2c\x52\xe3\x7d\x03\x0c\x45\x2c\x7f\x36\xa7\x0a\x22\x26\x50\x4a\xee\x49\x26\x1e\x13\x53\x64\x94\x28\x9e\x00\x9d\xb4\xdc\xc8\x7f\xd7\x9d\x82\x45\x40\x66\x0e\x6b\x83\xb0\x38\x45\xe0\xb1\x7c\x2d\x47\x0b\x08\x98\x82\x1a\x40\xd5\x5d\x17\x35\xf3\xe7\x45\x91\x47\xad\x22\xaa\xc8\xb8\x17\xd4\xac\x03\xb4\x96\xca\x34\xdd\x4a\x8a\x49\x27\xdc\xf5\xe0\x5d\x9e\x7c\xd4\x1e\xa0\x56\x66\x6c\x5c\x60\x1b\x7e\x56\x02\x34\x81\x36\x69\x6e\x35\x8d\x39\xca\x26\x95\x38\x9d\x4c\xa0\x77\x06\xa5\x36\x1c\x2a\xa1\x58\xb8\x41\x51\x45\x43\x7a\x53\xe9\x6c\x58\x9d\x3a\xf7\xb6\x08\x76\x91\xe0\x68\x84\xa5\xb7\x4e\xe8\x6a\x09\x84\xe2\x09\x0a\xa7\x7c\x3a\x53\x2c\x2b\x48\x23\xca\xd6\xfc\x4c\x37\x52\xc4\x26\x45\xaf\xca\x36\xd9\x8e\x29\x1a\x60\x8f\xe4\x6b\x8f\x01\x15\xd4\xb4\x6a\xa6\xf8\x98\xe2\x93\x6b\xaa\x73\xcb\x69\xee\xec\xed\x6d\xbf\xcf\x18\x74\xdf\x72\x1a\x4d\xaf\x2e\x84\xb9\x73\xf9\x9a\xef\xb6\x9e\x1c\x58\xcd\xe5\xed\xf6\xd6\xce\x13\xa0\x0f\x12\xdb\x25\x52\xed\x79\xa9\x1d\x36\xbb\x55\x9f\xc4\xdc\x10\x83\x97\x4c\xe0\xf2\x9a\x61\x3c\x04\x94\xda\xc5\x8b\x28\x7f\xa4\x74\x6a\x1d\x4d\x53\x6a\xbc\x35\x8f\x8b\x7e\x17\xcf\xb5\x4e\xfb\x1e\x05\xf6\xed\x9d\xa7\x8c\x38\xb6\x0f\x77\x77\xb7\xf6\x2d\xd3\xba\x23\x57\xb5\x4c\x1f\x2e\x43\xac\xb7\x06\x75\xcf\x7b\xd1\x2c\x3a\x60\x6b\xcb\x22\x8d\xa3\xa6\x2e\xda\x74\xa6\x88\xc2\xce\x32\xf9\xc9\x02\x31\x55\x6f\x0c\x09\x26\x1a\xdf\x56\xc6\x8b\x38\xde\x40\xcc\xeb\x2c\x5b\x74\x7a\x7c\x41\xb6\xd8\x3f\xcb\x7f\x23\x8f\xc2\xcb\x0d\x2e\xe9\x44\x70\xa9\xd2\x18\x36\xb8\x34\xcf\x84\xd3\x09\xf7\x02\x08\x1c\x18\x74\x62\x95\x1b\x02\xc4\x44\x35\xbc\x84\x04\x4d\x21\x43\x40\x6e\xb4\x80\x86\x6f\xcf\xad\x76\x0f\xc6\xdc\xe9\x20\x70\xad\xc5\xc2\x77\xde\xd1\x7d\x51\xdd\x36\x1d\xf6\xc5\x33\xc7\x19\x88\x97\xfd\x33\x57\xb0\x38\xc8\x9c\x85\x57\x6f\x39\xef\xbc\x63\x79\x4e\xc3\x05\xde\x82\x43\x82\xc0\x3b\xef\x7e\xd0\x6a\x3a\x2f\x5c\xfc\xef\x57\x7f\x6d\x93\xac\x7c\x91\xa7\x64\xa0\x11\x41\xea\x99\xe4\xac\x1b\x06\x88\x0f\x08\x95\xed\x9e\xef\x02\x2d\x77\x8f\x11\x39\x9b\xf5\x97\x04\x3f\x9f\x5a\x8d\x7e\xff\x59\xdb\xe1\xee\x67\x49\x0b\x7e\x70\x23\x15\x99\xab\x79\xbd\x9c\x57\x1e\x13\x25\x48\x8d\x61\xa4\x05\xe9\x52\x73\x52\x51\x2c\x4b\x5f\xdf\x8a\x60\x01\xc5\x24\x79\xe1\x6f\x53\x19\x10\x60\x66\xec\x61\xca\x39\xbe\x41\x55\x02\x90\xe2\x51\xc3\xb2\xff\xe1\x4b\xbf\x7e\x86\xc2\xb3\x07\x5f\xd7\xed\x45\x63\x09\x1f\x56\x5e\x38\xc7\xf4\xaa\x42\x0f\x0c\x2e\x86\xd4\xcf\xad\x7a\x63\xd8\x7e\x4e\x75\x6a\xd3\x01\x70\xc0\x15\x92\x0e\xf2\x02\xb7\x29\x0e\xb6\x40\xdc\x23\x60\xca\x36\xf4\xa5\x83\x10\xb8\x78\x37\x05\x86\x4c\x93\x71\x94\xcd\x84\xac\x00\x2d\xc5\xec\xf2\x99\x9c\x00\xa3\xe8\x84\x01\x9a\x27\x84\x50\x5c\xdf\x01\x2e\xea\xf8\xdc\xae\x76\xbb\x6b\x30\x4b\x6a\x10\xc9\xee\x6d\x26\x63\x01\x32\x2d\x36\x88\x02\x4f\x00\xe7\xa6\x8b\x44\x03\xd2\x55\x5e\x63\xf2\x2e\xf3\x5f\x22\xca\x5b\x9c\x51\x35\xa1\xa2\x09\x67\x4a\x6c\x95\xbb\x75\x41\x72\xcb\xbd\xa3\xaa\x45\x4d\xd4\xb6\x4b\x25\xf5\x49\x0f\x9a\xa6\x1e\x5c\x89\x42\x97\xb8\xa1\x02\x76\x6c\x74\x52\x04\x3c\x2a\x58\x5b\x2f\x7d\xe2\xa6\x3c\x9c\xb2\x56\x28\x73\xcc\x5a\x35\x1c\x00\x99\xa6\x8b\x4b\xee\x32\x40\xff\x51\xae\xd8\xd6\x6b\xba\x4f\x53\xdb\xde\xdf\x2b\x68\x3e\xa4\xd5\xe5\x22\x5f\x36\xb6\xff\x65\x42\x30\xe5\xe9\x28\x98\xe7\x40\xfa\x82\x9b\x2a\xda\xbc\xde\xd2\x92\xa1\xdd\xa8\x0f\x86\x70\xac\xa2\x23\x68\xbd\x42\x45\x31\x4d\xd3\x2b\x0a\x69\xa7\xf8\x15\x79\xa0\xae\xd6\xba\xd5\xd6\x3d\x2d\x68\x8e\xd8\x71\x44\x60\x35\x8f\x66\x92\xf2\x28\x14\x00\x9f\x06\xdc\x51\x56\xd3\x21\xa3\x72\xfd\x61\xbb\xeb\x00\x94\x98\x86\x51\x9d\x95\x1f\x25\xec\xf9\xb2\x84\x08\x68\x77\xde\xb3\xf6\xc0\x1f\x76\x3c\x1f\xf3\xe8\xac\x64\xc5\xe2\xaa\xa0\x9f\x46\x8a\xf1\x27\xb5\x7c\xb2\x99\x66\x93\xba\xb2\xd4\xef\xe3\x7a\xfe\x6e\xd3\x8b\x4a\x79\xa4\x57\x94\x8b\xab\x3e\x68\x41\xf6\x78\x31\x1e\x73\x6e\xe6\x3c\x42\xf5\x39\x2a\xa5\x44\xc6\x36\xd2\x8b\x9c\x9b\xde\x7c\xc4\xb9\xd8\x1c\x8e\x84\xdc\xf3\xbd\x4a\xc0\xc4\x0d\x95\xcf\xfc\x12\xb0\xd1\xe9\x35\xfd\xe3\xb3\x56\x8b\xb0\x97\xd3\xd3\x02\xa2\x7d\x93\x63\xaf\x3a\x3f\xd8\x28\x7b\x8f\x3e\x9b\xf1\xce\x8e\xbf\xed\x34\x34\x9c\x2f\xce\x69\x18\xce\xb3\x4d\xea\x32\x80\xd0\xdb\x8c\x8d\x4d\xcd\xf2\x79\x75\x42\xd7\x64\x68\x87\x7b\x07\x4f\xf1\xee\x3b\xdf\x31\x2f\x3e\xf9\x84\x9f\x3e\xd9\xe7\x96\x4a\x9a\x4b\xbb\xe8\x49\x33\x98\x42\x5d\x6e\xca\xf5\x0d\x0c\x41\x10\xf7\xba\xc3\x81\xa7\x5b\x6b\xc8\xd1\xd4\xa5\xab\xc2\x99\x28\xa3\x73\xa5\x04\x25\x50\x8b\x97\xe7\x62\x25\x12\x00\xe0\x38\x4a\x75\x2a\xf0\x43\x6e\x89\xba\xad\x86\xd8\x7f\xb2\xf5\x7e\x55\xb4\xf5\x42\xa6\x6e\x31\xb8\x41\xad\x08\x41\x46\xbc\x50\x10\xdf\x20\xe0\x2e\xd7\x33\x29\xaf\x84\x78\x4f\x9d\x4e\x9f\xb0\x9a\x36\x56\x9d\x56\x08\x76\x72\x78\xa4\x16\x49\x18\x91\xbe\x10\x3f\xab\xcb\xc0\xc0\x73\x88\x48\x43\xb7\x56\x96\xe3\xc9\xf6\xd7\x09\xae\xd5\x07\x0c\x4e\x75\xd5\x81\x9d\x60\x9c\x4f\xdb\xd1\x51\x9c\xa3\x15\xc7\x2a\x9d\x27\x99\xbd\x32\x78\x4d\xcb\x1c\x57\x45\x9f\x4a\x67\x4a\x8b\x88\x38\x8a\x17\x56\x32\x1e\x57\x28\x24\x41\x58\xa5\x89\x4a\x9b\x78\x61\xde\x3a\x80\xa1\x44\x8c\xc0\x52\x79\x1c\xe5\x7a\x9f\xb0\x67\xbb\x45\xd1\x61\x05\xf3\xef\xc1\xa3\xda\xba\x1f\x02\xa4\x66\xc4\x0a\x91\xb2\x7d\x69\xdc\x1e\x86\x40\x0d\x00\x6b\xa4\xcd\xbd\xdd\x9d\x9d\xaa\x18\x12\x0f\x06\xbb\x71\x9f\x06\x97\x92\xad\x76\x39\x18\x0c\x12\xfb\x17\x1b\x64\xde\x1b\xe2\x9b\xfc\xfa\x83\x52\x6d\xf0\xad\x0b\xa1\xbd\xd3\x6a\xb9\xfd\xae\x69\xce\xd3\x26\x56\x19\x8e\xe3\xfe\x3c\x50\xea\x26\xcd\x42\x83\x6d\xca\xb0\x86\x04\x93\xcb\xd7\x39\xe0\xf4\x2c\xe6\x33\x1b\x6a\x54\x24\x50\xe4\xb5\x34\xc4\xd9\x61\xd3\x04\x55\xf2\x12\xa5\x9e\x0e\xbb\x1d\xbf\xde\x19\x52\xce\xa6\x14\xb8\x14\x9c\xf5\x6a\x84\x08\xb1\x8e\xd9\xe4\x0c\x81\x44\x43\x23\xb8\xe8\x06\xf3\x45\x4f\x79\xe4\x9d\xb3\x4c\x33\xd8\xaa\x37\x11\x3a\x39\xfb\xea\x27\x05\x52\x32\xef\x0d\xfc\x3a\x69\xc0\xd5\xb1\x5d\x84\xe2\x52\x48\x5c\xa3\xb8\xbf\x05\xcc\x03\x4a\xcf\xeb\x94\x5e\xf6\xb7\x0a\x42\x7a\x2f\x1a\x70\x95\xf6\x02\x02\x09\xea\x61\xc6\x0c\xd4\xeb\x31\xba\xc0\x2c\x9e\x70\x88\x3c\x9d\x53\xf7\xe8\x28\x1f\xcd\x6d\x7a\x79\x74\xb8\xbf\xfb\xf4\x7d\xbb\x90\xf0\xd1\x2c\x18\x05\x19\x7c\x20\xbc\x3c\xda\xb2\xe7\x69\x1a\x33\x14\x3e\x42\x98\xb2\xa3\x30\x96\xbe\x89\xe0\x47\x3a\xf5\x17\x2b\x1f\x8a\x8b\x15\x22\xdd\xde\xde\xd9\xde\xbe\x28\xdc\x96\xe0\x06\x77\xbf\xee\x97\x29\x95\x34\x46\xa4\x85\x78\xef\x93\x27\xb2\xdb\xf3\x76\x73\x5d\xa0\x83\x2c\xbd\x8e\x08\x16\x31\xe6\x98\xc0\x81\x89\x6f\xa5\xb7\x85\x21\x87\xec\x9a\xfa\xd0\x2f\xb9\x2d\x46\xdd\x4a\x3a\x9f\xa6\x65\x11\x12\xa5\xe9\xcb\x15\x75\x95\x39\x65\xd2\x47\x5b\xe6\xad\xba\xf8\x7f\x93\x1e\x21\xfa\x43\x60\xc1\x0a\x7e\x2b\x61\x46\x29\xb2\xc6\x0f\x45\xa8\x92\x62\xc3\x48\xca\x88\xb7\xc5\xce\x08\xd6\x1f\x16\xeb\x7d\x50\xec\xd1\xcf\x29\x30\x5e\x2c\xc5\xe4\x9b\xcf\x00\x0c\xa4\x2e\x38\xe1\xfe\xac\x66\x79\x84\xf4\x1d\x49\x0d\x22\x0d\x46\x35\xd0\x34\xf2\xe9\x88\xc5\xd7\x08\x85\x7a\x19\x3a\xa3\x51\xdc\x2a\xe4\x05\x5b\x65\x4c\x63\xcc\xb8\x1c\x2e\x75\xf8\xd1\x04\x81\xb4\xcf\x5c\xe7\x6d\x04\xa2\x50\xc0\xeb\xf5\xd7\xe6\x32\xc6\x30\x0e\x4a\xc0\x53\x53\x59\x1d\x47\x16\x5b\x87\xd7\x90\x1c\x97\xae\xb3\x46\xe4\x00\xb9\x66\xcb\x3a\x69\xf8\x85\xd7\x30\xb0\xa0\x23\x12\x7e\xb1\xa2\x12\x47\x63\xc9\x74\xee\x99\xee\x39\xdc\x88\x05\xdc\x6d\x39\xeb\xf3\xad\x57\xf3\x68\x44\x9d\x47\x80\xe7\xe7\x28\x2a\x5c\xff\x6c\xd0\xe9\xd7\x9b\x6b\x47\x9a\xc1\x35\xfe\x66\x8a\x3f\x9a\x40\xa1\xaa\xa4\x39\x7f\xa1\x68\x89\xb2\x2e\xc5\x83\x8d\x70\x91\xaa\xe9\x22\xdd\xc0\x20\xd8\x7e\x50\x74\xfc\xf5\x54\xa1\x50\x01\x8e\xb0\x33\xd2\x84\xc6\x8f\x80\x8f\xa3\xa4\x3a\xc9\xf4\x00\xc6\x90\xfa\xb2\x66\x9d\xb8\x66\x2b\x1e\xea\x9d\x06\x57\x17\x66\x18\x88\x73\x98\xe6\x2e\xee\x32\x8b\x8f\xe9\x5b\x88\xd0\xb4\x20\xb9\x9f\x43\xe7\x1c\xe3\x31\x1f\x59\xcc\xb8\x53\x5b\x64\xcd\x82\x74\x49\x87\x2d\x19\x72\x93\x28\x2c\xf6\x1a\x43\x93\x8b\x39\xb1\xa8\x44\xb3\xe7\x99\xf2\x7a\x94\x52\x92\x37\x43\x56\xa7\xec\x20\xc0\xf0\x82\x53\x01\x22\x9d\x92\xb2\x60\xef\xe6\xe6\xa6\x1a\x47\x97\x05\x87\x69\x36\xf9\x0a\xdb\xe7\x5d\xdd\xdd\x3f\x49\xf4\xc4\xd0\x21\xa5\x62\x3b\x97\x01\x9d\x7a\x17\xd6\xd5\x72\xe0\x23\xc8\x97\x4d\xff\x0e\x7b\xa8\x39\xf3\x1c\x01\x0d\xf8\x25\x2f\x1f\xa9\xaf\x9e\x7e\xd5\x63\xf4\x7b\x4e\xd1\x4b\x44\xee\x3b\x49\x2f\xbd\xbe\x58\x2b\x88\x4b\x2f\xfe\x87\x27\xe4\x77\x0f\xc1\xef\x1f\xf4\x25\x27\xe3\xf7\x9c\x89\x97\x8e\xc3\x9f\xfc\xef\x4e\xc3\xe9\x08\x8d\x9c\x90\x84\xed\xcd\xe5\x08\xc0\x46\xea\x86\x96\xc9\xdd\x24\x38\x6a\x3f\xdc\x52\x27\x76\x4e\xed\x2c\xc1\x67\xb3\xeb\x54\x01\x4b\x90\x75\x76\x0b\x22\x48\xa7\x06\x5e\x62\xb8\xf9\x52\x83\xd4\x46\x9f\x05\x35\x6c\x71\x96\x44\xaf\x9b\x01\x61\x5f\x77\x71\x79\x6b\xae\x5a\x8d\x83\x9d\x9d\xe2\xf7\x23\x7d\xb1\xb7\x65\x17\xa4\x97\x17\xfa\xd5\xee\xee\xee\xfb\xcb\x8b\x5e\x90\xa4\xb6\x78\x16\xa1\xac\xa2\xee\xb2\x97\x03\xe0\x98\x9f\x2e\x8c\x36\x5a\x5e\x8f\xb2\x94\x33\x36\xdf\xd2\x2c\x93\xcd\x67\xc5\xe1\x74\x51\xa9\x04\x97\x54\x25\x95\xc4\x50\xf2\x93\x49\x1a\x07\xa8\x57\xe1\x1f\xb5\xf9\xd5\xa4\x46\xd2\xab\xbd\x8b\xab\x0a\xf2\x85\xca\x03\xb2\x92\x56\xdf\xed\xd6\x75\xf2\x8d\xd3\x89\xfe\x7e\x6a\xd5\xf9\x2b\x92\x30\x8d\x4f\x75\xd3\xc7\x64\x61\x7a\x94\xd0\x2f\xd5\x0a\xe6\x78\xdd\x74\xb1\xee\xe4\xe5\x62\x6e\x01\x4d\xe9\x74\x8e\xbb\xec\xc5\xf1\xdf\x0c\x23\xa3\x79\xf1\xfd\x8d\xb1\xcd\x62\x9a\xcd\x46\xb2\x61\x99\x6e\x92\x79\xfa\x7f\x59\x68\xdd\xad\xb1\x38\xf4\x17\x8c\x0f\xb3\x60\xc4\xec\x36\xe5\xe5\x62\x42\x17\x6d\xc8\x9e\x7e\x5f\x04\x19\xf3\xef\xd0\xc7\x4d\x74\xd1\xc8\x22\x6a\xc2\xc4\x77\xd8\xd7\x14\xac\x0e\x6a\x6f\x82\x65\x7c\x6b\x15\xd0\xac\x90\x8d\x89\x45\xd4\x9e\x20\x35\x54\xcd\xf3\xf3\x62\xda\x72\x02\x0b\xe3\xee\x68\x7a\xb8\x1a\x6a\x22\xa1\x8e\x3b\x8a\xda\x43\xe9\x8c\x83\x30\x86\x8a\x2c\xcd\x71\xbd\xa9\x6e\xc8\x02\xd9\x05\x53\x0a\x0c\x54\xa5\x19\x4c\xf4\xf8\xed\x44\xdb\xe9\x9f\xf8\x6e\x7f\xa8\xab\x06\x13\xaa\xc8\x91\x39\x8a\xae\xbc\x99\x6a\xbd\x58\x7f\xb1\xb4\x46\x83\x65\xba\xa5\x9d\x99\x8e\x19\xbc\x42\xce\x2c\xe9\x65\x20\x51\xd3\x68\x9c\x3f\x44\x67\xe7\xc0\x7c\xb5\xb3\x2d\xbe\xf9\x4d\xdc\xd9\xd4\x5b\x2d\x85\x18\xdf\x3b\x6d\xb7\xf8\x2c\xec\x80\x93\xf7\x84\xe2\x20\x73\x1d\x22\x83\xdc\xbe\xcd\x57\xb3\xde\xee\xbc\x7c\x8b\x33\xe7\xf5\x3c\xca\x38\x76\xa0\xb2\xc4\x76\x88\x00\xed\x65\x53\x7f\xa8\x24\x82\x31\xf5\x98\x66\xd8\x36\x8d\x58\x17\xd7\x53\xfd\xd9\x45\xd1\xf0\x2b\xa9\x39\xb9\x4f\xc7\x49\x59\x6b\xae\x34\x88\x5c\xc3\x71\x3e\x90\xe7\x8f\x10\x8d\x3c\x66\x40\x23\x88\xbf\xf7\x60\x28\xd7\x01\x86\xeb\xa1\xee\xf7\x01\x44\xba\x5e\xf9\x9c\x66\xa8\xcf\xd5\xb2\x25\x6d\xae\x80\x4b\xd0\x1f\x44\x62\x2c\xf7\x10\xd5\x32\x2a\x33\x6e\x01\x50\x4b\x26\x4f\x07\xd4\xda\xf7\x17\xe1\xfc\x8e\xdd\xd3\x90\xf2\x71\x3a\xee\xb9\x15\x54\xaa\x34\xf4\x81\xf8\x52\x4a\x3a\x92\xdc\x91\x12\x3d\x2c\x4b\xe9\xa1\xf6\xc7\xfa\x06\x9a\x51\x30\x49\xb0\x5c\x34\x2a\x44\x67\x2a\x74\x2e\xb1\x37\x4a\xbd\x92\x87\x47\xde\xe9\x9e\x2c\x5b\x0c\x5f\xb7\xfc\x84\x7e\x25\xc1\xf6\xd5\x39\x46\xba\xca\xcf\x26\xea\xbd\xda\xd8\x2e\x17\xbd\x1b\xf6\xc6\xce\xda\xfd\x39\x69\xc5\xa1\x26\x98\x57\x12\xdc\x32\xf0\xde\x15\xde\xea\x5c\x61\x25\xc0\xf5\xf3\x05\xb1\xd6\xea\xb7\x9a\x6e\x9b\x4f\xb2\x29\xbe\x06\x4a\x7f\x94\xf7\x1a\x69\x45\x6f\xef\x90\x4f\x0a\x0e\xe9\xcf\x07\xcb\xef\x21\xb8\x31\xf9\xeb\xe6\x6b\xda\xa3\x45\x3e\x3e\xb0\xc8\x6e\x38\xa3\x20\x89\x95\xbf\x76\xc9\x16\x49\x42\x91\x86\x1e\x73\x3f\x90\x73\x7f\x94\xd2\x01\x28\xd2\x76\xf5\xed\xcf\x0a\xdd\x45\x52\x1e\xcd\xc6\xcb\x67\x56\x7c\x2c\x80\xe0\x4d\xdf\x02\xd7\x87\x3e\x37\x86\x56\xd0\x8c\x4e\xc8\x42\x4e\x2d\xfc\xe9\xa9\xd2\x3b\xa9\xea\xcf\x1e\x7c\xf3\xf0\xdc\xa2\x2f\x5a\x9a\x67\x0c\xc0\x3e\xd0\xae\xb6\xbd\x35\xb3\x58\x55\xcb\xcf\x22\xa7\x32\x88\xe9\xd4\x95\x4e\x64\x0d\x19\xfa\x00\xc8\xd7\xcf\x7d\x7e\x7e\x1f\xa5\x9d\x27\x53\x6b\xd5\xa7\xdc\xdf\x22\x3c\x56\xcf\x26\x0b\x0d\x0c\xc9\xb9\x39\x11\xc2\x64\x1e\xa1\x78\x12\x63\x35\xba\x7a\x54\xa4\xbe\x4a\x65\x91\x64\x04\xaa\x58\x6a\x95\x4a\x1e\x4c\x14\xa5\x4f\xca\xec\x9c\xff\xd3\x64\x99\xe1\xa3\xbc\xa2\x46\x33\x06\xf9\x61\x3a\x52\xfc\x80\x88\xd5\xb6\xab\x4f\xab\x7b\x56\xdd\x3d\x31\x96\xd2\xe0\x33\xe5\xd2\x07\x9f\x7c\x50\x48\x46\x5f\x88\x87\x79\xf1\x99\x3b\x7a\x07\x01\xdd\x91\x2e\x2b\xe5\x7e\x56\xad\x57\x58\xf8\x7c\xd5\x78\x53\x62\x1a\x4d\xa6\x31\xfe\xe3\x90\x0e\x8f\xa7\x2a\x00\xdc\x66\xa8\xb7\xaf\xa9\x85\xc5\x1f\x90\xa8\x65\xf9\xd0\x6c\xb7\x5a\xfe\x69\xfb\xe4\xb4\x83\xff\x86\x6b\xdd\xf4\x32\x62\xa4\x94\xa3\x96\x60\x96\x28\x97\xd3\x05\x85\x03\x6a\xe8\x71\xbf\x9e\x43\xf1\x49\x7b\xa8\x49\x97\x13\xcf\x5b\x54\xc9\x7a\x83\x51\x4e\x85\x17\x93\x8c\xcb\x67\x86\x0f\xd3\xe4\x4f\xc7\xeb\x8d\x21\x7b\xa4\xd8\xbb\x87\xb8\x06\xb9\xf4\x99\x58\xf2\x00\xad\xd5\x37\x9f\x5b\x0f\x5b\xca\x64\x54\xb2\x93\x60\x42\x7e\xab\xa8\x81\x85\x1b\x64\xfa\xaf\x63\x26\x93\x91\x31\x12\x94\xc0\x2b\x3b\xe9\x2f\x9b\xa5\xf7\x74\xe0\x49\xcb\x55\xf3\xfc\xdc\xea\xb6\x4f\x5c\x9d\x3a\xf7\x29\xbd\xb7\x5d\xb7\xef\xea\x8f\x99\xac\x46\xa7\xdf\x73\xcc\x35\x7d\x77\x6e\x2e\x51\x8f\x73\x67\xca\x7a\xa5\x9d\xf0\xbc\x74\xba\x5c\x6e\x6f\x4d\x51\xd4\x52\x5b\x37\xbf\x91\xd2\x74\xe2\xb5\x07\x36\x9d\x56\xfd\xac\x33\xf4\x4b\x8d\x2e\x3e\x41\x0d\xe6\xfc\x99\xec\xba\xe4\xa3\x5c\xce\x94\x2e\x06\xf5\x27\x13\xba\xfe\x0b\x74\x57\x9f\xc4\xaf\xff\x51\x84\xe7\xf8\xed\xa1\xd3\xf5\x8a\xcf\xfe\xa2\xed\x03\xca\xcc\xf5\x1e\xc9\x04\x40\xaa\x72\xe6\xd9\x9f\x4e\x2b\x8d\x1e\xfd\x3d\x7d\x46\x7f\x87\x2f\xec\x50\x56\x9a\x8e\x3d\xce\x2a\x2d\xd7\x4e\xe2\x4a\xaf\x63\xc7\xd7\x95\xce\x73\x3b\x5b\x54\xdc\x33\xfb\xe3\xa0\xf2\xed\x81\x2d\x55\xc5\xf1\xec\x79\x5e\x39\x76\xed\x79\x5c\x19\x74\xec\xcb\x49\xe5\xf8\xc4\x86\xf4\xdb\x43\x7b\x1c\x55\x5a\x6d\x3b\xcf\x2a\x43\xd7\x1e\xa9\x4a\xe3\x23\x3e\x9c\xa5\x35\x1d\x98\x74\xa4\xa6\xf6\xcf\xff\xfe\xbb\x3f\xfb\x97\x3f\xfc\xd9\x8f\xff\xee\x8b\x3f\xfe\x6d\xfb\xe7\x3f\xf9\xde\x2f\xfe\xe6\x8f\xf4\xcd\x2f\x7f\xfa\x3b\xbf\xf8\xeb\x3f\xfd\xe2\xc7\xff\xf0\xcb\x9f\xfe\xee\xdd\x17\xff\xf1\x07\x3f\xfc\xe2\x27\xff\x4a\x2f\x9a\x72\x91\xab\xd1\xd4\x6e\x65\x41\xf2\xd9\xf7\x83\x48\xd9\x3d\x2a\xc9\x51\x14\x84\xca\xee\x04\x39\xcc\xf0\xdf\xff\x72\x61\xbf\xf9\x8b\xcf\x7f\xeb\xf3\xef\x7d\xfe\xbd\x37\xff\xf4\xe6\xc7\x6f\x7e\x62\x7f\xf1\x27\x7f\xf5\xc5\x9f\xfd\xed\x7f\xfe\xe0\xcf\x6d\x47\xcd\x83\xcf\x7e\x94\xc6\x36\x7d\x58\xb4\x98\x2c\x3e\xfb\x81\xa2\x0f\xc1\x8e\xb3\x40\x45\xf4\x30\x56\x57\x91\xfd\xe6\x47\x9f\xff\xde\x9b\x7f\x7e\xf3\x8f\x6f\x7e\xf8\xf9\x77\x35\x0d\xbb\x9d\x07\x71\x44\x95\x8e\xb7\x00\xf6\x8c\x03\xb8\x53\x62\x0f\x3f\xfb\x69\x76\xf5\xd9\xf7\xa5\xfd\x6f\xbf\x8f\x55\xf3\x28\x09\x2c\x5d\x12\x84\x6c\xe4\x14\x9a\xc9\xb2\xe6\xd1\xe8\x0a\x69\x96\x95\x40\x09\x4c\x52\x09\x73\x6e\xb1\x16\x58\x1b\x16\xab\x02\x97\x9f\x4e\x2d\xd6\x07\x5f\x42\x23\x16\xff\x5d\xde\xb1\x7e\xa8\x30\x96\x16\x2b\x89\x62\x4a\x66\xb1\xa6\x70\x99\xc4\x16\xab\x8b\x3e\xed\xbb\xb6\x58\x67\x74\x12\xbe\xb0\x58\x71\xb8\xfc\x38\xb0\x58\x7b\xb4\xa6\xb2\x58\x85\xb8\xe4\x5f\x8b\x55\x49\x77\xb1\xc5\xfa\xc4\xe5\xe5\xc4\x62\xa5\x52\xc5\x9c\x5b\xac\x59\x5a\x30\xb2\x58\xbd\x1c\x3c\x2d\xd6\x31\x15\x31\xac\x6b\x86\x9a\xc5\xb7\x8c\xb3\x60\x3e\xe7\xef\x79\xd2\x52\xe0\x1c\xc5\x01\xf7\x63\xd9\xdb\xab\x80\xf1\xf1\x51\x94\x44\xd6\xab\xe5\x88\xaa\x99\x46\x07\xdf\x29\xa5\x75\x64\xa2\xd3\xfe\x0b\xbf\x85\x22\x0e\x25\xcd\xb1\xab\x3f\x8a\x28\x45\x53\x8f\xfe\x69\x01\x81\x10\xdd\x9b\xbb\x5b\x46\xf2\x07\x3c\x14\x6a\x26\x69\xf1\x2f\x38\xc6\xc8\xf6\xd0\x47\x99\x2e\xc1\x0f\x7d\x5e\xc8\x19\xe1\xbf\x02\x00\x00\xff\xff\x3e\xad\x7b\x6f\x94\x34\x00\x00") func confAppIniBytes() ([]byte, error) { return bindataRead( @@ -301,7 +301,7 @@ func confAppIni() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "conf/app.ini", size: 13442, mode: os.FileMode(420), modTime: time.Unix(1471215870, 0)} + info := bindataFileInfo{name: "conf/app.ini", size: 13460, mode: os.FileMode(420), modTime: time.Unix(1471215929, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/modules/markdown/markdown.go b/modules/markdown/markdown.go index b24fe2e40..a6cdf222e 100644 --- a/modules/markdown/markdown.go +++ b/modules/markdown/markdown.go @@ -54,7 +54,7 @@ func isLink(link []byte) bool { // based on its extension. func IsMarkdownFile(name string) bool { extension := strings.ToLower(filepath.Ext(name)) - for _, ext := range setting.Markdown.MdFileExtensions { + for _, ext := range setting.Markdown.FileExtensions { if strings.ToLower(ext) == extension { return true } diff --git a/modules/setting/setting.go b/modules/setting/setting.go index 8d1d593bd..fe9c85495 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -114,16 +114,25 @@ var ( ForcePrivate bool MaxCreationLimit int PullRequestQueueLength int + + // Repository editor settings + Editor struct { + LineWrapExtensions []string + PreviewableFileModes []string + } `ini:"-"` + + // Repository upload settings + Upload struct { + Enabled bool + TempPath string + AllowedTypes []string `delim:"|"` + FileMaxSize int64 + MaxFiles int + } `ini:"-"` } RepoRootPath string ScriptType string - // Repo editor settings - Editor struct { - LineWrapExtensions []string - PreviewTabApis []string - } - // UI settings UI struct { ExplorePagingNum int @@ -147,7 +156,7 @@ var ( Markdown struct { EnableHardLineBreak bool CustomURLSchemes []string `ini:"CUSTOM_URL_SCHEMES"` - MdFileExtensions []string + FileExtensions []string } // Picture settings @@ -169,13 +178,6 @@ var ( AttachmentMaxFiles int AttachmentEnabled bool - // Repo Upload settings - UploadTempPath string - UploadAllowedTypes string - UploadMaxSize int64 - UploadMaxFiles int - UploadEnabled bool - // Time settings TimeFormat string @@ -494,17 +496,15 @@ func NewContext() { ScriptType = sec.Key("SCRIPT_TYPE").MustString("bash") if err = Cfg.Section("repository").MapTo(&Repository); err != nil { log.Fatal(4, "Fail to map Repository settings: %v", err) + } else if err = Cfg.Section("repository.editor").MapTo(&Repository.Editor); err != nil { + log.Fatal(4, "Fail to map Repository.Editor settings: %v", err) + } else if err = Cfg.Section("repository.upload").MapTo(&Repository.Upload); err != nil { + log.Fatal(4, "Fail to map Repository.Upload settings: %v", err) } - sec = Cfg.Section("upload") - UploadTempPath = sec.Key("UPLOAD_TEMP_PATH").MustString(path.Join(AppDataPath, "tmp/uploads")) - if !filepath.IsAbs(UploadTempPath) { - UploadTempPath = path.Join(workDir, UploadTempPath) + if !filepath.IsAbs(Repository.Upload.TempPath) { + Repository.Upload.TempPath = path.Join(workDir, Repository.Upload.TempPath) } - UploadAllowedTypes = strings.Replace(sec.Key("UPLOAD_ALLOWED_TYPES").MustString(""), "|", ",", -1) - UploadMaxSize = sec.Key("UPLOAD_FILE_MAX_SIZE").MustInt64(32) - UploadMaxFiles = sec.Key("UPLOAD_MAX_FILES").MustInt(10) - UploadEnabled = sec.Key("ENABLE_UPLOADS").MustBool(true) sec = Cfg.Section("picture") AvatarUploadPath = sec.Key("AVATAR_UPLOAD_PATH").MustString(path.Join(AppDataPath, "avatars")) @@ -553,11 +553,9 @@ func NewContext() { } else if err = Cfg.Section("git").MapTo(&Git); err != nil { log.Fatal(4, "Fail to map Git settings: %v", err) } else if err = Cfg.Section("mirror").MapTo(&Mirror); err != nil { - log.Fatal(4, "Fail to map API settings: %v", err) + log.Fatal(4, "Fail to map Mirror settings: %v", err) } else if err = Cfg.Section("api").MapTo(&API); err != nil { log.Fatal(4, "Fail to map API settings: %v", err) - } else if err = Cfg.Section("editor").MapTo(&Editor); err != nil { - log.Fatal(4, "Fail to map Editor settings: %v", err) } if Mirror.DefaultInterval <= 0 { @@ -572,10 +570,6 @@ func NewContext() { ShowFooterVersion = Cfg.Section("other").Key("SHOW_FOOTER_VERSION").MustBool() HasRobotsTxt = com.IsFile(path.Join(CustomPath, "robots.txt")) - - Markdown.MdFileExtensions = Cfg.Section("markdown").Key("MD_FILE_EXTENSIONS").Strings(",") - Editor.LineWrapExtensions = Cfg.Section("editor").Key("LINE_WRAP_EXTENSIONS").Strings(",") - Editor.PreviewTabApis = Cfg.Section("editor").Key("PREVIEW_TAB_APIS").Strings(",") } var Service struct { diff --git a/public/js/gogs.js b/public/js/gogs.js index 81425503b..03bd304f0 100644 --- a/public/js/gogs.js +++ b/public/js/gogs.js @@ -29,7 +29,7 @@ function initCommentPreviewTab($form) { } var previewTab; -var previewTabApis; +var previewFileModes; function initEditPreviewTab($form) { var $tab_menu = $form.find('.tabular.menu'); @@ -37,7 +37,7 @@ function initEditPreviewTab($form) { previewTab = $tab_menu.find('.item[data-tab="' + $tab_menu.data('preview') + '"]'); if (previewTab.length) { - previewTabApis = previewTab.data('preview-apis').split(','); + previewFileModes = previewTab.data('preview-file-modes').split(','); previewTab.click(function () { var $this = $(this); $.post($this.data('url'), { @@ -662,7 +662,7 @@ var editArea; var editFilename; var smdEditor; var cmEditor; -var mdFileExtensions; +var markdownFileExts; var lineWrapExtensions; // For IE @@ -740,7 +740,7 @@ function initEditor() { if (!editArea.length) return; - mdFileExtensions = editArea.data("md-file-extensions").split(","); + markdownFileExts = editArea.data("markdown-file-exts").split(","); lineWrapExtensions = editArea.data("line-wrap-extensions").split(","); editFilename.on("keyup", function (e) { @@ -762,7 +762,7 @@ function initEditor() { apiCall = extension } - if (previewLink.length && apiCall && previewTabApis && previewTabApis.length && previewTabApis.indexOf(apiCall) >= 0) { + if (previewLink.length && apiCall && previewFileModes && previewFileModes.length && previewFileModes.indexOf(apiCall) >= 0) { dataUrl = previewLink.data('url'); previewLink.data('url', dataUrl.replace(/(.*)\/.*/i, '$1/' + mode)); previewLink.show(); @@ -772,7 +772,7 @@ function initEditor() { } // If this file is a Markdown extensions, we will load that editor and return - if (mdFileExtensions.indexOf(extWithDot) >= 0) { + if (markdownFileExts.indexOf(extWithDot) >= 0) { if (setSimpleMDE()) { return; } diff --git a/routers/repo/branch.go b/routers/repo/branch.go index 453df3745..7b8940a94 100644 --- a/routers/repo/branch.go +++ b/routers/repo/branch.go @@ -64,13 +64,8 @@ func NewBranchPost(ctx *context.Context, form auth.NewBranchForm) { log.Error(4, "branch.GetCommit(): %v", err) } else { pc := &models.PushCommits{ - Len: 1, - Commits: []*models.PushCommit{&models.PushCommit{ - commit.ID.String(), - commit.Message(), - commit.Author.Email, - commit.Author.Name, - }}, + Len: 1, + Commits: []*models.PushCommit{models.CommitToPushCommit(commit)}, } oldCommitID := "0000000000000000000000000000000000000000" // New Branch so we use all 0s newCommitID := commit.ID.String() diff --git a/routers/repo/delete.go b/routers/repo/delete.go index 0aec7f1a1..a0c615a6d 100644 --- a/routers/repo/delete.go +++ b/routers/repo/delete.go @@ -32,13 +32,8 @@ func DeleteFilePost(ctx *context.Context, form auth.DeleteRepoFileForm) { log.Error(4, "branch.GetCommit(): %v", err) } else { pc := &models.PushCommits{ - Len: 1, - Commits: []*models.PushCommit{&models.PushCommit{ - commit.ID.String(), - commit.Message(), - commit.Author.Email, - commit.Author.Name, - }}, + Len: 1, + Commits: []*models.PushCommit{models.CommitToPushCommit(commit)}, } oldCommitID := ctx.Repo.CommitID newCommitID := commit.ID.String() diff --git a/routers/repo/edit.go b/routers/repo/edit.go index d0cacd360..714851098 100644 --- a/routers/repo/edit.go +++ b/routers/repo/edit.go @@ -89,7 +89,7 @@ func editFile(ctx *context.Context, isNewFile bool) { d, _ := ioutil.ReadAll(dataRc) buf = append(buf, d...) - if err, content := template.ToUtf8WithErr(buf); err != nil { + if err, content := template.ToUTF8WithErr(buf); err != nil { if err != nil { log.Error(4, "Convert content encoding: %s", err) } @@ -116,10 +116,10 @@ func editFile(ctx *context.Context, isNewFile bool) { ctx.Data["CommitDirectlyToThisBranch"] = ctx.Tr("repo.commit_directly_to_this_branch", ""+branchName+"") ctx.Data["CreateNewBranch"] = ctx.Tr("repo.create_new_branch", ""+ctx.Tr("repo.new_branch")+"") ctx.Data["LastCommit"] = ctx.Repo.Commit.ID - ctx.Data["MdFileExtensions"] = strings.Join(setting.Markdown.MdFileExtensions, ",") - ctx.Data["LineWrapExtensions"] = strings.Join(setting.Editor.LineWrapExtensions, ",") - ctx.Data["PreviewTabApis"] = strings.Join(setting.Editor.PreviewTabApis, ",") - ctx.Data["PreviewDiffUrl"] = ctx.Repo.RepoLink + "/preview/" + branchName + "/" + treeName + ctx.Data["MarkdownFileExts"] = strings.Join(setting.Markdown.FileExtensions, ",") + ctx.Data["LineWrapExtensions"] = strings.Join(setting.Repository.Editor.LineWrapExtensions, ",") + ctx.Data["PreviewableFileModes"] = strings.Join(setting.Repository.Editor.PreviewableFileModes, ",") + ctx.Data["PreviewDiffURL"] = ctx.Repo.RepoLink + "/preview/" + branchName + "/" + treeName ctx.HTML(200, EDIT) } @@ -176,10 +176,10 @@ func editFilePost(ctx *context.Context, form auth.EditRepoFileForm, isNewFile bo ctx.Data["CommitDirectlyToThisBranch"] = ctx.Tr("repo.commit_directly_to_this_branch", ""+oldBranchName+"") ctx.Data["CreateNewBranch"] = ctx.Tr("repo.create_new_branch", ""+ctx.Tr("repo.new_branch")+"") ctx.Data["LastCommit"] = ctx.Repo.Commit.ID - ctx.Data["MdFileExtensions"] = strings.Join(setting.Markdown.MdFileExtensions, ",") - ctx.Data["LineWrapExtensions"] = strings.Join(setting.Editor.LineWrapExtensions, ",") - ctx.Data["PreviewTabApis"] = strings.Join(setting.Editor.PreviewTabApis, ",") - ctx.Data["PreviewDiffUrl"] = ctx.Repo.RepoLink + "/preview/" + branchName + "/" + treeName + ctx.Data["MarkdownFileExts"] = strings.Join(setting.Markdown.FileExtensions, ",") + ctx.Data["LineWrapExtensions"] = strings.Join(setting.Repository.Editor.LineWrapExtensions, ",") + ctx.Data["PreviewableFileModes"] = strings.Join(setting.Repository.Editor.PreviewableFileModes, ",") + ctx.Data["PreviewDiffURL"] = ctx.Repo.RepoLink + "/preview/" + branchName + "/" + treeName if ctx.HasError() { ctx.HTML(200, EDIT) @@ -293,13 +293,8 @@ func editFilePost(ctx *context.Context, form auth.EditRepoFileForm, isNewFile bo log.Error(4, "branch.GetCommit(): %v", err) } else { pc := &models.PushCommits{ - Len: 1, - Commits: []*models.PushCommit{&models.PushCommit{ - commit.ID.String(), - commit.Message(), - commit.Author.Email, - commit.Author.Name, - }}, + Len: 1, + Commits: []*models.PushCommit{models.CommitToPushCommit(commit)}, } oldCommitID := ctx.Repo.CommitID newCommitID := commit.ID.String() diff --git a/routers/repo/upload.go b/routers/repo/upload.go index fedf4064d..efecc208f 100644 --- a/routers/repo/upload.go +++ b/routers/repo/upload.go @@ -24,10 +24,10 @@ const ( func renderUploadSettings(ctx *context.Context) { ctx.Data["RequireDropzone"] = true - ctx.Data["IsUploadEnabled"] = setting.UploadEnabled - ctx.Data["UploadAllowedTypes"] = setting.UploadAllowedTypes - ctx.Data["UploadMaxSize"] = setting.UploadMaxSize - ctx.Data["UploadMaxFiles"] = setting.UploadMaxFiles + ctx.Data["IsUploadEnabled"] = setting.Repository.Upload.Enabled + ctx.Data["UploadAllowedTypes"] = strings.Join(setting.Repository.Upload.AllowedTypes, ",") + ctx.Data["UploadMaxSize"] = setting.Repository.Upload.FileMaxSize + ctx.Data["UploadMaxFiles"] = setting.Repository.Upload.MaxFiles } func UploadFile(ctx *context.Context) { @@ -154,13 +154,8 @@ func UploadFilePost(ctx *context.Context, form auth.UploadRepoFileForm) { log.Error(4, "branch.GetCommit(): %v", err) } else { pc := &models.PushCommits{ - Len: 1, - Commits: []*models.PushCommit{&models.PushCommit{ - commit.ID.String(), - commit.Message(), - commit.Author.Email, - commit.Author.Name, - }}, + Len: 1, + Commits: []*models.PushCommit{models.CommitToPushCommit(commit)}, } oldCommitID := ctx.Repo.CommitID newCommitID := commit.ID.String() @@ -184,7 +179,7 @@ func UploadFilePost(ctx *context.Context, form auth.UploadRepoFileForm) { } func UploadFileToServer(ctx *context.Context) { - if !setting.UploadEnabled { + if !setting.Repository.Upload.Enabled { ctx.Error(404, "upload is not enabled") return } @@ -203,10 +198,9 @@ func UploadFileToServer(ctx *context.Context) { } fileType := http.DetectContentType(buf) - if len(setting.UploadAllowedTypes) > 0 { - allowedTypes := strings.Split(setting.UploadAllowedTypes, ",") + if len(setting.Repository.Upload.AllowedTypes) > 0 { allowed := false - for _, t := range allowedTypes { + for _, t := range setting.Repository.Upload.AllowedTypes { t := strings.Trim(t, " ") if t == "*/*" || t == fileType { allowed = true @@ -233,7 +227,7 @@ func UploadFileToServer(ctx *context.Context) { } func RemoveUploadFileFromServer(ctx *context.Context, form auth.RemoveUploadFileForm) { - if !setting.UploadEnabled { + if !setting.Repository.Upload.Enabled { ctx.Error(404, "upload is not enabled") return } diff --git a/routers/repo/view.go b/routers/repo/view.go index 08ee16df1..bbb5e96a4 100644 --- a/routers/repo/view.go +++ b/routers/repo/view.go @@ -257,7 +257,7 @@ func Home(ctx *context.Context) { ctx.Data["LastCommitUser"] = models.ValidateCommitWithEmail(lastCommit) if ctx.Repo.IsWriter() && ctx.Repo.IsViewBranch { ctx.Data["NewFileLink"] = newFileLink + "/" + treename - if setting.UploadEnabled { + if !setting.Repository.Upload.Enabled { ctx.Data["UploadFileLink"] = uploadFileLink + "/" + treename } } diff --git a/templates/repo/edit.tmpl b/templates/repo/edit.tmpl index ba75a988b..49a3df784 100644 --- a/templates/repo/edit.tmpl +++ b/templates/repo/edit.tmpl @@ -30,14 +30,14 @@