diff --git a/cmd/web.go b/cmd/web.go index e41bc9d47..7f97157e2 100644 --- a/cmd/web.go +++ b/cmd/web.go @@ -339,15 +339,15 @@ func runWeb(ctx *cli.Context) error { defer fr.Close() ctx.Header().Set("Cache-Control", "public,max-age=86400") + fmt.Println("attach.Name:", attach.Name) ctx.Header().Set("Content-Disposition", fmt.Sprintf(`inline; filename="%s"`, attach.Name)) - // Fix #312. Attachments with , in their name are not handled correctly by Google Chrome. - // We must put the name in " manually. - if err = repo.ServeData(ctx, "\""+attach.Name+"\"", fr); err != nil { + if err = repo.ServeData(ctx, attach.Name, fr); err != nil { ctx.Handle(500, "ServeData", err) return } }) m.Post("/issues/attachments", repo.UploadIssueAttachment) + m.Post("/releases/attachments", repo.UploadReleaseAttachment) }, ignSignIn) m.Group("/:username", func() { @@ -490,7 +490,7 @@ func runWeb(ctx *cli.Context) error { // So they can apply their own enable/disable logic on routers. m.Group("/issues", func() { m.Combo("/new", repo.MustEnableIssues).Get(context.RepoRef(), repo.NewIssue). - Post(bindIgnErr(form.CreateIssue{}), repo.NewIssuePost) + Post(bindIgnErr(form.NewIssue{}), repo.NewIssuePost) m.Group("/:index", func() { m.Post("/label", repo.UpdateIssueLabel) @@ -538,7 +538,7 @@ func runWeb(ctx *cli.Context) error { // e.g. /org1/test-repo/compare/master...org1:develop // which should be /org1/test-repo/compare/master...develop m.Combo("/compare/*", repo.MustAllowPulls).Get(repo.CompareAndPullRequest). - Post(bindIgnErr(form.CreateIssue{}), repo.CompareAndPullRequestPost) + Post(bindIgnErr(form.NewIssue{}), repo.CompareAndPullRequestPost) m.Group("", func() { m.Combo("/_edit/*").Get(repo.EditFile). diff --git a/conf/app.ini b/conf/app.ini index 99f838053..315d305d0 100644 --- a/conf/app.ini +++ b/conf/app.ini @@ -114,6 +114,19 @@ FILE_MAX_SIZE = 3 ; Maximum number of files per upload MAX_FILES = 5 +; Attachment settings for releases +[release.attachment] +; Whether attachments are enabled. Defaults to `true` +ENABLED = true +; Path for attachments. Defaults to `data/attachments` +PATH = data/attachments +; One or more allowed types, e.g. image/jpeg|image/png +ALLOWED_TYPES = */* +; Max size of each file. Defaults to 32MB +MAX_SIZE = 32 +; Max number of files per upload. Defaults to 10 +MAX_FILES = 10 + [markdown] ; Enable hard line break extension ENABLE_HARD_LINE_BREAK = false @@ -273,6 +286,7 @@ DISABLE_GRAVATAR = false ; This value will be forced to be false in offline mode or Gravatar is disbaled. ENABLE_FEDERATED_AVATAR = true +; Attachment settings for issues [attachment] ; Whether attachments are enabled. Defaults to `true` ENABLE = true @@ -280,9 +294,9 @@ ENABLE = true PATH = data/attachments ; One or more allowed types, e.g. image/jpeg|image/png ALLOWED_TYPES = image/jpeg|image/png -; Max size of each file. Defaults to 32MB +; Max size of each file. Defaults to 4MB MAX_SIZE = 4 -; Max number of files per upload. Defaults to 10 +; Max number of files per upload. Defaults to 5 MAX_FILES = 5 [time] diff --git a/gogs.go b/gogs.go index ce0d7aea1..281ad982c 100644 --- a/gogs.go +++ b/gogs.go @@ -16,7 +16,7 @@ import ( "github.com/gogits/gogs/modules/setting" ) -const APP_VER = "0.10.17.0313" +const APP_VER = "0.10.18.0313" func init() { setting.AppVer = APP_VER diff --git a/models/attachment.go b/models/attachment.go index a270b7512..4ba6adcb0 100644 --- a/models/attachment.go +++ b/models/attachment.go @@ -110,7 +110,7 @@ func GetAttachmentByUUID(uuid string) (*Attachment, error) { } func getAttachmentsByIssueID(e Engine, issueID int64) ([]*Attachment, error) { - attachments := make([]*Attachment, 0, 10) + attachments := make([]*Attachment, 0, 5) return attachments, e.Where("issue_id = ? AND comment_id = 0", issueID).Find(&attachments) } @@ -120,15 +120,25 @@ func GetAttachmentsByIssueID(issueID int64) ([]*Attachment, error) { } func getAttachmentsByCommentID(e Engine, commentID int64) ([]*Attachment, error) { - attachments := make([]*Attachment, 0, 10) + attachments := make([]*Attachment, 0, 5) return attachments, e.Where("comment_id=?", commentID).Find(&attachments) } -// GetAttachmentsByCommentID returns all attachments if comment by given ID. +// GetAttachmentsByCommentID returns all attachments of a comment. func GetAttachmentsByCommentID(commentID int64) ([]*Attachment, error) { return getAttachmentsByCommentID(x, commentID) } +func getAttachmentsByReleaseID(e Engine, releaseID int64) ([]*Attachment, error) { + attachments := make([]*Attachment, 0, 10) + return attachments, e.Where("release_id = ?", releaseID).Find(&attachments) +} + +// GetAttachmentsByReleaseID returns all attachments of a release. +func GetAttachmentsByReleaseID(releaseID int64) ([]*Attachment, error) { + return getAttachmentsByReleaseID(x, releaseID) +} + // DeleteAttachment deletes the given attachment and optionally the associated file. func DeleteAttachment(a *Attachment, remove bool) error { _, err := DeleteAttachments([]*Attachment{a}, remove) diff --git a/models/issue.go b/models/issue.go index 8bc5914c6..3caa3b8fe 100644 --- a/models/issue.go +++ b/models/issue.go @@ -741,7 +741,7 @@ func newIssue(e *xorm.Session, opts NewIssueOptions) (err error) { return opts.Issue.loadAttributes(e) } -// NewIssue creates new issue with labels for repository. +// NewIssue creates new issue with labels and attachments for repository. func NewIssue(repo *Repository, issue *Issue, labelIDs []int64, uuids []string) (err error) { sess := x.NewSession() defer sessionRelease(sess) diff --git a/models/release.go b/models/release.go index 081923700..47771bc1a 100644 --- a/models/release.go +++ b/models/release.go @@ -39,6 +39,8 @@ type Release struct { Created time.Time `xorm:"-"` CreatedUnix int64 + + Attachments []*Attachment `xorm:"-"` } func (r *Release) BeforeInsert() { @@ -74,6 +76,13 @@ func (r *Release) loadAttributes(e Engine) (err error) { } } + if r.Attachments == nil { + r.Attachments, err = getAttachmentsByReleaseID(e, r.ID) + if err != nil { + return fmt.Errorf("getAttachmentsByReleaseID [%d]: %v", r.ID, err) + } + } + return nil } @@ -150,8 +159,8 @@ func (r *Release) preparePublishWebhooks() { } } -// CreateRelease creates a new release of repository. -func CreateRelease(gitRepo *git.Repository, r *Release) error { +// NewRelease creates a new release with attachments for repository. +func NewRelease(gitRepo *git.Repository, r *Release, uuids []string) error { isExist, err := IsReleaseExist(r.RepoID, r.TagName) if err != nil { return err @@ -163,10 +172,27 @@ func CreateRelease(gitRepo *git.Repository, r *Release) error { return err } r.LowerTagName = strings.ToLower(r.TagName) - if _, err = x.Insert(r); err != nil { + + sess := x.NewSession() + defer sessionRelease(sess) + if err = sess.Begin(); err != nil { + return err + } + + if _, err = sess.Insert(r); err != nil { return fmt.Errorf("Insert: %v", err) } + if len(uuids) > 0 { + if _, err = sess.In("uuid", uuids).Cols("release_id").Update(&Attachment{ReleaseID: r.ID}); err != nil { + return fmt.Errorf("link attachments: %v", err) + } + } + + if err = sess.Commit(); err != nil { + return fmt.Errorf("Commit: %v", err) + } + // Only send webhook when actually published, skip drafts if r.IsDraft { return nil @@ -254,15 +280,36 @@ func SortReleases(rels []*Release) { } // UpdateRelease updates information of a release. -func UpdateRelease(doer *User, gitRepo *git.Repository, r *Release, isPublish bool) (err error) { +func UpdateRelease(doer *User, gitRepo *git.Repository, r *Release, isPublish bool, uuids []string) (err error) { if err = createTag(gitRepo, r); err != nil { return fmt.Errorf("createTag: %v", err) } r.PublisherID = doer.ID - if _, err = x.Id(r.ID).AllCols().Update(r); err != nil { + + sess := x.NewSession() + defer sessionRelease(sess) + if err = sess.Begin(); err != nil { return err } + if _, err = sess.Id(r.ID).AllCols().Update(r); err != nil { + return fmt.Errorf("Update: %v", err) + } + + // Unlink all current attachments and link back later if still valid + if _, err = sess.Exec("UPDATE attachment SET release_id = 0 WHERE release_id = ?", r.ID); err != nil { + return fmt.Errorf("unlink current attachments: %v", err) + } + + if len(uuids) > 0 { + if _, err = sess.In("uuid", uuids).Cols("release_id").Update(&Attachment{ReleaseID: r.ID}); err != nil { + return fmt.Errorf("link attachments: %v", err) + } + } + + if err = sess.Commit(); err != nil { + return fmt.Errorf("Commit: %v", err) + } if !isPublish { return nil diff --git a/modules/bindata/bindata.go b/modules/bindata/bindata.go index c24be3270..8a074a9d4 100644 --- a/modules/bindata/bindata.go +++ b/modules/bindata/bindata.go @@ -292,7 +292,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _confAppIni = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xb4\x7b\x5b\x8f\x1b\x49\x96\xde\x7b\xfc\x8a\xd3\x35\x1e\xb7\x64\x24\x59\x17\xa9\xaa\xab\x55\x53\x83\x4e\x91\x49\x16\x57\xbc\x75\x66\x52\x97\x16\x0a\xa9\xa8\xcc\x20\x19\x53\xc9\x8c\xec\x8c\xc8\x2a\xb1\x61\x2c\x66\xe0\x07\x5f\x60\xc3\x0f\xb6\x77\x61\x60\x61\x78\x60\xd8\x0b\xac\xbd\xf6\x2c\x6c\x03\x33\xe3\x59\xfb\xa1\xbd\xef\xd2\x7f\x58\xf7\x7a\x0d\x1b\xfb\x17\x8c\x73\x22\x93\x4c\x4a\x25\x6d\x0f\x60\x4b\x40\x31\x19\x19\x71\x22\xe2\x5c\xbf\x73\x22\xf8\x03\xf8\xe4\x93\x4f\x60\xec\x3d\xf5\x7c\xa0\x3f\xa3\x49\x77\xd0\x7b\x01\xe1\xc5\x20\x80\xde\x60\xe8\xe1\x7b\x66\x7b\x4d\x87\x9e\x1b\x78\x30\x72\x9f\x78\xd0\xb9\x70\xc7\x7d\x2f\x80\xc9\x18\x3a\x13\xdf\xf7\x82\xe9\x64\xdc\x1d\x8c\xfb\xd0\x99\x05\xe1\x64\x04\x9d\xc9\xb8\x37\xe8\xbf\x4b\x61\xd0\x83\x17\x93\x19\xb8\xbe\x07\x53\xb7\xf3\xc4\xed\xe3\x88\xa9\x3f\x79\x3a\xe8\x7a\xbe\xb3\x33\xc1\xe4\x19\x52\x9e\xbe\x80\x49\x0f\x06\x21\xd1\x60\x67\xe0\xe6\x39\x64\x7c\x25\xc0\x2c\xb9\x01\xbd\x54\xb7\x1a\x54\x06\xe2\x46\x14\x6b\xc8\xf9\x42\x80\x91\x26\x15\xcc\x9d\x4e\xa3\xb1\x3b\xf2\xe0\x1c\xfa\x6a\xa1\xd9\x19\x84\x4b\x61\x47\xaa\x39\x98\xa5\x00\xbd\xd6\x46\xac\xa0\xd4\xa2\xb0\xc4\x8a\x32\xd3\xb6\xb3\x3f\x1b\x47\xb3\xc0\xf3\xe1\x1c\x16\xd2\xb0\x33\xf0\xa4\x59\x8a\x02\xf6\x12\x71\xb3\xe7\xc0\x5e\x5e\xa8\x64\x0f\x54\x01\x7b\x46\x68\xb3\x47\xfd\x47\x93\x2e\x4e\x96\x88\x1b\xc6\x5e\x6a\x51\xdc\x88\xe2\x92\x4d\xfd\x49\x38\xe9\x4c\x86\x70\x0e\x4b\x63\x72\xd6\x9d\x8c\xdc\xc1\x18\xce\x21\x55\x31\x4f\x97\x4a\x1b\xe6\x4f\x26\x61\x34\xf3\xb1\xcb\x0f\xef\xd5\xfd\xef\xeb\x47\xfb\xfb\x3f\xbc\x67\xbb\xdf\xd7\x8f\x7e\x78\xef\x22\x0c\xa7\xd1\x74\xe2\x87\xf7\xf5\x3e\xa3\x2f\x6e\xb7\x8b\x0b\x3c\x68\xd3\x7f\xb6\xe9\x00\xe7\xf0\xe0\xe0\xe0\x80\x9d\xc1\x54\x14\x2b\xa9\xb5\x54\x19\xcc\x55\x01\x65\x26\x5f\x83\x56\xf1\xb5\x30\x6c\x36\x1e\x3c\x8f\x82\x49\xe7\x89\x17\x46\x53\xcf\x1f\x0d\x82\x60\x30\xc1\x85\x9d\x9c\x9c\xb0\x33\x18\xe2\xf2\xe0\x5e\x77\xf4\xd5\x7d\xc0\xb5\xe1\x70\xe4\x0c\xdc\xaa\xe2\x5a\x14\x1a\xee\xe9\x32\x5e\x02\xd7\x10\x04\x17\x50\xe6\x09\x37\xe2\x3e\xf0\x38\x16\x5a\xcb\x6c\x01\xb7\xe2\x0a\x90\x07\x32\x16\x6d\x76\x06\x83\x0c\x56\x4a\x1b\x88\xb9\x16\x1a\xd6\xaa\x84\x44\x41\xa6\x0c\x64\x42\x24\x60\x14\xc4\x4b\x9e\xa1\xe8\x96\x02\x12\x31\xe7\x65\x6a\xe0\x86\xa7\x25\x0d\x76\x53\x23\x0a\x90\x06\x54\x96\xae\x41\xce\x71\x7c\x41\xf3\x5a\x2e\x43\xa6\x12\x01\x52\x13\x41\x12\x2c\x0a\x99\x6b\x40\x8e\xd0\xcb\x36\x1b\x4e\x3a\xee\x30\xfa\x18\xab\x37\x2c\x7d\x9f\xdb\x67\xd0\x95\x9a\x5f\xa5\x82\x26\x9d\x0b\x6e\xca\x42\xc0\xed\x52\x64\x34\x25\xbf\xe1\x32\xc5\xd7\xac\x3b\x08\xdc\xc7\x43\x2f\xc2\x6e\xe7\x30\xe7\xa9\x16\xec\x0c\x9e\x2d\x05\x29\x4f\xa9\x05\x5c\x95\x32\x35\x32\x6b\xae\x5e\xe1\x06\x4c\x9b\x05\xa1\xeb\x87\x38\x34\x0a\x3c\xff\x29\xe9\x5e\x4d\xa1\xab\x56\x5c\x66\x95\xda\x2b\xb8\x12\x20\x5e\xe7\x4a\x8b\x04\x2a\x52\x71\xaa\x32\x81\x82\x62\x38\x7e\xa3\x64\x5b\x05\x42\x65\x50\x85\x81\xac\x5c\x5d\xa1\xba\xff\xf5\x44\x2a\x4d\x3a\x3a\x62\x67\x30\x16\x06\xe5\x0e\x32\x33\xa2\x98\xf3\xf8\xce\x7d\xa4\x52\x1b\x91\xa1\x31\xd2\xf8\xe1\x20\x08\xbd\x71\x74\x31\x09\xc2\x86\x92\xee\x2e\xe3\x7b\x53\xa9\x16\xf3\xc3\x7b\xf5\xca\x68\x47\xbe\x52\x06\x72\x6e\x96\x68\xd1\x48\x23\x91\x85\x88\x8d\x2a\xd6\xce\x46\x8b\xa4\x86\x4f\x7f\x77\xbf\xad\xf5\xf2\x53\x07\xae\x4a\x43\xca\xb7\xe4\x37\xc4\x48\x94\xc8\xa7\xfb\x4b\xb5\x12\xfb\x0b\x69\x6c\xaf\x36\xcd\x4b\x9a\x32\x75\xc3\x0b\x38\x67\x67\xd0\x59\x2a\xa5\xad\x76\xc6\x32\x5f\xa2\xfe\x1b\x05\xba\xcc\x73\xdc\x0c\xda\x06\xf1\x4f\x65\x99\x88\x8d\x54\x99\x66\x5b\x31\x46\x9d\xc1\xf4\xc2\xf3\x03\x38\x07\x2e\xf4\xe1\xd1\x69\x2b\x36\x85\x43\xcf\x9f\x1f\x6d\x9e\x8f\x8e\x4f\xb6\xed\x47\xa7\xad\x45\xbc\xfa\x42\xe5\x22\xd3\x7a\xd9\x8e\xd5\xca\x01\x5e\xc4\x73\x55\x16\x47\xc7\x27\x9b\xe7\xc3\xa3\x53\x52\xcd\x6a\xcf\x64\x46\x85\xe0\x46\x80\x11\xab\x5c\x15\xbc\x58\xc3\x5c\xa6\x42\x5b\x55\x45\x4f\x05\x79\x79\x95\xca\xf8\x1a\xae\xc5\x1a\x4a\xb2\x54\xad\x97\xad\x6b\xb1\x5e\x88\xcc\x61\x67\x4d\xb6\x55\xee\x71\x4b\x6b\xc3\x5d\xcb\xa2\x27\xde\x8b\x28\xf4\x82\x06\x9b\xa6\x28\x0a\x64\xcc\x96\xe4\x8e\x1c\xb6\xed\x9f\x02\xcf\x12\x48\x05\x3a\x70\x91\xa6\x30\x97\x59\x02\xaa\x34\x70\xbb\x94\xf1\x12\x50\x0f\x71\x37\x3c\x4d\x37\x73\xf5\x51\x0d\x68\xa6\x06\x7d\x72\x2d\x89\x8c\x71\xd3\xb7\x95\x99\x91\x37\x11\xf1\x35\xac\x64\x26\x57\xe5\x8a\xf6\xaa\xe5\x37\x02\x6e\xa5\x59\x42\xac\x8a\x42\xe8\x5c\x65\x09\xee\xde\xac\x73\xc1\x46\x83\xf1\x60\x34\x1b\xd1\x8e\x82\xc1\x57\x5e\xd4\xb9\xf0\x3a\x4f\x9a\xf6\x57\x99\x7f\xa7\x3b\xc6\x40\x93\xa1\xc5\x54\x31\x60\xa5\x12\xc1\x26\xbd\xde\x70\x30\xf6\xea\x10\x60\x87\xd5\xce\xc0\x9f\xcc\x42\xcf\x8f\x86\x93\x7e\x83\x62\x5f\x64\xa2\xc0\x55\x6b\x23\x72\xfd\x88\x9d\xc1\xdf\x80\xf6\xfe\x02\x3d\x6c\x2c\x0a\x03\xad\x98\x9f\x9b\xa2\x14\xd0\x4a\xca\x82\xa3\x4e\x9d\x9f\x7e\x76\x72\xb0\x3c\x58\x1d\x68\x68\x61\xdc\x38\x5f\xad\xf1\xa3\x2d\x5e\xf3\x55\x9e\x0a\xd4\x12\x76\xc6\xce\x60\x52\xc0\xbc\x50\x2b\xe0\xd0\xce\xe7\xaf\x49\x01\xc8\xd0\x0b\x23\x12\xfb\x06\xd5\xf8\x99\xcc\x12\x8c\x9c\x38\x99\x9c\x5b\x06\x6a\xa3\x0a\x01\xf7\x12\xc5\xce\xc8\xaf\xcd\x55\xb1\x10\x06\xf9\x69\xc7\xd3\xc0\xbc\x90\x37\xd8\xf9\x5a\xac\xef\xdb\x65\x5b\x35\x4d\x21\xbf\x8e\xf5\xe1\x11\xb4\x64\x46\x54\x69\xf6\x16\xca\xd4\x7e\x13\x2b\x68\x65\xea\x5a\xac\xf5\xf7\x1b\x75\x2d\xd6\xf5\x20\x7c\xa1\xf1\x21\x11\x9a\x75\x3c\x3f\x8c\x08\x54\x9c\x43\x5c\x6a\xa3\x56\xfb\x18\x59\xf5\x7e\x3d\x0d\x43\x31\xde\xd5\xa1\xa2\xc8\xce\x60\x96\xe7\xe8\x6a\xc4\x8d\x48\x09\x0c\x88\x55\x9e\xe2\xa6\x50\x29\xb5\xe1\x46\xc6\x96\x6f\xe8\x5b\x76\x8d\x82\x58\x80\x6a\x7e\xbb\x14\x85\xb0\x21\x51\x6a\x10\xaf\x45\x5c\x1a\x91\xa0\x13\x0f\x07\x9d\x77\xdc\x47\xb7\x1a\x4f\x03\xd1\x5b\x20\x86\x49\xb8\xe1\x04\x52\xba\x6e\xe8\xd6\x9a\x4d\x8d\x84\x71\x52\x94\x09\x06\x6e\xbb\xca\xfe\x57\x83\x69\xed\x70\x98\x37\x26\xc5\xa2\xb6\xad\x4a\x0d\xb9\x55\x69\xc2\x40\x73\x8a\x2a\x59\x2b\x55\x8b\x85\x48\x08\xe3\x68\x07\x62\x9e\xa1\xdf\xdf\x43\x8f\x67\xe1\x8b\x78\x9d\xa7\xaa\x10\x7b\x6c\xe8\x12\x78\x8b\xa6\x6e\x1f\x19\x87\x3d\x18\x7b\x59\x88\x5c\x69\x89\x36\x7f\xb9\xe3\x6f\x91\x3c\xaa\x0b\xce\xb7\xe9\x23\x85\xfe\x54\xd3\x16\x76\xcc\x7e\xef\x77\xf7\x7f\x84\xf3\x63\xf4\xfa\x31\xa9\x78\xab\x39\x64\x8f\x00\x10\xf1\x09\x01\x9a\x8e\x0b\x99\x1b\xb2\xcb\x3a\x24\x54\xdb\xd6\x0e\x68\xb5\x12\x46\xae\x84\x86\x58\x95\x69\x42\x7b\xd1\xcb\x3d\x16\x74\xfc\xc1\x34\x8c\xc2\x17\x53\x5c\xfb\x15\xd7\xcb\x06\xd7\xdd\x71\x30\x40\x7c\x51\x68\x61\x7d\x35\xcf\xa0\xcc\x0a\x11\xab\x45\x26\xbf\x11\x49\xfd\x8e\x61\xc7\xa8\x73\xe1\xfa\x81\x67\xd7\xd3\x53\x45\x2c\x2a\x64\x99\x89\xdb\xed\x4e\xd7\x55\x00\xad\x8c\x81\xf5\x26\x7e\xc7\x8b\xa6\xfe\xe0\xa9\x1b\x7a\x4d\x2b\x4f\xd5\x15\x4f\x61\xc5\x5f\x93\x23\x22\xef\x4c\x32\x95\x2b\x84\x33\xf3\x26\xc5\xdc\x22\x84\xc2\x81\xd6\x21\xac\x04\xcf\x10\xcf\xd8\x9e\x6c\xe4\x3e\x8f\x3a\xbe\xe7\x86\x83\xc9\x38\x1a\x0e\x46\x03\x0c\x86\xad\x43\x76\x06\x23\x59\x14\x28\x8b\x75\x16\xc3\xd7\xa5\x28\x05\xa4\x22\x5b\x98\xa5\x03\x32\xc3\xe9\xb4\x40\xc0\xb4\xda\xf6\x22\x97\x6f\x38\x1a\x14\x42\x2e\x99\x2d\xd8\x68\xe0\xfb\x13\x3f\xfa\x72\xe6\xcd\xbc\x68\xe8\x8d\xfb\xa4\x8a\x87\x15\x84\xe4\x26\x5e\xda\xd8\xf1\x61\xfa\x79\x99\xa6\x50\x88\xaf\x4b\x0a\x31\x9b\x11\x77\xcc\x35\x9d\x0d\x87\x91\xef\x7d\x39\xc3\xc0\xf1\x81\x19\x0b\x31\x17\x45\x21\x12\x18\xca\x58\x64\x08\x18\x8d\x82\x3c\x45\xd8\xc1\xad\x13\x32\x2a\xaf\x41\x3c\xe2\x05\x44\x28\x08\x8d\x56\xa5\x36\xb0\xa2\xe9\xc9\x7c\x09\x2f\xa1\x63\x51\xd9\x7c\x3f\xb5\xc4\x50\xeb\x2b\xaf\xd0\x6c\x66\x53\xdf\xeb\x79\xbe\xef\x75\xa3\xe1\xa0\xe3\x8d\x03\x0f\x03\xb6\x9b\xf3\x78\x29\xea\x75\xc0\x51\xfb\xc0\x41\xde\x57\xdf\x1b\x81\x81\x5f\xc9\x54\x1a\x52\x0b\xc2\x48\x3c\x36\x36\xda\x34\x35\x1d\xae\xd6\x16\x92\xe6\x85\x32\x2a\x56\xe9\x26\x44\x10\xda\xec\x93\x54\x6b\xd5\xf1\xb2\x77\x09\xaf\xe4\x82\x22\x46\x43\x67\xae\xd6\x36\x8f\xb0\x8e\xaa\x72\x0b\x16\xea\xa2\x43\x89\x46\x83\xbe\x4f\x4a\xd3\x20\xdc\x51\x59\x5c\x16\x85\xc8\xe2\x35\x5a\x67\xa9\x2d\x00\x2f\x84\x29\xa4\xb8\x11\x10\xab\xd5\x4a\x1a\x0d\x32\x9b\xab\x62\x45\xfa\xda\x86\x70\x29\x35\xdc\xf0\x42\xd2\xa2\x12\x31\x97\x19\xd2\x42\x01\xd4\xca\x5d\x41\x3a\x14\x0b\xd7\xd7\xda\x66\x54\x95\xc3\x29\xca\xac\x16\x1d\x61\x73\xb4\xe1\x36\xcc\x74\xc9\xd3\x74\xed\x60\x3b\x3b\xb3\x78\x1f\x12\x91\x0b\xc4\x02\x73\x58\xaa\x5b\x58\xf1\x6c\x0d\x9d\xe9\x4c\xc3\xbd\x58\x15\x42\xdf\xdf\xc0\xb7\x36\x0c\xac\x02\xd8\x61\x88\x57\x6c\xac\xfa\x46\x14\x18\xc0\x28\xdd\x49\xd0\x9c\xfa\x93\x7e\x00\xb7\x32\x4d\x81\x97\x46\xe1\x8e\x10\x57\xac\x21\x11\x46\xc4\x76\x51\xdb\xb5\xd3\x5c\x94\x5f\x54\xf0\x07\xe7\x62\x9d\xc9\x68\x34\x08\x83\xa8\xe7\x85\x9d\x8b\xa8\x33\x19\x77\x66\xbe\xef\x8d\x3b\x2f\x10\xd9\xee\xb8\xc9\xb6\x48\xf0\x13\xbd\xe5\x50\x6a\xb2\xf1\x2a\x02\x23\xaa\x45\x68\xb8\xc9\x5b\xd1\x81\x11\x10\x4d\x65\x26\xe0\xb6\xe0\x39\x32\x9d\xd6\xd3\x51\x89\xa8\x2c\xdb\xd2\xc3\x34\x28\x10\x39\x27\x05\x68\xd0\x22\x1d\xe3\x24\x33\xde\x86\x50\x6d\x69\xd5\xc8\x4f\x9a\x25\x46\xd3\xcd\x18\x07\x7e\x52\x12\x0e\x34\xf5\x38\x46\xd0\xe5\x99\xef\x4e\x23\xef\x79\xe8\x8d\x31\x0f\x44\xe5\x6f\x9b\xd7\xc6\x69\xaf\x12\xa7\xbd\xe2\xc5\x75\xa2\x6e\x33\xfc\x66\x3f\xae\x13\x04\x8b\x4f\x79\x2a\x13\xbb\x3f\x84\x41\xd5\xd6\x68\x4f\x1c\xf2\x42\xdc\x48\x71\x0b\xee\x74\x00\x5c\x6b\x15\x4b\x8e\x08\x84\x56\x6c\x96\x62\xe5\x40\x9d\x41\xf2\x5c\xee\xdf\x1c\xee\xd7\xb3\xec\xec\x95\xa4\x4b\x96\x43\x6b\xd5\x6d\x74\x0f\x44\xd7\xf0\x2b\x64\x17\xf2\x87\x66\x87\x5b\x95\x7d\x6a\x0b\x02\xe8\x92\x90\x8d\xbb\x9c\x87\x44\x09\x8d\x5d\xc8\x43\xa0\xc1\x3f\x1d\x78\xcf\xc8\x64\x10\x2d\x10\x78\xc3\x7d\xd7\xeb\xd8\x95\x6b\x99\xa7\x8a\x27\x97\x5b\xcb\x6c\x98\x21\xcd\x63\x3b\xe8\x76\x65\x86\x5d\x38\x07\x04\x70\x0d\x58\x5c\x23\x69\x99\xae\x2b\xac\x55\x8d\x81\x7b\x49\x13\x21\x2c\x84\xd1\x10\xa7\x82\x67\x22\xc1\x9d\x5b\x90\x51\x97\x38\xc8\xa1\xde\x67\xa1\x37\x9a\x36\x51\xc3\xbe\x59\xe5\xfb\x15\x3d\x0c\x5d\xb8\x24\x0c\xa2\x95\x50\x78\x21\x80\xa7\xa9\xba\xb5\xd6\x7e\x55\xcf\x2d\x12\x07\x44\x7b\xd1\x06\xb9\xe2\x0b\xb1\xff\x93\x5c\x2c\xfe\xb6\x7d\xcc\xb3\x45\x1b\x86\x02\x85\x29\x56\xb9\x59\x57\x31\x89\x88\x00\x9a\xe5\xbc\x9e\x82\xb9\xc3\xe1\xe4\x99\xd7\xa5\xf8\x1b\x50\xe4\x1c\x55\x4e\x81\x60\xb7\x9a\x83\xe0\xb5\x4f\x96\x19\x8c\x1e\x33\xcb\x70\xf7\x39\xc1\x6d\x38\x87\x07\x8d\x31\x5b\x63\xb4\x2a\x4c\x81\x91\x16\x4b\x71\x10\x87\xa2\x98\x8e\x19\x7b\x59\x8b\xaa\x21\x96\x25\x2f\x12\x6b\x05\x57\x85\xe0\xd7\x5b\xf1\xd7\xee\xf1\xc2\xf5\xd1\xc7\x8f\xbd\xe8\xb1\xef\xb9\x4d\x94\x5f\x1b\xac\x0d\x0f\x98\x08\xb7\x82\x78\x29\x56\x77\xf1\x90\x6b\x9c\xe4\xba\x4a\xad\x0a\x81\xae\x06\xc3\xdd\xa8\x56\x9e\x33\x82\x1a\x15\x38\x87\x85\x34\xce\x8a\x2f\x32\x61\x98\xad\x8e\x45\x33\x7f\x18\x05\x9d\x0b\x6f\x54\x71\xec\xfb\x78\x0b\xf4\xa4\x34\x93\x48\xf6\x51\xef\xed\x3a\x1a\x53\x7e\x2f\x17\x61\x49\xd4\xfe\x61\x5f\x35\x2c\x84\xeb\x8d\xf6\xdf\xe1\x27\x48\x68\xbb\x2e\xe2\x43\xde\x81\xb1\x97\x7a\xc5\x0b\xb3\xce\x79\x66\xf4\x65\xc3\x26\x2c\xb3\x7b\xbe\xdb\x09\x2b\x22\x64\x25\x5d\x37\xb8\xf0\x36\xdf\x86\x6e\xe8\x3d\x8f\x76\xdb\xdc\x71\x7f\xe8\x75\xa3\x2f\x67\x93\x70\xdb\xc8\x5e\x22\xb4\xbf\xb4\xbe\xa8\xb4\xb0\xd7\xa5\x22\x54\xab\xa3\x32\x53\xa8\xb4\xe5\xa2\xc4\x5a\x93\x42\x2e\x64\x06\x4b\xc1\x29\x26\x34\xe0\x29\x15\x8d\x14\xba\x2b\x2d\x32\xc3\xdc\x4e\xc7\x0b\x02\xf4\xf1\xa1\x3f\x19\x46\xa4\xda\xd1\xc4\x1f\xf4\xa9\xa0\xc2\x2c\xae\x44\xf5\xda\x68\x42\xba\x50\x85\x34\xcb\x95\xa6\xf4\xc1\x2c\x85\x2c\x76\x52\x4f\x0b\x98\xe0\x5e\xa9\x05\x42\x3b\xa3\x20\xa9\x51\x03\x99\xcf\x7d\xf6\x12\xb3\xfc\x6a\x48\x74\x2d\xd6\x11\x9a\x0d\x72\xad\x7b\x74\x7c\x7c\xf8\x39\x9c\xc3\xd1\xf1\x09\xf3\x3a\xdd\xc0\x05\xa8\xbe\xf9\xf4\x4c\xdf\x0e\x1e\x9e\xb2\xee\xe6\xeb\xe1\xc1\xd1\x43\xc6\x5e\xa2\x4f\xb8\xe2\x5a\x5c\x36\x8a\x97\xab\xb5\xfe\x3a\xa5\xf2\xa5\xd2\x66\x51\x08\x6d\x73\x00\xfd\x75\x2a\x8d\x78\xb0\xe7\x50\x70\xc5\x90\x5d\x55\x32\x70\xad\xa1\xec\x3e\xb6\x3a\x34\x5a\x07\x5f\x0e\x1b\xd8\xe5\x71\x8d\xb7\x89\x2c\xab\x0a\x3d\x87\x47\x9f\x51\xa9\xe7\xf0\xd1\x83\x07\x07\x27\xac\xaa\xc0\x22\xea\x67\x55\x41\xb5\x50\xca\xb0\xa9\x1b\x04\xcf\xba\x35\xca\xde\x59\x51\x86\x90\x40\xd4\xf5\x56\xcb\x2a\x5c\x34\xe2\x4b\x59\x54\x79\xcb\x8d\x28\xe4\x7c\xdd\x9a\x97\x69\xba\xc7\x82\x60\xb8\xa9\xbe\xda\xfe\x35\xd9\x7a\x6b\x24\x9a\x3d\x23\x93\xab\x3d\x87\xaa\x3e\xfc\x4a\xab\xb4\x34\xdb\x64\x2e\xa3\xcd\x93\x73\x45\x33\xa8\x6a\x97\xac\xe9\x61\x71\x13\xed\xe4\x8a\xb1\x97\x3c\x59\x49\x72\x3a\x35\xfe\x2b\xc4\xa2\x4c\x79\x01\xf7\x30\xe7\xa2\xb7\xf7\x6d\xce\xd5\x28\xca\xa8\x62\xc1\x33\xf9\x0d\xb7\x05\xa2\x4d\x75\xc0\xeb\xcf\x86\xae\x1f\x4d\xfc\xfe\x06\xe2\x6f\xcc\x84\xbd\xd4\x22\x2e\x0b\x69\xd6\x97\x6c\x30\x0e\x42\x77\x38\x44\x78\xd7\x74\x5a\x9f\x7c\x62\xeb\xf0\xb6\x5c\x1f\x4e\xe0\x89\xe7\x4d\xe1\xc5\x64\xe6\x03\xf1\x1b\xb3\x4b\x08\xdc\x9e\xf7\xc9\x27\x2c\xf0\x3a\xbe\x17\x46\x4f\x3c\xc4\x2d\x9f\xfc\xe0\x8b\x5e\xd7\x7b\xe6\x7b\xcf\xfc\xbf\xf9\xb7\xee\x61\xd2\x59\x1a\x85\xf9\xa2\x44\x7f\xb6\x12\xe4\x84\x13\xbe\xd6\x6c\x38\xe9\x0f\xc6\x91\xef\x8d\xbc\xd1\x63\xcf\x8f\xba\xee\x0b\xb4\xbf\xcf\x58\x67\x32\x79\x32\xf0\xa8\x4e\xde\x10\x73\xc4\x6f\x05\xe6\x69\xf5\xeb\xcd\xb8\x66\x1f\x4a\x1e\x12\x89\x92\xaa\xba\x05\x5e\x67\xe6\x37\x73\x27\x1f\xc3\x9d\xc6\x1c\x4b\xbd\x5e\x23\x74\x5b\x8a\xcc\xd4\x49\xb1\xb5\xe3\x4d\x35\x9f\x4a\xf8\xf8\x85\xf9\xde\x53\xcf\x0f\x30\x17\x9b\x3c\x7f\x11\xb9\xb3\xf0\xc2\x1b\x87\x83\x8e\xcd\x9c\x2a\x05\x7c\xde\x7a\xe6\x3d\xc6\x57\x2d\x6c\xa8\x8a\xf5\x32\x16\x97\x0c\x9d\xd2\x53\x2f\xea\x4c\xba\x5e\x34\xc4\xa7\xd1\x60\x3c\xb3\xee\xe6\xf0\xf4\x80\xf9\x5e\xe0\x61\x5a\x8f\xaa\xfb\xc1\x4e\x67\x30\xa3\xd5\xd4\x85\x6d\x95\xcd\x65\xb1\x02\xd1\x5a\x71\x99\x92\x83\x2a\xc4\x42\x6a\x63\xab\x3a\xcc\xf7\xfa\x83\x20\xf4\xfc\xc8\x1b\xb9\x83\x61\x44\x87\x26\xfe\x68\xa7\xf6\x2b\xac\x93\xb2\x91\xd7\x0e\x16\x05\x69\x34\x69\x5a\xad\x5f\x3c\x8e\x55\x99\xd9\x2a\x79\x53\xbd\x06\x41\xf8\x5e\x12\x40\x4b\xa4\x74\x49\xcb\x05\x95\xb3\x8c\x02\x82\x55\x3c\x5b\x9b\xa5\xcc\x16\x6d\x86\x59\xda\xc0\xf7\xa2\x60\xd0\x1f\x0f\xc6\x11\x82\xa5\x06\x85\x11\xee\x26\x53\x55\xf1\xa8\x11\x5f\xc7\x93\x70\xd0\x7b\x11\xe1\x6e\x9a\xdd\x11\xee\x24\xc2\x70\x99\x3e\xa2\x93\x10\xfd\x68\x7f\x7f\x21\xcd\xb2\xbc\x6a\xc7\x6a\x85\xb6\x25\x8d\x26\x13\xdb\x97\x5a\x97\x42\xef\x1f\x9e\x1c\xd7\x34\x3f\x26\xd5\xcd\x24\x1f\xea\x3b\xf9\x10\x13\x2a\xc4\x10\xf3\xdc\xc4\x4b\x8e\x50\x53\x26\x56\xbd\xde\x93\x52\x45\xbb\xe3\x4e\xc3\xce\x85\xbb\x8d\x3e\xb7\xe2\x6a\xa9\xd4\x35\xba\x82\x90\xc0\x16\x62\x04\x41\x74\x13\x7b\xe4\x52\x3b\x81\x52\x8b\x6d\xfd\x05\xb7\x89\x2e\x4d\xa7\x3c\xbe\xc6\x87\x44\xea\x58\x15\xc9\x1e\xab\x20\x14\x59\x89\x03\xf4\xde\x81\xea\x2d\x3b\x83\x0b\xa5\xae\x29\xbf\xfa\x48\x32\x5e\xad\x09\x41\x83\xba\x2b\x05\xbf\x3b\xeb\xee\x8a\x54\xde\x88\x82\x52\x33\x4c\x18\x64\x06\x5a\xc4\x2a\x4b\x34\xeb\x7a\xa8\xe6\x7e\x14\x0e\x46\xde\x64\x16\x12\xf6\x3a\x03\x8a\xab\x20\x33\xf2\x50\xa2\x51\x48\x44\x7e\x05\x4f\x06\xd3\x28\x1c\x06\xd1\x53\xcf\x1f\xf4\x5e\x34\x98\x3e\xde\xa0\xbb\xa5\xd4\x84\x9e\x1b\x89\x26\xa1\x5c\x84\x8a\x39\x5f\xa0\xef\xed\x0f\xc6\xfd\x68\x3c\x1b\xd1\x32\x09\xef\xc9\x54\x14\xef\xc3\x89\x33\x78\x5c\xce\xe7\x54\xd2\xa3\x58\x8b\x20\x6e\xc9\xb3\x4c\xa4\x0e\x5c\x0b\x91\x83\x24\xa7\x2e\x29\xe0\xdb\x03\x24\x48\x28\x5d\xb8\xce\xd4\x2d\xdc\x22\xc6\xa2\x97\x6d\x16\x78\xe3\x6e\xf4\x78\xd6\xeb\x79\x3e\xf2\xc8\x32\xa8\x2e\x30\x24\x52\xe7\x29\x5f\xdb\x23\x13\xb2\x67\x7b\xd6\x18\xcc\x1e\xff\x8e\xd7\xb1\x27\x14\xf5\xb9\x23\x9d\x50\x90\x95\xd8\x32\x16\x3b\x83\xfe\x8a\xd4\x5f\xaf\x4c\xde\x5e\xe0\x33\xaa\xfe\xa3\xe3\xd3\xcf\xd8\x19\x7c\xf9\x65\xf5\xe2\xeb\xaf\xa9\xf5\xe1\x09\x32\x79\xac\x8c\x70\xea\x74\x86\x6a\xb0\x22\x4b\x2a\x4c\xb7\xf7\xf0\xe4\x78\xcf\x81\x60\x14\x4e\xab\xfc\x16\x51\xbd\x16\x09\x66\xd6\x28\x77\x3a\x50\x0a\x87\x01\xa8\xcc\x8e\x3d\x3e\xfd\x0c\x19\x50\x08\xc4\x73\x88\x02\x13\x02\xd7\x7e\xaf\x03\x27\x0f\x0f\x3e\xdf\xa4\xd4\xef\xd4\xdd\xb6\x84\xa4\xa9\x12\xe9\xf4\x96\xaf\xf5\x66\xbe\x2a\xf6\x37\xe2\xe1\x85\x37\x9c\x80\xca\x85\x35\x1f\x1b\x5f\x97\x4a\x1b\x72\xd8\x68\x23\x89\x44\x79\x89\xcc\xb4\xb7\x45\x10\x1c\x43\xa7\x2d\x16\x7f\x6f\xfa\xa3\x1d\xed\x12\xdc\x01\x70\x54\xd3\xb6\xd9\x7a\x9b\x61\x3f\x3a\x73\xb2\xd1\x86\xfc\x27\x79\x4f\x0b\x18\xec\x11\x4e\xa3\xe6\xad\x9a\x3b\x6e\xc3\x24\x4b\xd7\x84\x0f\xcc\x12\x29\xab\x02\xb4\x48\xe7\x2d\x74\x92\x22\x69\x0e\xd4\x56\xc5\x6b\xf5\xb6\x2e\x15\xe2\x54\x8a\xcc\x34\xfb\x21\xe8\x89\x3a\x9e\x1f\x0e\x7a\xe8\xaf\xb6\x01\xee\x8e\x32\xb6\xd5\xee\x8f\xd5\xb1\xab\x1e\xdb\x42\x36\xe9\x97\x2d\xf7\x27\x49\x21\xb4\x76\x48\x9a\xc7\x0f\x8e\x8e\xaa\xa2\x4d\xe5\x72\x08\xcc\xf3\x0c\x04\x69\xed\xa6\xb3\x2a\x68\xfb\xaf\xf6\x50\xbd\xf7\xe0\x47\xf4\xfa\x8b\xc6\x91\xc2\x8f\x5f\x81\xb5\x4e\xd6\xf3\x27\xa3\x2a\xb7\xc3\x45\x6c\x63\x2e\x45\xa2\x9c\x6b\x7d\x8b\x3e\xca\xc6\xd8\x26\xbe\x43\xc6\x18\xf1\xda\xec\xe7\x29\x97\x94\x63\x58\x8a\x64\xa5\x2a\x33\x88\xba\x91\x4b\xd3\xa1\x3b\x18\x47\xa1\xf7\x3c\x6c\xe0\x9f\x98\xc7\xcb\x5d\x0c\x2b\x56\xaa\x58\x5b\x3c\x98\x48\xf4\xa2\xca\xb6\x52\xcf\xbd\xdd\xca\x73\xd5\x99\xb9\x5d\x77\x1a\x52\xec\xb7\x2d\x35\x3c\xac\xde\x57\x98\xb3\xdf\xb1\xc5\xbb\x1b\x9e\x36\xdc\xdf\x0e\xc5\x93\x03\x36\x18\x87\x9e\xff\xd4\xc5\xe0\x76\x72\x50\x13\xb2\x6b\xb1\x28\xb3\xb1\x96\xed\x89\x20\x69\x73\xcd\x77\x76\x06\x34\xe0\x11\x64\xf6\x60\xf5\xdc\xc4\xb9\x83\x2f\xcf\x1f\x9d\x3c\xf8\xec\x73\xa7\xe6\xe6\xf9\x8a\xc7\xbc\x50\x99\x93\x5c\x9d\x1f\x38\xb9\x52\x29\xa5\x06\xe7\x87\x07\x07\x8e\x4c\x52\x11\x55\xde\xfa\xdc\x02\x8f\x7a\xe6\x47\xf0\x6a\x0b\xc3\x0f\x0f\x8f\x0e\x0f\x5f\xd5\x26\x8a\x60\x87\x2e\x04\xdc\xcd\x53\x4c\x0a\x2b\x96\xd6\xec\xbd\x8b\x9f\xf5\x7d\x8d\x26\x43\xa7\x85\xba\x91\x08\xca\x08\xf1\x2c\x40\xe5\x16\xe8\x9e\x55\x5d\x1e\x91\x19\xda\xe2\x50\xb6\xae\x7b\xad\x85\xc1\x54\x59\xa6\xe2\x11\x54\x2b\xdb\x1e\xbd\x54\xa5\x89\x57\x84\xbe\xab\xb7\xfa\xd5\xff\x37\xee\x61\x1a\xf3\x08\x16\xaa\xa5\xbf\x4e\x5b\x49\x81\xe1\x70\x9f\x1a\x21\xd1\x59\xbd\x60\x6d\x30\xcf\xaf\x57\x86\xb9\xcc\xa3\x7a\xbe\x2f\xea\x35\x46\x06\x9d\xe0\xab\x0d\x9b\xa2\xea\x2a\x4c\x95\x47\xd4\x3b\xa1\x84\xdd\x6e\x39\x56\xea\x5a\xda\x82\x75\x0d\x88\x2b\xb8\x2c\xa3\x54\x5e\x8b\xc8\xe2\x23\x76\x86\x2e\x1a\xa3\x17\xfa\xa8\x9a\x5f\x98\xd7\x22\xa2\xaa\xd4\xb8\xe9\x1a\xad\xab\xf9\x00\xc2\xae\xf0\x8f\x16\xa6\x9a\x7f\x67\x2c\x21\x9c\x0a\xf7\x20\xec\xb5\x54\xb6\x55\xad\x7a\xe9\xfd\x0e\x61\x86\x8d\xe9\xec\x10\x39\x3d\x79\x78\x70\xc0\xfa\x9d\xa8\xb6\x1a\x02\x11\x70\x5e\xbd\xd8\x52\x49\xe5\xdc\x96\x85\xef\x18\x1e\x78\x74\x37\x25\x1a\x0e\x7a\xde\xbb\xe3\x3b\x5b\xc6\x91\xbb\xee\x04\x7e\x8f\xe1\x9f\x68\x97\x8d\x51\xac\x8b\x39\x63\x2f\x73\x19\x9b\xb2\x20\x8f\xb2\x39\xad\xb6\xa5\x38\xbd\x29\x33\x61\x52\x7f\xc3\x0d\x2f\x34\x73\x9f\xba\xa1\xeb\x47\xb3\xe9\x70\xe2\x76\x77\xca\x6d\x75\x8f\x33\xe8\x2c\x65\x26\xb4\xa8\xa0\x1e\xa5\xcf\xf6\xba\xc0\x5e\x52\x2a\xbd\x2c\xd5\x9e\x2d\x47\xf3\xba\xb0\x64\x87\x82\x56\x65\x11\x0b\x07\x50\xbe\x16\x13\x3f\xda\xdf\x8f\xb3\xf6\xa2\xb0\x1d\x08\x17\xdb\xc7\x7d\xd6\xf7\xab\xa5\x04\x93\x99\xdf\xa1\x3c\xaa\xea\x46\xe7\x66\x54\x9d\x4f\x4b\xb1\xc1\x01\x73\x55\xc4\x9b\x52\x1f\x1d\x24\xcb\x0c\xd4\x7c\x4e\x95\xb1\x15\x5d\x89\xa9\xe3\x6e\x4d\xba\xa1\x19\x3d\x91\xd0\xe9\x74\xcd\x08\x48\x95\xba\x2e\x73\xdc\xa2\x86\xee\x38\xa8\x8a\x18\xb1\x42\x98\x50\x75\xd9\xd6\x78\xd9\x99\x05\x28\x14\x4c\x10\xc5\x0a\xb1\x81\xfc\xb7\xb7\xb7\xed\x54\x5e\xd5\x5b\x54\xc5\xe2\x7b\xac\x9f\x96\xf5\xee\x06\x90\xa5\xfd\x8a\x0e\xea\x4a\x22\xf5\x15\x4f\x11\x8d\x54\x4a\xdb\xf3\xba\x9e\xef\x86\x5e\x37\xda\xec\xaf\x42\xed\xdc\x18\x1e\x2f\x57\x22\x33\x97\x8d\xeb\x39\xdb\xd6\x1d\x18\xdf\xae\x0f\x12\x09\xc6\xbf\x42\x12\xaf\xaa\x29\xde\x29\xf1\xd2\xd9\xe2\x96\xc8\x3b\x03\xad\xd6\x6c\x5f\xbf\xda\xa9\x2d\x34\x5e\xb0\x33\x98\x64\xb4\xbd\x95\x6a\x56\x6d\x31\xbf\xf8\x48\xb1\xf6\xdd\x2a\xec\xdd\x9d\xa8\xcc\xfa\x7e\x59\x76\x77\xad\x0f\x8e\x46\x8f\x59\xa3\x3a\xfb\xb0\x1a\xf6\xe1\xca\xec\xee\xf8\xc3\x83\xf7\x2a\xb5\x68\xda\xc8\xec\x20\x17\xb1\x9c\x4b\x61\x4f\xd2\x2b\x20\x80\x8c\x9b\x97\x69\xba\x06\x55\x9a\xbc\x44\xbd\x4b\x10\x63\xed\x52\xf5\x7b\x9d\xc3\xc3\xa3\x07\x35\x11\x9e\xd6\x00\x55\x24\xf5\x31\x01\x8a\xcd\x1d\x07\x83\x8e\x03\xb3\x4c\xbe\xee\x72\x44\xcf\x7e\x79\xb5\xae\x9e\x7a\x9d\xd3\xa3\xa3\xfa\xf3\x2b\xfb\x70\x7c\xe0\xd4\xa4\x37\x0f\xf6\xd5\x83\x07\x0f\x3e\xdf\x3c\x8c\x79\xa6\x1c\x78\x22\x4d\xbc\x14\x99\x03\x81\xe1\xab\xbc\xfa\x18\xc9\x34\x95\x9b\xe7\xb8\x50\x84\x03\xe8\x2b\x8e\xaa\x30\x02\x09\xb3\x99\xeb\xf0\x2b\xcc\xb3\x1a\x6c\xa8\xed\x04\x33\x63\x95\xf2\x6c\x81\xe6\xb1\x9f\x5f\x2f\xf6\x91\x7b\xfb\x3f\xc8\xaf\x17\xad\x58\x65\xda\x70\xd4\x92\xde\xc4\x1f\xb9\x14\xd2\xeb\xdb\x24\x98\x69\x18\xcc\xf8\x34\x8a\x88\x4e\xfe\x0b\xcd\x5e\xa6\x6a\x71\xc9\xde\xb9\xcf\x54\xe5\xa1\x48\x4d\xa5\xa2\x02\x2e\x55\xf0\x6f\x06\xfc\xba\x43\x8d\x6f\xd5\x6a\xc5\xc9\x67\xd6\x85\xe6\x55\x99\x1a\x99\xd7\x07\x40\x95\x7a\xd6\xc3\x1c\xd2\x93\x3d\x56\xd5\xe6\xaa\xd6\xff\x97\xd9\xda\x1d\x89\x5a\x0d\x6a\xc2\x82\xc7\x54\x37\x1c\x64\x73\x85\x9f\xcf\x78\x91\xe1\xa7\x57\x14\xaa\xc0\x87\x1e\x37\x3c\x7d\x67\xc3\x76\x14\x1b\x7a\x4f\x3d\x44\x78\xf4\x95\xd5\x28\x6f\xc3\x2e\xeb\x7f\xb2\x74\x4d\xdc\x6d\x57\xed\xa8\xdf\x69\xe3\xc0\x84\x0e\x83\x97\xa2\x90\xa6\xa6\xb7\xa1\x44\x7c\x79\x97\x0c\x36\x7e\x0f\x1a\x95\xbf\xb4\xee\x49\xd7\x87\x9a\x22\x41\x89\x43\xa1\x0c\x8a\xe5\x9e\xbe\x45\x4d\x25\x53\x55\xe8\x40\x30\x1f\xac\x10\xd9\x7d\x36\x9c\xf4\x23\x7f\x12\xda\x74\x64\x13\xce\x17\xe8\x7d\x88\x48\xc2\x65\xba\x66\x5d\x77\x30\x7c\xf1\x5e\xbf\x8d\xfb\xd0\x4b\x39\x27\x0c\x8f\xb9\x66\x6a\x0f\xdb\x76\x78\x79\x74\x5a\x1d\x19\x1d\xc2\x8f\x7e\x04\x47\xa7\x0e\x1c\x1d\x9f\x34\x1c\x4b\x14\x5c\x0c\x7a\x74\xc5\xf0\xb4\xa2\x4b\xbe\x7d\xeb\x64\x1a\x84\x69\xd0\x70\x30\xb6\x55\xb6\x03\xfa\x87\xb2\x7e\x9d\xcb\x82\xbc\xc5\xba\xd6\x79\x8b\x1e\xef\x25\x22\x15\x46\x00\x9f\x1b\x51\xc0\x8a\xbf\xa6\x2e\xf7\x89\xcc\xa6\x7e\xb9\x29\x12\x53\x15\xe6\x5d\x69\x50\xeb\xf7\x12\xc7\xb3\xaa\xe0\x32\xf3\x87\xcc\x5e\x2e\xc5\xc4\xa5\x50\xcd\x63\xa9\xa2\xcc\x32\x94\x01\x36\x57\x07\xe4\xb9\x28\xa4\x4a\xec\x61\xf4\x1d\xa7\x86\x7e\x99\x35\x7b\x53\x0a\x4d\x27\x81\xb6\x9c\xd3\xa6\x3b\xc7\x6e\x18\x51\x72\xbe\xcd\x98\xce\x60\x46\x97\x71\xab\x3b\x1f\xda\xae\xa4\x6d\x6f\xe8\x46\x55\xe3\x25\x0b\x3a\x17\x5e\x77\x46\x21\xec\x0b\x7b\xae\x78\x78\xb0\x62\x54\x76\xdd\x1c\x6b\x2e\x05\x4f\xcd\xd2\x5e\xa6\xab\xc8\x14\x22\x57\x91\x6d\x8f\xa8\xfd\x2e\x4a\x47\x0f\x97\x6c\x5b\x2b\x3a\x39\xc0\x88\xe6\x16\x8b\xd2\x86\x56\x74\xf6\xe4\x47\xb2\x04\x3e\x5d\x48\x03\x73\x1d\x5f\x7f\x5a\x7b\x8e\x56\xab\xcc\x0a\x0c\x4b\xc4\xb5\x56\xcb\xf0\x85\x46\xef\x83\xbe\x91\x3c\xa8\xca\x36\x3e\x52\x9a\x96\x8e\x57\x04\x93\x12\x15\x6b\x6a\x40\x62\xfb\x87\xed\xcf\xda\xc7\xcc\xf5\xfb\x81\x35\xb9\x0e\x5d\x07\x6c\x1c\xd8\xd2\x1d\x2f\x6d\x64\x5c\xb3\x87\xf6\x12\xd1\xee\xf0\x9d\xbe\x7c\x97\xbb\x24\x94\xbb\xb7\x8a\x13\xa4\x82\x67\x65\xde\x9c\x82\x17\xf1\x52\xde\x08\xdd\x64\x5c\xd5\x16\xc5\xb6\xfb\x7b\x93\x58\x11\xde\x3d\xcb\x19\x84\x88\xb2\xeb\xdb\x80\xdb\x5b\x8e\x72\x5e\xcf\xd5\x38\x26\xac\x4e\x8f\xd9\x64\x88\xe9\x47\x78\xe1\xa2\x7f\xa4\xc5\xbe\x5c\x48\xd3\x38\xb9\xd0\xb0\x94\x8b\x65\x2a\x17\x4b\xb2\x65\x9e\x10\xfa\xcd\x12\x28\xc4\x4a\xdd\xd8\xcb\x51\xd9\x42\x6c\xcf\x2b\xba\x83\x5e\x2f\xba\x18\xf4\x2f\x86\x83\xfe\x45\xb8\x53\x10\x6e\x02\x04\x34\x65\xbd\xc1\x2e\x48\xb9\x69\xce\x88\xe5\x12\x39\x9f\x53\xc9\x99\x8c\xb2\x3f\x08\x2d\xe9\xa6\x91\xbf\x47\x35\x5e\xf2\x82\xc7\x06\x71\x36\x91\x4c\x9b\x07\x71\x1f\xa7\x49\x17\xbb\xdc\x4e\x68\x6f\xe2\x1e\xdf\x41\xdc\x62\x1a\xbd\x54\xb7\xd9\x47\x68\xd5\xa0\xc6\x06\x9b\x8f\xa8\xf5\x22\x6e\x28\x35\x5f\x2c\x30\xf1\x47\x21\xb5\x5a\xe8\xb1\x7f\x1b\x9d\x5e\xc4\x95\x46\xf7\x3b\xd1\x56\xa9\x27\x9b\xea\xda\x1d\x25\x5b\x94\x72\xbb\x6a\xbf\x64\xf6\x1a\x90\x47\xc6\x78\x50\x5d\xf7\xb2\x3f\x12\x60\x9d\xe1\x64\xec\x55\xcf\xd3\xd9\x70\x58\x3d\xf6\x3b\xb6\xbc\xc1\x5e\x5a\x8f\x71\xd9\xb8\x4f\xd7\xac\x91\x2c\x55\x59\x68\xb8\x12\xe6\x56\x88\xaa\x74\x6b\xdd\x45\xd7\xeb\xb9\xb3\x61\x18\x35\xaa\x25\xa7\x88\xbc\x73\x79\xf9\x1e\xe3\xa5\x11\x2b\x6d\x91\xbf\xbd\x99\x6b\xc1\x3e\xb7\x55\x60\xe4\xbe\xfd\x71\x49\xe0\x45\x83\xd0\x1b\x59\xf9\x31\xf6\xb2\x24\x5a\xdb\x82\xf2\xce\x5d\xab\xcd\x89\x3d\x0a\xd4\x6a\x87\xca\xe8\x26\x6c\x8a\x2c\x27\xd2\xde\xf3\xe9\x70\xe2\x7b\xd1\x4e\xa1\xf9\xe8\x60\x87\xa8\x3d\x8c\xf8\x10\x39\x22\x33\x08\x82\xd9\x3b\x44\x0e\x77\x89\x6c\x2e\x00\x56\x77\xab\x76\x89\xf0\xd8\xc8\x1b\x69\xd6\x30\x17\x22\x61\x3d\xcf\xeb\xd2\xd5\x08\x7b\xe9\xa8\x22\x78\xbc\x39\xe2\x56\x73\xd8\x33\x4b\xb1\x12\xad\x58\xa5\xaa\xd8\x83\x95\x30\x1c\x0c\x5f\x38\xf6\x2e\xd7\xd5\x1a\xdc\x2c\x29\x94\x4c\xe0\xc7\xe7\x70\x4c\x77\xee\x5d\xd4\x68\x3a\xdf\x00\x1a\x44\x39\x27\xec\x65\x2a\xab\x8e\x53\xeb\x63\x56\x2b\x05\x7b\x3d\xbe\xf1\x53\x0c\x6d\xd6\xe9\xe6\x14\x07\x31\xec\xf6\x0c\x27\x11\x37\x22\x55\xb9\x28\x74\x7b\xa1\xd4\xc2\x56\x0d\xf7\x6f\xc5\xd5\xbe\x0d\x39\x7a\xff\xe8\xe0\xf0\xe1\xfe\xe1\xe1\x7e\x60\xd1\x7a\x6b\xae\x8a\x56\x63\x03\x2d\x99\xb5\x3a\xcb\x42\xad\x44\xeb\xc1\xe7\xf4\xb2\x5a\x3e\x0b\x2f\xbc\x91\x17\x75\x26\xc3\x89\x1f\x8d\xbc\xd0\x8d\x42\xb7\x0f\xe7\xf0\xea\x07\xf3\xf9\xf1\x83\x87\x0f\x5e\x35\xd1\x88\xcc\xe0\x6a\x6d\x84\xde\x1a\xb2\x4d\x1d\xb7\x15\xfb\x7b\xcd\xba\xc2\xe8\x71\x85\x05\x06\xc1\x74\xe8\xda\x32\x6b\x9d\xed\x9c\x3e\x38\x3d\x3d\x39\x38\x25\x05\x6b\x6f\x4e\x7a\xb7\xc2\xac\x8e\x74\x3e\xa2\x10\xb3\xc0\xf3\x77\xf5\xe1\xf8\xe0\x7d\x4d\xfd\x28\x09\xdf\x9b\x4e\x3e\x4a\x22\x53\x46\xc6\x7f\x8d\x62\x8e\x27\xe1\xa0\xf3\xae\x7a\x1f\xef\x90\x69\x1e\x4a\x7f\x94\xd6\xc4\xef\xbf\xb7\x1e\xe2\x10\xb2\xe3\x0e\x3b\xfc\x2d\x77\x77\x88\x49\xa2\x3c\x3c\xcd\x2e\xd9\xd0\x1d\xa3\x8f\x03\x91\xb5\x66\x81\xf3\xcd\xb2\xd5\x19\xe3\xdf\x8b\x27\xf8\x37\x7c\xe6\x24\xa2\xd5\xf5\x9c\x79\xd1\xea\xf9\x4e\x96\xb6\xc6\x43\x27\xbd\x69\x0d\x9f\x3a\x45\xd9\xf2\x67\xce\x4f\x78\xeb\x77\xa6\x8e\xd0\x2d\x2f\x70\x72\xd3\x7a\xec\x3b\x79\xda\x9a\x0e\x9d\xab\x45\xeb\x71\xdf\x91\xa6\x35\x08\x9d\xb9\x6c\xf5\x06\x8e\x29\x5a\xa1\xef\xc4\xba\xd5\xf9\xca\xd1\x45\x2b\x98\x3a\xfa\xa6\x15\x78\xce\xb5\x6a\x3d\xf1\x9d\x45\x8a\x14\xca\xeb\xd6\xcc\xa5\x4b\x0c\xb8\x22\x2f\x5b\xa4\x52\x2f\x9d\xbf\xf8\xf7\x3f\xfd\xf3\x3f\xfd\x27\x7f\xfe\xcb\x3f\xfe\xee\xf7\xfe\xae\xf3\x17\xbf\xfa\xd9\x5f\xfe\xdb\x7f\x6a\xbf\xfc\xd5\x6f\xfe\xde\x5f\xfe\x9b\x7f\xfe\xdd\x2f\xff\xc3\x5f\xfd\xe6\xef\xbf\xfb\xe2\x7f\xfc\xe3\x5f\x7c\xf7\xab\xff\x8a\x2f\xba\xa2\x34\x3a\x5e\x3a\xbd\x82\x67\xdf\xfe\x21\x97\xda\x19\x8b\x44\x14\x29\xcf\x12\xed\x0c\xb9\xb9\x91\xe2\xcf\x7e\x5e\x3a\x6f\xfe\xe5\xdb\xbf\xf3\xf6\x67\x6f\x7f\xf6\xe6\xd7\x6f\x7e\xf9\xe6\x57\xce\x77\xbf\xff\xaf\xbf\xfb\x83\x7f\xf7\x3f\xff\xe8\x5f\x38\x9e\xce\xf9\xb7\x7f\xa2\x52\x67\xaa\x0a\x53\x2e\xca\x6f\xff\x48\x43\xa2\xe0\x71\xc1\xb5\xc4\xc6\x54\x5f\x4b\xe7\xcd\x9f\xbc\xfd\x07\x6f\xfe\xcb\x9b\xff\xf8\xe6\x17\x6f\x7f\x6a\x69\x38\x03\xc3\x53\x89\x69\x6c\x50\xaa\x15\x4f\xb9\xcc\x44\xe6\x84\xdf\xfe\xa6\xb8\xfe\xf6\x0f\x85\xf3\xdf\xff\x91\xf8\xb3\x9f\x1b\x99\x71\xe7\xcd\xcf\xdf\xfe\xf4\xcd\x7f\xab\x06\x05\x37\x22\xd3\xd7\xdc\xf9\x3f\xff\xec\x0f\xfe\xd7\x7f\xfe\xe3\xff\xfd\x7b\xff\xc9\xe9\xf3\x54\x2c\x94\xf3\xe6\x5f\xbd\xf9\xf5\xdb\x9f\xbe\xf9\xc5\xdb\xdf\x7f\xf3\xa7\x6f\x7f\xf6\xf6\x1f\xbe\xf9\xf5\x9b\x5f\x30\x9b\x27\xda\xa3\x4f\xb4\x7e\x0c\x41\xb9\x8c\xaf\x45\x61\xa5\xdb\xc6\x46\x4c\x6d\x2f\x19\x89\x97\xc4\xcc\x48\xc6\x70\x0e\xdf\x2c\x19\x09\x9a\x1e\x5b\xe1\x33\x46\x7f\x37\xdf\x48\xf0\xf4\x0b\x3b\x46\xd2\x47\xf0\x51\x30\x52\x01\x38\x87\x2c\x65\xa4\x07\x70\x0e\xe9\x0d\x23\x65\x80\x73\x28\x4a\x46\x1a\x01\xe7\xf0\x13\xce\x48\x2d\x70\x4e\xcd\x48\x37\xe0\x1c\xe8\x93\x91\x8e\xe0\xb7\x94\x91\xa2\xc0\x39\x5c\x2d\x18\x69\x0b\x9c\x83\x34\x8c\x54\x06\x27\x94\x8c\xf4\x86\x20\x21\x23\xe5\xc1\xcc\x16\x3f\x19\x29\x11\x9c\x83\x2e\x18\x69\x12\x3e\xde\x30\x52\x27\x38\x87\x6b\xc5\x48\xa7\xe0\x1c\x16\x29\x23\xc5\x82\x73\x28\xaf\x19\xe5\x31\xf5\x0d\xac\x15\xcf\x73\xfa\x5d\x8a\x6a\x00\xb3\x38\xe5\x74\x68\x40\x68\xa2\x6d\xd4\x2a\x3d\x97\x99\x64\x2f\x37\x3d\xda\xd5\xb0\x4b\xc6\x5e\x2a\x4c\x7f\x2f\x59\x70\x31\x79\x16\xf5\x26\x93\xd0\xf3\xa3\xc7\xbe\xbd\xdc\xdf\x40\x6b\xc1\x52\xdd\xc2\x8d\x28\xaa\x02\xf2\xbb\x55\x09\x4a\x34\x10\xca\xf4\x55\x7d\x27\x75\xae\x94\x11\xc5\x0e\xdd\xa7\x9e\x5f\xfd\x68\xb0\x4e\x22\x91\x2a\x55\x83\x9b\xbf\xaa\xb0\x3f\x8e\xa8\x2a\xd5\x1f\x20\x15\x7a\xa3\xe9\xd0\x0d\xbd\x88\x0a\xad\x55\x91\x97\xa8\xfe\xdf\x00\x00\x00\xff\xff\x57\xd1\x15\x91\x9f\x3a\x00\x00") +var _confAppIni = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xcc\x7b\xdd\x8f\x1b\x49\x92\xdf\x7b\xfe\x15\x31\xbd\x5e\x8f\xb4\x28\xb2\x3f\xa4\xee\xe9\x51\x6f\x2f\xa6\x44\x16\xd9\x3c\xf1\x6b\xaa\x8a\xd2\x68\x84\x46\x29\xbb\x2a\x49\xe6\x76\xb1\xb2\xa6\x32\xab\x5b\x1c\x18\x87\x5d\xf8\xc1\x1f\xb0\xe1\x07\xdb\x77\x30\x70\x30\xbc\x30\xec\x03\xce\x3e\x7b\x0f\xb6\x81\xdd\xf5\x9e\xfd\x30\xbe\x77\xe9\x7f\x38\xcf\xf9\x0c\x1b\xf7\x2f\x18\x11\x59\x45\x16\xa5\x96\x6e\x16\x58\x03\x37\x03\xa8\xc9\xaa\xcc\xc8\xcc\xf8\xfc\x45\x44\xf2\x7b\xf0\xd1\x47\x1f\xc1\xd8\x7b\xea\xf9\x40\xff\x8c\x26\xdd\x41\xef\x39\x84\x17\x83\x00\x7a\x83\xa1\x87\xef\x99\x1d\x35\x1d\x7a\x6e\xe0\xc1\xc8\x7d\xe2\x41\xe7\xc2\x1d\xf7\xbd\x00\x26\x63\xe8\x4c\x7c\xdf\x0b\xa6\x93\x71\x77\x30\xee\x43\x67\x16\x84\x93\x11\x74\x26\xe3\xde\xa0\xff\x36\x85\x41\x0f\x9e\x4f\x66\xe0\xfa\x1e\x4c\xdd\xce\x13\xb7\x8f\x33\xa6\xfe\xe4\xe9\xa0\xeb\xf9\xce\xce\x02\x93\x67\x48\x79\xfa\x1c\x26\x3d\x18\x84\x44\x83\x9d\x81\x9b\xe7\x90\xf1\x95\x00\xb3\xe4\x06\xf4\x52\xdd\x6a\x50\x19\x88\x1b\x51\xac\x21\xe7\x0b\x01\x46\x9a\x54\x30\x77\x3a\x8d\xc6\xee\xc8\x83\x73\xe8\xab\x85\x66\x67\x10\x2e\x85\x9d\xa9\xe6\x60\x96\x02\xf4\x5a\x1b\xb1\x82\x52\x8b\xc2\x12\x2b\xca\x4c\xdb\xc1\xfe\x6c\x1c\xcd\x02\xcf\x87\x73\x58\x48\xc3\xce\xc0\x93\x66\x29\x0a\xd8\x4b\xc4\xcd\x9e\x03\x7b\x79\xa1\x92\x3d\x50\x05\xec\x19\xa1\xcd\x1e\x8d\x1f\x4d\xba\xb8\x58\x22\x6e\x18\x7b\xa1\x45\x71\x23\x8a\x4b\x36\xf5\x27\xe1\xa4\x33\x19\xc2\x39\x2c\x8d\xc9\x59\x77\x32\x72\x07\x63\x38\x87\x54\xc5\x3c\x5d\x2a\x6d\x98\x3f\x99\x84\xd1\xcc\xc7\x21\xdf\xbf\x57\x8f\xbf\xaf\x1f\xed\xef\x7f\xff\x9e\x1d\x7e\x5f\x3f\xfa\xfe\xbd\x8b\x30\x9c\x46\xd3\x89\x1f\xde\xd7\xfb\x8c\xbe\xb8\xdd\x2e\x6e\xf0\xa0\x4d\xff\xb3\xcd\x00\x38\x87\x07\x07\x07\x07\xec\x0c\xa6\xa2\x58\x49\xad\xa5\xca\x60\xae\x0a\x28\x33\xf9\x0a\xb4\x8a\xaf\x85\x61\xb3\xf1\xe0\x8b\x28\x98\x74\x9e\x78\x61\x34\xf5\xfc\xd1\x20\x08\x06\x13\xdc\xd8\xc9\xc9\x09\x3b\x83\x21\x6e\x0f\xee\x75\x47\x5f\xde\x07\xdc\x1b\x4e\x47\xce\xc0\xad\x2a\xae\x45\xa1\xe1\x9e\x2e\xe3\x25\x70\x0d\x41\x70\x01\x65\x9e\x70\x23\xee\x03\x8f\x63\xa1\xb5\xcc\x16\x70\x2b\xae\x00\x79\x20\x63\xd1\x66\x67\x30\xc8\x60\xa5\xb4\x81\x98\x6b\xa1\x61\xad\x4a\x48\x14\x64\xca\x40\x26\x44\x02\x46\x41\xbc\xe4\x19\x8a\x6e\x29\x20\x11\x73\x5e\xa6\x06\x6e\x78\x5a\xd2\x64\x37\x35\xa2\x00\x69\x40\x65\xe9\x1a\xe4\x1c\xe7\x17\xb4\xae\xe5\x32\x64\x2a\x11\x20\x35\x11\x24\xc1\xa2\x90\xb9\x06\xe4\x08\xbd\x6c\xb3\xe1\xa4\xe3\x0e\xa3\x0f\xb1\x7a\xc3\xd2\x77\xb9\x7d\x06\x5d\xa9\xf9\x55\x2a\x68\xd1\xb9\xe0\xa6\x2c\x04\xdc\x2e\x45\x46\x4b\xf2\x1b\x2e\x53\x7c\xcd\xba\x83\xc0\x7d\x3c\xf4\x22\x1c\x76\x0e\x73\x9e\x6a\xc1\xce\xe0\xd9\x52\x90\xf2\x94\x5a\xc0\x55\x29\x53\x23\xb3\xe6\xee\x15\x1e\xc0\xb4\x59\x10\xba\x7e\x88\x53\xa3\xc0\xf3\x9f\x92\xee\xd5\x14\xba\x6a\xc5\x65\x56\xa9\xbd\x82\x2b\x01\xe2\x55\xae\xb4\x48\xa0\x22\x15\xa7\x2a\x13\x28\x28\x86\xf3\x37\x4a\xb6\x55\x20\x54\x06\x55\x18\xc8\xca\xd5\x15\xaa\xfb\x5f\x4f\xa4\xd2\xa4\xa3\x23\x76\x06\x63\x61\x50\xee\x20\x33\x23\x8a\x39\x8f\xef\x3c\x47\x2a\xb5\x11\x19\x1a\x23\xcd\x1f\x0e\x82\xd0\x1b\x47\x17\x93\x20\x6c\x28\xe9\xee\x36\xbe\x33\x95\x6a\x33\xdf\xbf\x57\xef\x8c\x4e\xe4\x2b\x65\x20\xe7\x66\x89\x16\x8d\x34\x12\x59\x88\xd8\xa8\x62\xed\x6c\xb4\x48\x6a\xf8\xf8\x77\xf7\xdb\x5a\x2f\x3f\x76\xe0\xaa\x34\xa4\x7c\x4b\x7e\x43\x8c\x44\x89\x7c\xbc\xbf\x54\x2b\xb1\xbf\x90\xc6\x8e\x6a\xd3\xba\xa4\x29\x53\x37\xbc\x80\x73\x76\x06\x9d\xa5\x52\xda\x6a\x67\x2c\xf3\x25\xea\xbf\x51\xa0\xcb\x3c\xc7\xc3\xa0\x6d\x10\xff\x54\x96\x89\xd8\x48\x95\x69\xb6\x15\x63\xd4\x19\x4c\x2f\x3c\x3f\x80\x73\xe0\x42\x1f\x1e\x9d\xb6\x62\x53\x38\xf4\xf9\xd3\xa3\xcd\xe7\xa3\xe3\x93\xed\xf3\xa3\xd3\xd6\x22\x5e\x7d\xa6\x72\x91\x69\xbd\x6c\xc7\x6a\xe5\x00\x2f\xe2\xb9\x2a\x8b\xa3\xe3\x93\xcd\xe7\xc3\xa3\x53\x52\xcd\xea\xcc\x64\x46\x85\xe0\x46\x80\x11\xab\x5c\x15\xbc\x58\xc3\x5c\xa6\x42\x5b\x55\x45\x4f\x05\x79\x79\x95\xca\xf8\x1a\xae\xc5\x1a\x4a\xb2\x54\xad\x97\xad\x6b\xb1\x5e\x88\xcc\x61\x67\x4d\xb6\x55\xee\x71\x4b\x6b\xc3\x5d\xcb\xa2\x27\xde\xf3\x28\xf4\x82\x06\x9b\xa6\x28\x0a\x64\xcc\x96\xe4\x8e\x1c\xb6\xcf\x3f\x06\x9e\x25\x90\x0a\x74\xe0\x22\x4d\x61\x2e\xb3\x04\x54\x69\xe0\x76\x29\xe3\x25\xa0\x1e\xe2\x69\x78\x9a\x6e\xd6\xea\xa3\x1a\xd0\x4a\x0d\xfa\xe4\x5a\x12\x19\xe3\xa1\x6f\x2b\x33\x23\x6f\x22\xe2\x6b\x58\xc9\x4c\xae\xca\x15\x9d\x55\xcb\xaf\x05\xdc\x4a\xb3\x84\x58\x15\x85\xd0\xb9\xca\x12\x3c\xbd\x59\xe7\x82\x8d\x06\xe3\xc1\x68\x36\xa2\x13\x05\x83\x2f\xbd\xa8\x73\xe1\x75\x9e\x34\xed\xaf\x32\xff\x4e\x77\x8c\x81\x26\x43\x8b\xa9\x62\xc0\x4a\x25\x82\x4d\x7a\xbd\xe1\x60\xec\xd5\x21\xc0\x4e\xab\x9d\x81\x3f\x99\x85\x9e\x1f\x0d\x27\xfd\x06\xc5\xbe\xc8\x44\x81\xbb\xd6\x46\xe4\xfa\x11\x3b\x83\xbf\x05\xed\xfd\x05\x7a\xd8\x58\x14\x06\x5a\x31\x3f\x37\x45\x29\xa0\x95\x94\x05\x47\x9d\x3a\x3f\xfd\xe4\xe4\x60\x79\xb0\x3a\xd0\xd0\xc2\xb8\x71\xbe\x5a\xe3\x9f\xb6\x78\xc5\x57\x79\x2a\x50\x4b\xd8\x19\x3b\x83\x49\x01\xf3\x42\xad\x80\x43\x3b\x9f\xbf\x22\x05\x20\x43\x2f\x8c\x48\xec\x1b\x54\xe3\x67\x32\x4b\x30\x72\xe2\x62\x72\x6e\x19\xa8\x8d\x2a\x04\xdc\x4b\x14\x3b\x23\xbf\x36\x57\xc5\x42\x18\xe4\xa7\x9d\x4f\x13\xf3\x42\xde\xe0\xe0\x6b\xb1\xbe\x6f\xb7\x6d\xd5\x34\x85\xfc\x3a\xd6\x87\x47\xd0\x92\x19\x51\xa5\xd5\x5b\x28\x53\xfb\x4d\xac\xa0\x95\xa9\x6b\xb1\xd6\xdf\x6d\xd6\xb5\x58\xd7\x93\xf0\x85\xc6\x0f\x89\xd0\xac\xe3\xf9\x61\x44\xa0\xe2\x1c\xe2\x52\x1b\xb5\xda\xc7\xc8\xaa\xf7\xeb\x65\x18\x8a\xf1\xae\x01\x15\x45\x76\x06\xb3\x3c\x47\x57\x23\x6e\x44\x4a\x60\x40\xac\xf2\x14\x0f\x85\x4a\xa9\x0d\x37\x32\xb6\x7c\x43\xdf\xb2\x6b\x14\xc4\x02\x54\xf3\xdb\xa5\x28\x84\x0d\x89\x52\x83\x78\x25\xe2\xd2\x88\x04\x9d\x78\x38\xe8\xbc\xe5\x3e\xba\xd5\x7c\x9a\x88\xde\x02\x31\x4c\xc2\x0d\x27\x90\xd2\x75\x43\xb7\xd6\x6c\x7a\x48\x18\x27\x45\x99\x60\xe0\xb6\xbb\xec\x7f\x39\x98\xd6\x0e\x87\x79\x63\x52\x2c\x7a\xb6\x55\xa9\x21\xb7\x2a\x4d\x18\x68\x4e\x51\x25\x6b\xa5\x6a\xb1\x10\x09\x61\x1c\xed\x40\xcc\x33\xf4\xfb\x7b\xe8\xf1\x2c\x7c\x11\xaf\xf2\x54\x15\x62\x8f\x0d\x5d\x02\x6f\xd1\xd4\xed\x23\xe3\x70\x04\x63\x2f\x0a\x91\x2b\x2d\xd1\xe6\x2f\x77\xfc\x2d\x92\x47\x75\xc1\xf5\x36\x63\xa4\xd0\x1f\x6b\x3a\xc2\x8e\xd9\xef\xfd\xee\xfe\x0f\x71\x7d\x8c\x5e\x3f\x22\x15\x6f\x35\xa7\xec\x11\x00\x22\x3e\x21\x40\xd3\x71\x21\x73\x43\x76\x59\x87\x84\xea\xd8\xda\x01\xad\x56\xc2\xc8\x95\xd0\x10\xab\x32\x4d\xe8\x2c\x7a\xb9\xc7\x82\x8e\x3f\x98\x86\x51\xf8\x7c\x8a\x7b\xbf\xe2\x7a\xd9\xe0\xba\x3b\x0e\x06\x88\x2f\x0a\x2d\xac\xaf\xe6\x19\x94\x59\x21\x62\xb5\xc8\xe4\xd7\x22\xa9\xdf\x31\x1c\x18\x75\x2e\x5c\x3f\xf0\xec\x7e\x7a\xaa\x88\x45\x85\x2c\x33\x71\xbb\x3d\xe9\xba\x0a\xa0\x95\x31\xb0\xde\xc4\xef\x78\xd1\xd4\x1f\x3c\x75\x43\xaf\x69\xe5\xa9\xba\xe2\x29\xac\xf8\x2b\x72\x44\xe4\x9d\x49\xa6\x72\x85\x70\x66\xde\xa4\x98\x5b\x84\x50\x38\xd0\x3a\x84\x95\xe0\x19\xe2\x19\x3b\x92\x8d\xdc\x2f\xa2\x8e\xef\xb9\xe1\x60\x32\x8e\x86\x83\xd1\x00\x83\x61\xeb\x90\x9d\xc1\x48\x16\x05\xca\x62\x9d\xc5\xf0\x55\x29\x4a\x01\xa9\xc8\x16\x66\xe9\x80\xcc\x70\x39\x2d\x10\x30\xad\xb6\xa3\xc8\xe5\x1b\x8e\x06\x85\x90\x4b\x66\x0b\x36\x1a\xf8\xfe\xc4\x8f\x3e\x9f\x79\x33\x2f\x1a\x7a\xe3\x3e\xa9\xe2\x61\x05\x21\xb9\x89\x97\x36\x76\xbc\x9f\x7e\x5e\xa6\x29\x14\xe2\xab\x92\x42\xcc\x66\xc6\x1d\x6b\x4d\x67\xc3\x61\xe4\x7b\x9f\xcf\x30\x70\xbc\x67\xc5\x42\xcc\x45\x51\x88\x04\x86\x32\x16\x19\x02\x46\xa3\x20\x4f\x11\x76\x70\xeb\x84\x8c\xca\x6b\x10\x8f\x78\x01\x11\x0a\x42\xa3\x55\xa9\x0d\xac\x68\x79\x32\x5f\xc2\x4b\xe8\x58\x54\x36\xdf\x4f\x2d\x31\xd4\xfa\xca\x2b\x34\x1f\xb3\xa9\xef\xf5\x3c\xdf\xf7\xba\xd1\x70\xd0\xf1\xc6\x81\x87\x01\xdb\xcd\x79\xbc\x14\xf5\x3e\xe0\xa8\x7d\xe0\x20\xef\xab\xef\x8d\xc0\xc0\xaf\x64\x2a\x0d\xa9\x05\x61\x24\x1e\x1b\x1b\x6d\x9a\x9a\x0e\x57\x6b\x0b\x49\xf3\x42\x19\x15\xab\x74\x13\x22\x08\x6d\xf6\x49\xaa\xb5\xea\x78\xd9\xdb\x84\x57\x72\x41\x11\xa3\xa1\x33\x57\x6b\x9b\x47\x58\x47\x55\xb9\x05\x0b\x75\xd1\xa1\x44\xa3\x41\xdf\x27\xa5\x69\x10\xee\xa8\x2c\x2e\x8b\x42\x64\xf1\x1a\xad\xb3\xd4\x16\x80\x17\xc2\x14\x52\xdc\x08\x88\xd5\x6a\x25\x8d\x06\x99\xcd\x55\xb1\x22\x7d\x6d\x43\xb8\x94\x1a\x6e\x78\x21\x69\x53\x89\x98\xcb\x0c\x69\xa1\x00\x6a\xe5\xae\x20\x1d\x8a\x85\xeb\x6b\x6d\x33\xaa\xca\xe1\x14\x65\x56\x8b\x8e\xb0\x39\xda\x70\x1b\x66\xba\xe4\x69\xba\x76\xf0\x39\x3b\xb3\x78\x1f\x12\x91\x0b\xc4\x02\x73\x58\xaa\x5b\x58\xf1\x6c\x0d\x9d\xe9\x4c\xc3\xbd\x58\x15\x42\xdf\xdf\xc0\xb7\x36\x0c\xac\x02\xd8\x69\x88\x57\x6c\xac\xfa\x5a\x14\x18\xc0\x28\xdd\x49\xd0\x9c\xfa\x93\x7e\x00\xb7\x32\x4d\x81\x97\x46\xe1\x89\x10\x57\xac\x21\x11\x46\xc4\x76\x53\xdb\xbd\xd3\x5a\x94\x5f\x54\xf0\x07\xd7\x62\x9d\xc9\x68\x34\x08\x83\xa8\xe7\x85\x9d\x8b\xa8\x33\x19\x77\x66\xbe\xef\x8d\x3b\xcf\x11\xd9\xee\xb8\xc9\xb6\x48\xf0\x2f\x7a\xcb\xa1\xd4\x64\xe3\x55\x04\x46\x54\x8b\xd0\x70\x93\xb7\xa2\x03\x23\x20\x9a\xca\x4c\xc0\x6d\xc1\x73\x64\x3a\xed\xa7\xa3\x12\x51\x59\xb6\xa5\x87\x69\x50\x20\x72\x4e\x0a\xd0\xa0\x45\x3a\xc6\x49\x66\xbc\x0d\xa1\xda\xd2\xaa\x91\x9f\x34\x4b\x8c\xa6\x9b\x39\x0e\xfc\xb8\x24\x1c\x68\xea\x79\x8c\xa0\xcb\x33\xdf\x9d\x46\xde\x17\xa1\x37\xc6\x3c\x10\x95\xbf\x6d\x5e\x19\xa7\xbd\x4a\x9c\xf6\x8a\x17\xd7\x89\xba\xcd\xf0\x9b\xfd\x73\x9d\x20\x58\x7c\xca\x53\x99\xd8\xf3\x21\x0c\xaa\x8e\x46\x67\xe2\x90\x17\xe2\x46\x8a\x5b\x70\xa7\x03\xe0\x5a\xab\x58\x72\x44\x20\xb4\x63\xb3\x14\x2b\x07\xea\x0c\x92\xe7\x72\xff\xe6\x70\xbf\x5e\x65\xe7\xac\x24\x5d\xb2\x1c\xda\xab\x6e\xa3\x7b\x20\xba\x86\x5f\x21\xbb\x90\x3f\xb4\x3a\xdc\xaa\xec\x63\x5b\x10\x40\x97\x84\x6c\xdc\xe5\x3c\x24\x4a\x68\x1c\x42\x1e\x02\x0d\xfe\xe9\xc0\x7b\x46\x26\x83\x68\x81\xc0\x1b\x9e\xbb\xde\xc7\xae\x5c\xcb\x3c\x55\x3c\xb9\xdc\x5a\x66\xc3\x0c\x69\x1d\x3b\x40\xb7\x2b\x33\xec\xc2\x39\x20\x80\x6b\xc0\xe2\x1a\x49\xcb\x74\x5d\x61\xad\x6a\x0e\xdc\x4b\x9a\x08\x61\x21\x8c\x86\x38\x15\x3c\x13\x09\x9e\xdc\x82\x8c\xba\xc4\x41\x0e\xf5\x3e\x0b\xbd\xd1\xb4\x89\x1a\xf6\xcd\x2a\xdf\xaf\xe8\x61\xe8\xc2\x2d\x61\x10\xad\x84\xc2\x0b\x01\x3c\x4d\xd5\xad\xb5\xf6\xab\x7a\x6d\x91\x38\x20\xda\x8b\x36\xc8\x15\x5f\x88\xfd\x1f\xe7\x62\xf1\x77\xec\xc7\x3c\x5b\xb4\x61\x28\x50\x98\x62\x95\x9b\x75\x15\x93\x88\x08\xa0\x59\xce\xeb\x25\x98\x3b\x1c\x4e\x9e\x79\x5d\x8a\xbf\x01\x45\xce\x51\xe5\x14\x08\x76\xab\x39\x08\x5e\xfb\x64\x99\xc1\xe8\x31\xb3\x0c\x77\xbf\x20\xb8\x0d\xe7\xf0\xa0\x31\x67\x6b\x8c\x56\x85\x29\x30\xd2\x66\x29\x0e\xe2\x54\x14\xd3\x31\x15\x83\x8c\xe1\xf1\x72\x25\x32\x83\xe6\x8f\x01\x47\x53\x88\x2f\x44\x8a\xb1\x49\xa3\x08\xe9\x53\x9b\x6f\x46\x5e\x36\x52\xf2\xed\x53\x4d\x2c\x12\x24\xdb\xa4\x5d\x83\x07\x0a\x3d\x2f\x51\x8e\x2f\xdf\x23\x57\x02\x14\x5b\x2a\x6f\xcd\x24\xc9\x34\x5e\xbf\x64\x4d\x91\x35\x5e\x20\x70\xcf\x28\x38\xad\x54\x53\x54\x28\xc1\x0f\x48\xe8\x6d\xd6\xc3\x0f\xf6\x7f\x60\x59\xf9\x2e\xeb\x77\xb7\xf6\xe0\x68\xf4\x98\x35\x25\x70\x54\xcd\x7b\x3f\xfb\x77\x09\x1c\x1e\xec\x88\xe3\x10\xfd\x60\x6d\x3a\x0d\x33\x59\xf2\x22\xb1\x5e\xe9\xaa\x10\xfc\x7a\x6b\x8e\x75\xb8\xba\x70\x7d\x8c\xb9\x63\x2f\x7a\xec\x7b\x6e\x33\xeb\xaa\x1d\xa8\x0d\xd7\x30\xf3\x87\xad\x20\x5e\x8a\xd5\x5d\x3a\xcd\x35\x2e\x72\x5d\xa5\xba\x85\x40\xd7\x8f\xf0\x63\x54\x1b\xf3\x19\x49\xaa\x4a\x96\x60\x21\x8d\xb3\xe2\x8b\x4c\x18\x66\xab\x95\xd1\xcc\x1f\x46\x41\xe7\xc2\x1b\x55\x1a\xfc\x5d\xbc\x37\x46\x36\x5a\x49\x24\xfb\xe8\x87\xec\x3e\x1a\x4b\x7e\x27\x97\x6d\x49\xd4\xfe\x7a\x5f\x35\x3c\x16\xd7\x1b\x6f\x74\x87\xdf\x26\x23\xda\x75\xd9\xef\xf3\xd6\x8c\xbd\xd0\x2b\x5e\x98\x75\xce\x33\xa3\x2f\x1b\xba\x6c\x99\xdd\xf3\xdd\x4e\x58\x11\x21\xed\xee\xba\xc1\x85\xb7\xf9\x36\x74\x43\xef\x8b\x68\xf7\x99\x3b\xee\x0f\xbd\x6e\xf4\xf9\x6c\x12\x6e\x1f\xb2\x17\x98\x6a\x5d\xda\xd8\x50\xda\x34\xc4\xa5\xa2\x60\xab\xa3\x32\x53\xa8\xb4\xe5\xa2\xc4\x5a\x93\x42\x2e\x64\x06\x4b\xc1\x29\x46\x37\xd2\x05\x2a\xe2\x29\x0c\x1f\x5a\x64\x86\xb9\x9d\x8e\x17\x04\x18\x73\x43\x7f\x32\x8c\x48\xdf\xa3\x89\x3f\xe8\x53\x81\x8b\x59\x9c\x8f\xea\xb5\xd1\x84\x74\xa1\x0a\x69\x96\x2b\x4d\xe9\x9c\x59\x0a\x59\xec\x94\x02\x2c\x80\x85\x7b\xa5\x16\x08\xb5\x8d\x82\xa4\x46\x71\x64\x6f\xf7\xd9\x0b\xad\x97\xed\x6a\x4a\x74\x2d\xd6\x11\xda\x12\x72\xad\x7b\x74\x7c\x7c\xf8\x29\x9c\xc3\xd1\xf1\x09\xf3\x3a\xdd\xc0\x05\xa8\xbe\xf9\xf4\x99\xbe\x1d\x3c\x3c\x65\xdd\xcd\xd7\xc3\x83\xa3\x87\x8c\xbd\x40\x83\xbf\xe2\x5a\x5c\x36\x8a\xc9\xab\xb5\xfe\x2a\xa5\x72\xb2\xd2\x66\x51\x08\x6d\x73\x32\xfd\x55\x2a\x8d\x78\xb0\xe7\x10\xd8\x41\x08\x55\x55\x96\x70\xaf\xa1\xec\x3e\xb6\x3a\x34\x5a\x07\x9f\x0f\x1b\x58\xf2\x71\x9d\xff\x10\x59\x56\x15\xde\x0e\x8f\x3e\xa1\xd2\xdb\xe1\xa3\x07\x0f\x0e\x4e\x58\x55\x11\xc7\x2c\x8c\x55\x05\xee\x42\x29\xc3\xa6\x6e\x10\x3c\xeb\xd6\x59\xcf\xce\x8e\x32\x84\x68\xa2\xae\x7f\x5b\x56\xe1\xa6\x11\xef\xcb\xa2\xca\x23\x6f\x44\x21\xe7\xeb\xd6\xbc\x4c\xd3\x3d\x16\x04\xc3\x4d\x35\xdc\x8e\xaf\xc9\xd6\x47\x23\xd1\xec\x19\x99\x5c\xed\x39\x54\x85\xe3\x57\x5a\xa5\xa5\xd9\x26\xd7\x19\x1d\x9e\x82\x1d\x9a\x41\x55\x4b\xde\x71\x9f\x78\x88\x76\x72\xc5\xd8\x0b\x9e\xac\x24\x39\x9d\x1a\x8f\x17\x62\x51\xa6\xbc\x80\x7b\x98\x03\xd3\xdb\xfb\x36\x07\x6e\x14\xc9\x54\xb1\xe0\x99\xfc\x9a\xdb\x82\xdd\xa6\x5a\xe3\xf5\x67\x43\xd7\x8f\x26\x7e\x7f\x93\x72\x6d\xcc\x84\xbd\xd0\x22\x2e\x0b\x69\xd6\x97\x6c\x30\x0e\x42\x77\x38\x44\xb8\xdd\x74\x5a\x1f\x7d\x64\xfb\x22\xb6\x7d\x12\x4e\xe0\x89\xe7\x4d\xe1\xf9\x64\xe6\x03\xf1\x1b\xb3\x7d\x08\xdc\x9e\xf7\xd1\x47\x2c\xf0\x3a\xbe\x17\x46\x4f\x3c\xc4\x91\x1f\x7d\xef\xb3\x5e\xd7\x7b\xe6\x7b\xcf\xfc\xbf\xfd\x83\x7b\x18\xdb\x4a\xa3\x30\x7f\x97\xe8\xcf\x56\x82\xbc\x72\xc2\xd7\x9a\x0d\x27\xfd\xc1\x38\xf2\xbd\x91\x37\x7a\xec\xf9\x51\xd7\x7d\x8e\xf6\xf7\x09\xeb\x4c\x26\x4f\x06\x1e\xf5\x2d\x1a\x62\x8e\xf8\xad\xc0\xbc\xb9\x7e\xbd\x99\xd7\x1c\x43\xc9\x5c\x22\x51\x52\xd5\xb0\xc0\xeb\xcc\xfc\x66\x2e\xeb\x23\xfc\xd0\x98\xf3\xaa\x57\x6b\x84\xd2\x4b\x91\x99\xba\x48\x61\xed\x78\xd3\x5d\xa1\x96\x0a\x7e\x61\xbe\xf7\xd4\xf3\x03\xcc\x8d\x27\x5f\x3c\x8f\xdc\x59\x78\xe1\x8d\xc3\x41\xc7\x66\xb2\x95\x02\x7e\xd1\x7a\xe6\x3d\xc6\x57\x2d\x7c\x50\x35\x4f\x64\x2c\x2e\x19\x3a\xa5\xa7\x5e\xd4\x99\x74\xbd\x68\x88\x9f\x46\x83\xf1\xcc\xba\x9b\xc3\xd3\x03\xe6\x7b\x81\x17\x46\x56\x75\xdf\x3b\xe8\x0c\x66\xb4\x9b\xba\xd1\xa0\xb2\xb9\x2c\x56\x20\x5a\x2b\x2e\xd3\x0a\x2c\x2c\xa4\x36\xb6\xca\xc6\x7c\xaf\x3f\x08\x42\xcf\x8f\xbc\x91\x3b\x18\x46\xd4\xc4\xf2\x47\x3b\xb5\x78\x61\x9d\x94\x45\x42\x76\x32\x42\x89\x2c\x01\xd2\xb4\x5a\xbf\x78\x1c\xab\x32\xb3\x5d\x8b\xa6\x7a\x0d\x82\xf0\x9d\xa4\x8c\xb6\x48\xe9\xab\x96\x0b\x2a\x2f\x1a\x05\x04\x73\x79\xb6\x36\x4b\x99\x2d\xda\x0c\xb3\xe6\x81\xef\x45\xc1\xa0\x3f\x1e\x8c\x23\x04\xaf\x0d\x0a\x23\x3c\x4d\xa6\xaa\x62\x5e\x23\xbe\x8e\x27\xe1\xa0\xf7\x3c\xc2\xd3\x34\x87\x23\xca\x48\x84\xe1\x32\x7d\x44\x9d\x29\xfd\x68\x7f\x7f\x21\xcd\xb2\xbc\x6a\xc7\x6a\x85\xb6\x25\x8d\x26\x13\xdb\x97\x5a\x97\x42\xef\x1f\x9e\x1c\xd7\x34\x3f\x24\xd5\xcd\x22\xef\x1b\x3b\x79\x1f\x13\x2a\xc4\x10\xf3\xdc\xc4\x4b\x8e\xd0\x5f\x26\x56\xbd\xde\x91\x52\x45\xbb\xe3\x4e\xc3\xce\x85\xbb\x8d\x3e\xb7\xe2\x6a\xa9\xd4\x35\xba\x82\x90\xc0\x6f\x03\xd4\xd9\x16\x58\xed\x04\x4a\x2d\xb6\xf5\x30\x3c\x26\xba\x34\x9d\xf2\xf8\x1a\x3f\x24\x52\xc7\xaa\x48\xf6\x58\x8d\xab\x70\x84\x03\xf4\xde\x81\xea\x2d\x3b\x83\x0b\xa5\xae\x29\xdf\xfd\x40\x71\xa4\xda\x13\x82\x06\x75\x57\x49\xe4\xee\x2a\x48\x57\xa4\xf2\x46\x14\x94\x2a\x63\x02\x27\x33\xd0\x22\x56\x59\xa2\x59\xd7\x43\x35\xf7\xa3\x70\x30\xf2\x26\xb3\x90\xb0\xf0\x19\x50\x5c\x05\x99\x91\x87\x12\x8d\xc2\x2e\xf2\x2b\x78\x32\x98\x46\xe1\x30\x88\x9e\x7a\xfe\xa0\xf7\xbc\xc1\xf4\xf1\x06\xee\x2d\xa5\xa6\x6c\xa6\x91\xf8\x53\xd6\x81\xf8\x31\xe7\x0b\xf4\xbd\xfd\xc1\xb8\x1f\x8d\x67\xa3\x2d\xde\x93\xa9\x28\xde\x85\x13\x67\xf0\xb8\x9c\xcf\xa9\xc4\x4a\xb1\x16\x41\xdc\x92\x67\x99\x48\x1d\xb8\x16\x22\x07\x49\x4e\x5d\x52\xc0\xb7\x0d\x3d\x48\x28\x7d\xbb\xce\xd4\x2d\xdc\x22\xc6\xa2\x97\x6d\x16\x78\xe3\x6e\xf4\x78\xd6\xeb\x79\x3e\xf2\xc8\x32\xa8\x2e\xf8\x24\x52\xe7\x29\x5f\xdb\x16\x16\xd9\xb3\xed\xfd\x06\xb3\xc7\xbf\xe3\x75\x6c\xc7\xa8\xee\x03\x53\xc7\x88\xac\xc4\x96\x15\xd9\x19\xf4\x57\xa4\xfe\x7a\x65\xf2\xf6\x02\x3f\xa3\xea\x3f\x3a\x3e\xfd\x84\x9d\xc1\xe7\x9f\x57\x2f\xbe\xfa\x8a\x9e\x3e\x3c\x41\x26\x8f\x95\x11\x4e\x9d\x5e\x52\x4d\x5c\x64\x49\x85\xe9\xf6\x1e\x9e\x1c\xef\x39\x10\x8c\xc2\x69\x55\x6f\xc0\x2c\x4b\x63\x36\x31\xa3\x4e\x0b\x35\xf8\xc2\x61\x00\x2a\xb3\x73\x8f\x4f\x3f\x41\x06\x14\x02\xf1\x1c\xa2\xc0\x84\xd0\xb6\xdf\xeb\xc0\xc9\xc3\x83\x4f\x37\x25\x8e\xb7\xea\xa0\x5b\x42\xd2\x54\x85\x8d\xf4\x96\xaf\xf5\x66\xbd\x2a\xf6\x37\xe2\xe1\x85\x37\x9c\x80\xca\x85\x35\x1f\x1b\x5f\x97\x4a\x1b\x72\xd8\x68\x23\x89\x44\x79\x89\xcc\xb4\xb7\x45\x29\x9c\x43\xdd\x2f\x8b\xbf\x37\xe3\xd1\x8e\x76\x09\xee\x00\x38\xea\x31\xd8\xea\x49\x9b\xe1\x38\xea\x01\xda\x68\x43\xfe\x93\xbc\xa7\x05\x0c\xb6\xa5\xd6\xe8\x41\xa8\xe6\x89\xdb\x30\xc9\xd2\x35\xe1\x03\xb3\x94\x36\xb3\xd3\x22\x9d\xb7\xd0\x49\x8a\xa4\x39\x51\x5b\x15\xaf\xd5\xdb\xba\x54\x88\x53\x89\xa9\x61\x63\x1c\x82\x9e\xa8\xe3\xf9\xe1\xa0\x87\xfe\x6a\x1b\xe0\xee\x68\x2b\x58\xed\xfe\x50\x5f\xa1\x1a\xb1\x6d\x2c\x90\x7e\xd9\xf6\x4b\x92\x14\x42\x6b\x87\xa4\x79\xfc\xe0\xe8\xa8\x2a\xa2\x55\x2e\x87\xc0\x3c\xcf\x40\x90\xd6\x6e\x06\xab\x82\x8e\xff\x72\x0f\xd5\x7b\x0f\x7e\x48\xaf\x3f\x6b\xb4\x78\x7e\xf4\x12\xac\x75\xb2\x9e\x3f\x19\x55\xb9\x36\x6e\x62\x1b\x73\x29\x12\xe5\x5c\xeb\x5b\xf4\x51\x36\xc6\x36\xf1\x1d\x32\xc6\x88\x57\x66\x3f\x4f\xb9\xa4\x1c\xc3\x52\x24\x2b\x55\x99\x41\xd4\x8d\x5c\x9a\x0e\xdd\xc1\x38\x0a\xbd\x2f\xc2\x06\xfe\x89\x79\xbc\xdc\xc5\xb0\x62\xa5\x8a\xb5\xc5\x83\x89\x44\x2f\xaa\xec\x53\x1a\xb9\xb7\xdb\x09\xa8\x06\x33\xb7\xeb\x4e\x43\x8a\xfd\xf6\x49\x0d\x0f\xab\xf7\x15\xe6\xec\x77\x6c\x31\xf5\x86\xa7\x0d\xf7\xb7\x43\xf1\xe4\x80\x0d\xc6\xa1\xe7\x3f\x75\x31\xb8\x9d\x1c\xd4\x84\xec\x5e\x2c\xca\x6c\xec\x65\xdb\xa1\x25\x6d\xae\xf9\xce\xce\x80\x26\x3c\x82\xcc\x36\xba\xcf\x4d\x9c\x3b\xf8\xf2\xfc\xd1\xc9\x83\x4f\x3e\x75\x6a\x6e\x9e\xaf\x78\xcc\x0b\x95\x39\xc9\xd5\xf9\x81\x93\x2b\x95\x52\x6a\x70\x7e\x78\x70\xe0\xc8\x24\x15\x51\xe5\xad\xcf\x2d\xf0\xa8\x57\x7e\x04\x2f\xb7\x30\xfc\xf0\xf0\xe8\xf0\xf0\x65\x6d\xa2\x08\x76\xe8\x82\xc6\xdd\x3c\xc5\xa4\xb0\x62\x69\xcd\xde\xbb\xf8\x59\xdf\x9f\x69\x32\x74\x5a\xa8\x1b\x89\xa0\x8c\x10\xcf\x02\x54\x6e\x81\xee\x59\x35\xe4\x11\x99\xa1\x2d\xd6\x65\xeb\x7a\xd4\x5a\x18\x4c\x95\x65\x2a\x1e\x41\xb5\xb3\x6d\x2b\xac\x2a\x44\xd8\xaa\x46\xf5\x56\xbf\xfc\xff\xc6\x3d\x4c\x63\x1e\xc1\x42\xb5\xf4\x57\x69\x2b\x29\x30\x1c\xee\xd3\x43\x48\x74\x56\x6f\x58\x1b\xcc\xf3\xeb\x9d\x61\x2e\xf3\xa8\x5e\xef\xb3\x7a\x8f\x91\x41\x27\xf8\x72\xc3\xa6\xa8\xba\x9a\x54\xe5\x11\xf5\x49\x28\x61\xb7\x47\x8e\x95\xba\x96\xb6\x81\x50\x03\xe2\x0a\x2e\xcb\x28\x95\xd7\x22\xb2\xf8\x88\x9d\xa1\x8b\xc6\xe8\x85\x3e\xaa\xe6\x17\xe6\xb5\x88\xa8\x2a\x35\x6e\xba\x46\xeb\x6a\xde\x83\xb0\x2b\xfc\xa3\x85\xa9\xd6\xdf\x99\x4b\x08\xa7\xc2\x3d\x08\x7b\x2d\x95\x6d\x35\xaa\xde\x7a\xbf\x43\x98\x61\x63\x3a\x3b\x44\x4e\x4f\x1e\x1e\x1c\xb0\x7e\x27\xaa\xad\x86\x40\x04\x9c\x57\x2f\xb6\x54\x52\x39\xb7\x65\xfa\x3b\xa6\x07\x1e\xdd\x15\x8a\x86\x83\x9e\xf7\xf6\xfc\xce\x96\x71\xe4\xae\x3b\x81\xdf\x63\xf8\x4f\xb4\xcb\xc6\x28\xd6\xc5\x9c\xb1\x17\xb9\x8c\x4d\x59\x90\x47\xd9\xdc\x1e\xb0\xa5\x51\xbd\xa9\x3b\x61\x52\x7f\xc3\x0d\x2f\x34\x73\x9f\xba\xa1\xeb\x47\xb3\xe9\x70\xe2\x76\x77\xca\x9f\xf5\x88\x33\xe8\x2c\x65\x26\xb4\xa8\xa0\x1e\xa5\xcf\xf6\xfa\xc6\x5e\x52\x2a\xbd\x2c\xd5\x9e\x6d\x0f\xf0\xba\xb0\x64\xa7\x82\x56\x65\x11\x0b\x07\x50\xbe\x16\x13\x3f\xda\xdf\x8f\xb3\xf6\xa2\xb0\x03\x08\x17\xdb\x8f\xfb\xac\xef\x57\x5b\x09\x26\x33\xbf\x43\x79\x54\x35\x8c\xfa\x98\xd4\x2d\x49\x4b\xb1\xc1\x01\x73\x55\xc4\x9b\xd2\x2b\x35\xf6\x65\x06\x6a\x3e\xa7\xca\xd8\x8a\xae\x28\xd5\x71\xb7\x26\xdd\xd0\x8c\x9e\x48\xe8\xb6\x40\xcd\x08\x48\x95\xba\x2e\x73\x3c\xa2\x86\xee\x38\xa8\x8a\x18\xb1\x42\x98\x50\x0d\xd9\xd6\xdc\xd9\x99\x05\x28\x14\x4c\x10\xc5\x0a\xb1\x81\xfc\xb7\xb7\xb7\xed\x54\x5e\xd5\x47\x54\xc5\xe2\x3b\xec\x9f\xb6\xf5\xf6\x01\x90\xa5\xfd\x8a\x0e\xea\x4a\x22\xf5\x15\x4f\x11\x8d\x54\x4a\xdb\xf3\xba\x9e\xef\x86\x5e\x37\xda\x9c\xcf\xa2\xf6\xf7\x97\x71\x6d\xe6\xc1\x5e\xfc\xb6\x8a\xb7\x7f\xb3\x6b\xb7\x77\x0e\xfa\x4e\xc5\xdc\x87\xbb\xb5\xdc\x87\xbf\x61\x29\xf7\xf8\xed\xc2\xfa\x0b\xb4\x7c\x64\x75\x90\x8b\x58\xce\xa5\xb0\x17\x1f\x2a\x9c\x80\x6c\x9b\x97\x69\xba\x06\x55\x9a\xbc\x44\xb5\x4c\x10\x82\xed\x12\xf5\x7b\x9d\xc3\xc3\xa3\x07\x35\x11\x9e\xd6\xf8\x55\x24\x75\x57\x07\x85\xe6\x8e\x83\x41\xc7\x81\x59\x26\x5f\x75\x39\x82\x6b\xbf\xbc\x5a\x57\x9f\x7a\x9d\xd3\xa3\xa3\xfa\xef\x97\xf6\xc3\xf1\x81\x53\x93\xde\x7c\xb0\xaf\x1e\x3c\x78\xf0\xe9\xe6\xc3\x98\x67\xca\x81\x27\xd2\xc4\x4b\x91\x39\x10\x18\xbe\xca\xab\x3f\x23\x99\xa6\x72\xf3\x39\x2e\x14\xc1\x04\xfa\x8a\xb3\x2a\x08\x41\xa2\x6c\xa6\x42\xfc\x0a\xd3\xb0\x06\x1b\x6a\x33\xc2\xc4\x59\xa5\x3c\x5b\xa0\xf5\xec\xe7\xd7\x8b\x7d\xe4\xde\xfe\xf7\xf2\xeb\x45\x2b\x56\x99\x36\x1c\x75\xa4\x37\xf1\x47\x2e\x45\xfc\xfa\xf2\x4f\xba\xd5\x75\x35\x07\xba\xa8\x51\x68\xf6\x22\x55\x8b\x4b\xf6\xd6\xf5\xb3\x2a\x4d\x45\x6a\x2a\x15\x15\xae\xa9\xb0\x41\x13\x0f\xd4\x03\x6a\xf8\xab\x56\x2b\x4e\x2e\xb5\xae\x43\xaf\xca\xd4\xc8\xbc\xee\xd7\x55\xca\x59\x4f\x73\x48\x4d\xf6\x58\x55\xba\xab\x9e\xfe\x36\x93\xb9\x3b\xf2\xb8\x1a\xf3\x84\x05\x8f\xa9\xac\x38\xc8\xe6\x0a\xff\x3e\xe3\x45\x86\x7f\xbd\xa2\x50\x05\x7e\xe8\x71\xc3\xd3\xb7\x0e\x6c\x67\xb1\xa1\xf7\xd4\x43\x00\x48\x5f\x59\x0d\x02\x37\xec\xb2\xee\x29\x4b\xd7\xc4\xdd\x76\xf5\x1c\xf5\x3b\x6d\xf4\xb7\xa8\x77\xbf\x14\x85\x34\x35\xbd\x0d\x25\xe2\xcb\xdb\x64\xf0\xe1\x77\xa0\x51\xb9\x53\xeb\x9c\x74\xdd\x83\x16\x09\x4a\x1c\x0a\x65\x50\x2c\xf7\xf4\x2d\x6a\x2a\x59\xaa\x42\xf7\x81\xe9\x62\x05\xd8\xee\xb3\xe1\xa4\x1f\xf9\x93\xd0\x66\x2b\x9b\x68\xbf\x20\x77\x89\x44\x12\x2e\xd3\x35\xeb\xba\x83\xe1\xf3\x77\xc6\x6d\x9c\x87\x5e\xca\x39\x41\x7c\x4c\x45\x53\xdb\x1b\xdd\xe1\xe5\xd1\x69\xd5\xe1\x3b\x84\x1f\xfe\x10\x8e\x4e\x1d\x38\x3a\x3e\x69\xf8\x95\x28\xb8\x18\xf4\xe8\x46\xe8\x69\x45\x97\x5c\xff\xd6\xc7\x34\x08\xd3\xa4\xe1\x60\x5c\x75\x86\xe8\x3f\x94\xf5\xab\x5c\x16\xe4\x2d\xd6\xb5\xce\x5b\x70\x79\x2f\x11\xa9\x30\x02\xf8\xdc\x88\x02\x56\xfc\x15\x0d\xb9\x4f\x64\x36\xe5\xcd\x4d\x0d\x99\x8a\x34\x6f\x4b\x83\x9e\x7e\x27\x71\x3c\xab\xea\x31\x33\x7f\xc8\xec\x5d\x60\xcc\x6b\x0a\xd5\xec\x5a\x15\x65\x96\xa1\x0c\xf0\x71\x75\x9f\x21\x17\x85\x54\x89\xbd\x3b\x70\x47\x93\xd7\x2f\xb3\xe6\x68\xca\xb0\xa9\x71\x6b\xab\x3d\x6d\xba\x22\xee\x86\x11\xe5\xee\xdb\x84\xea\x0c\x66\x74\x77\xba\xba\xa2\xa3\xed\x4e\xda\xf6\x42\x75\x54\x3d\xbc\x64\x41\xe7\xc2\xeb\xce\x28\x80\x7d\x66\xdb\xc0\x87\x07\x2b\x46\x55\xd9\x4d\x17\x7a\x29\x78\x6a\x96\xf6\xee\x63\x45\xa6\x10\xb9\x8a\xec\xf3\x88\x9e\xdf\x45\xe9\xe8\xe1\x92\x6d\x4b\x49\x27\x07\x18\xcf\xdc\x62\x51\xda\xc0\x8a\xce\x9e\xfc\x48\x96\xc0\xc7\x0b\x69\x60\xae\xe3\xeb\x8f\x6b\xcf\xd1\x6a\x95\x59\x81\x41\x89\xb8\xd6\x6a\x19\xbe\xd0\xe8\x7d\xd0\x37\x92\x07\x55\xd9\xc6\x47\x4a\xd3\xd2\xf1\x8a\x50\x54\xa2\x62\x4d\x0f\x90\xd8\xfe\x61\xfb\x93\xf6\x31\x73\xfd\x7e\x60\x4d\xae\x43\xb7\x37\x1b\xfd\x75\xba\x92\xa7\x8d\x8c\x6b\xf6\xd0\x59\x22\x3a\x1d\xbe\xd3\x97\x6f\x73\x97\x84\x72\xf7\x51\x71\x81\x54\xf0\xac\xcc\x9b\x4b\xf0\x22\x5e\xca\x1b\xa1\x9b\x8c\xab\x9e\x45\xb1\x1d\xfe\xce\x22\x56\x84\x77\xaf\x72\x06\x21\x82\xf0\xfa\xf2\xe6\xf6\x52\xaa\x9c\xd7\x6b\x35\xba\x88\x55\xb3\x9f\x4d\x86\x98\x9d\x84\x17\x2e\xfa\x47\xda\xec\x8b\x85\x34\x8d\xc6\x86\x86\xa5\x5c\x2c\x53\xb9\x58\x92\x2d\xf3\x84\xc0\x71\x96\x40\x21\x56\xea\xc6\xde\x65\xcb\x16\x62\xdb\xce\xe8\x0e\x7a\xbd\xe8\x62\xd0\xbf\x18\x0e\xfa\x17\xe1\x4e\xbd\xb8\x89\x0f\xd0\x94\xf5\x06\xb9\x20\xe5\xa6\x39\x23\xd4\x4b\xe4\x7c\x4e\x15\x69\x32\xca\xfe\x20\xb4\xa4\x9b\x46\xfe\x0e\xd5\x78\xc9\x0b\x1e\x1b\x84\xe1\x44\x32\x6d\xf6\xe9\x3e\x4c\x93\xee\xe1\xb9\x9d\xd0\x5e\x9c\x3e\xbe\x83\xb8\x85\x34\x7a\xa9\x6e\xb3\x0f\xd0\xda\xb6\xa7\x0f\x3e\xac\xd6\x8b\xb8\xa1\xd4\x7c\xb1\x28\x30\x11\xba\x41\x9d\x46\x8f\xfd\x9b\xe8\xf4\x22\xae\x34\xba\xdf\x89\xb6\x4a\x3d\xd9\x14\xdf\xee\xa8\xe8\xa2\x94\xdb\xd5\xf3\x4b\x66\x6f\x6d\x79\x64\x8c\x07\xd5\xed\x3c\xfb\x9b\x0e\xd6\x19\x4e\xc6\x5e\xf5\x79\x3a\x1b\x0e\xab\x8f\xfd\x8e\xad\x7e\xb0\x17\xd6\x63\x5c\x36\xae\x3f\x36\x4b\x28\x4b\x55\x16\x1a\xae\x84\xb9\x15\xa2\xaa\xec\x5a\x77\xd1\xf5\x7a\xee\x6c\x18\x46\x8d\x62\xca\x29\x63\x2f\x78\x2e\x2f\xdf\x61\xbc\x34\x62\xa5\x6d\x62\x60\x2f\x52\xdb\x5c\x80\xdb\x22\x31\x72\xdf\xfe\x16\x28\xf0\xa2\x41\xe8\x8d\xac\xfc\x18\x7b\x51\x12\xad\x6d\xbd\x79\xe7\x6a\xdc\xa6\xa1\x8f\x02\xb5\xda\xa1\x32\xba\xb8\x9c\x22\xcb\x89\xb4\xf7\xc5\x74\x38\xf1\xbd\x68\xa7\x0e\x7d\x74\xb0\x43\xd4\x66\x0c\xef\x23\x47\x64\x06\x41\x30\x7b\x8b\xc8\xe1\x2e\x91\xcd\x7d\xcd\xea\x2a\xdc\x2e\x11\x1e\x1b\x79\x23\xcd\x1a\xe6\x42\x24\xac\xe7\x79\x5d\xba\xc9\x62\xef\x88\x55\x04\x8f\x37\x1d\x70\x35\x87\x3d\xb3\x14\x2b\xd1\x8a\x55\xaa\x8a\x3d\x58\x09\xc3\xc1\xf0\x85\x63\xaf\xde\x5d\xad\xc1\xcd\x92\x42\xc9\x04\x7e\x74\x0e\xc7\xf4\x13\x09\x17\x35\x9a\xda\x1f\x40\x93\x28\x25\x85\xbd\x4c\x65\x55\xb7\xb5\xee\xc2\x5a\x29\xd8\x5f\x33\x34\x7e\x39\xa3\xcd\x3a\xdd\x34\x79\x10\xc3\x6e\x5b\x3c\x89\xb8\x11\xa9\xca\x45\xa1\xdb\x0b\xa5\x16\xb6\xa8\xb8\x7f\x2b\xae\xf6\x6d\xc8\xd1\xfb\x47\x07\x87\x0f\xf7\x0f\x0f\xf7\x03\x8b\xd6\x5b\x73\x55\xb4\x1a\x07\x68\xc9\xac\xd5\x59\x16\x6a\x25\x5a\x0f\x3e\xa5\x97\xd5\xf6\x59\x78\xe1\x8d\xbc\xa8\x33\x19\x4e\xfc\x68\xe4\x85\x6e\x14\xba\x7d\x38\x87\x97\xdf\x9b\xcf\x8f\x1f\x3c\x7c\xf0\xb2\x89\x46\x64\x06\x57\x6b\x23\xf4\xd6\x90\x6d\x66\xb9\x2d\xe8\xdf\x6b\x96\x1d\x46\x8f\x2b\x2c\x30\x08\xa6\x43\xd7\x56\x61\xeb\x64\xe7\xf4\xc1\xe9\xe9\xc9\xc1\x29\x29\x58\x7b\xd3\x08\xde\x0a\xb3\xea\xf8\x7c\x40\x21\x66\x81\xe7\xef\xea\xc3\xf1\xc1\xbb\x9a\xfa\x41\x12\xbe\x37\x9d\x7c\x90\x44\xa6\x8c\x8c\xff\x1a\xc5\x1c\x4f\xc2\x41\xe7\x6d\xf5\x3e\xde\x21\xd3\xec\x59\x7f\x90\xd6\xc4\xef\xbf\xb3\x1f\xe2\x10\xb2\xe3\x0e\x3b\xfc\x0d\x4f\x77\x88\x49\xa2\x3c\x3c\xcd\x2e\xd9\xd0\x1d\xa3\x8f\x03\x91\xb5\x66\x81\xf3\xf5\xb2\xd5\x19\xe3\xbf\x17\x4f\xf0\xdf\xf0\x99\x93\x88\x56\xd7\x73\xe6\x45\xab\xe7\x3b\x59\xda\x1a\x0f\x9d\xf4\xa6\x35\x7c\xea\x14\x65\xcb\x9f\x39\x3f\xe6\xad\xdf\x99\x3a\x42\xb7\xbc\xc0\xc9\x4d\xeb\xb1\xef\xe4\x69\x6b\x3a\x74\xae\x16\xad\xc7\x7d\x47\x9a\xd6\x20\x74\xe6\xb2\xd5\x1b\x38\xa6\x68\x85\xbe\x13\xeb\x56\xe7\x4b\x47\x17\xad\x60\xea\xe8\x9b\x56\xe0\x39\xd7\xaa\xf5\xc4\x77\x16\x29\x52\x28\xaf\x5b\x33\x97\xee\x38\xe0\x8e\xbc\x6c\x91\x4a\xbd\x74\xfe\xe2\x3f\xfc\xe4\xcf\xff\xf4\x9f\xfe\xf9\x2f\xfe\xf8\xdb\xdf\xfb\x7b\xce\x5f\xfc\xf2\xa7\x7f\xf9\xef\xfe\x99\xfd\xf2\x57\xbf\xfe\xfb\x7f\xf9\x6f\xff\xc5\xb7\xbf\xf8\x8f\x7f\xf5\xeb\x7f\xf0\xf6\x8b\xff\xf9\x4f\x7e\xfe\xed\x2f\xff\x1b\xbe\xe8\x8a\xd2\xe8\x78\xe9\xf4\x0a\x9e\x7d\xf3\x87\x5c\x6a\x67\x2c\x12\x51\xa4\x3c\x4b\xb4\x33\xe4\xe6\x46\x8a\x3f\xfb\x59\xe9\xbc\xfe\x57\x6f\xfe\xee\x9b\x9f\xbe\xf9\xe9\xeb\x5f\xbd\xfe\xc5\xeb\x5f\x3a\xdf\xfe\xfe\xbf\xf9\xf6\x0f\xfe\xfd\xff\xfa\xa3\x7f\xe9\x78\x3a\xe7\xdf\xfc\x89\x4a\x9d\xa9\x2a\x4c\xb9\x28\xbf\xf9\x23\x0d\x89\x82\xc7\x05\xd7\x12\x1f\xa6\xfa\x5a\x3a\xaf\xff\xe4\xcd\x3f\x7c\xfd\x5f\x5f\xff\xa7\xd7\x3f\x7f\xf3\x13\x4b\xc3\x19\x18\x9e\x4a\x4c\x63\x83\x52\xad\x78\xca\x65\x26\x32\x27\xfc\xe6\xd7\xc5\xf5\x37\x7f\x28\x9c\xff\xf1\x8f\xc5\x9f\xfd\xcc\xc8\x8c\x3b\xaf\x7f\xf6\xe6\x27\xaf\xff\x7b\x35\x29\xb8\x11\x99\xbe\xe6\xce\xff\xfd\xe7\x7f\xf0\xbf\xff\xcb\x1f\xff\x9f\xdf\xfb\xcf\x4e\x9f\xa7\x62\xa1\x9c\xd7\xff\xfa\xf5\xaf\xde\xfc\xe4\xf5\xcf\xdf\xfc\xfe\xeb\x3f\x7d\xf3\xd3\x37\xff\xe8\xf5\xaf\x5e\xff\x9c\xd9\x3c\xd1\x76\x46\xd1\xfa\x31\x04\xe5\x32\xbe\x16\x85\x95\x6e\x1b\x1f\x62\x6a\x7b\xc9\x48\xbc\x24\x66\x46\x32\x86\x73\xf8\x7a\xc9\x48\xd0\xf4\xb1\x15\x3e\x63\xf4\xef\xe6\x1b\x09\x9e\x7e\x10\xc9\x48\xfa\x08\x3e\x0a\x46\x2a\x00\xe7\x90\xa5\x8c\xf4\x00\xce\x21\xbd\x61\xa4\x0c\x70\x0e\x45\xc9\x48\x23\xe0\x1c\x7e\xcc\x19\xa9\x05\xae\xa9\x19\xe9\x06\x9c\x03\xfd\x65\xa4\x23\xf8\x2d\x65\xa4\x28\x70\x0e\x57\x0b\x46\xda\x02\xe7\x20\x0d\x23\x95\xc1\x05\x25\x23\xbd\x21\x48\xc8\x48\x79\x30\xb3\xc5\xbf\x8c\x94\x08\xce\x41\x17\x8c\x34\x09\x3f\xde\x30\x52\x27\x38\x87\x6b\xc5\x48\xa7\xe0\x1c\x16\x29\x23\xc5\x82\x73\x28\xaf\x19\xe5\x31\xf5\x05\xad\x15\xcf\x73\xfa\x19\x91\x6a\x00\xb3\x38\xe5\xd4\x53\x20\x34\xd1\x36\x6a\x95\x9e\xcb\x4c\xb2\x17\x9b\x11\xed\x6a\xda\x25\x63\x2f\x14\xa6\xbf\x97\x2c\xb8\x98\x3c\x8b\x7a\x93\x49\xe8\xf9\xd1\x63\xdf\xfe\x16\xa3\x81\xd6\x82\xa5\xba\x85\x1b\x51\x54\xf5\xe5\xb7\xab\x12\x94\x68\x20\x94\xe9\xab\xfa\x0a\xf1\x5c\x29\x23\x8a\x1d\xba\x4f\x3d\xbf\xfa\x8d\x67\x9d\x44\x22\x55\x2a\x16\x37\x7f\x04\x63\x7f\xcb\x52\x15\xb2\xdf\x43\x2a\xf4\x46\xd3\xa1\x1b\x7a\x11\xd5\x61\xab\x1a\x30\x51\xfd\x7f\x01\x00\x00\xff\xff\x53\x82\x6a\xa6\x4e\x3c\x00\x00") func confAppIniBytes() ([]byte, error) { return bindataRead( @@ -307,7 +307,7 @@ func confAppIni() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "conf/app.ini", size: 15007, mode: os.FileMode(420), modTime: time.Unix(1489214583, 0)} + info := bindataFileInfo{name: "conf/app.ini", size: 15438, mode: os.FileMode(420), modTime: time.Unix(1489384074, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -4387,7 +4387,7 @@ func confLocaleLocale_enUsIni() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "conf/locale/locale_en-US.ini", size: 60736, mode: os.FileMode(420), modTime: time.Unix(1489301229, 0)} + info := bindataFileInfo{name: "conf/locale/locale_en-US.ini", size: 60736, mode: os.FileMode(420), modTime: time.Unix(1489393868, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/modules/form/repo.go b/modules/form/repo.go index 826d503a0..534869893 100644 --- a/modules/form/repo.go +++ b/modules/form/repo.go @@ -200,7 +200,7 @@ func (f *NewDiscordHook) Validate(ctx *macaron.Context, errs binding.Errors) bin // |___/____ >____ >____/ \___ > // \/ \/ \/ -type CreateIssue struct { +type NewIssue struct { Title string `binding:"Required;MaxSize(255)"` LabelIDs string `form:"label_ids"` MilestoneID int64 @@ -209,7 +209,7 @@ type CreateIssue struct { Files []string } -func (f *CreateIssue) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { +func (f *NewIssue) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { return validate(errs, ctx.Data, f, ctx.Locale) } @@ -279,6 +279,7 @@ type NewRelease struct { Content string Draft string Prerelease bool + Files []string } func (f *NewRelease) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { @@ -290,6 +291,7 @@ type EditRelease struct { Content string Draft string Prerelease bool + Files []string } func (f *EditRelease) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { diff --git a/modules/setting/setting.go b/modules/setting/setting.go index cc83de7d2..3945fa90a 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -146,6 +146,17 @@ var ( PagingNum int } + // Release settigns + Release struct { + Attachment struct { + Enabled bool + TempPath string + AllowedTypes []string `delim:"|"` + MaxSize int64 + MaxFiles int + } `ini:"-"` + } + // Markdown sttings Markdown struct { EnableHardLineBreak bool @@ -590,6 +601,8 @@ func NewContext() { log.Fatal(2, "Fail to map HTTP settings: %v", err) } else if err = Cfg.Section("webhook").MapTo(&Webhook); err != nil { log.Fatal(2, "Fail to map Webhook settings: %v", err) + } else if err = Cfg.Section("release.attachment").MapTo(&Release.Attachment); err != nil { + log.Fatal(2, "Fail to map Release.Attachment settings: %v", err) } else if err = Cfg.Section("markdown").MapTo(&Markdown); err != nil { log.Fatal(2, "Fail to map Markdown settings: %v", err) } else if err = Cfg.Section("smartypants").MapTo(&Smartypants); err != nil { diff --git a/routers/repo/download.go b/routers/repo/download.go index faa30ac9d..83d67a885 100644 --- a/routers/repo/download.go +++ b/routers/repo/download.go @@ -23,7 +23,7 @@ func ServeData(ctx *context.Context, name string, reader io.Reader) error { if !base.IsTextFile(buf) { if !base.IsImageFile(buf) { - ctx.Resp.Header().Set("Content-Disposition", "attachment; filename=\""+path.Base(ctx.Repo.TreePath)+"\"") + ctx.Resp.Header().Set("Content-Disposition", "attachment; filename=\""+name+"\"") ctx.Resp.Header().Set("Content-Transfer-Encoding", "binary") } } else if !ctx.QueryBool("render") { @@ -40,7 +40,7 @@ func ServeBlob(ctx *context.Context, blob *git.Blob) error { return err } - return ServeData(ctx, ctx.Repo.TreePath, dataRc) + return ServeData(ctx, path.Base(ctx.Repo.TreePath), dataRc) } func SingleDownload(ctx *context.Context) { diff --git a/routers/repo/issue.go b/routers/repo/issue.go index 3b1d93055..3305b8ed0 100644 --- a/routers/repo/issue.go +++ b/routers/repo/issue.go @@ -348,7 +348,7 @@ func NewIssue(ctx *context.Context) { ctx.HTML(200, ISSUE_NEW) } -func ValidateRepoMetas(ctx *context.Context, f form.CreateIssue) ([]int64, int64, int64) { +func ValidateRepoMetas(ctx *context.Context, f form.NewIssue) ([]int64, int64, int64) { var ( repo = ctx.Repo.Repository err error @@ -402,34 +402,30 @@ func ValidateRepoMetas(ctx *context.Context, f form.CreateIssue) ([]int64, int64 return labelIDs, milestoneID, assigneeID } -func NewIssuePost(ctx *context.Context, f form.CreateIssue) { +func NewIssuePost(ctx *context.Context, f form.NewIssue) { ctx.Data["Title"] = ctx.Tr("repo.issues.new") ctx.Data["PageIsIssueList"] = true ctx.Data["RequireHighlightJS"] = true ctx.Data["RequireSimpleMDE"] = true renderAttachmentSettings(ctx) - var ( - repo = ctx.Repo.Repository - attachments []string - ) - labelIDs, milestoneID, assigneeID := ValidateRepoMetas(ctx, f) if ctx.Written() { return } - if setting.AttachmentEnabled { - attachments = f.Files - } - if ctx.HasError() { ctx.HTML(200, ISSUE_NEW) return } + var attachments []string + if setting.AttachmentEnabled { + attachments = f.Files + } + issue := &models.Issue{ - RepoID: repo.ID, + RepoID: ctx.Repo.Repository.ID, Title: f.Title, PosterID: ctx.User.ID, Poster: ctx.User, @@ -437,21 +433,16 @@ func NewIssuePost(ctx *context.Context, f form.CreateIssue) { AssigneeID: assigneeID, Content: f.Content, } - if err := models.NewIssue(repo, issue, labelIDs, attachments); err != nil { + if err := models.NewIssue(ctx.Repo.Repository, issue, labelIDs, attachments); err != nil { ctx.Handle(500, "NewIssue", err) return } - log.Trace("Issue created: %d/%d", repo.ID, issue.ID) + log.Trace("Issue created: %d/%d", ctx.Repo.Repository.ID, issue.ID) ctx.Redirect(ctx.Repo.RepoLink + "/issues/" + com.ToStr(issue.Index)) } -func UploadIssueAttachment(ctx *context.Context) { - if !setting.AttachmentEnabled { - ctx.Error(404, "attachment is not enabled") - return - } - +func uploadAttachment(ctx *context.Context, allowedTypes []string) { file, header, err := ctx.Req.FormFile("file") if err != nil { ctx.Error(500, fmt.Sprintf("FormFile: %v", err)) @@ -466,7 +457,6 @@ func UploadIssueAttachment(ctx *context.Context) { } fileType := http.DetectContentType(buf) - allowedTypes := strings.Split(setting.AttachmentAllowedTypes, ",") allowed := false for _, t := range allowedTypes { t := strings.Trim(t, " ") @@ -493,6 +483,15 @@ func UploadIssueAttachment(ctx *context.Context) { }) } +func UploadIssueAttachment(ctx *context.Context) { + if !setting.AttachmentEnabled { + ctx.NotFound() + return + } + + uploadAttachment(ctx, strings.Split(setting.AttachmentAllowedTypes, ",")) +} + func ViewIssue(ctx *context.Context) { ctx.Data["RequireHighlightJS"] = true ctx.Data["RequireDropzone"] = true diff --git a/routers/repo/pull.go b/routers/repo/pull.go index 736f26e40..c4c5187c5 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -634,7 +634,7 @@ func CompareAndPullRequest(ctx *context.Context) { ctx.HTML(200, COMPARE_PULL) } -func CompareAndPullRequestPost(ctx *context.Context, f form.CreateIssue) { +func CompareAndPullRequestPost(ctx *context.Context, f form.NewIssue) { ctx.Data["Title"] = ctx.Tr("repo.pulls.compare_changes") ctx.Data["PageIsComparePull"] = true ctx.Data["IsDiffCompare"] = true diff --git a/routers/repo/release.go b/routers/repo/release.go index 316598c69..6329de9d9 100644 --- a/routers/repo/release.go +++ b/routers/repo/release.go @@ -6,6 +6,7 @@ package repo import ( "fmt" + "strings" log "gopkg.in/clog.v1" @@ -14,6 +15,7 @@ import ( "github.com/gogits/gogs/modules/context" "github.com/gogits/gogs/modules/form" "github.com/gogits/gogs/modules/markdown" + "github.com/gogits/gogs/modules/setting" ) const ( @@ -148,16 +150,26 @@ func Releases(ctx *context.Context) { ctx.HTML(200, RELEASES) } +func renderReleaseAttachmentSettings(ctx *context.Context) { + ctx.Data["RequireDropzone"] = true + ctx.Data["IsAttachmentEnabled"] = setting.Release.Attachment.Enabled + ctx.Data["AttachmentAllowedTypes"] = strings.Join(setting.Release.Attachment.AllowedTypes, ",") + ctx.Data["AttachmentMaxSize"] = setting.Release.Attachment.MaxSize + ctx.Data["AttachmentMaxFiles"] = setting.Release.Attachment.MaxFiles +} + func NewRelease(ctx *context.Context) { ctx.Data["Title"] = ctx.Tr("repo.release.new_release") ctx.Data["PageIsReleaseList"] = true ctx.Data["tag_target"] = ctx.Repo.Repository.DefaultBranch + renderReleaseAttachmentSettings(ctx) ctx.HTML(200, RELEASE_NEW) } func NewReleasePost(ctx *context.Context, f form.NewRelease) { ctx.Data["Title"] = ctx.Tr("repo.release.new_release") ctx.Data["PageIsReleaseList"] = true + renderReleaseAttachmentSettings(ctx) if ctx.HasError() { ctx.HTML(200, RELEASE_NEW) @@ -169,6 +181,7 @@ func NewReleasePost(ctx *context.Context, f form.NewRelease) { return } + // Use current time if tag not yet exist, otherwise get time from Git var tagCreatedUnix int64 tag, err := ctx.Repo.GitRepo.GetTag(f.TagName) if err == nil { @@ -190,6 +203,11 @@ func NewReleasePost(ctx *context.Context, f form.NewRelease) { return } + var attachments []string + if setting.Release.Attachment.Enabled { + attachments = f.Files + } + rel := &models.Release{ RepoID: ctx.Repo.Repository.ID, PublisherID: ctx.User.ID, @@ -203,7 +221,7 @@ func NewReleasePost(ctx *context.Context, f form.NewRelease) { IsPrerelease: f.Prerelease, CreatedUnix: tagCreatedUnix, } - if err = models.CreateRelease(ctx.Repo.GitRepo, rel); err != nil { + if err = models.NewRelease(ctx.Repo.GitRepo, rel, attachments); err != nil { ctx.Data["Err_TagName"] = true switch { case models.IsErrReleaseAlreadyExist(err): @@ -211,7 +229,7 @@ func NewReleasePost(ctx *context.Context, f form.NewRelease) { case models.IsErrInvalidTagName(err): ctx.RenderWithErr(ctx.Tr("repo.release.tag_name_invalid"), RELEASE_NEW, &f) default: - ctx.Handle(500, "CreateRelease", err) + ctx.Handle(500, "NewRelease", err) } return } @@ -224,6 +242,7 @@ func EditRelease(ctx *context.Context) { ctx.Data["Title"] = ctx.Tr("repo.release.edit_release") ctx.Data["PageIsReleaseList"] = true ctx.Data["PageIsEditRelease"] = true + renderReleaseAttachmentSettings(ctx) tagName := ctx.Params("*") rel, err := models.GetRelease(ctx.Repo.Repository.ID, tagName) @@ -240,6 +259,7 @@ func EditRelease(ctx *context.Context) { ctx.Data["tag_target"] = rel.Target ctx.Data["title"] = rel.Title ctx.Data["content"] = rel.Note + ctx.Data["attachments"] = rel.Attachments ctx.Data["prerelease"] = rel.IsPrerelease ctx.Data["IsDraft"] = rel.IsDraft @@ -250,6 +270,7 @@ func EditReleasePost(ctx *context.Context, f form.EditRelease) { ctx.Data["Title"] = ctx.Tr("repo.release.edit_release") ctx.Data["PageIsReleaseList"] = true ctx.Data["PageIsEditRelease"] = true + renderReleaseAttachmentSettings(ctx) tagName := ctx.Params("*") rel, err := models.GetRelease(ctx.Repo.Repository.ID, tagName) @@ -265,6 +286,7 @@ func EditReleasePost(ctx *context.Context, f form.EditRelease) { ctx.Data["tag_target"] = rel.Target ctx.Data["title"] = rel.Title ctx.Data["content"] = rel.Note + ctx.Data["attachments"] = rel.Attachments ctx.Data["prerelease"] = rel.IsPrerelease ctx.Data["IsDraft"] = rel.IsDraft @@ -273,18 +295,31 @@ func EditReleasePost(ctx *context.Context, f form.EditRelease) { return } + var attachments []string + if setting.Release.Attachment.Enabled { + attachments = f.Files + } + isPublish := rel.IsDraft && len(f.Draft) == 0 rel.Title = f.Title rel.Note = f.Content rel.IsDraft = len(f.Draft) > 0 rel.IsPrerelease = f.Prerelease - if err = models.UpdateRelease(ctx.User, ctx.Repo.GitRepo, rel, isPublish); err != nil { + if err = models.UpdateRelease(ctx.User, ctx.Repo.GitRepo, rel, isPublish, attachments); err != nil { ctx.Handle(500, "UpdateRelease", err) return } ctx.Redirect(ctx.Repo.RepoLink + "/releases") } +func UploadReleaseAttachment(ctx *context.Context) { + if !setting.Release.Attachment.Enabled { + ctx.NotFound() + return + } + uploadAttachment(ctx, setting.Release.Attachment.AllowedTypes) +} + func DeleteRelease(ctx *context.Context) { if err := models.DeleteReleaseOfRepoByID(ctx.Repo.Repository.ID, ctx.QueryInt64("id")); err != nil { ctx.Flash.Error("DeleteReleaseByID: " + err.Error()) diff --git a/templates/.VERSION b/templates/.VERSION index 5a4881efb..63677d3a6 100644 --- a/templates/.VERSION +++ b/templates/.VERSION @@ -1 +1 @@ -0.10.17.0313 \ No newline at end of file +0.10.18.0313 \ No newline at end of file diff --git a/templates/repo/release/list.tmpl b/templates/repo/release/list.tmpl index f72dfe77a..ccb611fbc 100644 --- a/templates/repo/release/list.tmpl +++ b/templates/repo/release/list.tmpl @@ -51,12 +51,19 @@
+ {{.Name}} + + + | +